Ne.app NeANT
The Ne.app NeANT User module of the NeANT distribution.
21.cctype.cpp
Go to the documentation of this file.
1
30#include <cctype>
31
32#include <rw_driver.h>
33
34
36// detect masking macros
37const char* const cctype_macros [] = {
38
39#ifdef isalnum
40 "isalnum",
41#else
42 "",
43#endif
44
45#ifdef isalpha
46 "isalpha",
47#else
48 "",
49#endif
50
51#ifdef iscntrl
52 "iscntrl",
53#else
54 "",
55#endif
56
57#ifdef isdigit
58 "isdigit",
59#else
60 "",
61#endif
62
63#ifdef isgraph
64 "isgraph",
65#else
66 "",
67#endif
68
69#ifdef islower
70 "islower",
71#else
72 "",
73#endif
74
75#ifdef isprint
76 "isprint",
77#else
78 "",
79#endif
80
81#ifdef ispunct
82 "ispunct",
83#else
84 "",
85#endif
86
87#ifdef isspace
88 "isspace",
89#else
90 "",
91#endif
92
93#ifdef isupper
94 "isupper",
95#else
96 "",
97#endif
98
99#ifdef isxdigit
100 "isxdigit",
101#else
102 "",
103#endif
104
105#ifdef tolower
106 "tolower",
107#else
108 "",
109#endif
110
111#ifdef toupper
112 "toupper",
113#else
114 "",
115#endif
116
117 0
118};
119
120
122// define function template overloads for the <cctype> functions with
123// the same name to detect whether the C versions are declared or not
124#define TEST_FUNCTION(name) \
125 template <class T> int name (T) { function_called = 0; return 0; } \
126 typedef void rw_unused_typedef
127
129
131
132TEST_FUNCTION (isalnum);
133TEST_FUNCTION (isalpha);
134TEST_FUNCTION (iscntrl);
135TEST_FUNCTION (isdigit);
136TEST_FUNCTION (isprint);
137TEST_FUNCTION (isupper);
138TEST_FUNCTION (tolower);
139TEST_FUNCTION (isgraph);
140TEST_FUNCTION (ispunct);
141TEST_FUNCTION (isxdigit);
142TEST_FUNCTION (toupper);
143
144} // namespace std
145
146
148enum {
150 bit_alpha = 1 << 1,
151 bit_cntrl = 1 << 2,
152 bit_digit = 1 << 3,
153 bit_graph = 1 << 4,
154 bit_lower = 1 << 5,
155 bit_print = 1 << 6,
156 bit_punct = 1 << 7,
157 bit_space = 1 << 8,
158 bit_upper = 1 << 9,
159 bit_xdigit = 1 << 10
161
162
163static char*
164get_bitmask (int mask, char *str)
165{
166 char *str_save = str;
167
168#define APPEND(bit) \
169 if (mask & bit_ ## bit) { \
170 for (const char *s = #bit; *s; ++s, ++str) \
171 *str = *s; \
172 *str++ = '|'; \
173 } else (void)0
174
175 APPEND (alnum);
176 APPEND (alpha);
177 APPEND (cntrl);
178 APPEND (digit);
179 APPEND (graph);
180 APPEND (lower);
181 APPEND (print);
182 APPEND (punct);
183 APPEND (space);
184 APPEND (upper);
185 APPEND (xdigit);
186
187 if (str == str_save)
188 *str = '\0';
189 else
190 str [-1] = '\0';
191
192 return str_save;
193}
194
195
196static const int
197char_mask [256] = {
198
199#undef LETTER
200#define LETTER(bits) bit_alpha | bit_alnum | bit_print | bit_graph | bits
201
202#if 'A' == 0x41
203
204 /* 0x00 */ bit_cntrl,
205 /* 0x01 */ bit_cntrl,
206 /* 0x02 */ bit_cntrl,
207 /* 0x03 */ bit_cntrl,
208 /* 0x04 */ bit_cntrl,
209 /* 0x05 */ bit_cntrl,
210 /* 0x06 */ bit_cntrl,
211 /* 0x07 */ bit_cntrl,
212 /* 0x08 */ bit_cntrl,
213 /* 0x09 */ bit_space | bit_cntrl,
214 /* 0x0a */ bit_space | bit_cntrl,
215 /* 0x0b */ bit_space | bit_cntrl,
216 /* 0x0c */ bit_space | bit_cntrl,
217 /* 0x0d */ bit_space | bit_cntrl,
218 /* 0x0e */ bit_cntrl,
219 /* 0x0f */ bit_cntrl,
220 /* 0x10 */ bit_cntrl,
221 /* 0x11 */ bit_cntrl,
222 /* 0x12 */ bit_cntrl,
223 /* 0x13 */ bit_cntrl,
224 /* 0x14 */ bit_cntrl,
225 /* 0x15 */ bit_cntrl,
226 /* 0x16 */ bit_cntrl,
227 /* 0x17 */ bit_cntrl,
228 /* 0x18 */ bit_cntrl,
229 /* 0x19 */ bit_cntrl,
230 /* 0x1a */ bit_cntrl,
231 /* 0x1b */ bit_cntrl,
232 /* 0x1c */ bit_cntrl,
233 /* 0x1d */ bit_cntrl,
234 /* 0x1e */ bit_cntrl,
235 /* 0x1f */ bit_cntrl,
236 /* ' ' */ bit_space | bit_print,
237 /* '!' */ bit_print | bit_punct | bit_graph,
238 /* '"' */ bit_print | bit_punct | bit_graph,
239 /* '#' */ bit_print | bit_punct | bit_graph,
240 /* '$' */ bit_print | bit_punct | bit_graph,
241 /* '%' */ bit_print | bit_punct | bit_graph,
242 /* '&' */ bit_print | bit_punct | bit_graph,
243 /* '\'' */ bit_print | bit_punct | bit_graph,
244 /* '(' */ bit_print | bit_punct | bit_graph,
245 /* ')' */ bit_print | bit_punct | bit_graph,
246 /* '*' */ bit_print | bit_punct | bit_graph,
247 /* '+' */ bit_print | bit_punct | bit_graph,
248 /* ',' */ bit_print | bit_punct | bit_graph,
249 /* '-' */ bit_print | bit_punct | bit_graph,
250 /* '.' */ bit_print | bit_punct | bit_graph,
251 /* '/' */ bit_print | bit_punct | bit_graph,
262 /* ':' */ bit_print | bit_punct | bit_graph,
263 /* ';' */ bit_print | bit_punct | bit_graph,
264 /* '<' */ bit_print | bit_punct | bit_graph,
265 /* '=' */ bit_print | bit_punct | bit_graph,
266 /* '>' */ bit_print | bit_punct | bit_graph,
267 /* '?' */ bit_print | bit_punct | bit_graph,
268 /* '@' */ bit_print | bit_punct | bit_graph,
269
270 /* 'A' */ LETTER (bit_upper | bit_xdigit),
271 /* 'B' */ LETTER (bit_upper | bit_xdigit),
272 /* 'C' */ LETTER (bit_upper | bit_xdigit),
273 /* 'D' */ LETTER (bit_upper | bit_xdigit),
274 /* 'E' */ LETTER (bit_upper | bit_xdigit),
275 /* 'F' */ LETTER (bit_upper | bit_xdigit),
276 /* 'G' */ LETTER (bit_upper),
277 /* 'H' */ LETTER (bit_upper),
278 /* 'I' */ LETTER (bit_upper),
279 /* 'J' */ LETTER (bit_upper),
280 /* 'K' */ LETTER (bit_upper),
281 /* 'L' */ LETTER (bit_upper),
282 /* 'M' */ LETTER (bit_upper),
283 /* 'N' */ LETTER (bit_upper),
284 /* 'O' */ LETTER (bit_upper),
285 /* 'P' */ LETTER (bit_upper),
286 /* 'Q' */ LETTER (bit_upper),
287 /* 'R' */ LETTER (bit_upper),
288 /* 'S' */ LETTER (bit_upper),
289 /* 'T' */ LETTER (bit_upper),
290 /* 'U' */ LETTER (bit_upper),
291 /* 'V' */ LETTER (bit_upper),
292 /* 'W' */ LETTER (bit_upper),
293 /* 'X' */ LETTER (bit_upper),
294 /* 'Y' */ LETTER (bit_upper),
295 /* 'Z' */ LETTER (bit_upper),
296 /* '[' */ bit_print | bit_punct | bit_graph,
297 /* '\\' */ bit_print | bit_punct | bit_graph,
298 /* ']' */ bit_print | bit_punct | bit_graph,
299 /* '^' */ bit_print | bit_punct | bit_graph,
300 /* '_' */ bit_print | bit_punct | bit_graph,
301 /* '`' */ bit_print | bit_punct | bit_graph,
302 /* 'a' */ LETTER (bit_lower | bit_xdigit),
303 /* 'b' */ LETTER (bit_lower | bit_xdigit),
304 /* 'c' */ LETTER (bit_lower | bit_xdigit),
305 /* 'd' */ LETTER (bit_lower | bit_xdigit),
306 /* 'e' */ LETTER (bit_lower | bit_xdigit),
307 /* 'f' */ LETTER (bit_lower | bit_xdigit),
308 /* 'g' */ LETTER (bit_lower),
309 /* 'h' */ LETTER (bit_lower),
310 /* 'i' */ LETTER (bit_lower),
311 /* 'j' */ LETTER (bit_lower),
312 /* 'k' */ LETTER (bit_lower),
313 /* 'l' */ LETTER (bit_lower),
314 /* 'm' */ LETTER (bit_lower),
315 /* 'n' */ LETTER (bit_lower),
316 /* 'o' */ LETTER (bit_lower),
317 /* 'p' */ LETTER (bit_lower),
318 /* 'q' */ LETTER (bit_lower),
319 /* 'r' */ LETTER (bit_lower),
320 /* 's' */ LETTER (bit_lower),
321 /* 't' */ LETTER (bit_lower),
322 /* 'u' */ LETTER (bit_lower),
323 /* 'v' */ LETTER (bit_lower),
324 /* 'w' */ LETTER (bit_lower),
325 /* 'x' */ LETTER (bit_lower),
326 /* 'y' */ LETTER (bit_lower),
327 /* 'z' */ LETTER (bit_lower),
328 /* '{' */ bit_print | bit_punct | bit_graph,
329 /* '|' */ bit_print | bit_punct | bit_graph,
330 /* '}' */ bit_print | bit_punct | bit_graph,
331 /* '~' */ bit_print | bit_punct | bit_graph,
332 /* 0x7f */ bit_cntrl
333
334#elif 'A' == 0xc1
335
336 /* NUL */ bit_cntrl,
337 /* SOH */ bit_cntrl,
338 /* STX */ bit_cntrl,
339 /* ETX */ bit_cntrl,
340 /* PF */ bit_cntrl,
341 /* HT */ bit_cntrl,
342 /* LC */ bit_cntrl,
343 /* DEL */ bit_cntrl,
344 /* */ 0,
345 /* */ 0,
346 /* SMM */ bit_cntrl,
347 /* VT */ bit_cntrl,
348 /* FF */ bit_cntrl,
349 /* CR */ bit_cntrl,
350 /* SO */ bit_cntrl,
351 /* SI */ bit_cntrl,
352 /* DLE */ bit_cntrl,
353 /* DC1 */ bit_cntrl,
354 /* DC2 */ bit_cntrl,
355 /* TM */ bit_cntrl,
356 /* RES */ bit_cntrl,
357 /* NL */ bit_cntrl,
358 /* BS */ bit_cntrl,
359 /* IL */ bit_cntrl,
360 /* CAN */ bit_cntrl,
361 /* EM */ bit_cntrl,
362 /* CC */ bit_cntrl,
363 /* CU1 */ bit_cntrl,
364 /* IFS */ bit_cntrl,
365 /* IGS */ bit_cntrl,
366 /* IRS */ bit_cntrl,
367 /* IUS */ bit_cntrl,
368 /* DS */ bit_cntrl,
369 /* SOS */ bit_cntrl,
370 /* FS */ bit_cntrl,
371 /* */ 0,
372 /* BYP */ bit_cntrl,
373 /* LF */ bit_cntrl,
374 /* ETB */ bit_cntrl,
375 /* ESC */ bit_cntrl,
376 /* */ 0,
377 /* */ 0,
378 /* SM */ bit_cntrl,
379 /* CU2 */ bit_cntrl,
380 /* */ 0,
381 /* ENQ */ bit_cntrl,
382 /* ACK */ bit_cntrl,
383 /* BEL */ bit_cntrl,
384 /* */ 0,
385 /* */ 0,
386 /* SYN */ bit_cntrl,
387 /* */ 0,
388 /* PN */ bit_cntrl,
389 /* RS */ bit_cntrl,
390 /* UC */ bit_cntrl,
391 /* EOT */ bit_cntrl,
392 /* */ 0,
393 /* */ 0,
394 /* */ 0,
395 /* CU3 */ bit_cntrl,
396 /* DC4 */ bit_cntrl,
397 /* NAK */ bit_cntrl,
398 /* */ 0,
399 /* SUB */ bit_cntrl,
400 /* SP */ bit_cntrl,
401 /* */ 0,
402 /* */ 0,
403 /* */ 0,
404 /* */ 0,
405 /* */ 0,
406 /* */ 0,
407 /* */ 0,
408 /* */ 0,
409 /* */ 0,
410 /* ct. */ bit_print | bit_punct | bit_graph,
411 /* '.' */ bit_print | bit_punct | bit_graph,
412 /* '<' */ bit_print | bit_punct | bit_graph,
413 /* '(' */ bit_print | bit_punct | bit_graph,
414 /* '+' */ bit_print | bit_punct | bit_graph,
415 /* '|' */ bit_print | bit_punct | bit_graph,
416 /* '&' */ bit_print | bit_punct | bit_graph,
417 /* */ 0,
418 /* */ 0,
419 /* */ 0,
420 /* */ 0,
421 /* */ 0,
422 /* */ 0,
423 /* */ 0,
424 /* */ 0,
425 /* */ 0,
426 /* '!' */ bit_print | bit_punct | bit_graph,
427 /* '$' */ bit_print | bit_punct | bit_graph,
428 /* '*' */ bit_print | bit_punct | bit_graph,
429 /* ')' */ bit_print | bit_punct | bit_graph,
430 /* ';' */ bit_print | bit_punct | bit_graph,
431 /* '~' */ bit_print | bit_punct | bit_graph,
432 /* '-' */ bit_print | bit_punct | bit_graph,
433 /* '/' */ bit_print | bit_punct | bit_graph,
434 /* */ 0,
435 /* */ 0,
436 /* */ 0,
437 /* */ 0,
438 /* */ 0,
439 /* */ 0,
440 /* */ 0,
441 /* */ 0,
442 /* */ 0,
443 /* ',' */ bit_print | bit_punct | bit_graph,
444 /* '%' */ bit_print | bit_punct | bit_graph,
445 /* '_' */ bit_print | bit_punct | bit_graph,
446 /* '>' */ bit_print | bit_punct | bit_graph,
447 /* '?' */ bit_print | bit_punct | bit_graph,
448 /* */ 0,
449 /* */ 0,
450 /* */ 0,
451 /* */ 0,
452 /* */ 0,
453 /* */ 0,
454 /* */ 0,
455 /* */ 0,
456 /* */ 0,
457 /* */ 0,
458 /* ':' */ bit_print | bit_punct | bit_graph,
459 /* '#' */ bit_print | bit_punct | bit_graph,
460 /* '@' */ bit_print | bit_punct | bit_graph,
461 /* ''' */ bit_print | bit_punct | bit_graph,
462 /* '=' */ bit_print | bit_punct | bit_graph,
463 /* '"' */ bit_print | bit_punct | bit_graph,
464 /* */ 0,
465 /* 'a' */ LETTER (bit_lower | bit_xdigit),
466 /* 'b' */ LETTER (bit_lower | bit_xdigit),
467 /* 'c' */ LETTER (bit_lower | bit_xdigit),
468 /* 'd' */ LETTER (bit_lower | bit_xdigit),
469 /* 'e' */ LETTER (bit_lower | bit_xdigit),
470 /* 'f' */ LETTER (bit_lower | bit_xdigit),
471 /* 'g' */ LETTER (bit_lower),
472 /* 'h' */ LETTER (bit_lower),
473 /* 'i' */ LETTER (bit_lower),
474 /* */ 0,
475 /* */ 0,
476 /* */ 0,
477 /* */ 0,
478 /* */ 0,
479 /* */ 0,
480 /* */ 0,
481 /* 'j' */ LETTER (bit_lower),
482 /* 'k' */ LETTER (bit_lower),
483 /* 'l' */ LETTER (bit_lower),
484 /* 'm' */ LETTER (bit_lower),
485 /* 'n' */ LETTER (bit_lower),
486 /* 'o' */ LETTER (bit_lower),
487 /* 'p' */ LETTER (bit_lower),
488 /* 'q' */ LETTER (bit_lower),
489 /* 'r' */ LETTER (bit_lower),
490 /* */ 0,
491 /* */ 0,
492 /* */ 0,
493 /* */ 0,
494 /* */ 0,
495 /* */ 0,
496 /* */ 0,
497 /* */ 0,
498 /* 's' */ LETTER (bit_lower),
499 /* 't' */ LETTER (bit_lower),
500 /* 'u' */ LETTER (bit_lower),
501 /* 'v' */ LETTER (bit_lower),
502 /* 'w' */ LETTER (bit_lower),
503 /* 'x' */ LETTER (bit_lower),
504 /* 'y' */ LETTER (bit_lower),
505 /* 'z' */ LETTER (bit_lower),
506 /* */ 0,
507 /* */ 0,
508 /* */ 0,
509 /* */ 0,
510 /* */ 0,
511 /* */ 0,
512 /* */ 0,
513 /* */ 0,
514 /* */ 0,
515 /* */ 0,
516 /* */ 0,
517 /* */ 0,
518 /* */ 0,
519 /* */ 0,
520 /* */ 0,
521 /* '`' */ 0,
522 /* */ 0,
523 /* */ 0,
524 /* */ 0,
525 /* */ 0,
526 /* */ 0,
527 /* */ 0,
528 /* 'A' */ LETTER (bit_upper | bit_xdigit),
529 /* 'B' */ LETTER (bit_upper | bit_xdigit),
530 /* 'C' */ LETTER (bit_upper | bit_xdigit),
531 /* 'D' */ LETTER (bit_upper | bit_xdigit),
532 /* 'E' */ LETTER (bit_upper | bit_xdigit),
533 /* 'F' */ LETTER (bit_upper | bit_xdigit),
534 /* 'G' */ LETTER (bit_upper),
535 /* 'H' */ LETTER (bit_upper),
536 /* 'I' */ LETTER (bit_upper),
537 /* */ 0,
538 /* */ 0,
539 /* */ 0,
540 /* */ 0,
541 /* */ 0,
542 /* */ 0,
543 /* */ 0,
544 /* 'J' */ LETTER (bit_upper),
545 /* 'K' */ LETTER (bit_upper),
546 /* 'L' */ LETTER (bit_upper),
547 /* 'M' */ LETTER (bit_upper),
548 /* 'N' */ LETTER (bit_upper),
549 /* 'O' */ LETTER (bit_upper),
550 /* 'P' */ LETTER (bit_upper),
551 /* 'Q' */ LETTER (bit_upper),
552 /* 'R' */ LETTER (bit_upper),
553 /* */ 0,
554 /* */ 0,
555 /* */ 0,
556 /* */ 0,
557 /* */ 0,
558 /* */ 0,
559 /* */ 0,
560 /* */ 0,
561 /* 'S' */ LETTER (bit_upper),
562 /* 'T' */ LETTER (bit_upper),
563 /* 'U' */ LETTER (bit_upper),
564 /* 'V' */ LETTER (bit_upper),
565 /* 'W' */ LETTER (bit_upper),
566 /* 'X' */ LETTER (bit_upper),
567 /* 'Y' */ LETTER (bit_upper),
568 /* 'Z' */ LETTER (bit_upper),
569 /* */ 0,
570 /* */ 0,
571 /* */ 0,
572 /* */ 0,
573 /* */ 0,
574 /* */ 0,
585 /* */ 0,
586 /* */ 0,
587 /* */ 0,
588 /* */ 0,
589 /* */ 0,
590 /* */ 0
591
592#else // 'A' != 0x41 && 'A' != 0xc1
593# error unknown character set (neither ASCII nor EBCDIC)
594#endif // ASCII or EBCDIC
595
596};
597
598
599static void
600test_behavior ()
601{
602 rw_info (0, 0, 0, "behavior of <cctype> functions in the \"C\" locale");
603
604 char extra_str [80];
605 char missing_str [80];
606
607 for (int i = 0; i != 256; ++i) {
608
609 typedef unsigned char UChar;
610
611 const int c = UChar (i);
612
613 int mask = 0;
614
615 mask |= std::isalnum (c) ? bit_alnum : 0;
616 mask |= std::isalpha (c) ? bit_alpha : 0;
617 mask |= std::iscntrl (c) ? bit_cntrl : 0;
618 mask |= std::isdigit (c) ? bit_digit : 0;
619 mask |= std::isgraph (c) ? bit_graph : 0;
620 mask |= std::islower (c) ? bit_lower : 0;
621 mask |= std::isprint (c) ? bit_print : 0;
622 mask |= std::ispunct (c) ? bit_punct : 0;
623 mask |= std::isspace (c) ? bit_space : 0;
624 mask |= std::isupper (c) ? bit_upper : 0;
625 mask |= std::isxdigit (c) ? bit_xdigit : 0;
626
627 const int extra_bits = mask & ~char_mask [i];
628 const int missing_bits = ~mask & char_mask [i];
629
630 rw_assert (mask == char_mask [i], 0, 0,
631 "%#c mask%{?} missing bits %s (%#x)%{;}"
632 "%{?} extra bits %s (%#x)%{;}",
633 c,
634 missing_bits,
635 get_bitmask (missing_bits, missing_str), missing_bits,
636 extra_bits,
637 get_bitmask (extra_bits, extra_str), extra_bits);
638 }
639}
640
641
643static int rw_opt_no_behavior; // for --no-behavior
644
645static int
646run_test (int, char**)
647{
649 rw_info (0, 0, 0, "checking for the absence of masking macros");
650
651 // verify the shadow macros are not #defined (explicitly
652 // disallowed by 17.4.1.2, p6 and Footnote 159 of C++ '03)
653 for (unsigned i = 0; cctype_macros [i]; ++i) {
654 rw_assert ('\0' == cctype_macros [i][0], 0, 0,
655 "macro %s unexpectedly #defined", cctype_macros [i]);
656 }
657
659 // verify that each function is defined
660#define TEST(function) \
661 do { \
662 rw_info (0, 0, 0, "%s(int) definition", #function); \
663 function (function_called = 1); \
664 rw_assert (1 == function_called, 0, __LINE__, \
665 "%s (int) not defined", #function); \
666 } while (0)
667
668 TEST (std::isalnum);
669 TEST (std::isalpha);
670 TEST (std::iscntrl);
671 TEST (std::isdigit);
672 TEST (std::isgraph);
673 TEST (std::islower);
674 TEST (std::isprint);
675 TEST (std::ispunct);
676 TEST (std::isupper);
677 TEST (std::isxdigit);
678 TEST (std::tolower);
679 TEST (std::toupper);
680
682 if (rw_opt_no_behavior)
683 rw_note (0, 0, 0, "behavior test disabled (use --test-behavior)");
684 else
685 test_behavior ();
686
687 return 0;
688}
689
690
692int main (int argc, char *argv[])
693{
694 return rw_test (argc, argv, __FILE__,
695 "lib.c.strings",
696 "header <cctype>",
697 run_test,
698 "|-no-behavior#0-1 ",
699 &rw_opt_no_behavior);
700}
const char lower[]
const char graph[]
const char upper[]
const char cntrl[]
const char print[]
const char punct[]
#define i
Definition 17.names.cpp:126
#define c
Definition 17.names.cpp:111
#define APPEND(bit)
#define LETTER(bits)
#define TEST_FUNCTION(name)
#define TEST(function)
@ bit_graph
@ bit_cntrl
@ bit_upper
@ bit_digit
@ bit_alpha
@ bit_alnum
@ bit_xdigit
@ bit_lower
@ bit_print
@ bit_space
@ bit_punct
int function_called
const char *const cctype_macros[]
Definition 21.cctype.cpp:37
void run_test(const ForwardIterator &dummy, T *, Predicate *pred)
#define main
#define _RWSTD_NAMESPACE(name)
Definition _defs.h:567
const char * str
Definition exec.cpp:170
Definition json.h:5363
_TEST_EXPORT int rw_test(int argc, char *argv[], const char *filename, const char *clause, const char *comment, int(*testfun)(int, char **), const char *optspec,...)
_TEST_EXPORT int rw_info(int, const char *, int, const char *,...)
Definition driver.cpp:1681
_TEST_EXPORT int rw_note(int, const char *, int, const char *,...)
Definition driver.cpp:1664
_TEST_EXPORT int rw_assert(int, const char *, int, const char *,...)
Definition driver.cpp:1630
unsigned char UChar
Definition collate.cpp:122