0039-mbrtowc.c (1268B)
1 #include <assert.h> 2 #include <errno.h> 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <string.h> 6 #include <wchar.h> 7 8 #include "mbtest.h" 9 10 /* 11 output: 12 testing 13 testing mbrtowc1 14 testing mbrtowc2 15 testing mbtowc 16 done 17 end: 18 */ 19 20 #define NELEM(x) (sizeof(x)/sizeof(x[0])) 21 22 void 23 tests_mbrtowc(void) 24 { 25 struct mbtest *tp; 26 int r; 27 mbstate_t s; 28 29 puts("testing mbrtowc1"); 30 for (tp = tests; tp < &tests[NELEM(tests)]; ++tp) { 31 wc = -1; 32 errno = 0; 33 r = mbrtowc(tp->pwc, tp->s, tp->l, NULL); 34 assert(tp->rmbr == r); 35 assert(tp->syserr == errno); 36 if (tp->rmbr != -1) 37 assert(tp->wc == wc); 38 } 39 40 puts("testing mbrtowc2"); 41 memset(&s, 0, sizeof(s)); 42 for (tp = tests; tp < &tests[NELEM(tests)]; ++tp) { 43 wc = -1; 44 errno = 0; 45 r = mbrtowc(tp->pwc, tp->s, tp->l, &s); 46 assert(tp->rmbr == r); 47 assert(tp->syserr == errno); 48 if (tp->rmbr != -1) 49 assert(tp->wc == wc); 50 assert(mbsinit(&s) != 0 == tp->mbstate); 51 } 52 } 53 54 void 55 tests_mbtowc(void) 56 { 57 struct mbtest *tp; 58 int r, rt; 59 60 puts("testing mbtowc"); 61 for (tp = tests; tp < &tests[NELEM(tests)]; ++tp) { 62 wc = -1; 63 r = mbtowc(tp->pwc, tp->s, tp->l); 64 assert(tp->rmb == r); 65 if (tp->rmb >= 0) 66 assert(tp->wc == wc); 67 } 68 } 69 70 int 71 main() 72 { 73 puts("testing"); 74 tests_mbrtowc(); 75 tests_mbtowc(); 76 puts("done"); 77 return 0; 78 }