From d38e27ae5bb7d11046a7e3041af3a321021a3608 Mon Sep 17 00:00:00 2001 From: Tobias Haslop Date: Sun, 20 Sep 2020 21:44:27 +0200 Subject: [PATCH] Fix Ix laws Changed the tests in Tests.QuickCheck.Classes.Ix to match the laws in the documentation of Data.Ix In particular ixRangeIndex was incorrect: *> import Data.Ix *> x11 = (1,1) :: (Int,Int) *> x33 = (3,3) :: (Int,Int) *> x20 = (2,0) :: (Int,Int) *> x11 <= x33 && (x20 >= x11 && x20 <= x33) True (0.01 secs, 960,736 bytes) *> index (x11, x33) x20 *** Exception: Error in array index *> inRange (x11, x33) x20 False --- .../src/Test/QuickCheck/Classes/Ix.hs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/quickcheck-classes-base/src/Test/QuickCheck/Classes/Ix.hs b/quickcheck-classes-base/src/Test/QuickCheck/Classes/Ix.hs index b8ca0f9..37ec1b6 100644 --- a/quickcheck-classes-base/src/Test/QuickCheck/Classes/Ix.hs +++ b/quickcheck-classes-base/src/Test/QuickCheck/Classes/Ix.hs @@ -31,19 +31,19 @@ ixLaws p = Laws "Ix" ] ixInRange :: forall a. (Show a, Ix a, Arbitrary a) => Proxy a -> Property -ixInRange _ = property $ \(l :: a) (u :: a) (i :: a) -> (l <= u) ==> do +ixInRange _ = property $ \(l :: a) (u :: a) (i :: a) -> inRange (l,u) i == elem i (range (l,u)) ixRangeIndex :: forall a. (Show a, Ix a, Arbitrary a) => Proxy a -> Property -ixRangeIndex _ = property $ \(l :: a) (u :: a) (i :: a) -> ((l <= u) && (i >= l && i <= u)) ==> do - range (l,u) !! index (l,u) i == i +ixRangeIndex _ = property $ \(l :: a) (u :: a) (i :: a) -> + inRange (l,u) i ==> range (l,u) !! index (l,u) i == i ixMapIndexRange :: forall a. (Show a, Ix a, Arbitrary a) => Proxy a -> Property -ixMapIndexRange _ = property $ \(l :: a) (u :: a) -> (l <= u) ==> do +ixMapIndexRange _ = property $ \(l :: a) (u :: a) -> map (index (l,u)) (range (l,u)) == [0 .. rangeSize (l,u) - 1] ixRangeSize :: forall a. (Show a, Ix a, Arbitrary a) => Proxy a -> Property -ixRangeSize _ = property $ \(l :: a) (u :: a) -> (l <= u) ==> do +ixRangeSize _ = property $ \(l :: a) (u :: a) -> rangeSize (l,u) == length (range (l,u))