diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/typecheck/pass/short_circuit_bool_ex.sail | 36 | ||||
| -rw-r--r-- | test/typecheck/pass/short_circuit_bool_ex/v1.expect | 8 | ||||
| -rw-r--r-- | test/typecheck/pass/short_circuit_bool_ex/v1.sail | 34 |
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: +[[96mshort_circuit_bool_ex/v1.sail[0m]:25:36-40 +25[96m |[0m if (true | assertive(n) > 0) then true else true + [91m |[0m [91m^--^[0m + [91m |[0m Tried performing type coercion from bool(true) to bool(0 == 1) on true + [91m |[0m Coercion failed because: + [91m |[0m Mismatched argument types in subtype check + [91m |[0m 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 |
