39template <
class T,
class U>
42 const char *tname,
const char *uname,
44 const char *str1,
const char *str2,
size_t nelems,
int flags)
46 T buf1 [256] = {
T () };
47 U buf2 [256] = {
U () };
49 typedef unsigned char UChar;
51 for (
size_t i = 0;
i != nelems; ++
i) {
60 "line %d: %d == rw_valcmp(const %s* = %p, const %s* = %p, "
62 line, expect, tname, (
void*)buf1, uname, (
void*)buf2,
80#define CASE(expect, str1, str2, nelems, flags) \
81 { __LINE__, expect, str1, str2, nelems, flags }
83 CASE ( 0, 0, 0, 0, 0),
85 CASE ( 0,
"",
"", 0, 0),
86 CASE ( 0,
"",
"", 1, 0),
89 CASE ( 0,
"a",
"\0", 0, 0),
90 CASE (+1,
"a",
"\0", 1, 0),
91 CASE (+1,
"a",
"\0", 2, 0),
93 CASE ( 0,
"\0",
"a", 0, 0),
94 CASE (-1,
"\0",
"a", 1, 0),
95 CASE (-1,
"\0",
"a", 2, 0),
98 CASE ( 0,
"ab",
"\0\0", 0, 0),
99 CASE (+1,
"ab",
"\0\0", 1, 0),
100 CASE (+1,
"ab",
"\0\0", 2, 0),
101 CASE (+1,
"ab",
"\0\0", 3, 0),
103 CASE ( 0,
"\0\0",
"ab", 0, 0),
104 CASE (-1,
"\0\0",
"ab", 1, 0),
105 CASE (-1,
"\0\0",
"ab", 2, 0),
106 CASE (-1,
"\0\0",
"ab", 3, 0),
109 CASE ( 0,
"ab",
"a\0", 0, 0),
110 CASE ( 0,
"ab",
"a\0", 1, 0),
111 CASE (+1,
"ab",
"a\0", 2, 0),
112 CASE (+1,
"ab",
"a\0", 3, 0),
114 CASE ( 0,
"a\0",
"ab", 0, 0),
115 CASE ( 0,
"a\0",
"ab", 1, 0),
116 CASE (-1,
"a\0",
"ab", 2, 0),
117 CASE (-1,
"a\0",
"ab", 3, 0),
120 CASE ( 0,
"\0ab",
"\0a\0", 0, 0),
121 CASE ( 0,
"\0ab",
"\0a\0", 1, 0),
122 CASE ( 0,
"\0ab",
"\0a\0", 2, 0),
123 CASE (+1,
"\0ab",
"\0a\0", 3, 0),
124 CASE (+1,
"\0ab",
"\0a\0", 4, 0),
126 CASE ( 0,
"\0a\0",
"\0ab", 0, 0),
127 CASE ( 0,
"\0a\0",
"\0ab", 1, 0),
128 CASE ( 0,
"\0a\0",
"\0ab", 2, 0),
129 CASE (-1,
"\0a\0",
"\0ab", 3, 0),
130 CASE (-1,
"\0a\0",
"\0ab", 4, 0),
133 CASE ( 0,
"abc",
"aB\0", 0, 0),
134 CASE ( 0,
"abc",
"aB\0", 1, 0),
135 CASE (+1,
"abc",
"aB\0", 2, 0),
136 CASE (+1,
"abc",
"aB\0", 3, 0),
137 CASE (+1,
"abc",
"aB\0", 4, 0),
139 CASE ( 0,
"aB\0",
"abc", 0, 0),
140 CASE ( 0,
"aB\0",
"abc", 1, 0),
141 CASE (-1,
"aB\0",
"abc", 2, 0),
142 CASE (-1,
"aB\0",
"abc", 3, 0),
143 CASE (-1,
"aB\0",
"abc", 4, 0),
146 CASE ( 0,
"a\0b\0c\0d",
"a\0b\0c\0R", 0, 0),
147 CASE ( 0,
"a\0b\0c\0e",
"a\0b\0c\0S", 1, 0),
148 CASE ( 0,
"a\0b\0c\0f",
"a\0b\0c\0T", 2, 0),
149 CASE ( 0,
"a\0b\0c\0g",
"a\0b\0c\0U", 3, 0),
150 CASE ( 0,
"a\0b\0c\0h",
"a\0b\0c\0V", 4, 0),
151 CASE ( 0,
"a\0b\0c\0i",
"a\0b\0c\0W", 5, 0),
152 CASE ( 0,
"a\0b\0c\0j",
"a\0b\0c\0X", 6, 0),
153 CASE (+1,
"a\0b\0c\0k",
"a\0b\0c\0Y", 7, 0),
154 CASE (+1,
"a\0b\0c\0l",
"a\0b\0c\0Z", 8, 0),
156 CASE ( 0,
"a\0b\0c\0R",
"a\0b\0c\0d", 0, 0),
157 CASE ( 0,
"a\0b\0c\0S",
"a\0b\0c\0d", 1, 0),
158 CASE ( 0,
"a\0b\0c\0T",
"a\0b\0c\0d", 2, 0),
159 CASE ( 0,
"a\0b\0c\0U",
"a\0b\0c\0d", 3, 0),
160 CASE ( 0,
"a\0b\0c\0V",
"a\0b\0c\0d", 4, 0),
161 CASE ( 0,
"a\0b\0c\0W",
"a\0b\0c\0d", 5, 0),
162 CASE ( 0,
"a\0b\0c\0X",
"a\0b\0c\0d", 6, 0),
163 CASE (-1,
"a\0b\0c\0Y",
"a\0b\0c\0d", 7, 0),
164 CASE (-1,
"a\0b\0c\0Z",
"a\0b\0c\0d", 8, 0),
217template <
class T,
class U>
220 const char *tname,
const char *uname)
223 static const int one_time_per_specialization =
224 printf (
"rw_valcmp(const %s*, const %s*, size_t, int)\n",
249#define TEST_ALL_CASES(U) test_all_cases ((T*)0, (U*)0, tname, STR (U))
263#ifdef _RWSTD_LONG_LONG
270#ifndef _RWSTD_NO_WCHAR_T
280#define RUN_TEST(T) run_test ((T*)0, STR (T))
293#ifdef _RWSTD_LONG_LONG
300#ifndef _RWSTD_NO_WCHAR_T
void test_case(const T *, const U *, const char *tname, const char *uname, int line, int expect, const char *str1, const char *str2, size_t nelems, int flags)
void test_all_cases(const T *, const U *, const char *tname, const char *uname)
void run_test(const T *, const char *tname)
#define TEST_ALL_CASES(U)
#define CASE(expect, str1, str2, nelems, flags)
IMPORT_C SInt32 printf(const Char *,...)
#define _RWSTD_UNUSED(arg)
#define _RWSTD_STATIC_CAST(T, x)
_TEST_EXPORT int rw_valcmp(const void *, const void *, _RWSTD_SIZE_T, _RWSTD_SIZE_T, _RWSTD_SIZE_T, int)