diff options
Diffstat (limited to 'src/map.gleam')
-rw-r--r-- | src/map.gleam | 177 |
1 files changed, 78 insertions, 99 deletions
diff --git a/src/map.gleam b/src/map.gleam index 9236ffd..d5a662d 100644 --- a/src/map.gleam +++ b/src/map.gleam @@ -4,78 +4,79 @@ import expect pub external type Map(key, value); -pub external fn new() -> Map(key, value) - = "maps" "new" - -// test new { -// new() -// |> new -// |> expect:equal(_, []) -// } - pub external fn size(Map(k, v)) -> Int = "maps" "size" -// test size { -// let _ = [] -// |> from_list -// |> size -// |> expect:equal(_, 0) +pub external fn to_list(Map(key, value)) -> List({key, value}) + = "maps" "to_list" -// let _ = [ -// {1, 1}, -// ] -// |> from_list -// |> size -// |> expect:equal(_, 1) +pub external fn from_list(List({key, value})) -> Map(key, value) + = "maps" "from_list" -// [ -// {"", 1.0}, -// {"", 2.0}, -// ] -// |> from_list -// |> size -// |> expect:equal(_, 2) -// } +test from_list { + let proplist = [ + {4, 0}, + {1, 0}, + ] + let map = from_list(proplist) -// external fn is_key(key, Map(key, v)) -> Bool -// = "maps" "is_key" + map + |> size + |> expect:equal(_, 2) +} -// 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 -// } +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 external fn new() -> Map(key, value) + = "maps" "new" -// pub fn from_record(record: {r}) -> Map(Atom, any:Any) { +test new { + let _ = new() + |> size + |> expect:equal(_, 0) + + new() + |> to_list + |> expect:equal(_, []) +} + +// pub fn from_record(record: {r | }) -> Map(Atom, any:Any) { // any:unsafeCoerce(record) // } @@ -90,28 +91,6 @@ pub external fn size(Map(k, v)) -> Int // |> 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({key, value})) -> Map(key, value) - = "maps" "from_list" - -test from_list { - let proplist = [ - {4, 0}, - {1, 0}, - ] - let map = from_list(proplist) - - let _ = map - |> size - |> expect:equal(_, 2) - - map - |> to_list - |> expect:equal(_, proplist) -} - pub external fn fetch(Map(key, value), key) -> Result(a, value) = "gleam__stdlib" "map_fetch"; @@ -135,20 +114,20 @@ test fetch { // |> 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(_, Ok(from_list([{"a", 0}, {"b", 1}, {"c", 2}]))) -// } +test put { + new() + |> put(_, "a", 0) + |> put(_, "b", 1) + |> put(_, "c", 2) + |> expect:equal(_, 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"; @@ -165,7 +144,7 @@ test map_values { ] |> from_list |> map_values(_, fn(k, v) { k + v }) - |> expect:equal(_, from_list([{1, 0}, {2, 3}, {3, 5}])) + |> expect:equal(_, from_list([{1, 1}, {2, 3}, {3, 5}])) } pub external fn keys(Map(keys, v)) -> List(keys) @@ -200,5 +179,5 @@ external fn erl_filter(fn(key, value) -> Bool, Map(key, value)) -> Map(key, valu = "maps" "filter"; pub fn filter(map, fun) { - filter(fun, map) + erl_filter(fun, map) } |