Imported Upstream version 2.9.0
[debian/cc1111] / support / regression / tests / switch.c
1 /*  Test the types of switch statement.
2
3     type: char, int, long
4     sign: signed, unsigned
5     storage: static, 
6     attr: volatile
7  */
8 #include <testfwk.h>
9
10 {sign} {type}
11 sparseSwitch({sign} {type} val)
12 {
13   {sign} {type} ret;
14   {storage} {attr} {sign} {type} local;
15
16   local = val;
17
18   switch (local) {
19   case 1:
20     ret = 7;
21     break;
22   case 4:
23     ret = 12;
24     break;
25   case 6:
26     ret = 13;
27     /* Fall through */
28   case 12:
29     ret = 14;
30     break;
31   case 13:
32   case 14:
33   case 15:
34     ret = 19;
35     break;
36   default:
37     ret = 30;
38   }
39
40   return ret;
41 }
42
43 void
44 testSparseSwitch(void)
45 {
46   ASSERT(sparseSwitch(1) == 7);
47   ASSERT(sparseSwitch(4) == 12);
48   ASSERT(sparseSwitch(6) == 14);
49   ASSERT(sparseSwitch(12) == 14);
50   ASSERT(sparseSwitch(13) == 19);
51   ASSERT(sparseSwitch(14) == 19);
52   ASSERT(sparseSwitch(15) == 19);
53   ASSERT(sparseSwitch(19) == 30);
54   ASSERT(sparseSwitch(0) == 30);
55 }
56
57 {sign} {type}
58 denseSwitch({sign} {type} val)
59 {
60   {sign} {type} ret;
61   {storage} {attr} {sign} {type} local;
62
63   local = val;
64   ret = 12;
65
66   switch (local) {
67   case 0:
68     ret = 1;
69     break;
70   case 1:
71     ret = 14;
72     break;
73   case 2:
74     ret = 15;
75     break;
76   case 3:
77     ret = 34;
78     break;
79   case 4:
80     ret = 17;
81     break;
82     /* No default */
83   }
84
85   return ret;
86 }
87
88 void
89 testDenseSwitch(void)
90 {
91   ASSERT(denseSwitch(0) == 1);
92   ASSERT(denseSwitch(1) == 14);
93   ASSERT(denseSwitch(2) == 15);
94   ASSERT(denseSwitch(3) == 34);
95   ASSERT(denseSwitch(4) == 17);
96   ASSERT(denseSwitch(5) == 12);
97   ASSERT(denseSwitch(100) == 12);
98 }
99
100 void
101 testDenseIntSwitch(void)
102 {
103   volatile int val = 1000;
104   volatile int ret = 0;
105
106   switch (val) {
107   case 999:
108     ret = 5;
109     break;
110   case 1000:
111     ret = 6;
112     break;
113   case 1001:
114     ret = 7;
115     break;
116   case 1002:
117     ret = 12;
118     break;
119   case 1003:
120     ret = 14;
121     break;
122   }
123
124   ASSERT(ret == 6);
125
126   val = 129;
127
128   switch (val) {
129   case 126:
130     ret = 5;
131     break;
132   case 127:
133     ret = 6;
134     break;
135   case 128:
136     ret = 7;
137     break;
138   case 129:
139     ret = 8;
140     break;
141   default:
142     ret = 9;
143   }
144
145   ASSERT(ret == 8);
146 }