aboutsummaryrefslogtreecommitdiff
path: root/tests/conditions.sh
diff options
context:
space:
mode:
authorMustafa Quraish <[email protected]>2022-01-29 17:37:00 -0500
committerMustafa Quraish <[email protected]>2022-01-29 17:37:00 -0500
commita9683512b29abd53814bf834e23f752a8999a679 (patch)
tree033d76dbf7b1249354d2967b9de53fd6af20b7cb /tests/conditions.sh
parentAdd i64{max,min} helper functions (diff)
downloadcup-a9683512b29abd53814bf834e23f752a8999a679.tar.xz
cup-a9683512b29abd53814bf834e23f752a8999a679.zip
Implement blocks (lexically scoped) and conditionals
Diffstat (limited to 'tests/conditions.sh')
-rwxr-xr-xtests/conditions.sh65
1 files changed, 65 insertions, 0 deletions
diff --git a/tests/conditions.sh b/tests/conditions.sh
new file mode 100755
index 0000000..be80d96
--- /dev/null
+++ b/tests/conditions.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+
+. tests/common.sh
+
+set -e
+
+echo -n "- Conditionals: "
+assert_exit_status 'fn main() { return 1 ? 5 : 10; }' 5
+assert_exit_status 'fn main() { return 0 ? 5 : 10; }' 10
+assert_exit_status 'fn main() { return 1 < 2 ? 10 : 20; }' 10
+
+assert_exit_status_stdin 5 <<EOF
+fn main() {
+ let flag: int = 1;
+ let a: int;
+ flag ? a = 5 : a = 10;
+ return a;
+}
+EOF
+
+assert_exit_status_stdin 10 <<EOF
+fn main() {
+ let flag: int = 0;
+ let a: int;
+ flag ? a = 5 : a = 10;
+ return a;
+}
+EOF
+echo " OK"
+
+echo -n "- If statement: "
+assert_exit_status_stdin 10 <<EOF
+fn main() {
+ if (5 < 20) return 10;
+ return 3;
+}
+EOF
+
+assert_exit_status_stdin 3 <<EOF
+fn main() {
+ if (5 > 20) return 10;
+ return 3;
+}
+EOF
+
+assert_exit_status_stdin 20 <<EOF
+fn main() {
+ let x: int;
+ if (0)
+ x = 3;
+ else
+ x = 20;
+ return x;
+}
+EOF
+
+assert_exit_status_stdin 3 <<EOF
+fn main() {
+ let x: int;
+ if (1)
+ x = 3;
+ return x;
+}
+EOF
+echo " OK" \ No newline at end of file