aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/expressions.sh
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-01-24 01:43:01 +0900
committernsfisis <nsfisis@gmail.com>2026-01-24 01:43:01 +0900
commitc780cbb6acd0e0526f2d305138190392bdc8cdd7 (patch)
treedf1edba6eb5778a00e1f4c8a5051414d5bb37e71 /tests/expressions.sh
parentd179d944c0633d3aa2420009335791b115f67052 (diff)
downloadducc-c780cbb6acd0e0526f2d305138190392bdc8cdd7.tar.gz
ducc-c780cbb6acd0e0526f2d305138190392bdc8cdd7.tar.zst
ducc-c780cbb6acd0e0526f2d305138190392bdc8cdd7.zip
refactor: organize test files
Diffstat (limited to 'tests/expressions.sh')
-rw-r--r--tests/expressions.sh309
1 files changed, 309 insertions, 0 deletions
diff --git a/tests/expressions.sh b/tests/expressions.sh
new file mode 100644
index 0000000..dadfade
--- /dev/null
+++ b/tests/expressions.sh
@@ -0,0 +1,309 @@
+# logical operators
+cat <<'EOF' > expected
+foo
+EOF
+test_diff <<'EOF'
+int printf();
+
+int foo() {
+ printf("foo\n");
+ return 0;
+}
+
+int bar() {
+ printf("bar\n");
+ return 1;
+}
+
+int main() {
+ if (foo() && bar()) {
+ printf("baz\n");
+ }
+
+ return 0;
+}
+EOF
+
+cat <<'EOF' > expected
+foo
+bar
+baz
+EOF
+test_diff <<'EOF'
+int printf();
+
+int foo() {
+ printf("foo\n");
+ return 0;
+}
+
+int bar() {
+ printf("bar\n");
+ return 1;
+}
+
+int main() {
+ if (foo() || bar()) {
+ printf("baz\n");
+ }
+
+ return 0;
+}
+EOF
+
+cat <<'EOF' > expected
+0
+1
+0
+EOF
+test_diff <<'EOF'
+int printf();
+
+int main() {
+ printf("%d\n", !1);
+ printf("%d\n", !0);
+ printf("%d\n", !23);
+ return 0;
+}
+EOF
+
+# increment/decrement operators
+cat <<'EOF' > expected
+44
+44
+46
+46
+44
+42
+42
+EOF
+
+test_diff <<'EOF'
+int printf();
+
+int main() {
+ int a = 42;
+ ++a;
+ a++;
+ printf("%d\n", a);
+ printf("%d\n", a++);
+ printf("%d\n", ++a);
+ printf("%d\n", a);
+ --a;
+ a--;
+ printf("%d\n", a--);
+ printf("%d\n", --a);
+ printf("%d\n", a);
+}
+EOF
+
+# comma operator
+cat <<'EOF' > expected
+0 0
+1 1
+2 2
+3 3
+4 4
+EOF
+
+test_diff <<'EOF'
+int printf();
+
+int main() {
+ int i = 1000;
+ int j = 1000;
+ for (i = 0, j = 0; i < 5; i++, j++) {
+ printf("%d %d\n", i, j);
+ }
+}
+EOF
+
+cat <<'EOF' > expected
+1 2 3 4
+0 0 5
+EOF
+
+test_diff <<'EOF'
+int printf();
+int x, y, z = 5;
+int main() {
+ int a, b;
+ a = 1, b = 2;
+ int c = 3, d = 4;
+ printf("%d %d %d %d\n", a, b, c, d);
+ printf("%d %d %d\n", x, y, z);
+}
+EOF
+
+# cast expressions
+cat <<'EOF' > expected
+65
+65
+127
+1
+42
+99
+10
+EOF
+test_diff <<'EOF'
+int printf(const char*, ...);
+
+int main() {
+ char c = 65;
+ int i = (int)c;
+ printf("%d\n", i);
+
+ int i2 = 321;
+ char c2 = (char)i2;
+ printf("%d\n", c2);
+
+ short s = 127;
+ int i3 = (int)s;
+ printf("%d\n", i3);
+
+ int i4 = 65537;
+ short s2 = (short)i4;
+ printf("%d\n", s2);
+
+ long l = 42;
+ int i5 = (int)l;
+ printf("%d\n", i5);
+
+ int i6 = 99;
+ long l2 = (long)i6;
+ printf("%d\n", (int)l2);
+
+ char c3 = 10;
+ short s3 = (short)c3;
+ int i7 = (int)s3;
+ long l3 = (long)i7;
+ printf("%d\n", (int)l3);
+
+ return 0;
+}
+EOF
+
+cat <<'EOF' > expected
+Result: 130
+EOF
+test_diff <<'EOF'
+int printf(const char*, ...);
+
+int main() {
+ char c = 65;
+ int result = (int)c + (int)c;
+ printf("Result: %d\n", result);
+ return 0;
+}
+EOF
+
+cat <<'EOF' > expected
+10
+20
+30
+EOF
+test_diff <<'EOF'
+int printf(const char*, ...);
+
+int main() {
+ char a = 5;
+ char b = 5;
+ int sum = (int)a + (int)b;
+ printf("%d\n", sum);
+
+ short s1 = 10;
+ short s2 = 10;
+ int sum2 = (int)s1 + (int)s2;
+ printf("%d\n", sum2);
+
+ long l1 = 15;
+ long l2 = 15;
+ int sum3 = (int)(l1 + l2);
+ printf("%d\n", sum3);
+
+ return 0;
+}
+EOF
+
+cat <<'EOF' > expected
+10
+EOF
+test_diff <<'EOF'
+int printf(const char*, ...);
+
+int main() {
+ char c = -10;
+ int i = (int)c;
+ printf("%d\n", -i);
+ return 0;
+}
+EOF
+
+cat <<'EOF' > expected
+Char: 65
+Int: 65
+EOF
+test_diff <<'EOF'
+int printf(const char*, ...);
+
+char get_char() {
+ return 65;
+}
+
+int main() {
+ char c = get_char();
+ int i = (int)get_char();
+ printf("Char: %d\n", c);
+ printf("Int: %d\n", i);
+ return 0;
+}
+EOF
+
+cat <<'EOF' > expected
+Equal
+EOF
+test_diff <<'EOF'
+int printf(const char*, ...);
+
+int main() {
+ char c = 42;
+ int i = 42;
+ if ((int)c == i) {
+ printf("Equal\n");
+ } else {
+ printf("Not equal\n");
+ }
+ return 0;
+}
+EOF
+
+cat <<'EOF' > expected
+55
+EOF
+test_diff <<'EOF'
+int printf(const char*, ...);
+
+int main() {
+ long l = 55;
+ char c = (char)(short)(int)l;
+ printf("%d\n", c);
+ return 0;
+}
+EOF
+
+cat <<'EOF' > expected
+42
+EOF
+test_diff <<'EOF'
+int printf(const char*, ...);
+
+int f() {
+ return printf("42\n");
+}
+
+int main() {
+ (void)123;
+ (void)(5 + 6 + 7);
+ (void)f();
+}
+EOF