Add bitwise operators to CameLIGO
Right now they're defined as '.bor' and '.band' because of a glitch in CameLIGO's parser where 'X.Y' leads to a parse error if Y is a keyword or reserved word in CameLIGO.
This commit is contained in:
parent
5a5c3a8dd4
commit
ea661247b6
@ -177,6 +177,10 @@ module Simplify = struct
|
|||||||
("Big_map.literal" , "BIG_MAP_LITERAL" ) ;
|
("Big_map.literal" , "BIG_MAP_LITERAL" ) ;
|
||||||
("Big_map.empty" , "BIG_MAP_EMPTY" ) ;
|
("Big_map.empty" , "BIG_MAP_EMPTY" ) ;
|
||||||
|
|
||||||
|
("Bitwise.bor" , "OR") ;
|
||||||
|
("Bitwise.band" , "AND") ;
|
||||||
|
("Bitwise.xor" , "XOR") ;
|
||||||
|
|
||||||
("String.length", "SIZE") ;
|
("String.length", "SIZE") ;
|
||||||
("String.size", "SIZE") ;
|
("String.size", "SIZE") ;
|
||||||
("String.slice", "SLICE") ;
|
("String.slice", "SLICE") ;
|
||||||
|
10
src/test/contracts/bitwise_arithmetic.mligo
Normal file
10
src/test/contracts/bitwise_arithmetic.mligo
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
(* Test CameLIGO bitwise operators *)
|
||||||
|
|
||||||
|
let or_op (n : nat) : nat =
|
||||||
|
Bitwise.bor n 4p
|
||||||
|
|
||||||
|
let and_op (n : nat) : nat =
|
||||||
|
Bitwise.band n 7p
|
||||||
|
|
||||||
|
let xor_op (n : nat) : nat =
|
||||||
|
Bitwise.xor n 7p
|
@ -194,6 +194,22 @@ let bitwise_arithmetic () : unit result =
|
|||||||
let%bind () = expect_eq program "xor_op" (e_nat 7) (e_nat 0) in
|
let%bind () = expect_eq program "xor_op" (e_nat 7) (e_nat 0) in
|
||||||
ok ()
|
ok ()
|
||||||
|
|
||||||
|
let bitwise_arithmetic_mligo () : unit result =
|
||||||
|
let%bind program = mtype_file "./contracts/bitwise_arithmetic.mligo" in
|
||||||
|
let%bind () = expect_eq program "or_op" (e_nat 7) (e_nat 7) in
|
||||||
|
let%bind () = expect_eq program "or_op" (e_nat 3) (e_nat 7) in
|
||||||
|
let%bind () = expect_eq program "or_op" (e_nat 2) (e_nat 6) in
|
||||||
|
let%bind () = expect_eq program "or_op" (e_nat 14) (e_nat 14) in
|
||||||
|
let%bind () = expect_eq program "or_op" (e_nat 10) (e_nat 14) in
|
||||||
|
let%bind () = expect_eq program "and_op" (e_nat 7) (e_nat 7) in
|
||||||
|
let%bind () = expect_eq program "and_op" (e_nat 3) (e_nat 3) in
|
||||||
|
let%bind () = expect_eq program "and_op" (e_nat 2) (e_nat 2) in
|
||||||
|
let%bind () = expect_eq program "and_op" (e_nat 14) (e_nat 6) in
|
||||||
|
let%bind () = expect_eq program "and_op" (e_nat 10) (e_nat 2) in
|
||||||
|
let%bind () = expect_eq program "xor_op" (e_nat 0) (e_nat 7) in
|
||||||
|
let%bind () = expect_eq program "xor_op" (e_nat 7) (e_nat 0) in
|
||||||
|
ok ()
|
||||||
|
|
||||||
let string_arithmetic () : unit result =
|
let string_arithmetic () : unit result =
|
||||||
let%bind program = type_file "./contracts/string_arithmetic.ligo" in
|
let%bind program = type_file "./contracts/string_arithmetic.ligo" in
|
||||||
let%bind () = expect_eq program "concat_op" (e_string "foo") (e_string "foototo") in
|
let%bind () = expect_eq program "concat_op" (e_string "foo") (e_string "foototo") in
|
||||||
@ -960,7 +976,8 @@ let main = test_suite "Integration (End to End)" [
|
|||||||
test "multiple parameters" multiple_parameters ;
|
test "multiple parameters" multiple_parameters ;
|
||||||
test "bool" bool_expression ;
|
test "bool" bool_expression ;
|
||||||
test "arithmetic" arithmetic ;
|
test "arithmetic" arithmetic ;
|
||||||
test "bitiwse_arithmetic" bitwise_arithmetic ;
|
test "bitwise_arithmetic" bitwise_arithmetic ;
|
||||||
|
test "bitwise_arithmetic (mligo)" bitwise_arithmetic_mligo;
|
||||||
test "string_arithmetic" string_arithmetic ;
|
test "string_arithmetic" string_arithmetic ;
|
||||||
test "string_arithmetic (mligo)" string_arithmetic_mligo ;
|
test "string_arithmetic (mligo)" string_arithmetic_mligo ;
|
||||||
test "bytes_arithmetic" bytes_arithmetic ;
|
test "bytes_arithmetic" bytes_arithmetic ;
|
||||||
|
Loading…
Reference in New Issue
Block a user