diff options
Diffstat (limited to 'tests/expressions.sh')
| -rw-r--r-- | tests/expressions.sh | 241 |
1 files changed, 12 insertions, 229 deletions
diff --git a/tests/expressions.sh b/tests/expressions.sh index 8443774..bb0743b 100644 --- a/tests/expressions.sh +++ b/tests/expressions.sh @@ -1,4 +1,4 @@ -# logical operators +# logical operators: short-circuit evaluation cat <<'EOF' > expected foo EOF @@ -51,53 +51,26 @@ int main() { } EOF +# cast with typedef cat <<'EOF' > expected -0 -1 -0 +Result: -42 +Result: 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 +int printf(const char*, ...); -test_diff <<'EOF' -int printf(); +typedef int foo; 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); + int b = -(int)a; + int c = !(foo)a; + printf("Result: %d\n", b); + printf("Result: %d\n", c); } EOF -# comma operator +# comma operator in for loop cat <<'EOF' > expected 0 0 1 1 @@ -118,197 +91,7 @@ int main() { } 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: -42 -Result: 0 -EOF -test_diff <<'EOF' -int printf(const char*, ...); - -typedef int foo; - -int main() { - int a = 42; - int b = -(int)a; - int c = !(foo)a; - printf("Result: %d\n", b); - printf("Result: %d\n", c); -} -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 - +# void cast cat <<'EOF' > expected 42 EOF |
