/ test / contracts / sophia_2 / primitive_map.aes
primitive_map.aes
 1  
 2  contract MapServer =
 3  
 4    function insert : (string, string, map(string, string)) => map(string, string)
 5    function delete : (string, map(string, string)) => map(string, string)
 6  
 7  contract PrimitiveMaps =
 8  
 9    record state = { remote : MapServer,
10                     map    : map(string, string),
11                     map2   : map(string, string) }
12  
13    function init(r) =
14      let m = {}
15      { remote = r, map = m, map2 = m }
16  
17    function set_remote(r) = put(state{ remote = r })
18  
19    function insert(k, v, m) : map(string, string) = m{ [k] = v }
20    function delete(k, m) : map(string, string) = Map.delete(k, m)
21  
22    function remote_insert(k, v, m) =
23      state.remote.insert(k, v, m)
24  
25    function remote_delete(k, m) =
26      state.remote.delete(k, m)
27  
28    function get_state_map()  = state.map
29    function set_state_map(m) = put(state{ map = m })
30  
31    function clone_state() = put(state{ map2 = state.map })
32  
33    function insert_state(k, v) = put(state{ map @ m = m { [k] = v } })
34    function delete_state(k)    = put(state{ map @ m = Map.delete(k, m) })
35    function lookup_state(k)    = Map.lookup(k, state.map)
36  
37    function double_insert_state(k, v1, v2) =
38      put(state{ map  @ m = m { [k] = v1 },
39                 map2 @ m = m { [k] = v2 } })
40  
41    function test() =
42      let m  = {} : map(string, string)
43      let m1 = m { ["foo"] = "value_of_foo",
44                   ["bla"] = "value_of_bla" }
45      let m2 = Map.delete("foo", m1)
46      let m3 = m2 { ["bla"] = "new_value_of_bla" }
47      [Map.lookup("foo", m),  Map.lookup("bla", m),
48       Map.lookup("foo", m1), Map.lookup("bla", m1),
49       Map.lookup("foo", m2), Map.lookup("bla", m2),
50       Map.lookup("foo", m3), Map.lookup("bla", m3)]
51  
52    function return_map() =
53      Map.delete("goo", {["foo"] = "bar", ["goo"] = "gaa"})
54  
55    function argument_map(m : map(string, string)) =
56      m["foo"]
57