]> pd.if.org Git - pdclib/blob - functions/stdarg.c
Initial checkin.
[pdclib] / functions / stdarg.c
1 /* $Id$ */
2
3 /* Release $Name$ */
4
5 /* stdarg
6
7    This file is part of the Public Domain C Library (PDCLib).
8    Permission is granted to use, modify, and / or redistribute at will.
9 */
10
11 #ifdef TEST
12
13 #include <_PDCLIB_test.h>
14 #include <stdarg.h>
15 #include <limits.h>
16 #include <float.h>
17
18 unsigned int rc = 0;
19
20 typedef int (*intfunc_t)( void );
21
22 enum tag_t
23 {
24     TAG_END,
25     TAG_INT,
26     TAG_LONG,
27     TAG_LLONG,
28     TAG_DBL,
29     TAG_LDBL,
30     TAG_INTPTR,
31     TAG_LDBLPTR,
32     TAG_FUNCPTR
33 };
34
35 static int test( enum tag_t s, ... )
36 {
37     enum tag_t tag = s;
38     va_list ap;
39     va_start( ap, s );
40     for (;;)
41     {
42         switch ( tag )
43         {
44             case TAG_INT:
45             {
46                 TESTCASE( va_arg( ap, int ) == INT_MAX );
47                 tag = va_arg( ap, enum tag_t );
48                 break;
49             }
50             case TAG_LONG:
51             {
52                 TESTCASE( va_arg( ap, long ) == LONG_MAX );
53                 tag = va_arg( ap, enum tag_t );
54                 break;
55             }
56             case TAG_LLONG:
57             {
58                 TESTCASE( va_arg( ap, long long ) == LLONG_MAX );
59                 tag = va_arg( ap, enum tag_t );
60                 break;
61             }
62             case TAG_DBL:
63             {
64                 TESTCASE( va_arg( ap, double ) == DBL_MAX );
65                 tag = va_arg( ap, enum tag_t );
66                 break;
67             }
68             case TAG_LDBL:
69             {
70                 TESTCASE( va_arg( ap, long double ) == LDBL_MAX );
71                 tag = va_arg( ap, enum tag_t );
72                 break;
73             }
74             case TAG_INTPTR:
75             {
76                 TESTCASE( *( va_arg( ap, int * ) ) == INT_MAX );
77                 tag = va_arg( ap, enum tag_t );
78                 break;
79             }
80             case TAG_LDBLPTR:
81             {
82                 TESTCASE( *( va_arg( ap, long double * ) ) == LDBL_MAX );
83                 tag = va_arg( ap, enum tag_t );
84                 break;
85             }
86             case TAG_FUNCPTR:
87             {
88                 TESTCASE( (va_arg( ap, intfunc_t ))() == INT_MAX );
89                 tag = va_arg( ap, enum tag_t );
90                 break;
91             }
92             case TAG_END:
93             {
94                 va_end( ap );
95                 return 0;
96             }
97         }
98     }
99 }
100
101 int dummy()
102 {
103     return INT_MAX;
104 }
105
106 int main()
107 {
108     int x = INT_MAX;
109     long double d = LDBL_MAX;
110     test( TAG_END );
111     test( TAG_INT, INT_MAX, TAG_END );
112     test( TAG_LONG, LONG_MAX, TAG_LLONG, LLONG_MAX, TAG_END );
113     test( TAG_DBL, DBL_MAX, TAG_LDBL, LDBL_MAX, TAG_END );
114     test( TAG_INTPTR, &x, TAG_LDBLPTR, &d, TAG_FUNCPTR, dummy, TAG_END );
115     return TEST_RESULTS;
116 }
117
118 #endif