99 lines
3.1 KiB
C
99 lines
3.1 KiB
C
/* ************************************************************************** */
|
|
/* */
|
|
/* ::: :::::::: */
|
|
/* test_atoi_base.c :+: :+: :+: */
|
|
/* +:+ +:+ +:+ */
|
|
/* By: bgoulard <bgoulard@student.42.fr> +#+ +:+ +#+ */
|
|
/* +#+#+#+#+#+ +#+ */
|
|
/* Created: 2024/05/26 11:13:01 by bgoulard #+# #+# */
|
|
/* Updated: 2024/05/26 16:42:38 by bgoulard ### ########.fr */
|
|
/* */
|
|
/* ************************************************************************** */
|
|
|
|
#include "ft_string.h"
|
|
|
|
static int test_base_resps(const char *base, const int *expected_results,
|
|
const char **inputs)
|
|
{
|
|
int i;
|
|
int res;
|
|
|
|
i = 0;
|
|
while (inputs[i])
|
|
{
|
|
res = ft_atoi_base(inputs[i], base);
|
|
if (res != expected_results[i])
|
|
return (i + 1);
|
|
i++;
|
|
}
|
|
return (0);
|
|
}
|
|
|
|
static int test_spaces(void)
|
|
{
|
|
if (ft_atoi_base(" 0", "0123456789") != 0)
|
|
return (1);
|
|
if (ft_atoi_base(" 1", "0123456789") != 1)
|
|
return (2);
|
|
if (ft_atoi_base(" 9", "0123456789") != 9)
|
|
return (3);
|
|
if (ft_atoi_base(" 10", "0123456789") != 10)
|
|
return (4);
|
|
if (ft_atoi_base(" 99", "0123456789") != 99)
|
|
return (5);
|
|
if (ft_atoi_base(" -99", "0123456789") != -99)
|
|
return (6);
|
|
if (ft_atoi_base(" -0", "0123456789") != 0)
|
|
return (7);
|
|
if (ft_atoi_base(" -1", "0123456789") != -1)
|
|
return (8);
|
|
if (ft_atoi_base(" -10", "0123456789") != -10)
|
|
return (9);
|
|
if (ft_atoi_base(" -99", "0123456789") != -99)
|
|
return (10);
|
|
return (0);
|
|
}
|
|
|
|
static int test_multi_sign(void)
|
|
{
|
|
if (ft_atoi_base(" --99", "0123456789") != 99)
|
|
return (1);
|
|
if (ft_atoi_base(" -0", "0123456789") != 0)
|
|
return (2);
|
|
if (ft_atoi_base(" -++--1", "0123456789") != -1)
|
|
return (3);
|
|
if (ft_atoi_base(" -+--10", "0123456789") != -10)
|
|
return (4);
|
|
if (ft_atoi_base(" -+--99", "0123456789") != -99)
|
|
return (5);
|
|
return (0);
|
|
}
|
|
|
|
int test_atoi_base(void)
|
|
{
|
|
const char *bases[] = {"0123456789", "01", "0123456789abcdef"};
|
|
const int expected_results[][11] = {
|
|
{0, 1, 9, 10, 99, 0, -1, -9, -10, -99},
|
|
{0, 1, 2, 3, 4, 0, -1, -2, -3, -4},
|
|
{0, 10, 15, 16, 153, 0, -10, -15, -16, -153}
|
|
};
|
|
const char *strs[][12] = {
|
|
{"0", "1", "9", "10", "99", "0", "-1", "-9", "-10", "-99", NULL},
|
|
{"0", "1", "10", "11", "100", "0", "-1", "-10", "-11", "-100", NULL},
|
|
{"0", "a", "f", "10", "99", "0", "-a", "-f", "-10", "-99", NULL}
|
|
};
|
|
|
|
if (test_base_resps(bases[0], expected_results[0], strs[0]) || \
|
|
test_base_resps(bases[1], expected_results[1], strs[1]) || \
|
|
test_base_resps(bases[2], expected_results[2], strs[2]))
|
|
return (1);
|
|
if (ft_atoi_base("23", "011") || ft_atoi_base("23", "0") || \
|
|
ft_atoi_base("23", "1") || ft_atoi_base("23", "0123456789-") || \
|
|
ft_atoi_base("23", "0123456789+"))
|
|
return (2);
|
|
if (test_spaces())
|
|
return (3);
|
|
if (test_multi_sign())
|
|
return (4);
|
|
return (0);
|
|
}
|