Opened 11 years ago

Closed 11 years ago

#2359 closed bug (fixed)

Data.IntMap update{Min,Max}WithKey corrupts data structure

Reported by: nwf Owned by: simonmar
Priority: high Milestone: 6.10.1
Component: libraries/base Version: 6.8.2
Keywords: Cc:
Operating System: Linux Architecture: x86_64 (amd64)
Type of failure: None/Unknown Test Case:
Blocked By: Blocking:
Related Tickets: Differential Rev(s):
Wiki Page:


Updates on the supposedly minimum element aren't:

GHCi, version 6.8.2:  :? for help
Loading package base ... linking ... done.
Prelude> import Data.IntMap
Prelude Data.IntMap> let base = (insert 2 "b" (singleton 1 "a"))
Loading package array- ... linking ... done.
Loading package containers- ... linking ... done.
Prelude Data.IntMap> let umin = updateMinWithKey (\ k _ -> ("yo!" ++ (show k)) ) base
Prelude Data.IntMap> umin
fromList [(1,"a"),(2,"yo!2")]
Prelude Data.IntMap> showTree umin
"*\n+-- 1:=\"a\"\n+-- 2:=\"yo!2\"\n"

Updates on the maximum element are even worse, corrupting the data structure (ghci session continued):

Prelude Data.IntMap> let umax = updateMaxWithKey (\ k _ -> ("yo!" ++ (show k)) ) base
Prelude Data.IntMap> umax
fromList [(1,"yo!1"),(1,"a")]
Prelude Data.IntMap> showTree umax
"*\n+-- 1:=\"yo!1\"\n+-- 1:=\"a\"\n"

GHC is Debian 6.8.2-5.

Anything else that would be helpful? Thanks much in advance.

Attachments (1)

patch.txt (2.4 KB) - added by sedillard 11 years ago.
fixed typos and added quickcheck test

Download all attachments as: .zip

Change History (5)

comment:1 Changed 11 years ago by igloo

difficulty: Unknown
Milestone: 6.10.1
Priority: normalhigh

Thanks for the report.

It would be very useful if someone could put the datatype invariants as comments in the code.

Changed 11 years ago by sedillard

Attachment: patch.txt added

fixed typos and added quickcheck test

comment:2 Changed 11 years ago by sedillard

The problem was a typo, probably from cutting and pasting. I don't think more illuminating comments would have helped. A proper test, on the other hand...

comment:3 Changed 11 years ago by simonmar

Owner: set to simonmar

Looks ok to me; I'll validate & commit.

comment:4 Changed 11 years ago by simonmar

Resolution: fixed
Status: newclosed

Patch applied, thanks!

Thu Jul  3 22:43:50 PDT 2008
  * Fixed typo in updateMinWithKey / updateMaxWithKey
Note: See TracTickets for help on using tickets.