ligo/src/test/contracts/map.mligo
2020-01-31 17:13:22 -08:00

54 lines
1.5 KiB
Plaintext

type foobar = (int, int) map
let empty_map : foobar = Map.empty
let map1 : foobar =
Map.literal [(144,23); (51,23); (42,23); (120,23); (421,23)]
let map2 : foobar = Map.literal [(23,0); (42,0)]
let set_2 (n: int) (m: foobar) : foobar = Map.update 23 (Some n) m
let set_ (t: int * foobar) : foobar = set_2 t.0 t.1
let add (n,m: int * foobar) : foobar = Map.add 23 n m
let rm (m: foobar) : foobar = Map.remove 42 m
(* Dummy test so that we can add the same test for PascaLIGO *)
let patch_ (m: foobar) : foobar = Map.literal [(0,5); (1,6); (2,7)]
(* Second dummy test, see above *)
let patch_empty (m: foobar) : foobar = Map.literal [(0,0); (1,1); (2,2)]
(* Third dummy test, see above *)
let patch_deep (m: foobar * nat) : foobar * nat =
Map.literal [(0,0); (1,9); (2,2)], 10n
let size_ (m: foobar) : nat = Map.size m
let gf (m: foobar) : int = Map.find 23 m
let get (m: foobar) : int option = Map.find_opt 42 m
let get_ (m: foobar) : int option = Map.find_opt 42 m
let mem (k,m: int * foobar) : bool = Map.mem k m
let iter_op (m : foobar) : unit =
let assert_eq = fun (i: int * int) -> assert (i.0 = i.1)
in Map.iter assert_eq m
let map_op (m : foobar) : foobar =
let increment = fun (i: int * int) -> i.1 + 1
in Map.map increment m
let fold_op (m : foobar) : foobar =
let aggregate = fun (i: int * (int * int)) -> i.0 + i.1.0 + i.1.1
in Map.fold aggregate m 10
let deep_op (m: foobar) : foobar =
let coco = 0,m in
let coco = 0, Map.remove 42 coco.1 in
let coco = 0, Map.update 32 (Some 16) coco.1
in coco.1