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)
47 size_t off1
, off2
, len
, i
;
48 unsigned char *buf1
, *buf2
;
49 unsigned char *mod1
, *mod2
;
50 unsigned char *p1
, *p2
;
52 for (off1
= 0; off1
< MAX_OFFSET
; off1
++)
53 for (off2
= 0; off2
< MAX_OFFSET
; off2
++)
54 for (len
= 0; len
< MAX_TEST
; len
++)
57 for (i
= 0; i
< off1
; i
++)
61 for (i
= 0; i
< len
; i
++)
65 for (i
= 0; i
< MAX_EXTRA
; i
++)
69 for (i
= 0; i
< off2
; i
++)
73 for (i
= 0; i
< len
; i
++)
77 for (i
= 0; i
< MAX_EXTRA
; i
++)
82 test (buf1
, buf2
, MAX_LENGTH
, 0);
83 test (buf1
, buf2
, len
, 0);
88 test (buf1
, buf2
, MAX_LENGTH
, +1);
89 test (buf1
, buf2
, len
, 0);
94 test (buf1
, buf2
, MAX_LENGTH
, -1);
95 test (buf1
, buf2
, len
, 0);
101 test (buf1
, buf2
, MAX_LENGTH
, -1);
102 test (buf1
, buf2
, len
, 0);
108 test (buf1
, buf2
, MAX_LENGTH
, +1);
109 test (buf1
, buf2
, len
, 0);
113 mod2
[0] = (unsigned char)'\251';
115 test (buf1
, buf2
, MAX_LENGTH
, -1);
116 test (buf1
, buf2
, len
, 0);
118 mod1
[0] = (unsigned char)'\251';
122 test (buf1
, buf2
, MAX_LENGTH
, +1);
123 test (buf1
, buf2
, len
, 0);
125 mod1
[0] = (unsigned char)'\251';
127 mod2
[0] = (unsigned char)'\252';
129 test (buf1
, buf2
, MAX_LENGTH
, -1);
130 test (buf1
, buf2
, len
, 0);
132 mod1
[0] = (unsigned char)'\252';
134 mod2
[0] = (unsigned char)'\251';
136 test (buf1
, buf2
, MAX_LENGTH
, +1);
137 test (buf1
, buf2
, len
, 0);