]>
Commit | Line | Data |
---|---|---|
3fd1520c | 1 | #include "clar_libgit2.h" |
681008c7 | 2 | |
6c7cee42 | 3 | static void assert_l32_parses(const char *string, int32_t expected, int base) |
681008c7 MS |
4 | { |
5 | int32_t i; | |
6c7cee42 RD |
6 | cl_git_pass(git__strntol32(&i, string, strlen(string), NULL, base)); |
7 | cl_assert_equal_i(i, expected); | |
8 | } | |
681008c7 | 9 | |
6c7cee42 RD |
10 | static void assert_l32_fails(const char *string, int base) |
11 | { | |
12 | int32_t i; | |
13 | cl_git_fail(git__strntol32(&i, string, strlen(string), NULL, base)); | |
681008c7 MS |
14 | } |
15 | ||
6c7cee42 | 16 | static void assert_l64_parses(const char *string, int64_t expected, int base) |
681008c7 MS |
17 | { |
18 | int64_t i; | |
6c7cee42 RD |
19 | cl_git_pass(git__strntol64(&i, string, strlen(string), NULL, base)); |
20 | cl_assert_equal_i(i, expected); | |
21 | } | |
22 | ||
23 | static void assert_l64_fails(const char *string, int base) | |
24 | { | |
25 | int64_t i; | |
26 | cl_git_fail(git__strntol64(&i, string, strlen(string), NULL, base)); | |
27 | } | |
28 | ||
29 | void test_core_strtol__int32(void) | |
30 | { | |
31 | assert_l32_parses("123", 123, 10); | |
32 | assert_l32_parses(" +123 ", 123, 10); | |
c25aa7cd | 33 | assert_l32_parses(" -123 ", -123, 10); |
6c7cee42 | 34 | assert_l32_parses(" +2147483647 ", 2147483647, 10); |
c25aa7cd | 35 | assert_l32_parses(" -2147483648 ", INT64_C(-2147483648), 10); |
6c7cee42 RD |
36 | assert_l32_parses("A", 10, 16); |
37 | assert_l32_parses("1x1", 1, 10); | |
681008c7 | 38 | |
6c7cee42 RD |
39 | assert_l32_fails("", 10); |
40 | assert_l32_fails("a", 10); | |
41 | assert_l32_fails("x10x", 10); | |
42 | assert_l32_fails(" 2147483657 ", 10); | |
43 | assert_l32_fails(" -2147483657 ", 10); | |
681008c7 MS |
44 | } |
45 | ||
6c7cee42 RD |
46 | void test_core_strtol__int64(void) |
47 | { | |
48 | assert_l64_parses("123", 123, 10); | |
49 | assert_l64_parses(" +123 ", 123, 10); | |
c25aa7cd | 50 | assert_l64_parses(" -123 ", -123, 10); |
6c7cee42 | 51 | assert_l64_parses(" +2147483647 ", 2147483647, 10); |
c25aa7cd PP |
52 | assert_l64_parses(" -2147483648 ", INT64_C(-2147483648), 10); |
53 | assert_l64_parses(" 2147483657 ", INT64_C(2147483657), 10); | |
54 | assert_l64_parses(" -2147483657 ", INT64_C(-2147483657), 10); | |
6c7cee42 RD |
55 | assert_l64_parses(" 9223372036854775807 ", INT64_MAX, 10); |
56 | assert_l64_parses(" -9223372036854775808 ", INT64_MIN, 10); | |
57 | assert_l64_parses(" 0x7fffffffffffffff ", INT64_MAX, 16); | |
58 | assert_l64_parses(" -0x8000000000000000 ", INT64_MIN, 16); | |
59 | assert_l64_parses("1a", 26, 16); | |
60 | assert_l64_parses("1A", 26, 16); | |
61 | ||
62 | assert_l64_fails("", 10); | |
63 | assert_l64_fails("a", 10); | |
64 | assert_l64_fails("x10x", 10); | |
65 | assert_l64_fails("0x8000000000000000", 16); | |
66 | assert_l64_fails("-0x8000000000000001", 16); | |
67 | } | |
68 | ||
ac3d33df JK |
69 | void test_core_strtol__base_autodetection(void) |
70 | { | |
71 | assert_l64_parses("0", 0, 0); | |
72 | assert_l64_parses("00", 0, 0); | |
73 | assert_l64_parses("0x", 0, 0); | |
74 | assert_l64_parses("0foobar", 0, 0); | |
75 | assert_l64_parses("07", 7, 0); | |
76 | assert_l64_parses("017", 15, 0); | |
77 | assert_l64_parses("0x8", 8, 0); | |
78 | assert_l64_parses("0x18", 24, 0); | |
79 | } | |
80 | ||
81 | void test_core_strtol__buffer_length_with_autodetection_truncates(void) | |
82 | { | |
83 | int64_t i64; | |
84 | ||
85 | cl_git_pass(git__strntol64(&i64, "011", 2, NULL, 0)); | |
86 | cl_assert_equal_i(i64, 1); | |
87 | cl_git_pass(git__strntol64(&i64, "0x11", 3, NULL, 0)); | |
88 | cl_assert_equal_i(i64, 1); | |
89 | } | |
90 | ||
6c7cee42 RD |
91 | void test_core_strtol__buffer_length_truncates(void) |
92 | { | |
93 | int32_t i32; | |
94 | int64_t i64; | |
95 | ||
96 | cl_git_pass(git__strntol32(&i32, "11", 1, NULL, 10)); | |
97 | cl_assert_equal_i(i32, 1); | |
98 | ||
99 | cl_git_pass(git__strntol64(&i64, "11", 1, NULL, 10)); | |
100 | cl_assert_equal_i(i64, 1); | |
101 | } | |
102 | ||
ac3d33df JK |
103 | void test_core_strtol__buffer_length_with_leading_ws_truncates(void) |
104 | { | |
105 | int64_t i64; | |
106 | ||
107 | cl_git_fail(git__strntol64(&i64, " 1", 1, NULL, 10)); | |
108 | ||
109 | cl_git_pass(git__strntol64(&i64, " 11", 2, NULL, 10)); | |
110 | cl_assert_equal_i(i64, 1); | |
111 | } | |
112 | ||
113 | void test_core_strtol__buffer_length_with_leading_sign_truncates(void) | |
114 | { | |
115 | int64_t i64; | |
116 | ||
117 | cl_git_fail(git__strntol64(&i64, "-1", 1, NULL, 10)); | |
118 | ||
119 | cl_git_pass(git__strntol64(&i64, "-11", 2, NULL, 10)); | |
120 | cl_assert_equal_i(i64, -1); | |
121 | } | |
122 | ||
6c7cee42 RD |
123 | void test_core_strtol__error_message_cuts_off(void) |
124 | { | |
125 | assert_l32_fails("2147483657foobar", 10); | |
ac3d33df JK |
126 | cl_assert(strstr(git_error_last()->message, "2147483657") != NULL); |
127 | cl_assert(strstr(git_error_last()->message, "foobar") == NULL); | |
6c7cee42 | 128 | } |