diff --git a/Pioneers.cabal b/Pioneers.cabal index 633c0c5..de59517 100644 --- a/Pioneers.cabal +++ b/Pioneers.cabal @@ -53,8 +53,8 @@ executable Pioneers test-suite QuickCheckTests type: exitcode-stdio-1.0 - hs-source-dirs: tests, src - main-is: MainTestSuite.hs + hs-source-dirs: tests/Map, src + main-is: MapTestSuite.hs build-depends: base, OpenGL >=2.9, bytestring >=0.10, @@ -78,5 +78,6 @@ test-suite QuickCheckTests attoparsec-binary >= 0.1, QuickCheck, test-framework, + test-framework-th, test-framework-quickcheck2 Default-Language: Haskell2010 diff --git a/src/Map/Map.hs b/src/Map/Map.hs index ba697c0..7ea3593 100644 --- a/src/Map/Map.hs +++ b/src/Map/Map.hs @@ -39,6 +39,3 @@ giveNeighbourhood mp n (a,b) = let ns = giveNeighbours mp (a,b) in -- removing duplicates in O(n log n), losing order and adding Ord requirement remdups :: Ord a => [a] -> [a] remdups = map head . group . sort - -prop_rd_idempot :: [Int] -> Bool -prop_rd_idempot xs = remdups xs == (remdups . remdups) xs diff --git a/tests/MainTestSuite.hs b/tests/MainTestSuite.hs deleted file mode 100644 index 9c46a05..0000000 --- a/tests/MainTestSuite.hs +++ /dev/null @@ -1,20 +0,0 @@ -module Main where - -import Test.Framework -import Test.Framework.Providers.QuickCheck2 - -import Map.Map - -main :: IO () -main = defaultMain tests - -tests :: [Test] -tests = - [ - testGroup "Map.Map" - [ - testProperty "remdups idempotency" prop_rd_idempot - ] - ] - - diff --git a/tests/Map/MapTestSuite.hs b/tests/Map/MapTestSuite.hs new file mode 100644 index 0000000..e6a715d --- /dev/null +++ b/tests/Map/MapTestSuite.hs @@ -0,0 +1,23 @@ +{-# LANGUAGE TemplateHaskell #-} + +module Main where + +import Test.QuickCheck + +import Test.Framework +import Test.Framework.TH +import Test.Framework.Providers.QuickCheck2 + +import Map.Map + +main :: IO () +main = $(defaultMainGenerator) + +prop_rd_idempot :: [Int] -> Bool +prop_rd_idempot xs = remdups xs == (remdups . remdups) xs + +prop_rd_length :: [Int] -> Bool +prop_rd_length xs = length (remdups xs) <= length xs + +prop_rd_sorted :: [Int] -> Property +prop_rd_sorted xs = (not . null) xs ==> head (remdups xs) == minimum xs