From 997cb1c39c603512b7db760e9537c39ea3c68a38 Mon Sep 17 00:00:00 2001 From: Charles Date: Sun, 24 Nov 2019 04:51:55 +0100 Subject: Added reference bonus functions to test against assembly one --- functions_reference/ref_ft_atoi_base.c | 44 ++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 functions_reference/ref_ft_atoi_base.c (limited to 'functions_reference/ref_ft_atoi_base.c') diff --git a/functions_reference/ref_ft_atoi_base.c b/functions_reference/ref_ft_atoi_base.c new file mode 100644 index 0000000..b2a4231 --- /dev/null +++ b/functions_reference/ref_ft_atoi_base.c @@ -0,0 +1,44 @@ +#include "libasm_test.h" + +static bool +valid_base(char *base) +{ + if (strlen(base) < 2) + return false; + while (*base) + { + if (isspace(*base) || *base == '+' || *base == '-') + return false; + for (int i = 1; base[i]; i++) + if (base[i] == *base) + return false; + base++; + } + return true; +} + +int +ref_ft_atoi_base(char *str, char *base) +{ + long int nb; + int radix; + bool is_negative; + + if (!valid_base(base)) + return 0; + while (isspace(*str)) + str++; + is_negative = false; + while (*str == '+' || *str == '-') + if (*str++ == '-') + is_negative = !is_negative; + radix = strlen(base); + nb = 0; + while (*str && strchr(base, *str) != NULL) + { + nb *= radix; + nb += strchr(base, *str) - base; + str++; + } + return is_negative ? -nb : nb; +} -- cgit