aboutsummaryrefslogtreecommitdiff
path: root/test/src/str/test_ft_strtol.c
blob: eacaa820db16c0bfcf8d7c2e90c42635a6ec6722 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   test_ft_strtol.c                                   :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: charles <charles.cabergs@gmail.com>        +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2020/04/01 19:41:59 by charles           #+#    #+#             */
/*   Updated: 2020/07/17 16:31:20 by charles          ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include "libft_test.h"

TEST_GROUP(ft_strtol);

TEST_SETUP(ft_strtol)
{}

TEST_TEAR_DOWN(ft_strtol)
{}

static long expected;
static long actual;
static char *expected_rest;
static char *actual_rest;
static int	expected_errno;
static int	actual_errno;
static char	error_buf[2048];

static char	*rest = NULL;

#define TEST_ASSERT_FT_STRTOL(str, base) do { \
	errno = 0;                \
	expected = strtol(str, &rest, base);   \
	expected_rest = rest;                     \
	expected_errno = errno;        \
	errno = 0;                \
	actual = ft_strtol(str, &rest, base);   \
	actual_rest = rest;                     \
	actual_errno = errno;        \
	if (actual != expected || actual_errno != expected_errno || expected_rest != actual_rest)  \
	{ \
		snprintf(error_buf, 2048,                                    \
				 "with: ("#str", "#base") expected: %ld actual: %ld " \
				 "rest: expected: \"%s\" actual: \"%s\" "             \
				 "errno: expected: %d actual: %d",                   \
				expected, actual, expected_rest, actual_rest, expected_errno, actual_errno); \
		TEST_FAIL_MESSAGE(error_buf);                    \
	} \
} while(0);

TEST(ft_strtol, basic)
{
	TEST_ASSERT_FT_STRTOL("", 10);
	TEST_ASSERT_FT_STRTOL("0", 10);
	TEST_ASSERT_FT_STRTOL("000000000", 10);
	TEST_ASSERT_FT_STRTOL("1", 10);
	TEST_ASSERT_FT_STRTOL("2", 10);
	TEST_ASSERT_FT_STRTOL("3", 10);
	TEST_ASSERT_FT_STRTOL("4", 10);
	TEST_ASSERT_FT_STRTOL("5", 10);
	TEST_ASSERT_FT_STRTOL("6", 10);
	TEST_ASSERT_FT_STRTOL("7", 10);
	TEST_ASSERT_FT_STRTOL("8", 10);
	TEST_ASSERT_FT_STRTOL("9", 10);
	TEST_ASSERT_FT_STRTOL("000000000000000000000000000000000000000000000000000000000008", 10);

	TEST_ASSERT_FT_STRTOL("                           9", 10);
	TEST_ASSERT_FT_STRTOL("    \v  \t\f\t\t\t\n\r\f\r\v9", 10);
	/* TEST_ASSERT_FT_STRTOL("    \v . \t\f\t\t\t\n\r\f\r\v9", 10); */ // dont really care atm
	TEST_ASSERT_FT_STRTOL("                           9bonjour", 10);
	TEST_ASSERT_FT_STRTOL("    \v  \t\f\t\t\t\n\r\f\r\v9   \t\t\v\r\f\r", 10);
	/* TEST_ASSERT_FT_STRTOL("    \v . \t\f\t\t\t\n\r\f\r\v9      \t bonjour", 10); */
}

TEST(ft_strtol, limits)
{
	TEST_ASSERT_FT_STRTOL("-128", 10);
	TEST_ASSERT_FT_STRTOL("127", 10);
	TEST_ASSERT_FT_STRTOL("255", 10);
	TEST_ASSERT_FT_STRTOL("-128", 10);
	TEST_ASSERT_FT_STRTOL("127", 10);
	TEST_ASSERT_FT_STRTOL("-32768", 10);
	TEST_ASSERT_FT_STRTOL("32767", 10);
	TEST_ASSERT_FT_STRTOL("65535", 10);
	TEST_ASSERT_FT_STRTOL("-2147483648", 10);
	TEST_ASSERT_FT_STRTOL("2147483647", 10);
	TEST_ASSERT_FT_STRTOL("4294967295", 10);
	TEST_ASSERT_FT_STRTOL("-9223372036854775808", 10);
	TEST_ASSERT_FT_STRTOL("9223372036854775807", 10);
	TEST_ASSERT_FT_STRTOL("18446744073709551615", 10);

	TEST_ASSERT_FT_STRTOL("-129", 10);
	TEST_ASSERT_FT_STRTOL("126", 10);
	TEST_ASSERT_FT_STRTOL("254", 10);
	TEST_ASSERT_FT_STRTOL("-127", 10);
	TEST_ASSERT_FT_STRTOL("126", 10);
	TEST_ASSERT_FT_STRTOL("-32767", 10);
	TEST_ASSERT_FT_STRTOL("32766", 10);
	TEST_ASSERT_FT_STRTOL("65534", 10);
	TEST_ASSERT_FT_STRTOL("-2147483647", 10);
	TEST_ASSERT_FT_STRTOL("2147483646", 10);
	TEST_ASSERT_FT_STRTOL("4294967294", 10);
	TEST_ASSERT_FT_STRTOL("-9223372036854775807", 10);
	TEST_ASSERT_FT_STRTOL("9223372036854775806", 10);
	TEST_ASSERT_FT_STRTOL("18446744073709551614", 10);

	TEST_ASSERT_FT_STRTOL("-129", 10);
	TEST_ASSERT_FT_STRTOL("128", 10);
	TEST_ASSERT_FT_STRTOL("256", 10);
	TEST_ASSERT_FT_STRTOL("-129", 10);
	TEST_ASSERT_FT_STRTOL("128", 10);
	TEST_ASSERT_FT_STRTOL("-32769", 10);
	TEST_ASSERT_FT_STRTOL("32768", 10);
	TEST_ASSERT_FT_STRTOL("65536", 10);
	TEST_ASSERT_FT_STRTOL("-2147483649", 10);
	TEST_ASSERT_FT_STRTOL("2147483648", 10);
	TEST_ASSERT_FT_STRTOL("4294967296", 10);
	TEST_ASSERT_FT_STRTOL("-9223372036854775809", 10);
	TEST_ASSERT_FT_STRTOL("9223372036854775808", 10);
	TEST_ASSERT_FT_STRTOL("18446744073709551616", 10);

	TEST_ASSERT_FT_STRTOL("-9223372036854775809", 10);
	TEST_ASSERT_FT_STRTOL("9223372036854775808", 10);
	TEST_ASSERT_FT_STRTOL("-9223372036854775808", 10);
	TEST_ASSERT_FT_STRTOL("18446744073709551615", 10);
	TEST_ASSERT_FT_STRTOL("18446744073709551616", 10);
}