aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikko Ahlroth <mikko@ahlroth.fi>2023-10-15 14:28:42 +0300
committerLouis Pilfold <louis@lpil.uk>2023-10-17 12:33:52 +0100
commita63339014ba5ebd5ad50b34bea53fb39d105ec52 (patch)
tree4693a4fb7f42182437693428829f29e12725518b
parentd0d942ba9fda93a9338483335628fdae82a6fbad (diff)
downloadgleam_stdlib-a63339014ba5ebd5ad50b34bea53fb39d105ec52.tar.gz
gleam_stdlib-a63339014ba5ebd5ad50b34bea53fb39d105ec52.zip
Fix map equality checking when the amount of keys differs
-rw-r--r--CHANGELOG.md2
-rw-r--r--src/persistent-hash-map.mjs2
-rw-r--r--test/gleam/map_test.gleam16
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)
+}