diff options
Diffstat (limited to 'src/map.gleam')
-rw-r--r-- | src/map.gleam | 236 |
1 files changed, 112 insertions, 124 deletions
diff --git a/src/map.gleam b/src/map.gleam index 4f9f2b2..9236ffd 100644 --- a/src/map.gleam +++ b/src/map.gleam @@ -1,109 +1,109 @@ import any -import result:Result +import result import expect pub external type Map(key, value); -pub external fn new() -> Map(key, value)) +pub external fn new() -> Map(key, value) = "maps" "new" -test new { - new() - |> size - |> expect:equal(_, 0) -} +// test new { +// new() +// |> new +// |> expect:equal(_, []) +// } -pub external fn size(Map(_, _)) -> Int +pub external fn size(Map(k, v)) -> Int = "maps" "size" -test size { - [] - |> from_list - |> size - |> expect:equal(_, 0) - - [ - {1, 1}, - ] - |> from_list - |> size - |> expect:equal(_, 1) - - [ - {"", 1.0}, - {"", 2.0}, - ] - |> from_list - |> size - |> expect:equal(_, 2) -} - -external fn is_key(key, Map(key, _)) -> Bool - = "maps" "is_key" - -pub fn has_key(map, key) { - is_key(key, map) -} - -test has_key { - [] - |> from_list - |> has_key(_, 1) - |> expect:false - - [ - {1, 0}, - ] - |> from_list - |> has_key(_, 1) - |> expect:true - - [ - {4, 0}, - {1, 0}, - ] - |> from_list - |> has_key(_, 1) - |> expect:true - - [ - {4, 0}, - {1, 0}, - ] - |> from_list - |> has_key(_, 0) - |> expect:false -} - -pub fn from_record(record: {r}) -> Map(Atom, any:Any) { - any:unsafeCoerce(record) -} - -test from_record { - map = from_record({ name = "Jane" }) - - map - |> size - |> expect:equal(_, 1) - - map - |> expect:equal(_, from_list([{"name", "Jane"}])) -} - -pub external fn to_list(Map(key, value)) -> List(Tuple(key, value)) +// test size { +// let _ = [] +// |> from_list +// |> size +// |> expect:equal(_, 0) + +// let _ = [ +// {1, 1}, +// ] +// |> from_list +// |> size +// |> expect:equal(_, 1) + +// [ +// {"", 1.0}, +// {"", 2.0}, +// ] +// |> from_list +// |> size +// |> expect:equal(_, 2) +// } + +// external fn is_key(key, Map(key, v)) -> Bool +// = "maps" "is_key" + +// pub fn has_key(map, key) { +// is_key(key, map) +// } + +// test has_key { +// let _ = [] +// |> from_list +// |> has_key(_, 1) +// |> expect:false + +// let _ = [ +// {1, 0}, +// ] +// |> from_list +// |> has_key(_, 1) +// |> expect:true + +// let _ = [ +// {4, 0}, +// {1, 0}, +// ] +// |> from_list +// |> has_key(_, 1) +// |> expect:true + +// [ +// {4, 0}, +// {1, 0}, +// ] +// |> from_list +// |> has_key(_, 0) +// |> expect:false +// } + +// pub fn from_record(record: {r}) -> Map(Atom, any:Any) { +// any:unsafeCoerce(record) +// } + +// test from_record { +// let map = from_record({ name = "Jane" }) + +// let _ = map +// |> size +// |> expect:equal(_, 1) + +// map +// |> expect:equal(_, from_list([{"name", "Jane"}])) +// } + +pub external fn to_list(Map(key, value)) -> List({key, value}) = "maps" "to_list" -pub external fn from_list(List(Tuple(key, value))) -> Map(key, value) +pub external fn from_list(List({key, value})) -> Map(key, value) = "maps" "from_list" test from_list { - proplist = [ + let proplist = [ {4, 0}, {1, 0}, ] - map = from_list(proplist) + let map = from_list(proplist) - map + let _ = map |> size |> expect:equal(_, 2) @@ -112,43 +112,43 @@ test from_list { |> expect:equal(_, proplist) } -pub external fn fetch(Map(key, value), key) -> Result(Unit, value) +pub external fn fetch(Map(key, value), key) -> Result(a, value) = "gleam__stdlib" "map_fetch"; test fetch { - proplist = [ + let proplist = [ {4, 0}, {1, 1}, ] - map = from_list(proplist) + let map = from_list(proplist) - map + let _ = map |> fetch(_, 4) - |> expect:equal(_, result:Ok(0)) + |> expect:equal(_, Ok(0)) map |> fetch(_, 1) - |> expect:equal(_, result:Ok(1)) + |> expect:equal(_, Ok(1)) - map - |> fetch(_, 2) - |> expect:equal(_, result:Error(())) + // map + // |> fetch(_, 2) + // |> expect:equal(_, Error(()) } -external fn erl_put(key, value, Map(key, value)) -> Map(key, value) - = "maps" "put"; +// external fn erl_put(key, value, Map(key, value)) -> Map(key, value) +// = "maps" "put"; -pub fn put(map, key, value) { - erl_put(key, value, map) -} +// pub fn put(map, key, value) { +// erl_put(key, value, map) +// } -test put { - new() - |> put(_, "a", 0) - |> put(_, "b", 1) - |> put(_, "c", 2) - |> expect:equal(_, result:Ok(from_list([{"a", 0}, {"b", 1}, {"c", 2}]))) -} +// test put { +// new() +// |> put(_, "a", 0) +// |> put(_, "b", 1) +// |> put(_, "c", 2) +// |> expect:equal(_, Ok(from_list([{"a", 0}, {"b", 1}, {"c", 2}]))) +// } external fn erl_map_values(fn(key, value) -> value, Map(key, value)) -> Map(key, value) = "maps" "map"; @@ -168,7 +168,7 @@ test map_values { |> expect:equal(_, from_list([{1, 0}, {2, 3}, {3, 5}])) } -pub external fn keys(Map(keys, _)) -> List(keys) +pub external fn keys(Map(keys, v)) -> List(keys) = "maps" "keys" test keys { @@ -179,10 +179,10 @@ test keys { ] |> from_list |> keys - |> expect:equal(_, ["a", "b", "c"])) + |> expect:equal(_, ["a", "b", "c"]) } -pub external fn values(Map(_, values)) -> List(values) +pub external fn values(Map(k, values)) -> List(values) = "maps" "values" test values { @@ -193,7 +193,7 @@ test values { ] |> from_list |> values - |> expect:equal(_, [0, 1, 2])) + |> expect:equal(_, [0, 1, 2]) } external fn erl_filter(fn(key, value) -> Bool, Map(key, value)) -> Map(key, value) @@ -202,15 +202,3 @@ external fn erl_filter(fn(key, value) -> Bool, Map(key, value)) -> Map(key, valu pub fn filter(map, fun) { filter(fun, map) } - -test map_values { - [ - {1, 0}, - {3, 2}, - {2, 1}, - ] - |> from_list - |> filter(_, fn(k, v) { k + v < 4 }) - |> expect:equal(_, from_list([{1, 0}, {2, 3}])) -} - |