Merge branch 'bugfix/147-bool-comparison' into 'dev'

Resolve "Bool comparison"

Closes #147

See merge request ligolang/ligo!413
This commit is contained in:
Suzanne Dupéron 2020-02-13 11:29:03 +00:00
commit eaba8e9857
6 changed files with 46 additions and 1 deletions

View File

@ -11,6 +11,7 @@ module Ty = struct
open Script_typed_ir open Script_typed_ir
let bool_k = Bool_key None
let nat_k = Nat_key None let nat_k = Nat_key None
let tez_k = Mutez_key None let tez_k = Mutez_key None
let int_k = Int_key None let int_k = Int_key None
@ -62,7 +63,7 @@ module Ty = struct
match tb with match tb with
| TC_unit -> fail (not_comparable "unit") | TC_unit -> fail (not_comparable "unit")
| TC_void -> fail (not_comparable "void") | TC_void -> fail (not_comparable "void")
| TC_bool -> fail (not_comparable "bool") | TC_bool -> return bool_k
| TC_nat -> return nat_k | TC_nat -> return nat_k
| TC_mutez -> return tez_k | TC_mutez -> return tez_k
| TC_int -> return int_k | TC_int -> return int_k

View File

@ -112,6 +112,7 @@ module Typer = struct
List.exists (eq_2 (a , b)) [ List.exists (eq_2 (a , b)) [
t_int () ; t_int () ;
t_nat () ; t_nat () ;
t_bool () ;
t_mutez () ; t_mutez () ;
t_string () ; t_string () ;
t_bytes () ; t_bytes () ;

View File

@ -0,0 +1,5 @@
function main (const a : bool; const b : bool) : int is
block {
var result : int := 27;
if a = b then result := 999 else result := 1
} with result

View File

@ -0,0 +1,3 @@
// Test conditional in CameLIGO
let main (a , b : bool * bool) = if a = b then 999 else 1

View File

@ -0,0 +1,8 @@
/* Test boolean comparison in ReasonLIGO */
let main = ((a , b) : (bool , bool)) =>
if (a == b) {
999;
} else {
1;
};

View File

@ -1205,6 +1205,30 @@ let condition_religo () : unit result =
] in ] in
ok () ok ()
let eq_bool_common program =
let%bind _ =
bind_map_list (fun ( a , b , expected ) ->
expect_eq program "main" (e_pair (e_bool a) (e_bool b)) (e_int expected))
[
( false , false , 999 ) ;
( false , true , 1 ) ;
( true , false , 1 ) ;
( true , true , 999 ) ;
]
in
ok ()
let eq_bool () : unit result =
let%bind program = type_file "./contracts/eq_bool.ligo" in
eq_bool_common program
let eq_bool_mligo () : unit result =
let%bind program = mtype_file "./contracts/eq_bool.mligo" in
eq_bool_common program
let eq_bool_religo () : unit result =
let%bind program = retype_file "./contracts/eq_bool.religo" in
eq_bool_common program
let condition_simple () : unit result = let condition_simple () : unit result =
let%bind program = type_file "./contracts/condition-simple.ligo" in let%bind program = type_file "./contracts/condition-simple.ligo" in
@ -2272,6 +2296,9 @@ let main = test_suite "Integration (End to End)" [
test "condition (ligo)" condition ; test "condition (ligo)" condition ;
test "condition (mligo)" condition_mligo ; test "condition (mligo)" condition_mligo ;
test "condition (religo)" condition_religo ; test "condition (religo)" condition_religo ;
test "eq bool (ligo)" eq_bool ;
test "eq bool (mligo)" eq_bool_mligo ;
test "eq bool (religo)" eq_bool_religo ;
test "shadow" shadow ; test "shadow" shadow ;
test "annotation" annotation ; test "annotation" annotation ;
test "multiple parameters" multiple_parameters ; test "multiple parameters" multiple_parameters ;