Skip to content

Commit ecbfc7b

Browse files
jeffhostetlerdscho
authored andcommitted
test-strcmp-offset: created test for strcmp_offset
Signed-off-by: Jeff Hostetler <[email protected]>
1 parent 38bccc9 commit ecbfc7b

File tree

3 files changed

+71
-0
lines changed

3 files changed

+71
-0
lines changed

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -629,6 +629,7 @@ TEST_PROGRAMS_NEED_X += test-scrap-cache-tree
629629
TEST_PROGRAMS_NEED_X += test-sha1
630630
TEST_PROGRAMS_NEED_X += test-sha1-array
631631
TEST_PROGRAMS_NEED_X += test-sigchain
632+
TEST_PROGRAMS_NEED_X += test-strcmp-offset
632633
TEST_PROGRAMS_NEED_X += test-string-list
633634
TEST_PROGRAMS_NEED_X += test-submodule-config
634635
TEST_PROGRAMS_NEED_X += test-subprocess

t/helper/test-strcmp-offset.c

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#include "cache.h"
2+
3+
struct test_data {
4+
const char *s1;
5+
const char *s2;
6+
int first_change;
7+
};
8+
9+
static struct test_data data[] = {
10+
{ "abc", "abc", 0 },
11+
{ "abc", "def", 0 },
12+
13+
{ "abc", "abz", 2 },
14+
15+
{ "abc", "abcdef", 3 },
16+
17+
{ "abc\xF0zzz", "abc\xFFzzz", 3 },
18+
19+
{ NULL, NULL, 0 }
20+
};
21+
22+
int try_pair(const char *sa, const char *sb, int first_change)
23+
{
24+
int failed = 0;
25+
int offset, r_exp, r_tst;
26+
27+
r_exp = strcmp(sa, sb);
28+
r_tst = strcmp_offset(sa, sb, &offset);
29+
if (r_tst != r_exp) {
30+
if ((r_tst < 0 && r_exp < 0) || (r_tst > 0 && r_exp > 0))
31+
warning("'%s' vs '%s', imprecise result: %d != %d",
32+
sa, sb, r_exp, r_tst);
33+
else {
34+
error("'%s' vs '%s', result expect %d, observed %d",
35+
sa, sb, r_exp, r_tst);
36+
failed = 1;
37+
}
38+
}
39+
if (offset != first_change) {
40+
error("'%s' vs '%s', offset expect %d, observed %d",
41+
sa, sb, first_change, offset);
42+
failed = 1;
43+
}
44+
45+
return failed;
46+
}
47+
48+
int cmd_main(int argc, const char **argv)
49+
{
50+
int failed = 0;
51+
int k;
52+
53+
for (k=0; data[k].s1; k++) {
54+
failed += try_pair(data[k].s1, data[k].s2, data[k].first_change);
55+
failed += try_pair(data[k].s2, data[k].s1, data[k].first_change);
56+
}
57+
58+
return failed;
59+
}

t/t0065-strcmp-offset.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/bin/sh
2+
3+
test_description='Test strcmp_offset functionality'
4+
5+
. ./test-lib.sh
6+
7+
test_expect_success run_helper '
8+
test-strcmp-offset
9+
'
10+
11+
test_done

0 commit comments

Comments
 (0)