Added more tests
[fw/sdcc] / support / regression / tests / vaargs.c
1 /** Tests argument passing to functions via va_args.
2     Assumes that up to the first two arguments can be passed in registers.
3
4     type1: char, int
5     type2: char, int
6     type3: char, int
7  */
8 #include <testfwk.h>
9 #include <stdarg.h>
10
11 static {type1}
12 returnFirstArg(int marker, ...)
13 {
14     va_list ap;
15     {type1} i;
16
17     va_start(ap, marker);
18     i = va_arg(ap, {type1});
19
20     va_end(ap);
21
22     LOG(("Returning %u\n", i));
23     return i;
24 }
25
26 static {type2}
27 returnSecondArg(int marker, ...)
28 {
29     va_list ap;
30     {type2} i;
31
32     va_start(ap, marker);
33     UNUSED(va_arg(ap, {type1}));
34     i = va_arg(ap, {type2});
35
36     va_end(ap);
37
38     LOG(("Returning %u\n", i));
39     return i;
40 }
41
42 static {type3}
43 returnThirdArg(int marker, ...)
44 {
45     va_list ap;
46     {type3} i;
47
48     va_start(ap, marker);
49     UNUSED(va_arg(ap, {type1}));
50     UNUSED(va_arg(ap, {type2}));
51     i = va_arg(ap, {type3});
52
53     va_end(ap);
54
55     LOG(("Returning %u\n", i));
56     return i;
57 }
58
59 void
60 disabled_testArgs(void)
61 {
62     int marker = 12;
63
64     LOG(("First arg: %u\n", returnFirstArg(marker, ({type1})123, ({type2})45, ({type3})67)));
65     ASSERT(returnFirstArg(marker, ({type1})123, ({type2})45, ({type3})67) == 123);
66     ASSERT(returnFirstArg(marker, ({type1})-123, ({type2})45, ({type3})67) == -123);
67
68     ASSERT(returnSecondArg(marker, ({type1})1, ({type2})-23, ({type3})64) == -23);
69     ASSERT(returnSecondArg(marker, ({type1})1, ({type2})8, ({type3})64) == 8);
70
71     ASSERT(returnThirdArg(marker, -33, -34, -35) == -35);
72     ASSERT(returnThirdArg(marker, -33, -34, 35) == 35);
73 }