Rearrange tests somewhat
[darcs-mirrors/vector.git] / tests / Utilities.hs
index 1011aa4..927e9bd 100644 (file)
@@ -7,6 +7,7 @@ import qualified Data.Vector as DV
 import qualified Data.Vector.Generic as DVG
 import qualified Data.Vector.Primitive as DVP
 import qualified Data.Vector.Storable as DVS
+import qualified Data.Vector.Unboxed as DVU
 import qualified Data.Vector.Fusion.Stream as S
 
 import Data.List ( sortBy )
@@ -34,6 +35,12 @@ instance (Arbitrary a, DVS.Storable a) => Arbitrary (DVS.Vector a) where
 instance (CoArbitrary a, DVS.Storable a) => CoArbitrary (DVS.Vector a) where
     coarbitrary = coarbitrary . DVS.toList
 
+instance (Arbitrary a, DVU.Unbox a) => Arbitrary (DVU.Vector a) where
+    arbitrary = fmap DVU.fromList arbitrary
+
+instance (CoArbitrary a, DVU.Unbox a) => CoArbitrary (DVU.Vector a) where
+    coarbitrary = coarbitrary . DVU.toList
+
 instance Arbitrary a => Arbitrary (S.Stream a) where
     arbitrary = fmap S.fromList arbitrary
 
@@ -80,6 +87,14 @@ instance (Eq a, DVS.Storable a) => TestData (DVS.Vector a) where
   type EqTest (DVS.Vector a) = Property
   equal x y = property (x == y)
 
+instance (Eq a, DVU.Unbox a) => TestData (DVU.Vector a) where
+  type Model (DVU.Vector a) = [a]
+  model = DVU.toList
+  unmodel = DVU.fromList
+
+  type EqTest (DVU.Vector a) = Property
+  equal x y = property (x == y)
+
 #define id_TestData(ty) \
 instance TestData ty where { \
   type Model ty = ty;        \
@@ -89,6 +104,7 @@ instance TestData ty where { \
   type EqTest ty = Property; \
   equal x y = property (x == y) }
 
+id_TestData(())
 id_TestData(Bool)
 id_TestData(Int)
 id_TestData(Float)
@@ -235,3 +251,15 @@ ifoldl f z = foldl (uncurry . f) z . zip [0..]
 ifoldr :: (Int -> a -> b -> b) -> b -> [a] -> b
 ifoldr f z = foldr (uncurry f) z . zip [0..]
 
+minIndex :: Ord a => [a] -> Int
+minIndex = fst . foldr1 imin . zip [0..]
+  where
+    imin (i,x) (j,y) | x <= y    = (i,x)
+                     | otherwise = (j,y)
+
+maxIndex :: Ord a => [a] -> Int
+maxIndex = fst . foldr1 imax . zip [0..]
+  where
+    imax (i,x) (j,y) | x >= y    = (i,x)
+                     | otherwise = (j,y)
+