/work/auto_tests/tox_strncasecmp_test.c
Line | Count | Source |
1 | | #include <stdlib.h> |
2 | | #include <string.h> |
3 | | |
4 | | #include "../testing/misc_tools.h" |
5 | | #include "check_compat.h" |
6 | | |
7 | | typedef enum { |
8 | | NEGATIVE, |
9 | | ZERO, |
10 | | POSITIVE |
11 | | } Comparison; |
12 | | |
13 | | static const char *comparison_str[] = { "NEGATIVE", "ZERO", "POSITIVE" }; |
14 | | |
15 | | static void verify(const char *s1, const char *s2, size_t n, Comparison expected) |
16 | 288 | { |
17 | 288 | int r = tox_strncasecmp(s1, s2, n); |
18 | 288 | Comparison actual = r < 0 ? NEGATIVE : r == 0 ? ZERO : POSITIVE; |
19 | | |
20 | 288 | ck_assert_msg(actual == expected, |
21 | 288 | "tox_strncasecmp(\"%s\", \"%s\", %u) == %s, but expected %s.", |
22 | 288 | s1, s2, (unsigned)n, comparison_str[actual], comparison_str[expected]); |
23 | 288 | } |
24 | | |
25 | | static void test_general(void) |
26 | 3 | { |
27 | | // empty strings are equal |
28 | 3 | verify("", "", 100, ZERO); |
29 | 3 | verify("", "", -1, ZERO); |
30 | | |
31 | | // ====== Same Case Test Cases ====== |
32 | | |
33 | | // equal strings with n=0 are equal |
34 | 3 | verify("", "", 0, ZERO); |
35 | 3 | verify("AAA", "AAA", 0, ZERO); |
36 | | |
37 | | // unequal strings with n=0 are equal |
38 | 3 | verify("A", "B", 0, ZERO); |
39 | 3 | verify("AAA", "BBB", 0, ZERO); |
40 | 3 | verify("AAA", "BBBBBB", 0, ZERO); |
41 | 3 | verify("AAAAAA", "BBB", 0, ZERO); |
42 | | |
43 | | // equal strings are equal |
44 | 3 | verify("AAA", "AAA", 0, ZERO); |
45 | 3 | verify("AAA", "AAA", 1, ZERO); |
46 | 3 | verify("AAA", "AAA", 2, ZERO); |
47 | 3 | verify("AAA", "AAA", 3, ZERO); |
48 | 3 | verify("AAA", "AAA", 4, ZERO); |
49 | 3 | verify("AAA", "AAA", 5, ZERO); |
50 | 3 | verify("AAA", "AAA", -1, ZERO); |
51 | | |
52 | 3 | verify("AAA", "AAAAAA", 0, ZERO); |
53 | 3 | verify("AAA", "AAAAAA", 1, ZERO); |
54 | 3 | verify("AAA", "AAAAAA", 2, ZERO); |
55 | 3 | verify("AAA", "AAAAAA", 3, ZERO); |
56 | 3 | verify("AAA", "AAAAAA", 4, NEGATIVE); |
57 | 3 | verify("AAA", "AAAAAA", 5, NEGATIVE); |
58 | 3 | verify("AAA", "AAAAAA", -1, NEGATIVE); |
59 | | |
60 | 3 | verify("AAAAAA", "AAA", 0, ZERO); |
61 | 3 | verify("AAAAAA", "AAA", 1, ZERO); |
62 | 3 | verify("AAAAAA", "AAA", 2, ZERO); |
63 | 3 | verify("AAAAAA", "AAA", 3, ZERO); |
64 | 3 | verify("AAAAAA", "AAA", 4, POSITIVE); |
65 | 3 | verify("AAAAAA", "AAA", 5, POSITIVE); |
66 | 3 | verify("AAAAAA", "AAA", -1, POSITIVE); |
67 | | |
68 | 3 | verify("I'm eating wafers and drinking tea.", "I'm eating wafers and drinking tea.", -1, ZERO); |
69 | | |
70 | | // unequal strings are equal only up to n |
71 | 3 | verify("AAAB", "AAAA", 0, ZERO); |
72 | 3 | verify("AAAB", "AAAA", 1, ZERO); |
73 | 3 | verify("AAAB", "AAAA", 2, ZERO); |
74 | 3 | verify("AAAB", "AAAA", 3, ZERO); |
75 | 3 | verify("AAAB", "AAAA", 4, POSITIVE); |
76 | 3 | verify("AAAB", "AAAA", 5, POSITIVE); |
77 | 3 | verify("AAAB", "AAAA", -1, POSITIVE); |
78 | | |
79 | 3 | verify("AAAA", "AAAB", 0, ZERO); |
80 | 3 | verify("AAAA", "AAAB", 1, ZERO); |
81 | 3 | verify("AAAA", "AAAB", 2, ZERO); |
82 | 3 | verify("AAAA", "AAAB", 3, ZERO); |
83 | 3 | verify("AAAA", "AAAB", 4, NEGATIVE); |
84 | 3 | verify("AAAA", "AAAB", 5, NEGATIVE); |
85 | 3 | verify("AAAA", "AAAB", -1, NEGATIVE); |
86 | | |
87 | 3 | verify("The wafers are salty.", "The wafers are sweet.", 16, ZERO); |
88 | 3 | verify("The wafers are salty.", "The wafers are sweet.", 17, NEGATIVE); |
89 | 3 | verify("The wafers are salty.", "The wafers are sweet.", -1, NEGATIVE); |
90 | | |
91 | | // the comparison should stop at first mismatch |
92 | 3 | verify("AAABA", "AAAAB", -1, POSITIVE); |
93 | 3 | verify("AAAAB", "AAABA", -1, NEGATIVE); |
94 | | |
95 | | // ====== Different Case Test Cases ====== |
96 | | |
97 | | // equal strings with n=0 are equal |
98 | 3 | verify("", "", 0, ZERO); |
99 | 3 | verify("aaa", "AAA", 0, ZERO); |
100 | | |
101 | | // unequal strings with n=0 are equal |
102 | 3 | verify("a", "B", 0, ZERO); |
103 | 3 | verify("aaa", "BBB", 0, ZERO); |
104 | 3 | verify("aaa", "BBBBBB", 0, ZERO); |
105 | 3 | verify("aaaaaa", "BBB", 0, ZERO); |
106 | | |
107 | | // equal strings are equal |
108 | 3 | verify("aaa", "AAA", 0, ZERO); |
109 | 3 | verify("AAA", "aaa", 1, ZERO); |
110 | 3 | verify("aaa", "AAA", 2, ZERO); |
111 | 3 | verify("aaa", "AAA", 3, ZERO); |
112 | 3 | verify("AAA", "aaa", 4, ZERO); |
113 | 3 | verify("AAA", "aaa", 5, ZERO); |
114 | 3 | verify("AAA", "aaa", -1, ZERO); |
115 | | |
116 | 3 | verify("aaa", "AAAAAA", 0, ZERO); |
117 | 3 | verify("AAA", "AAAaaa", 1, ZERO); |
118 | 3 | verify("aaA", "aaaAAA", 2, ZERO); |
119 | 3 | verify("AaA", "aAAAAA", 3, ZERO); |
120 | 3 | verify("AAA", "AAAAAA", 4, NEGATIVE); |
121 | 3 | verify("Aaa", "AAaaAA", 5, NEGATIVE); |
122 | 3 | verify("AAA", "AAAAAa", -1, NEGATIVE); |
123 | | |
124 | 3 | verify("AAAAAA", "aaa", 0, ZERO); |
125 | 3 | verify("AAAaaa", "AAA", 1, ZERO); |
126 | 3 | verify("aaaAAA", "aaA", 2, ZERO); |
127 | 3 | verify("aAAAAA", "AaA", 3, ZERO); |
128 | 3 | verify("AAAAAA", "AAA", 4, POSITIVE); |
129 | 3 | verify("AAaaAA", "Aaa", 5, POSITIVE); |
130 | 3 | verify("AAAAAa", "AAA", -1, POSITIVE); |
131 | | |
132 | 3 | verify("I'm Eating Wafers And Drinking Tea.", "I'm eating wafers and drinking tea.", -1, ZERO); |
133 | | |
134 | | // unequal strings are equal only up to n |
135 | 3 | verify("aaaB", "AAAA", 0, ZERO); |
136 | 3 | verify("AaAB", "aAAA", 1, ZERO); |
137 | 3 | verify("aAAB", "AaAA", 2, ZERO); |
138 | 3 | verify("AAAB", "AAaA", 3, ZERO); |
139 | 3 | verify("AAAB", "AAAA", 4, POSITIVE); |
140 | 3 | verify("AAAb", "AAAA", 5, POSITIVE); |
141 | 3 | verify("AAAB", "AAAa", -1, POSITIVE); |
142 | | |
143 | 3 | verify("AAAA", "aaaB", 0, ZERO); |
144 | 3 | verify("aAAA", "AaAB", 1, ZERO); |
145 | 3 | verify("AaAA", "aAAB", 2, ZERO); |
146 | 3 | verify("AAaA", "AAAB", 3, ZERO); |
147 | 3 | verify("AAAA", "AAAB", 4, NEGATIVE); |
148 | 3 | verify("AAAA", "AAAb", 5, NEGATIVE); |
149 | 3 | verify("AAAa", "AAAB", -1, NEGATIVE); |
150 | | |
151 | 3 | verify("The Wafers Are Salty.", "The wafers are sweet.", 16, ZERO); |
152 | 3 | verify("The Wafers Are Salty.", "The wafers are sweet.", 17, NEGATIVE); |
153 | 3 | verify("The Wafers Are Salty.", "The wafers are sweet.", -1, NEGATIVE); |
154 | | |
155 | | // the comparison should stop at first mismatch |
156 | 3 | verify("aAaBA", "AAAAb", -1, POSITIVE); |
157 | 3 | verify("AAAAb", "aAaBA", -1, NEGATIVE); |
158 | 3 | } |
159 | | |
160 | | int main(void) |
161 | 721 | { |
162 | 721 | setvbuf(stdout, nullptr, _IONBF, 0); |
163 | 721 | test_general(); |
164 | 721 | return 0; |
165 | 721 | } |