summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/typecheck/pass/short_circuit_bool_ex.sail36
-rw-r--r--test/typecheck/pass/short_circuit_bool_ex/v1.expect8
-rw-r--r--test/typecheck/pass/short_circuit_bool_ex/v1.sail34
3 files changed, 78 insertions, 0 deletions
diff --git a/test/typecheck/pass/short_circuit_bool_ex.sail b/test/typecheck/pass/short_circuit_bool_ex.sail
new file mode 100644
index 00000000..5cfdc1dc
--- /dev/null
+++ b/test/typecheck/pass/short_circuit_bool_ex.sail
@@ -0,0 +1,36 @@
+default Order dec
+
+$include <prelude.sail>
+$include <string.sail>
+
+val assertive : forall 'n. int('n) -> range(0,'n) effect {escape}
+
+function assertive(n) = {
+ assert(n > 0);
+ 0
+}
+
+val ok : unit -> bool(0 == 1) effect {escape}
+
+function ok() = {
+ let n = -1;
+ let a = assertive(n) > 0 in
+ if (true | a) then true else true
+}
+
+/*
+val bad : unit -> bool(0 == 1) effect {escape}
+
+function bad() = {
+ let n = -1;
+ if (true | assertive(n) > 0) then true else true
+}
+*/
+
+val main : unit -> unit effect {escape}
+
+function main() =
+ if ok() then
+ print_endline("0 = 1")
+ else
+ print_endline("0 != 1") \ No newline at end of file
diff --git a/test/typecheck/pass/short_circuit_bool_ex/v1.expect b/test/typecheck/pass/short_circuit_bool_ex/v1.expect
new file mode 100644
index 00000000..fc98db1b
--- /dev/null
+++ b/test/typecheck/pass/short_circuit_bool_ex/v1.expect
@@ -0,0 +1,8 @@
+Type error:
+[short_circuit_bool_ex/v1.sail]:25:36-40
+25 | if (true | assertive(n) > 0) then true else true
+  | ^--^
+  | Tried performing type coercion from bool(true) to bool(0 == 1) on true
+  | Coercion failed because:
+  | Mismatched argument types in subtype check
+  |
diff --git a/test/typecheck/pass/short_circuit_bool_ex/v1.sail b/test/typecheck/pass/short_circuit_bool_ex/v1.sail
new file mode 100644
index 00000000..2faf12af
--- /dev/null
+++ b/test/typecheck/pass/short_circuit_bool_ex/v1.sail
@@ -0,0 +1,34 @@
+default Order dec
+
+$include <prelude.sail>
+$include <string.sail>
+
+val assertive : forall 'n. int('n) -> range(0,'n) effect {escape}
+
+function assertive(n) = {
+ assert(n > 0);
+ 0
+}
+
+val ok : unit -> bool(0 == 1) effect {escape}
+
+function ok() = {
+ let n = -1;
+ let a = assertive(n) > 0 in
+ if (true | a) then true else true
+}
+
+val bad : unit -> bool(0 == 1) effect {escape}
+
+function bad() = {
+ let n = -1;
+ if (true | assertive(n) > 0) then true else true
+}
+
+val main : unit -> unit effect {escape}
+
+function main() =
+ if bad() then
+ print_endline("0 = 1")
+ else
+ print_endline("0 != 1") \ No newline at end of file