aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2018-11-18 11:52:41 +0000
committerLouis Pilfold <louis@lpil.uk>2018-11-18 12:42:43 +0000
commit6fc9588f3dde4ad3fa0be5cbeb0c6560b6debc98 (patch)
tree727ee5bc26e39a5162de35262cd1bf5f0bac51b9
parent8f4c745b0805d9c3d9e173dbca6470fc80df519f (diff)
downloadgleam_stdlib-6fc9588f3dde4ad3fa0be5cbeb0c6560b6debc98.tar.gz
gleam_stdlib-6fc9588f3dde4ad3fa0be5cbeb0c6560b6debc98.zip
gleam_stdlib map
-rw-r--r--src/map.gleam96
1 files changed, 96 insertions, 0 deletions
diff --git a/src/map.gleam b/src/map.gleam
new file mode 100644
index 0000000..0e41aa7
--- /dev/null
+++ b/src/map.gleam
@@ -0,0 +1,96 @@
+import any
+import expect
+
+pub external type Map(key, value);
+
+pub external fn new() -> Map(key, value))
+ = 'maps' 'new'
+
+test new {
+ new()
+ |> size
+ |> expect:equal(_, 0)
+}
+
+pub external fn size(Map(_, _)) -> 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))
+ = 'maps' 'to_list'
+
+pub external fn from_list(List(Tuple(key, value))) -> Map(key, value)
+ = 'maps' 'from_list'
+
+test from_list {
+ proplist = [{4, 0}, {1, 0}]
+ map = from_list(proplist)
+
+ map
+ |> size
+ |> expect:equal(_, 2)
+
+ map
+ |> to_list
+ |> expect:equal(_, proplist)
+}