gbdk-releases/sdcc/support/regression/tests/switch.c
2015-01-10 16:25:09 +01:00

147 lines
2 KiB
C

/* Test the types of switch statement.
type: char, int, long
sign: signed, unsigned
storage: static,
attr: volatile
*/
#include <testfwk.h>
{sign} {type}
sparseSwitch({sign} {type} val)
{
{sign} {type} ret;
{storage} {attr} {sign} {type} local;
local = val;
switch (local) {
case 1:
ret = 7;
break;
case 4:
ret = 12;
break;
case 6:
ret = 13;
/* Fall through */
case 12:
ret = 14;
break;
case 13:
case 14:
case 15:
ret = 19;
break;
default:
ret = 30;
}
return ret;
}
void
testSparseSwitch(void)
{
ASSERT(sparseSwitch(1) == 7);
ASSERT(sparseSwitch(4) == 12);
ASSERT(sparseSwitch(6) == 14);
ASSERT(sparseSwitch(12) == 14);
ASSERT(sparseSwitch(13) == 19);
ASSERT(sparseSwitch(14) == 19);
ASSERT(sparseSwitch(15) == 19);
ASSERT(sparseSwitch(19) == 30);
ASSERT(sparseSwitch(0) == 30);
}
{sign} {type}
denseSwitch({sign} {type} val)
{
{sign} {type} ret;
{storage} {attr} {sign} {type} local;
local = val;
ret = 12;
switch (local) {
case 0:
ret = 1;
break;
case 1:
ret = 14;
break;
case 2:
ret = 15;
break;
case 3:
ret = 34;
break;
case 4:
ret = 17;
break;
/* No default */
}
return ret;
}
void
testDenseSwitch(void)
{
ASSERT(denseSwitch(0) == 1);
ASSERT(denseSwitch(1) == 14);
ASSERT(denseSwitch(2) == 15);
ASSERT(denseSwitch(3) == 34);
ASSERT(denseSwitch(4) == 17);
ASSERT(denseSwitch(5) == 12);
ASSERT(denseSwitch(100) == 12);
}
void
testDenseIntSwitch(void)
{
volatile int val = 1000;
volatile int ret = 0;
switch (val) {
case 999:
ret = 5;
break;
case 1000:
ret = 6;
break;
case 1001:
ret = 7;
break;
case 1002:
ret = 12;
break;
case 1003:
ret = 14;
break;
}
ASSERT(ret == 6);
val = 129;
switch (val) {
case 126:
ret = 5;
break;
case 127:
ret = 6;
break;
case 128:
ret = 7;
break;
case 129:
ret = 8;
break;
default:
ret = 9;
}
ASSERT(ret == 8);
}