scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

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 }