aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/switch.c
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-15 00:04:23 +0900
committernsfisis <nsfisis@gmail.com>2026-02-15 00:04:23 +0900
commit2009a26e17ad9dbefee3a5ca4339d754e51ef078 (patch)
tree5c311a1a17f40786f53f4a89c5bbbb72402a6b2d /tests/switch.c
parentef0cb4dbdc1c036f70f94a905cbacae9be5abf5e (diff)
downloadducc-2009a26e17ad9dbefee3a5ca4339d754e51ef078.tar.gz
ducc-2009a26e17ad9dbefee3a5ca4339d754e51ef078.tar.zst
ducc-2009a26e17ad9dbefee3a5ca4339d754e51ef078.zip
refactor: write more tests in C
Diffstat (limited to 'tests/switch.c')
-rw-r--r--tests/switch.c148
1 files changed, 148 insertions, 0 deletions
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 <helpers.h>
+
+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));
+}