From 2009a26e17ad9dbefee3a5ca4339d754e51ef078 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 15 Feb 2026 00:04:23 +0900 Subject: refactor: write more tests in C --- tests/switch.c | 148 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 tests/switch.c (limited to 'tests/switch.c') diff --git a/tests/switch.c b/tests/switch.c new file mode 100644 index 0000000..18368b2 --- /dev/null +++ b/tests/switch.c @@ -0,0 +1,148 @@ +#include + +int switch_fallthrough(int x) { + switch (x) { + case 1: + case 2: + return 12; + case 3: + case 4: + return 34; + } + return 0; +} + +int main() { + int x = 2; + int result = 0; + + switch (x) { + case 1: + result = 10; + break; + case 2: + result = 20; + break; + case 3: + result = 30; + break; + } + ASSERT_EQ(20, result); + + x = 5; + result = 0; + switch (x) { + case 1: + result = 10; + break; + case 2: + result = 20; + break; + default: + result = 99; + break; + } + ASSERT_EQ(99, result); + + x = 2; + result = 0; + switch (x) { + case 1: + result = result + 10; + case 2: + result = result + 20; + case 3: + result = result + 30; + break; + } + ASSERT_EQ(50, result); + + x = 1; + int y = 2; + result = 0; + switch (x) { + case 1: + switch (y) { + case 1: + result = 11; + break; + case 2: + result = 12; + break; + } + break; + case 2: + result = 20; + break; + } + ASSERT_EQ(12, result); + + int a = 3; + int b = 2; + result = 0; + switch (a + b) { + case 4: + result = 40; + break; + case 5: + result = 50; + break; + case 6: + result = 60; + break; + } + ASSERT_EQ(50, result); + + x = 2; + result = 0; + int temp = 0; + switch (x) { + case 1: + temp = 5; + result = temp * 2; + break; + case 2: + temp = 10; + result = temp * 2; + break; + case 3: + temp = 15; + result = temp * 2; + break; + } + ASSERT_EQ(20, result); + ASSERT_EQ(10, temp); + + x = 1; + result = 0; + switch (x) { + case 1: { + int local = 100; + result = local; + break; + } + case 2: { + int local = 200; + result = local; + break; + } + } + ASSERT_EQ(100, result); + + x = 10; + result = 42; + switch (x) { + case 1: + result = 10; + break; + case 2: + result = 20; + break; + } + ASSERT_EQ(42, result); + + ASSERT_EQ(12, switch_fallthrough(1)); + ASSERT_EQ(12, switch_fallthrough(2)); + ASSERT_EQ(34, switch_fallthrough(3)); + ASSERT_EQ(34, switch_fallthrough(4)); +} -- cgit v1.3-1-g0d28