aboutsummaryrefslogtreecommitdiff
path: root/src/map.gleam
diff options
context:
space:
mode:
Diffstat (limited to 'src/map.gleam')
-rw-r--r--src/map.gleam177
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)
}