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