1/* C99 6.5.2.2 Function calls.
2   Test passing varargs of the decimal float types.  */
3
4#include <stdarg.h>
5#include "dfp-dbg.h"
6
7static _Decimal32
8vararg32 (unsigned arg, ...)
9{
10  int i;
11  va_list ap;
12  _Decimal32 result;
13
14  va_start (ap, arg);
15  for (i = 0; i <= arg; i++)
16    result = va_arg (ap, _Decimal32);
17  va_end (ap);
18  return result;
19}
20
21static _Decimal64
22vararg64 (unsigned arg, ...)
23{
24  int i;
25  va_list ap;
26  _Decimal64 result;
27
28  va_start (ap, arg);
29  for (i = 0; i <= arg; i++)
30    result = va_arg (ap, _Decimal64);
31  va_end (ap);
32  return result;
33}
34
35static _Decimal128
36vararg128 (unsigned arg, ...)
37{
38  int i;
39  va_list ap;
40  _Decimal128 result;
41
42  va_start (ap, arg);
43  for (i = 0; i <= arg; i++)
44    result = va_arg (ap, _Decimal128);
45  va_end (ap);
46  return result;
47}
48
49
50int main()
51{
52  /* _Decimal32 variants.  */
53  if (vararg32 (0, 0.0df, 1.0df, 2.0df, 3.0df, 4.0df, 5.0df) != 0.0df)
54    FAILURE
55  if (vararg32 (1, 0.0df, 1.0df, 2.0df, 3.0df, 4.0df, 5.0df) != 1.0df)
56    FAILURE
57  if (vararg32 (2, 0.0df, 1.0df, 2.0df, 3.0df, 4.0df, 5.0df) != 2.0df)
58    FAILURE
59  if (vararg32 (3, 0.0df, 1.0df, 2.0df, 3.0df, 4.0df, 5.0df) != 3.0df)
60    FAILURE
61  if (vararg32 (4, 0.0df, 1.0df, 2.0df, 3.0df, 4.0df, 5.0df) != 4.0df)
62    FAILURE
63  if (vararg32 (5, 0.0df, 1.0df, 2.0df, 3.0df, 4.0df, 5.0df) != 5.0df)
64    FAILURE
65
66  /* _Decimal64 variants.  */
67  if (vararg64 (0, 0.0dd, 1.0dd, 2.0dd, 3.0dd, 4.0dd, 5.0dd) != 0.0dd)
68    FAILURE
69  if (vararg64 (1, 0.0dd, 1.0dd, 2.0dd, 3.0dd, 4.0dd, 5.0dd) != 1.0dd)
70    FAILURE
71  if (vararg64 (2, 0.0dd, 1.0dd, 2.0dd, 3.0dd, 4.0dd, 5.0dd) != 2.0dd)
72    FAILURE
73  if (vararg64 (3, 0.0dd, 1.0dd, 2.0dd, 3.0dd, 4.0dd, 5.0dd) != 3.0dd)
74    FAILURE
75  if (vararg64 (4, 0.0dd, 1.0dd, 2.0dd, 3.0dd, 4.0dd, 5.0dd) != 4.0dd)
76    FAILURE
77  if (vararg64 (5, 0.0dd, 1.0dd, 2.0dd, 3.0dd, 4.0dd, 5.0dd) != 5.0dd)
78    FAILURE
79
80  /* _Decimal128 variants.  */
81  if (vararg128 (0, 0.0dl, 1.0dl, 2.0dl, 3.0dl, 4.0dl, 5.0dl) != 0.0dl)
82    FAILURE
83  if (vararg128 (1, 0.0dl, 1.0dl, 2.0dl, 3.0dl, 4.0dl, 5.0dl) != 1.0dl)
84    FAILURE
85  if (vararg128 (2, 0.0dl, 1.0dl, 2.0dl, 3.0dl, 4.0dl, 5.0dl) != 2.0dl)
86    FAILURE
87  if (vararg128 (3, 0.0dl, 1.0dl, 2.0dl, 3.0dl, 4.0dl, 5.0dl) != 3.0dl)
88    FAILURE
89  if (vararg128 (4, 0.0dl, 1.0dl, 2.0dl, 3.0dl, 4.0dl, 5.0dl) != 4.0dl)
90    FAILURE
91  if (vararg128 (5, 0.0dl, 1.0dl, 2.0dl, 3.0dl, 4.0dl, 5.0dl) != 5.0dl)
92    FAILURE
93
94  FINISH
95}
96