1 /* Copyright (C) 2002 Free Software Foundation.
3 Test strncmp with various combinations of pointer alignments and lengths to
4 make sure any optimizations in the library are correct.
6 Written by Michael Meissner, March 9, 2002. */
12 #define MAX_OFFSET (sizeof (long long))
16 #define MAX_TEST (8 * sizeof (long long))
20 #define MAX_EXTRA (sizeof (long long))
23 #define MAX_LENGTH (MAX_OFFSET + MAX_TEST + MAX_EXTRA)
26 unsigned char buf
[MAX_LENGTH
];
32 test (const unsigned char *s1
, const unsigned char *s2
, size_t len
, int expected
)
34 int value
= strncmp ((char *) s1
, (char *) s2
, len
);
36 if (expected
< 0 && value
>= 0)
38 else if (expected
== 0 && value
!= 0)
40 else if (expected
> 0 && value
<= 0)
46 size_t off1
, off2
, len
, i
;
47 unsigned char *buf1
, *buf2
;
48 unsigned char *mod1
, *mod2
;
49 unsigned char *p1
, *p2
;
51 for (off1
= 0; off1
< MAX_OFFSET
; off1
++)
52 for (off2
= 0; off2
< MAX_OFFSET
; off2
++)
53 for (len
= 0; len
< MAX_TEST
; len
++)
56 for (i
= 0; i
< off1
; i
++)
60 for (i
= 0; i
< len
; i
++)
64 for (i
= 0; i
< MAX_EXTRA
; i
++)
68 for (i
= 0; i
< off2
; i
++)
72 for (i
= 0; i
< len
; i
++)
76 for (i
= 0; i
< MAX_EXTRA
; i
++)
81 test (buf1
, buf2
, MAX_LENGTH
, 0);
82 test (buf1
, buf2
, len
, 0);
87 test (buf1
, buf2
, MAX_LENGTH
, +1);
88 test (buf1
, buf2
, len
, 0);
93 test (buf1
, buf2
, MAX_LENGTH
, -1);
94 test (buf1
, buf2
, len
, 0);
100 test (buf1
, buf2
, MAX_LENGTH
, -1);
101 test (buf1
, buf2
, len
, 0);
107 test (buf1
, buf2
, MAX_LENGTH
, +1);
108 test (buf1
, buf2
, len
, 0);
112 mod2
[0] = (unsigned char)'\251';
114 test (buf1
, buf2
, MAX_LENGTH
, -1);
115 test (buf1
, buf2
, len
, 0);
117 mod1
[0] = (unsigned char)'\251';
121 test (buf1
, buf2
, MAX_LENGTH
, +1);
122 test (buf1
, buf2
, len
, 0);
124 mod1
[0] = (unsigned char)'\251';
126 mod2
[0] = (unsigned char)'\252';
128 test (buf1
, buf2
, MAX_LENGTH
, -1);
129 test (buf1
, buf2
, len
, 0);
131 mod1
[0] = (unsigned char)'\252';
133 mod2
[0] = (unsigned char)'\251';
135 test (buf1
, buf2
, MAX_LENGTH
, +1);
136 test (buf1
, buf2
, len
, 0);