diff options
author | Mikko Ahlroth <mikko@ahlroth.fi> | 2023-10-15 14:28:42 +0300 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2023-10-17 12:33:52 +0100 |
commit | a63339014ba5ebd5ad50b34bea53fb39d105ec52 (patch) | |
tree | 4693a4fb7f42182437693428829f29e12725518b | |
parent | d0d942ba9fda93a9338483335628fdae82a6fbad (diff) | |
download | gleam_stdlib-a63339014ba5ebd5ad50b34bea53fb39d105ec52.tar.gz gleam_stdlib-a63339014ba5ebd5ad50b34bea53fb39d105ec52.zip |
Fix map equality checking when the amount of keys differs
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | src/persistent-hash-map.mjs | 2 | ||||
-rw-r--r-- | test/gleam/map_test.gleam | 16 |
3 files changed, 19 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index d553c2a..db53ffd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ - Improved performance of `string.to_graphemes` on JavaScript. - The `iterator` module gains the `map2` function. - The `list` module gains the `key_filter` function. +- Fixed a bug on target JavaScript where `Map` equality would not be correctly + checked for maps of different sizes. ## v0.31.0 - 2023-09-25 diff --git a/src/persistent-hash-map.mjs b/src/persistent-hash-map.mjs index ff849d8..04aadd5 100644 --- a/src/persistent-hash-map.mjs +++ b/src/persistent-hash-map.mjs @@ -945,7 +945,7 @@ export default class PMap { * @returns {boolean} */ equals(o) { - if (!(o instanceof PMap)) { + if (!(o instanceof PMap) || this.size !== o.size) { return false; } let equal = true; diff --git a/test/gleam/map_test.gleam b/test/gleam/map_test.gleam index 75fb78d..b00331f 100644 --- a/test/gleam/map_test.gleam +++ b/test/gleam/map_test.gleam @@ -375,3 +375,19 @@ pub fn zero_must_be_contained_test() { |> map.has_key(0) |> should.equal(True) } + +pub fn empty_map_equality_test() { + let map1 = map.new() + let map2 = map.from_list([#(1, 2)]) + + should.be_false(map1 == map2) + should.be_false(map2 == map1) +} + +pub fn extra_keys_equality_test() { + let map1 = map.from_list([#(1, 2), #(3, 4)]) + let map2 = map.from_list([#(1, 2), #(3, 4), #(4, 5)]) + + should.be_false(map1 == map2) + should.be_false(map2 == map1) +} |