Ticket #2359 (closed bug: fixed)

Opened 5 years ago

Last modified 5 years ago

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: Difficulty: Unknown
Test Case: Blocked By:
Blocking: Related Tickets:

Description

Updates on the supposedly minimum element aren't:

GHCi, version 6.8.2: http://www.haskell.org/ghc/  :? 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-0.1.0.0 ... linking ... done.
Loading package containers-0.1.0.1 ... 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

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

Change History

Changed 5 years ago by igloo

  • priority changed from normal to high
  • difficulty set to Unknown
  • milestone set to 6.10.1

Thanks for the report.

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

Changed 5 years ago by sedillard

fixed typos and added quickcheck test

Changed 5 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...

Changed 5 years ago by simonmar

  • owner set to simonmar

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

Changed 5 years ago by simonmar

  • status changed from new to closed
  • resolution set to fixed

Patch applied, thanks!

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