diff options
| author | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
|---|---|---|
| committer | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
| commit | 268a53de823a6750d6256ee1fb1e7707b4b45740 (patch) | |
| tree | 42c1799a9a82b2f7d9790ee9fe181d72a7274751 /support/regression/tests/switch.c | |
| download | sdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz | |
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'support/regression/tests/switch.c')
| -rw-r--r-- | support/regression/tests/switch.c | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/support/regression/tests/switch.c b/support/regression/tests/switch.c new file mode 100644 index 0000000..ec46204 --- /dev/null +++ b/support/regression/tests/switch.c @@ -0,0 +1,154 @@ +/* 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); +#ifndef __SDCC_pdk14 // Lack of memory + ASSERT(sparseSwitch(14) == 19); + ASSERT(sparseSwitch(15) == 19); + ASSERT(sparseSwitch(19) == 30); + ASSERT(sparseSwitch(0) == 30); +#endif +} + +#ifndef __SDCC_pdk14 // Lack of memory +{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; +} +#endif + +void +testDenseSwitch(void) +{ +#ifndef __SDCC_pdk14 // Lack of memory + 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); +#endif +} + +void +testDenseIntSwitch(void) +{ +#ifndef __SDCC_pdk14 // Lack of memory + 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); +#endif +} |
