Coverage Report

Created: 2024-01-26 01:52

/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
}