diff options
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | src/gleam_stdlib.mjs | 2 | ||||
-rw-r--r-- | test/gleam/map_test.gleam | 21 |
3 files changed, 23 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index bbf9e55..cb51916 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased +- Fixed a bug where record-based map keys would clash in JavaScript. - The `eunit` Erlang headers are no longer required to compile this package. - Fixed a bug where the `string.length` function would cause a JavaScript error for empty strings on older JavaScript runtimes. diff --git a/src/gleam_stdlib.mjs b/src/gleam_stdlib.mjs index a4afc1b..280cd95 100644 --- a/src/gleam_stdlib.mjs +++ b/src/gleam_stdlib.mjs @@ -279,7 +279,7 @@ class Map { if (existing) { return existing; } else if (value instanceof Object) { - let hashcode = JSON.stringify(value); + let hashcode = inspect(value); HASHCODE_CACHE.set(value, hashcode); return hashcode; } else { diff --git a/test/gleam/map_test.gleam b/test/gleam/map_test.gleam index 95ed66b..17db0ac 100644 --- a/test/gleam/map_test.gleam +++ b/test/gleam/map_test.gleam @@ -46,6 +46,12 @@ pub fn new_test() { |> should.equal([]) } +type Key { + A + B + C +} + pub fn get_test() { let proplist = [#(4, 0), #(1, 1)] let m = map.from_list(proplist) @@ -61,6 +67,21 @@ pub fn get_test() { m |> map.get(2) |> should.equal(Error(Nil)) + + let proplist = [#(A, 0), #(B, 1)] + let m = map.from_list(proplist) + + m + |> map.get(A) + |> should.equal(Ok(0)) + + m + |> map.get(B) + |> should.equal(Ok(1)) + + m + |> map.get(C) + |> should.equal(Error(Nil)) } pub fn insert_test() { |