Skip to content

Commit db50eee

Browse files
authored
Fix difference (#68)
* Fix difference * Update changelog
1 parent 93f3595 commit db50eee

File tree

3 files changed

+9
-3
lines changed

3 files changed

+9
-3
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ New features:
1010

1111
Bugfixes:
1212

13+
- Fixes Map/Set difference, which was broken due to the internal rewrite (#68 @natefaubion)
14+
1315
Other improvements:
1416

1517
## [v3.1.0](https://github.com/purescript/purescript-ordered-collections/releases/tag/v3.1.0) - 2023-08-11

src/Data/Map/Internal.purs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -813,7 +813,7 @@ unsafeIntersectionWith = mkFn4 \comp app l r -> case l, r of
813813
unsafeDifference :: forall k v w. Fn3 (k -> k -> Ordering) (Map k v) (Map k w) (Map k v)
814814
unsafeDifference = mkFn3 \comp l r -> case l, r of
815815
Leaf, _ -> Leaf
816-
_, Leaf -> Leaf
816+
_, Leaf -> l
817817
_, Node _ _ rk _ rl rr -> do
818818
let (Split _ ll lr) = runFn3 unsafeSplit comp rk l
819819
let l' = runFn3 unsafeDifference comp ll rl

test/Test/Data/Map.purs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,8 +251,12 @@ mapTests = do
251251
log "difference"
252252
quickCheck $ \(TestMap m1) (TestMap m2) ->
253253
let d = M.difference (m1 :: M.Map SmallKey Int) (m2 :: M.Map SmallKey String)
254-
in and (map (\k -> M.member k m1) (A.fromFoldable $ M.keys d)) &&
255-
and (map (\k -> not $ M.member k d) (A.fromFoldable $ M.keys m2))
254+
in
255+
if M.size d == 0 then
256+
and (map (\k -> M.member k m2) (A.fromFoldable $ M.keys m1))
257+
else
258+
and (map (\k -> M.member k m1) (A.fromFoldable $ M.keys d)) &&
259+
and (map (\k -> not $ M.member k d) (A.fromFoldable $ M.keys m2))
256260

257261
log "size"
258262
quickCheck $ \xs ->

0 commit comments

Comments
 (0)