1 /* { dg-xfail-if "kernel strncmp does not perform unsigned comparisons" { vxworks_kernel } } */
2 /* Copyright (C) 2002 Free Software Foundation.
4 Test strncmp with various combinations of pointer alignments and lengths to
5 make sure any optimizations in the library are correct.
7 Written by Michael Meissner, March 9, 2002. */
13 #define MAX_OFFSET (sizeof (long long))
17 #define MAX_TEST (8 * sizeof (long long))
21 #define MAX_EXTRA (sizeof (long long))
24 #define MAX_LENGTH (MAX_OFFSET + MAX_TEST + MAX_EXTRA)
27 unsigned char buf
[MAX_LENGTH
];
33 test (const unsigned char *s1
, const unsigned char *s2
, size_t len
, int expected
)
35 int value
= strncmp ((char *) s1
, (char *) s2
, len
);
37 if (expected
< 0 && value
>= 0)
39 else if (expected
== 0 && value
!= 0)
41 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);