diff options
author | Ian Lynagh <igloo@earth.li> | 2012-02-03 20:26:58 +0000 |
---|---|---|
committer | Ian Lynagh <igloo@earth.li> | 2012-02-03 20:26:58 +0000 |
commit | 3ff30500a2e14b829884c37cff72ae2eb80a4cfd (patch) | |
tree | 922477618e4abd6850e6098ecdef2292046af98a /testsuite/tests/lib | |
parent | 087d60a23ae70c25b02abd00674264abf50f6450 (diff) | |
download | haskell-3ff30500a2e14b829884c37cff72ae2eb80a4cfd.tar.gz |
Remove the Data.ByteString tests; part of #1161
I've sent them to the upstream bytestring bug report addresses
Diffstat (limited to 'testsuite/tests/lib')
16 files changed, 0 insertions, 5183 deletions
diff --git a/testsuite/tests/lib/Data.ByteString/Makefile b/testsuite/tests/lib/Data.ByteString/Makefile deleted file mode 100644 index 9101fbd40a..0000000000 --- a/testsuite/tests/lib/Data.ByteString/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -TOP=../../.. -include $(TOP)/mk/boilerplate.mk -include $(TOP)/mk/test.mk diff --git a/testsuite/tests/lib/Data.ByteString/all.T b/testsuite/tests/lib/Data.ByteString/all.T deleted file mode 100644 index 75c5574302..0000000000 --- a/testsuite/tests/lib/Data.ByteString/all.T +++ /dev/null @@ -1,18 +0,0 @@ -test('bytestring001', - [skip, # This is designed for an earlier version of bytestring - reqlib('QuickCheck')], - compile_and_run, - ['-package bytestring -package QuickCheck']) -test('bytestring002', normal, compile_and_run, ['-package bytestring']) -test('bytestring003', normal, compile_and_run, ['-package bytestring']) -test('bytestring004', - [skip, # This is designed for an earlier version of bytestring - reqlib('QuickCheck')], - compile_and_run, - ['-package bytestring -package QuickCheck']) -test('bytestring005', - [skip, # This is designed for an earlier version of bytestring - reqlib('QuickCheck')], - compile_and_run, - ['-package bytestring -package QuickCheck']) -test('bytestring006', normal, compile_and_run, ['-package bytestring']) diff --git a/testsuite/tests/lib/Data.ByteString/bytestring001.hs b/testsuite/tests/lib/Data.ByteString/bytestring001.hs deleted file mode 100644 index 00cfcb3763..0000000000 --- a/testsuite/tests/lib/Data.ByteString/bytestring001.hs +++ /dev/null @@ -1,948 +0,0 @@ -#!/usr/bin/env runhaskell --- --- Uses multi-param type classes --- - -import Test.QuickCheck.Batch -import Test.QuickCheck -import Text.Show.Functions - -import Data.Char -import Data.Int -import Data.List -import Data.Maybe -import Data.Word - -import System.IO -import System.Environment -import System.IO.Unsafe -import System.Random - -import Control.Monad ( liftM2 ) -import Control.Monad.Instances () - -import Text.Printf -import Debug.Trace - -import Foreign.Ptr - -import Data.ByteString.Lazy (ByteString(..), pack , unpack) -import qualified Data.ByteString.Lazy as L - -import Data.ByteString.Fusion -import qualified Data.ByteString as P -import qualified Data.ByteString.Lazy as L -import qualified Data.ByteString.Lazy.Internal as L - -import qualified Data.ByteString.Char8 as PC -import qualified Data.ByteString.Lazy.Char8 as LC -import qualified Data.ByteString as P -import qualified Data.ByteString.Internal as P -import qualified Data.ByteString.Char8 as C -import qualified Data.ByteString.Lazy.Char8 as D -import Data.ByteString.Fusion - -import Prelude hiding (abs) - --- Enable this to get verbose test output. Including the actual tests. -debug = False - -mytest :: Testable a => a -> Int -> IO () -mytest a n = mycheck defaultConfig - { configMaxTest=n - , configEvery= \n args -> if debug then show n ++ ":\n" ++ unlines args else [] } a - -mycheck :: Testable a => Config -> a -> IO () -mycheck config a = - do let rnd = mkStdGen 99 - mytests config (evaluate a) rnd 0 0 [] - -mytests :: Config -> Gen Result -> StdGen -> Int -> Int -> [[String]] -> IO () -mytests config gen rnd0 ntest nfail stamps - | ntest == configMaxTest config = do done "OK," ntest stamps - | nfail == configMaxFail config = do done "Arguments exhausted after" ntest stamps - | otherwise = - do putStr (configEvery config ntest (arguments result)) >> hFlush stdout - case ok result of - Nothing -> - mytests config gen rnd1 ntest (nfail+1) stamps - Just True -> - mytests config gen rnd1 (ntest+1) nfail (stamp result:stamps) - Just False -> - putStr ( "Falsifiable after " - ++ show ntest - ++ " tests:\n" - ++ unlines (arguments result) - ) >> hFlush stdout - where - result = generate (configSize config ntest) rnd2 gen - (rnd1,rnd2) = split rnd0 - -done :: String -> Int -> [[String]] -> IO () -done mesg ntest stamps = - do putStr ( mesg ++ " " ++ show ntest ++ " tests" ++ table ) - where - table = display - . map entry - . reverse - . sort - . map pairLength - . group - . sort - . filter (not . null) - $ stamps - - display [] = ".\n" - display [x] = " (" ++ x ++ ").\n" - display xs = ".\n" ++ unlines (map (++ ".") xs) - - pairLength xss@(xs:_) = (length xss, xs) - entry (n, xs) = percentage n ntest - ++ " " - ++ concat (intersperse ", " xs) - - percentage n m = show ((100 * n) `div` m) ++ "%" - ------------------------------------------------------------------------- - -instance Arbitrary Char where - arbitrary = choose ('a', 'i') - coarbitrary c = variant (ord c `rem` 4) - -instance (Arbitrary a, Arbitrary b) => Arbitrary (PairS a b) where - arbitrary = liftM2 (:*:) arbitrary arbitrary - coarbitrary (a :*: b) = coarbitrary a . coarbitrary b - -instance Arbitrary Word8 where - arbitrary = choose (97, 105) - coarbitrary c = variant (fromIntegral ((fromIntegral c) `rem` 4)) - -instance Arbitrary Int64 where - arbitrary = sized $ \n -> choose (-fromIntegral n,fromIntegral n) - coarbitrary n = variant (fromIntegral (if n >= 0 then 2*n else 2*(-n) + 1)) - -instance Arbitrary a => Arbitrary (MaybeS a) where - arbitrary = do a <- arbitrary ; elements [NothingS, JustS a] - coarbitrary NothingS = variant 0 - coarbitrary _ = variant 1 -- ok? - -{- -instance Arbitrary Char where - arbitrary = choose ('\0', '\255') -- since we have to test words, unlines too - coarbitrary c = variant (ord c `rem` 16) - -instance Arbitrary Word8 where - arbitrary = choose (minBound, maxBound) - coarbitrary c = variant (fromIntegral ((fromIntegral c) `rem` 16)) --} - -instance Random Word8 where - randomR = integralRandomR - random = randomR (minBound,maxBound) - -instance Random Int64 where - randomR = integralRandomR - random = randomR (minBound,maxBound) - -integralRandomR :: (Integral a, RandomGen g) => (a,a) -> g -> (a,g) -integralRandomR (a,b) g = case randomR (fromIntegral a :: Integer, - fromIntegral b :: Integer) g of - (x,g) -> (fromIntegral x, g) - -instance Arbitrary L.ByteString where - arbitrary = arbitrary >>= return . L.fromChunks . filter (not. P.null) -- maintain the invariant. - coarbitrary s = coarbitrary (L.unpack s) - -instance Arbitrary P.ByteString where - arbitrary = P.pack `fmap` arbitrary - coarbitrary s = coarbitrary (P.unpack s) - ------------------------------------------------------------------------- --- --- We're doing two forms of testing here. Firstly, model based testing. --- For our Lazy and strict bytestring types, we have model types: --- --- i.e. Lazy == Byte --- \\ // --- List --- --- That is, the Lazy type can be modeled by functions in both the Byte --- and List type. For each of the 3 models, we have a set of tests that --- check those types match. --- --- The Model class connects a type and its model type, via a conversion --- function. --- --- -class Model a b where - model :: a -> b -- get the abstract vale from a concrete value - --- --- Connecting our Lazy and Strict types to their models. We also check --- the data invariant on Lazy types. --- --- These instances represent the arrows in the above diagram --- -instance Model B P where model = abstr . checkInvariant -instance Model P [W] where model = P.unpack -instance Model P [Char] where model = PC.unpack -instance Model B [W] where model = L.unpack . checkInvariant -instance Model B [Char] where model = LC.unpack . checkInvariant - --- Types are trivially modeled by themselves -instance Model Bool Bool where model = id -instance Model Int Int where model = id -instance Model Int64 Int64 where model = id -instance Model Int64 Int where model = fromIntegral -instance Model Word8 Word8 where model = id -instance Model Ordering Ordering where model = id - --- More structured types are modeled recursively, using the NatTrans class from Gofer. -class (Functor f, Functor g) => NatTrans f g where - eta :: f a -> g a - --- The transformation of the same type is identity -instance NatTrans [] [] where eta = id -instance NatTrans Maybe Maybe where eta = id -instance NatTrans ((->) X) ((->) X) where eta = id -instance NatTrans ((->) W) ((->) W) where eta = id - --- We have a transformation of pairs, if the pairs are in Model -instance Model f g => NatTrans ((,) f) ((,) g) where eta (f,a) = (model f, a) - --- And finally, we can take any (m a) to (n b), if we can Model m n, and a b -instance (NatTrans m n, Model a b) => Model (m a) (n b) where model x = fmap model (eta x) - ------------------------------------------------------------------------- - --- In a form more useful for QC testing (and it's lazy) -checkInvariant :: L.ByteString -> L.ByteString -checkInvariant cs0 = check cs0 - where check L.Empty = L.Empty - check (L.Chunk c cs) - | P.null c = error ("invariant violation: " ++ show cs0) - | otherwise = L.Chunk c (check cs) - -abstr :: L.ByteString -> P.ByteString -abstr = P.concat . L.toChunks - - --- Some short hand. -type X = Int -type W = Word8 -type P = P.ByteString -type B = L.ByteString - ------------------------------------------------------------------------- --- --- These comparison functions handle wrapping and equality. --- --- A single class for these would be nice, but note that they differe in --- the number of arguments, and those argument types, so we'd need HList --- tricks. See here: http://okmij.org/ftp/Haskell/vararg-fn.lhs --- - -eq1 f g = \a -> - model (f a) == g (model a) -eq2 f g = \a b -> - model (f a b) == g (model a) (model b) -eq3 f g = \a b c -> - model (f a b c) == g (model a) (model b) (model c) -eq4 f g = \a b c d -> - model (f a b c d) == g (model a) (model b) (model c) (model d) -eq5 f g = \a b c d e -> - model (f a b c d e) == g (model a) (model b) (model c) (model d) (model e) - --- --- And for functions that take non-null input --- -eqnotnull1 f g = \x -> (not (isNull x)) ==> eq1 f g x -eqnotnull2 f g = \x y -> (not (isNull y)) ==> eq2 f g x y -eqnotnull3 f g = \x y z -> (not (isNull z)) ==> eq3 f g x y z - -class IsNull t where isNull :: t -> Bool -instance IsNull L.ByteString where isNull = L.null -instance IsNull P.ByteString where isNull = P.null - ------------------------------------------------------------------------- - - --- --- ByteString.Lazy <=> ByteString --- - -prop_concatBP = L.concat `eq1` P.concat -prop_nullBP = L.null `eq1` P.null -prop_reverseBP = L.reverse `eq1` P.reverse -prop_transposeBP = L.transpose `eq1` P.transpose -prop_groupBP = L.group `eq1` P.group -prop_initsBP = L.inits `eq1` P.inits -prop_tailsBP = L.tails `eq1` P.tails -prop_allBP = L.all `eq2` P.all -prop_anyBP = L.any `eq2` P.any -prop_appendBP = L.append `eq2` P.append -prop_breakBP = L.break `eq2` P.break --- prop_concatMapBP = L.concatMap `eq2` P.concatMap -prop_consBP = L.cons `eq2` P.cons -prop_countBP = L.count `eq2` P.count -prop_dropBP = L.drop `eq2` P.drop -prop_dropWhileBP = L.dropWhile `eq2` P.dropWhile -prop_filterBP = L.filter `eq2` P.filter -prop_findBP = L.find `eq2` P.find -prop_findIndexBP = L.findIndex `eq2` P.findIndex -prop_findIndicesBP = L.findIndices `eq2` P.findIndices -prop_isPrefixOfBP = L.isPrefixOf `eq2` P.isPrefixOf -prop_mapBP = L.map `eq2` P.map -prop_replicateBP = L.replicate `eq2` P.replicate -prop_snocBP = L.snoc `eq2` P.snoc -prop_spanBP = L.span `eq2` P.span -prop_splitBP = L.split `eq2` P.split -prop_splitAtBP = L.splitAt `eq2` P.splitAt -prop_takeBP = L.take `eq2` P.take -prop_takeWhileBP = L.takeWhile `eq2` P.takeWhile -prop_elemBP = L.elem `eq2` P.elem -prop_notElemBP = L.notElem `eq2` P.notElem -prop_elemIndexBP = L.elemIndex `eq2` P.elemIndex -prop_elemIndicesBP = L.elemIndices `eq2` P.elemIndices -prop_lengthBP = L.length `eq1` (fromIntegral . P.length :: P.ByteString -> Int64) -prop_readIntBP = D.readInt `eq1` C.readInt -prop_linesBP = D.lines `eq1` C.lines - -prop_headBP = L.head `eqnotnull1` P.head -prop_initBP = L.init `eqnotnull1` P.init -prop_lastBP = L.last `eqnotnull1` P.last -prop_maximumBP = L.maximum `eqnotnull1` P.maximum -prop_minimumBP = L.minimum `eqnotnull1` P.minimum -prop_tailBP = L.tail `eqnotnull1` P.tail -prop_foldl1BP = L.foldl1 `eqnotnull2` P.foldl1 -prop_foldl1BP' = L.foldl1' `eqnotnull2` P.foldl1' -prop_foldr1BP = L.foldr1 `eqnotnull2` P.foldr1 -prop_scanlBP = L.scanl `eqnotnull3` P.scanl - -prop_eqBP = eq2 - ((==) :: B -> B -> Bool) - ((==) :: P -> P -> Bool) -prop_compareBP = eq2 - ((compare) :: B -> B -> Ordering) - ((compare) :: P -> P -> Ordering) -prop_foldlBP = eq3 - (L.foldl :: (X -> W -> X) -> X -> B -> X) - (P.foldl :: (X -> W -> X) -> X -> P -> X) -prop_foldlBP' = eq3 - (L.foldl' :: (X -> W -> X) -> X -> B -> X) - (P.foldl' :: (X -> W -> X) -> X -> P -> X) -prop_foldrBP = eq3 - (L.foldr :: (W -> X -> X) -> X -> B -> X) - (P.foldr :: (W -> X -> X) -> X -> P -> X) -prop_mapAccumLBP = eq3 - (L.mapAccumL :: (X -> W -> (X,W)) -> X -> B -> (X, B)) - (P.mapAccumL :: (X -> W -> (X,W)) -> X -> P -> (X, P)) - -prop_unfoldrBP = eq3 - ((\n f a -> L.take (fromIntegral n) $ - L.unfoldr f a) :: Int -> (X -> Maybe (W,X)) -> X -> B) - ((\n f a -> fst $ - P.unfoldrN n f a) :: Int -> (X -> Maybe (W,X)) -> X -> P) - --- --- properties comparing ByteString.Lazy `eq1` List --- - -prop_concatBL = L.concat `eq1` (concat :: [[W]] -> [W]) -prop_lengthBL = L.length `eq1` (length :: [W] -> Int) -prop_nullBL = L.null `eq1` (null :: [W] -> Bool) -prop_reverseBL = L.reverse `eq1` (reverse :: [W] -> [W]) -prop_transposeBL = L.transpose `eq1` (transpose :: [[W]] -> [[W]]) -prop_groupBL = L.group `eq1` (group :: [W] -> [[W]]) -prop_initsBL = L.inits `eq1` (inits :: [W] -> [[W]]) -prop_tailsBL = L.tails `eq1` (tails :: [W] -> [[W]]) -prop_allBL = L.all `eq2` (all :: (W -> Bool) -> [W] -> Bool) -prop_anyBL = L.any `eq2` (any :: (W -> Bool) -> [W] -> Bool) -prop_appendBL = L.append `eq2` ((++) :: [W] -> [W] -> [W]) -prop_breakBL = L.break `eq2` (break :: (W -> Bool) -> [W] -> ([W],[W])) --- prop_concatMapBL = L.concatMap `eq2` (concatMap :: (W -> [W]) -> [W] -> [W]) -prop_consBL = L.cons `eq2` ((:) :: W -> [W] -> [W]) -prop_dropBL = L.drop `eq2` (drop :: Int -> [W] -> [W]) -prop_dropWhileBL = L.dropWhile `eq2` (dropWhile :: (W -> Bool) -> [W] -> [W]) -prop_filterBL = L.filter `eq2` (filter :: (W -> Bool ) -> [W] -> [W]) -prop_findBL = L.find `eq2` (find :: (W -> Bool) -> [W] -> Maybe W) -prop_findIndicesBL = L.findIndices `eq2` (findIndices:: (W -> Bool) -> [W] -> [Int]) -prop_findIndexBL = L.findIndex `eq2` (findIndex :: (W -> Bool) -> [W] -> Maybe Int) -prop_isPrefixOfBL = L.isPrefixOf `eq2` (isPrefixOf:: [W] -> [W] -> Bool) -prop_mapBL = L.map `eq2` (map :: (W -> W) -> [W] -> [W]) -prop_replicateBL = L.replicate `eq2` (replicate :: Int -> W -> [W]) -prop_snocBL = L.snoc `eq2` ((\xs x -> xs ++ [x]) :: [W] -> W -> [W]) -prop_spanBL = L.span `eq2` (span :: (W -> Bool) -> [W] -> ([W],[W])) -prop_splitAtBL = L.splitAt `eq2` (splitAt :: Int -> [W] -> ([W],[W])) -prop_takeBL = L.take `eq2` (take :: Int -> [W] -> [W]) -prop_takeWhileBL = L.takeWhile `eq2` (takeWhile :: (W -> Bool) -> [W] -> [W]) -prop_elemBL = L.elem `eq2` (elem :: W -> [W] -> Bool) -prop_notElemBL = L.notElem `eq2` (notElem :: W -> [W] -> Bool) -prop_elemIndexBL = L.elemIndex `eq2` (elemIndex :: W -> [W] -> Maybe Int) -prop_elemIndicesBL = L.elemIndices `eq2` (elemIndices:: W -> [W] -> [Int]) -prop_linesBL = D.lines `eq1` (lines :: String -> [String]) - -prop_foldl1BL = L.foldl1 `eqnotnull2` (foldl1 :: (W -> W -> W) -> [W] -> W) -prop_foldl1BL' = L.foldl1' `eqnotnull2` (foldl1' :: (W -> W -> W) -> [W] -> W) -prop_foldr1BL = L.foldr1 `eqnotnull2` (foldr1 :: (W -> W -> W) -> [W] -> W) -prop_headBL = L.head `eqnotnull1` (head :: [W] -> W) -prop_initBL = L.init `eqnotnull1` (init :: [W] -> [W]) -prop_lastBL = L.last `eqnotnull1` (last :: [W] -> W) -prop_maximumBL = L.maximum `eqnotnull1` (maximum :: [W] -> W) -prop_minimumBL = L.minimum `eqnotnull1` (minimum :: [W] -> W) -prop_tailBL = L.tail `eqnotnull1` (tail :: [W] -> [W]) - -prop_eqBL = eq2 - ((==) :: B -> B -> Bool) - ((==) :: [W] -> [W] -> Bool) -prop_compareBL = eq2 - ((compare) :: B -> B -> Ordering) - ((compare) :: [W] -> [W] -> Ordering) -prop_foldlBL = eq3 - (L.foldl :: (X -> W -> X) -> X -> B -> X) - ( foldl :: (X -> W -> X) -> X -> [W] -> X) -prop_foldlBL' = eq3 - (L.foldl' :: (X -> W -> X) -> X -> B -> X) - ( foldl' :: (X -> W -> X) -> X -> [W] -> X) -prop_foldrBL = eq3 - (L.foldr :: (W -> X -> X) -> X -> B -> X) - ( foldr :: (W -> X -> X) -> X -> [W] -> X) -prop_mapAccumLBL = eq3 - (L.mapAccumL :: (X -> W -> (X,W)) -> X -> B -> (X, B)) - ( mapAccumL :: (X -> W -> (X,W)) -> X -> [W] -> (X, [W])) -prop_unfoldrBL = eq3 - ((\n f a -> L.take (fromIntegral n) $ - L.unfoldr f a) :: Int -> (X -> Maybe (W,X)) -> X -> B) - ((\n f a -> take n $ - unfoldr f a) :: Int -> (X -> Maybe (W,X)) -> X -> [W]) - --- --- And finally, check correspondance between Data.ByteString and List --- - -prop_lengthPL = (fromIntegral.P.length :: P -> Int) `eq1` (length :: [W] -> Int) -prop_nullPL = P.null `eq1` (null :: [W] -> Bool) -prop_reversePL = P.reverse `eq1` (reverse :: [W] -> [W]) -prop_transposePL = P.transpose `eq1` (transpose :: [[W]] -> [[W]]) -prop_groupPL = P.group `eq1` (group :: [W] -> [[W]]) -prop_initsPL = P.inits `eq1` (inits :: [W] -> [[W]]) -prop_tailsPL = P.tails `eq1` (tails :: [W] -> [[W]]) -prop_concatPL = P.concat `eq1` (concat :: [[W]] -> [W]) -prop_allPL = P.all `eq2` (all :: (W -> Bool) -> [W] -> Bool) -prop_anyPL = P.any `eq2` (any :: (W -> Bool) -> [W] -> Bool) -prop_appendPL = P.append `eq2` ((++) :: [W] -> [W] -> [W]) -prop_breakPL = P.break `eq2` (break :: (W -> Bool) -> [W] -> ([W],[W])) --- prop_concatMapPL = P.concatMap `eq2` (concatMap :: (W -> [W]) -> [W] -> [W]) -prop_consPL = P.cons `eq2` ((:) :: W -> [W] -> [W]) -prop_dropPL = P.drop `eq2` (drop :: Int -> [W] -> [W]) -prop_dropWhilePL = P.dropWhile `eq2` (dropWhile :: (W -> Bool) -> [W] -> [W]) -prop_filterPL = P.filter `eq2` (filter :: (W -> Bool ) -> [W] -> [W]) -prop_findPL = P.find `eq2` (find :: (W -> Bool) -> [W] -> Maybe W) -prop_findIndexPL = P.findIndex `eq2` (findIndex :: (W -> Bool) -> [W] -> Maybe Int) -prop_isPrefixOfPL = P.isPrefixOf`eq2` (isPrefixOf:: [W] -> [W] -> Bool) -prop_mapPL = P.map `eq2` (map :: (W -> W) -> [W] -> [W]) -prop_replicatePL = P.replicate `eq2` (replicate :: Int -> W -> [W]) -prop_snocPL = P.snoc `eq2` ((\xs x -> xs ++ [x]) :: [W] -> W -> [W]) -prop_spanPL = P.span `eq2` (span :: (W -> Bool) -> [W] -> ([W],[W])) -prop_splitAtPL = P.splitAt `eq2` (splitAt :: Int -> [W] -> ([W],[W])) -prop_takePL = P.take `eq2` (take :: Int -> [W] -> [W]) -prop_takeWhilePL = P.takeWhile `eq2` (takeWhile :: (W -> Bool) -> [W] -> [W]) -prop_elemPL = P.elem `eq2` (elem :: W -> [W] -> Bool) -prop_notElemPL = P.notElem `eq2` (notElem :: W -> [W] -> Bool) -prop_elemIndexPL = P.elemIndex `eq2` (elemIndex :: W -> [W] -> Maybe Int) -prop_linesPL = C.lines `eq1` (lines :: String -> [String]) -prop_findIndicesPL= P.findIndices`eq2` (findIndices:: (W -> Bool) -> [W] -> [Int]) -prop_elemIndicesPL= P.elemIndices`eq2` (elemIndices:: W -> [W] -> [Int]) - -prop_foldl1PL = P.foldl1 `eqnotnull2` (foldl1 :: (W -> W -> W) -> [W] -> W) -prop_foldl1PL' = P.foldl1' `eqnotnull2` (foldl1' :: (W -> W -> W) -> [W] -> W) -prop_foldr1PL = P.foldr1 `eqnotnull2` (foldr1 :: (W -> W -> W) -> [W] -> W) -prop_scanlPL = P.scanl `eqnotnull3` (scanl :: (W -> W -> W) -> W -> [W] -> [W]) -prop_scanl1PL = P.scanl1 `eqnotnull2` (scanl1 :: (W -> W -> W) -> [W] -> [W]) -prop_scanrPL = P.scanr `eqnotnull3` (scanr :: (W -> W -> W) -> W -> [W] -> [W]) -prop_scanr1PL = P.scanr1 `eqnotnull2` (scanr1 :: (W -> W -> W) -> [W] -> [W]) -prop_headPL = P.head `eqnotnull1` (head :: [W] -> W) -prop_initPL = P.init `eqnotnull1` (init :: [W] -> [W]) -prop_lastPL = P.last `eqnotnull1` (last :: [W] -> W) -prop_maximumPL = P.maximum `eqnotnull1` (maximum :: [W] -> W) -prop_minimumPL = P.minimum `eqnotnull1` (minimum :: [W] -> W) -prop_tailPL = P.tail `eqnotnull1` (tail :: [W] -> [W]) - -prop_eqPL = eq2 - ((==) :: P -> P -> Bool) - ((==) :: [W] -> [W] -> Bool) -prop_comparePL = eq2 - ((compare) :: P -> P -> Ordering) - ((compare) :: [W] -> [W] -> Ordering) -prop_foldlPL = eq3 - (P.foldl :: (X -> W -> X) -> X -> P -> X) - ( foldl :: (X -> W -> X) -> X -> [W] -> X) -prop_foldlPL' = eq3 - (P.foldl' :: (X -> W -> X) -> X -> P -> X) - ( foldl' :: (X -> W -> X) -> X -> [W] -> X) -prop_foldrPL = eq3 - (P.foldr :: (W -> X -> X) -> X -> P -> X) - ( foldr :: (W -> X -> X) -> X -> [W] -> X) -prop_mapAccumLPL= eq3 - (P.mapAccumL :: (X -> W -> (X,W)) -> X -> P -> (X, P)) - ( mapAccumL :: (X -> W -> (X,W)) -> X -> [W] -> (X, [W])) -prop_mapAccumRPL= eq3 - (P.mapAccumR :: (X -> W -> (X,W)) -> X -> P -> (X, P)) - ( mapAccumR :: (X -> W -> (X,W)) -> X -> [W] -> (X, [W])) -prop_unfoldrPL = eq3 - ((\n f a -> fst $ - P.unfoldrN n f a) :: Int -> (X -> Maybe (W,X)) -> X -> P) - ((\n f a -> take n $ - unfoldr f a) :: Int -> (X -> Maybe (W,X)) -> X -> [W]) - ------------------------------------------------------------------------- --- --- And check fusion RULES. --- - -prop_lazylooploop em1 em2 start1 start2 arr = - loopL em2 start2 (loopArr (loopL em1 start1 arr)) == - loopSndAcc (loopL (em1 `fuseEFL` em2) (start1 :*: start2) arr) - where - _ = start1 :: Int - _ = start2 :: Int - -prop_looploop em1 em2 start1 start2 arr = - loopU em2 start2 (loopArr (loopU em1 start1 arr)) == - loopSndAcc (loopU (em1 `fuseEFL` em2) (start1 :*: start2) arr) - where - _ = start1 :: Int - _ = start2 :: Int - ------------------------------------------------------------------------- - --- check associativity of sequence loops -prop_sequenceloops_assoc n m o x y z a1 a2 a3 xs = - - k ((f * g) * h) == k (f * (g * h)) -- associativity - - where - (*) = sequenceLoops - f = (sel n) x a1 - g = (sel m) y a2 - h = (sel o) z a3 - - _ = a1 :: Int; _ = a2 :: Int; _ = a3 :: Int - k g = loopArr (loopWrapper g xs) - --- check wrapper elimination -prop_loop_loop_wrapper_elimination n m x y a1 a2 xs = - loopWrapper g (loopArr (loopWrapper f xs)) == - loopSndAcc (loopWrapper (sequenceLoops f g) xs) - where - f = (sel n) x a1 - g = (sel m) y a2 - _ = a1 :: Int; _ = a2 :: Int - -sel :: Bool - -> (acc -> Word8 -> PairS acc (MaybeS Word8)) - -> acc - -> Ptr Word8 - -> Ptr Word8 - -> Int - -> IO (PairS (PairS acc Int) Int) -sel False = doDownLoop -sel True = doUpLoop - ------------------------------------------------------------------------- --- --- Test fusion forms --- - -prop_up_up_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doUpLoop f1 acc1) (doUpLoop f2 acc2)) == - k (doUpLoop (f1 `fuseAccAccEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int; k g = loopWrapper g xs - -prop_down_down_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doDownLoop f1 acc1) (doDownLoop f2 acc2)) == - k (doDownLoop (f1 `fuseAccAccEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int ; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_noAcc_noAcc_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doNoAccLoop f1 acc1) (doNoAccLoop f2 acc2)) == - k (doNoAccLoop (f1 `fuseNoAccNoAccEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int ; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_noAcc_up_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doNoAccLoop f1 acc1) (doUpLoop f2 acc2)) == - k (doUpLoop (f1 `fuseNoAccAccEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int; k g = loopWrapper g xs - -prop_up_noAcc_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doUpLoop f1 acc1) (doNoAccLoop f2 acc2)) == - k (doUpLoop (f1 `fuseAccNoAccEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int; k g = loopWrapper g xs - -prop_noAcc_down_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doNoAccLoop f1 acc1) (doDownLoop f2 acc2)) == - k (doDownLoop (f1 `fuseNoAccAccEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_down_noAcc_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doDownLoop f1 acc1) (doNoAccLoop f2 acc2)) == - k (doDownLoop (f1 `fuseAccNoAccEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int; k g = loopWrapper g xs - -prop_map_map_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doMapLoop f1 acc1) (doMapLoop f2 acc2)) == - k (doMapLoop (f1 `fuseMapMapEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_filter_filter_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doFilterLoop f1 acc1) (doFilterLoop f2 acc2)) == - k (doFilterLoop (f1 `fuseFilterFilterEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_map_filter_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doMapLoop f1 acc1) (doFilterLoop f2 acc2)) == - k (doNoAccLoop (f1 `fuseMapFilterEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_filter_map_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doFilterLoop f1 acc1) (doMapLoop f2 acc2)) == - k (doNoAccLoop (f1 `fuseFilterMapEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_map_noAcc_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doMapLoop f1 acc1) (doNoAccLoop f2 acc2)) == - k (doNoAccLoop (f1 `fuseMapNoAccEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_noAcc_map_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doNoAccLoop f1 acc1) (doMapLoop f2 acc2)) == - k (doNoAccLoop (f1 `fuseNoAccMapEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_map_up_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doMapLoop f1 acc1) (doUpLoop f2 acc2)) == - k (doUpLoop (f1 `fuseMapAccEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_up_map_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doUpLoop f1 acc1) (doMapLoop f2 acc2)) == - k (doUpLoop (f1 `fuseAccMapEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_map_down_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doMapLoop f1 acc1) (doDownLoop f2 acc2)) == - k (doDownLoop (f1 `fuseMapAccEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_down_map_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doDownLoop f1 acc1) (doMapLoop f2 acc2)) == - k (doDownLoop (f1 `fuseAccMapEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_filter_noAcc_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doFilterLoop f1 acc1) (doNoAccLoop f2 acc2)) == - k (doNoAccLoop (f1 `fuseFilterNoAccEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_noAcc_filter_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doNoAccLoop f1 acc1) (doFilterLoop f2 acc2)) == - k (doNoAccLoop (f1 `fuseNoAccFilterEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_filter_up_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doFilterLoop f1 acc1) (doUpLoop f2 acc2)) == - k (doUpLoop (f1 `fuseFilterAccEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_up_filter_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doUpLoop f1 acc1) (doFilterLoop f2 acc2)) == - k (doUpLoop (f1 `fuseAccFilterEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_filter_down_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doFilterLoop f1 acc1) (doDownLoop f2 acc2)) == - k (doDownLoop (f1 `fuseFilterAccEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int ; k g = loopWrapper g xs - -prop_down_filter_loop_fusion f1 f2 acc1 acc2 xs = - k (sequenceLoops (doDownLoop f1 acc1) (doFilterLoop f2 acc2)) == - k (doDownLoop (f1 `fuseAccFilterEFL` f2) (acc1 :*: acc2)) - where _ = acc1 :: Int; _ = acc2 :: Int ; k g = loopWrapper g xs - ------------------------------------------------------------------------- - -prop_length_loop_fusion_1 f1 acc1 xs = - P.length (loopArr (loopWrapper (doUpLoop f1 acc1) xs)) == - P.foldl' (const . (+1)) 0 (loopArr (loopWrapper (doUpLoop f1 acc1) xs)) - where _ = acc1 :: Int - -prop_length_loop_fusion_2 f1 acc1 xs = - P.length (loopArr (loopWrapper (doDownLoop f1 acc1) xs)) == - P.foldl' (const . (+1)) 0 (loopArr (loopWrapper (doDownLoop f1 acc1) xs)) - where _ = acc1 :: Int - -prop_length_loop_fusion_3 f1 acc1 xs = - P.length (loopArr (loopWrapper (doMapLoop f1 acc1) xs)) == - P.foldl' (const . (+1)) 0 (loopArr (loopWrapper (doMapLoop f1 acc1) xs)) - where _ = acc1 :: Int - -prop_length_loop_fusion_4 f1 acc1 xs = - P.length (loopArr (loopWrapper (doFilterLoop f1 acc1) xs)) == - P.foldl' (const . (+1)) 0 (loopArr (loopWrapper (doFilterLoop f1 acc1) xs)) - where _ = acc1 :: Int - ------------------------------------------------------------------------- --- The entry point - -main :: IO () -main = myrun tests - -myrun :: [(String, Int -> IO ())] -> IO () -myrun tests = do - x <- getArgs - let n = if null x then 100 else read . head $ x - mapM_ (\(s,a) -> printf "%-25s: " s >> a n) tests - --- --- And now a list of all the properties to test. --- - -tests = misc_tests - ++ bl_tests - ++ bp_tests - ++ pl_tests - ++ fusion_tests - -misc_tests = - [("invariant", mytest prop_invariant)] - ------------------------------------------------------------------------- --- ByteString.Lazy <=> List - -bl_tests = - [("all", mytest prop_allBL) - ,("any", mytest prop_anyBL) - ,("append", mytest prop_appendBL) - ,("compare", mytest prop_compareBL) - ,("concat", mytest prop_concatBL) - ,("cons", mytest prop_consBL) - ,("eq", mytest prop_eqBL) - ,("filter", mytest prop_filterBL) - ,("find", mytest prop_findBL) - ,("findIndex", mytest prop_findIndexBL) - ,("findIndices", mytest prop_findIndicesBL) - ,("foldl", mytest prop_foldlBL) - ,("foldl'", mytest prop_foldlBL') - ,("foldl1", mytest prop_foldl1BL) - ,("foldl1'", mytest prop_foldl1BL') - ,("foldr", mytest prop_foldrBL) - ,("foldr1", mytest prop_foldr1BL) - ,("mapAccumL", mytest prop_mapAccumLBL) - ,("unfoldr", mytest prop_unfoldrBL) - ,("head", mytest prop_headBL) - ,("init", mytest prop_initBL) - ,("isPrefixOf", mytest prop_isPrefixOfBL) - ,("last", mytest prop_lastBL) - ,("length", mytest prop_lengthBL) - ,("map", mytest prop_mapBL) - ,("maximum", mytest prop_maximumBL) - ,("minimum", mytest prop_minimumBL) - ,("null", mytest prop_nullBL) - ,("reverse", mytest prop_reverseBL) - ,("snoc", mytest prop_snocBL) - ,("tail", mytest prop_tailBL) - ,("transpose", mytest prop_transposeBL) - ,("replicate", mytest prop_replicateBL) - ,("take", mytest prop_takeBL) - ,("drop", mytest prop_dropBL) - ,("splitAt", mytest prop_splitAtBL) - ,("takeWhile", mytest prop_takeWhileBL) - ,("dropWhile", mytest prop_dropWhileBL) - ,("break", mytest prop_breakBL) - ,("span", mytest prop_spanBL) - ,("group", mytest prop_groupBL) - ,("inits", mytest prop_initsBL) - ,("tails", mytest prop_tailsBL) - ,("elem", mytest prop_elemBL) - ,("notElem", mytest prop_notElemBL) - ,("lines", mytest prop_linesBL) - ,("elemIndex", mytest prop_elemIndexBL) - ,("elemIndices", mytest prop_elemIndicesBL) --- ,("concatMap", mytest prop_concatMapBL) - ] - ------------------------------------------------------------------------- --- ByteString.Lazy <=> ByteString - -bp_tests = - [("all", mytest prop_allBP) - ,("any", mytest prop_anyBP) - ,("append", mytest prop_appendBP) - ,("compare", mytest prop_compareBP) - ,("concat", mytest prop_concatBP) - ,("cons", mytest prop_consBP) - ,("eq", mytest prop_eqBP) - ,("filter", mytest prop_filterBP) - ,("find", mytest prop_findBP) - ,("findIndex", mytest prop_findIndexBP) - ,("findIndices", mytest prop_findIndicesBP) - ,("foldl", mytest prop_foldlBP) - ,("foldl'", mytest prop_foldlBP') - ,("foldl1", mytest prop_foldl1BP) - ,("foldl1'", mytest prop_foldl1BP') - ,("foldr", mytest prop_foldrBP) - ,("foldr1", mytest prop_foldr1BP) - ,("mapAccumL", mytest prop_mapAccumLBP) - ,("unfoldr", mytest prop_unfoldrBP) - ,("head", mytest prop_headBP) - ,("init", mytest prop_initBP) - ,("isPrefixOf", mytest prop_isPrefixOfBP) - ,("last", mytest prop_lastBP) - ,("length", mytest prop_lengthBP) - ,("readInt", mytest prop_readIntBP) - ,("lines", mytest prop_linesBP) - ,("map", mytest prop_mapBP) - ,("maximum ", mytest prop_maximumBP) - ,("minimum" , mytest prop_minimumBP) - ,("null", mytest prop_nullBP) - ,("reverse", mytest prop_reverseBP) - ,("snoc", mytest prop_snocBP) - ,("tail", mytest prop_tailBP) - ,("scanl", mytest prop_scanlBP) - ,("transpose", mytest prop_transposeBP) - ,("replicate", mytest prop_replicateBP) - ,("take", mytest prop_takeBP) - ,("drop", mytest prop_dropBP) - ,("splitAt", mytest prop_splitAtBP) - ,("takeWhile", mytest prop_takeWhileBP) - ,("dropWhile", mytest prop_dropWhileBP) - ,("break", mytest prop_breakBP) - ,("span", mytest prop_spanBP) - ,("split", mytest prop_splitBP) - ,("count", mytest prop_countBP) - ,("group", mytest prop_groupBP) - ,("inits", mytest prop_initsBP) - ,("tails", mytest prop_tailsBP) - ,("elem", mytest prop_elemBP) - ,("notElem", mytest prop_notElemBP) - ,("elemIndex", mytest prop_elemIndexBP) - ,("elemIndices", mytest prop_elemIndicesBP) --- ,("concatMap", mytest prop_concatMapBP) - ] - ------------------------------------------------------------------------- --- ByteString <=> List - -pl_tests = - [("all", mytest prop_allPL) - ,("any", mytest prop_anyPL) - ,("append", mytest prop_appendPL) - ,("compare", mytest prop_comparePL) - ,("concat", mytest prop_concatPL) - ,("cons", mytest prop_consPL) - ,("eq", mytest prop_eqPL) - ,("filter", mytest prop_filterPL) - ,("find", mytest prop_findPL) - ,("findIndex", mytest prop_findIndexPL) - ,("findIndices", mytest prop_findIndicesPL) - ,("foldl", mytest prop_foldlPL) - ,("foldl'", mytest prop_foldlPL') - ,("foldl1", mytest prop_foldl1PL) - ,("foldl1'", mytest prop_foldl1PL') - ,("foldr1", mytest prop_foldr1PL) - ,("foldr", mytest prop_foldrPL) - ,("mapAccumL", mytest prop_mapAccumLPL) - ,("mapAccumR", mytest prop_mapAccumRPL) - ,("unfoldr", mytest prop_unfoldrPL) - ,("scanl", mytest prop_scanlPL) - ,("scanl1", mytest prop_scanl1PL) - ,("scanr", mytest prop_scanrPL) - ,("scanr1", mytest prop_scanr1PL) - ,("head", mytest prop_headPL) - ,("init", mytest prop_initPL) - ,("last", mytest prop_lastPL) - ,("maximum", mytest prop_maximumPL) - ,("minimum", mytest prop_minimumPL) - ,("tail", mytest prop_tailPL) - ,("isPrefixOf", mytest prop_isPrefixOfPL) - ,("length", mytest prop_lengthPL) - ,("map", mytest prop_mapPL) - ,("null", mytest prop_nullPL) - ,("reverse", mytest prop_reversePL) - ,("snoc", mytest prop_snocPL) - ,("transpose", mytest prop_transposePL) - ,("replicate", mytest prop_replicatePL) - ,("take", mytest prop_takePL) - ,("drop", mytest prop_dropPL) - ,("splitAt", mytest prop_splitAtPL) - ,("takeWhile", mytest prop_takeWhilePL) - ,("dropWhile", mytest prop_dropWhilePL) - ,("break", mytest prop_breakPL) - ,("span", mytest prop_spanPL) - ,("group", mytest prop_groupPL) - ,("inits", mytest prop_initsPL) - ,("tails", mytest prop_tailsPL) - ,("elem", mytest prop_elemPL) - ,("notElem", mytest prop_notElemPL) - ,("lines", mytest prop_linesBL) - ,("elemIndex", mytest prop_elemIndexPL) - ,("elemIndices", mytest prop_elemIndicesPL) --- ,("concatMap", mytest prop_concatMapPL) - ] - ------------------------------------------------------------------------- --- Fusion rules - -fusion_tests = --- v1 fusion - [ ("lazy loop/loop fusion", mytest prop_lazylooploop) - , ("loop/loop fusion", mytest prop_looploop) - --- v2 fusion - ,("loop/loop wrapper elim", mytest prop_loop_loop_wrapper_elimination) - ,("sequence association", mytest prop_sequenceloops_assoc) - - ,("up/up loop fusion", mytest prop_up_up_loop_fusion) - ,("down/down loop fusion", mytest prop_down_down_loop_fusion) - ,("noAcc/noAcc loop fusion", mytest prop_noAcc_noAcc_loop_fusion) - ,("noAcc/up loop fusion", mytest prop_noAcc_up_loop_fusion) - ,("up/noAcc loop fusion", mytest prop_up_noAcc_loop_fusion) - ,("noAcc/down loop fusion", mytest prop_noAcc_down_loop_fusion) - ,("down/noAcc loop fusion", mytest prop_down_noAcc_loop_fusion) - ,("map/map loop fusion", mytest prop_map_map_loop_fusion) - ,("filter/filter loop fusion", mytest prop_filter_filter_loop_fusion) - ,("map/filter loop fusion", mytest prop_map_filter_loop_fusion) - ,("filter/map loop fusion", mytest prop_filter_map_loop_fusion) - ,("map/noAcc loop fusion", mytest prop_map_noAcc_loop_fusion) - ,("noAcc/map loop fusion", mytest prop_noAcc_map_loop_fusion) - ,("map/up loop fusion", mytest prop_map_up_loop_fusion) - ,("up/map loop fusion", mytest prop_up_map_loop_fusion) - ,("map/down loop fusion", mytest prop_map_down_fusion) - ,("down/map loop fusion", mytest prop_down_map_loop_fusion) - ,("filter/noAcc loop fusion", mytest prop_filter_noAcc_loop_fusion) - ,("noAcc/filter loop fusion", mytest prop_noAcc_filter_loop_fusion) - ,("filter/up loop fusion", mytest prop_filter_up_loop_fusion) - ,("up/filter loop fusion", mytest prop_up_filter_loop_fusion) - ,("filter/down loop fusion", mytest prop_filter_down_fusion) - ,("down/filter loop fusion", mytest prop_down_filter_loop_fusion) - - ,("length/loop fusion", mytest prop_length_loop_fusion_1) - ,("length/loop fusion", mytest prop_length_loop_fusion_2) - ,("length/loop fusion", mytest prop_length_loop_fusion_3) - ,("length/loop fusion", mytest prop_length_loop_fusion_4) - ] - - ------------------------------------------------------------------------- --- --- These are miscellaneous tests left over. Or else they test some --- property internal to a type (i.e. head . sort == minimum), without --- reference to a model type. --- - -invariant :: L.ByteString -> Bool -invariant L.Empty = True -invariant (L.Chunk c cs) = not (P.null c) && invariant cs - -prop_invariant = invariant - diff --git a/testsuite/tests/lib/Data.ByteString/bytestring001.stdout b/testsuite/tests/lib/Data.ByteString/bytestring001.stdout deleted file mode 100644 index e2b220dc41..0000000000 --- a/testsuite/tests/lib/Data.ByteString/bytestring001.stdout +++ /dev/null @@ -1,185 +0,0 @@ -invariant : OK, 100 tests. -all : OK, 100 tests. -any : OK, 100 tests. -append : OK, 100 tests. -compare : OK, 100 tests. -concat : OK, 100 tests. -cons : OK, 100 tests. -eq : OK, 100 tests. -filter : OK, 100 tests. -find : OK, 100 tests. -findIndex : OK, 100 tests. -findIndices : OK, 100 tests. -foldl : OK, 100 tests. -foldl' : OK, 100 tests. -foldl1 : OK, 100 tests. -foldl1' : OK, 100 tests. -foldr : OK, 100 tests. -foldr1 : OK, 100 tests. -mapAccumL : OK, 100 tests. -unfoldr : OK, 100 tests. -head : OK, 100 tests. -init : OK, 100 tests. -isPrefixOf : OK, 100 tests. -last : OK, 100 tests. -length : OK, 100 tests. -map : OK, 100 tests. -maximum : OK, 100 tests. -minimum : OK, 100 tests. -null : OK, 100 tests. -reverse : OK, 100 tests. -snoc : OK, 100 tests. -tail : OK, 100 tests. -transpose : OK, 100 tests. -replicate : OK, 100 tests. -take : OK, 100 tests. -drop : OK, 100 tests. -splitAt : OK, 100 tests. -takeWhile : OK, 100 tests. -dropWhile : OK, 100 tests. -break : OK, 100 tests. -span : OK, 100 tests. -group : OK, 100 tests. -inits : OK, 100 tests. -tails : OK, 100 tests. -elem : OK, 100 tests. -notElem : OK, 100 tests. -lines : OK, 100 tests. -elemIndex : OK, 100 tests. -elemIndices : OK, 100 tests. -all : OK, 100 tests. -any : OK, 100 tests. -append : OK, 100 tests. -compare : OK, 100 tests. -concat : OK, 100 tests. -cons : OK, 100 tests. -eq : OK, 100 tests. -filter : OK, 100 tests. -find : OK, 100 tests. -findIndex : OK, 100 tests. -findIndices : OK, 100 tests. -foldl : OK, 100 tests. -foldl' : OK, 100 tests. -foldl1 : OK, 100 tests. -foldl1' : OK, 100 tests. -foldr : OK, 100 tests. -foldr1 : OK, 100 tests. -mapAccumL : OK, 100 tests. -unfoldr : OK, 100 tests. -head : OK, 100 tests. -init : OK, 100 tests. -isPrefixOf : OK, 100 tests. -last : OK, 100 tests. -length : OK, 100 tests. -readInt : OK, 100 tests. -lines : OK, 100 tests. -map : OK, 100 tests. -maximum : OK, 100 tests. -minimum : OK, 100 tests. -null : OK, 100 tests. -reverse : OK, 100 tests. -snoc : OK, 100 tests. -tail : OK, 100 tests. -scanl : OK, 100 tests. -transpose : OK, 100 tests. -replicate : OK, 100 tests. -take : OK, 100 tests. -drop : OK, 100 tests. -splitAt : OK, 100 tests. -takeWhile : OK, 100 tests. -dropWhile : OK, 100 tests. -break : OK, 100 tests. -span : OK, 100 tests. -split : OK, 100 tests. -count : OK, 100 tests. -group : OK, 100 tests. -inits : OK, 100 tests. -tails : OK, 100 tests. -elem : OK, 100 tests. -notElem : OK, 100 tests. -elemIndex : OK, 100 tests. -elemIndices : OK, 100 tests. -all : OK, 100 tests. -any : OK, 100 tests. -append : OK, 100 tests. -compare : OK, 100 tests. -concat : OK, 100 tests. -cons : OK, 100 tests. -eq : OK, 100 tests. -filter : OK, 100 tests. -find : OK, 100 tests. -findIndex : OK, 100 tests. -findIndices : OK, 100 tests. -foldl : OK, 100 tests. -foldl' : OK, 100 tests. -foldl1 : OK, 100 tests. -foldl1' : OK, 100 tests. -foldr1 : OK, 100 tests. -foldr : OK, 100 tests. -mapAccumL : OK, 100 tests. -mapAccumR : OK, 100 tests. -unfoldr : OK, 100 tests. -scanl : OK, 100 tests. -scanl1 : OK, 100 tests. -scanr : OK, 100 tests. -scanr1 : OK, 100 tests. -head : OK, 100 tests. -init : OK, 100 tests. -last : OK, 100 tests. -maximum : OK, 100 tests. -minimum : OK, 100 tests. -tail : OK, 100 tests. -isPrefixOf : OK, 100 tests. -length : OK, 100 tests. -map : OK, 100 tests. -null : OK, 100 tests. -reverse : OK, 100 tests. -snoc : OK, 100 tests. -transpose : OK, 100 tests. -replicate : OK, 100 tests. -take : OK, 100 tests. -drop : OK, 100 tests. -splitAt : OK, 100 tests. -takeWhile : OK, 100 tests. -dropWhile : OK, 100 tests. -break : OK, 100 tests. -span : OK, 100 tests. -group : OK, 100 tests. -inits : OK, 100 tests. -tails : OK, 100 tests. -elem : OK, 100 tests. -notElem : OK, 100 tests. -lines : OK, 100 tests. -elemIndex : OK, 100 tests. -elemIndices : OK, 100 tests. -lazy loop/loop fusion : OK, 100 tests. -loop/loop fusion : OK, 100 tests. -loop/loop wrapper elim : OK, 100 tests. -sequence association : OK, 100 tests. -up/up loop fusion: OK, 100 tests. -down/down loop fusion: OK, 100 tests. -noAcc/noAcc loop fusion: OK, 100 tests. -noAcc/up loop fusion: OK, 100 tests. -up/noAcc loop fusion: OK, 100 tests. -noAcc/down loop fusion: OK, 100 tests. -down/noAcc loop fusion: OK, 100 tests. -map/map loop fusion: OK, 100 tests. -filter/filter loop fusion: OK, 100 tests. -map/filter loop fusion: OK, 100 tests. -filter/map loop fusion: OK, 100 tests. -map/noAcc loop fusion: OK, 100 tests. -noAcc/map loop fusion: OK, 100 tests. -map/up loop fusion: OK, 100 tests. -up/map loop fusion: OK, 100 tests. -map/down loop fusion: OK, 100 tests. -down/map loop fusion: OK, 100 tests. -filter/noAcc loop fusion: OK, 100 tests. -noAcc/filter loop fusion: OK, 100 tests. -filter/up loop fusion: OK, 100 tests. -up/filter loop fusion: OK, 100 tests. -filter/down loop fusion: OK, 100 tests. -down/filter loop fusion: OK, 100 tests. -length/loop fusion : OK, 100 tests. -length/loop fusion : OK, 100 tests. -length/loop fusion : OK, 100 tests. -length/loop fusion : OK, 100 tests. diff --git a/testsuite/tests/lib/Data.ByteString/bytestring002.hs b/testsuite/tests/lib/Data.ByteString/bytestring002.hs deleted file mode 100644 index 23d6cf270f..0000000000 --- a/testsuite/tests/lib/Data.ByteString/bytestring002.hs +++ /dev/null @@ -1,6 +0,0 @@ --- --- The unix wc -l program --- -import qualified Data.ByteString as B - -main = print . B.count 10 =<< B.getContents diff --git a/testsuite/tests/lib/Data.ByteString/bytestring002.stdin b/testsuite/tests/lib/Data.ByteString/bytestring002.stdin deleted file mode 100644 index abffbabe44..0000000000 --- a/testsuite/tests/lib/Data.ByteString/bytestring002.stdin +++ /dev/null @@ -1,1000 +0,0 @@ -A -a -aa -aal -aalii -aam -Aani -aardvark -aardwolf -Aaron -Aaronic -Aaronical -Aaronite -Aaronitic -Aaru -Ab -aba -Ababdeh -Ababua -abac -abaca -abacate -abacay -abacinate -abacination -abaciscus -abacist -aback -abactinal -abactinally -abaction -abactor -abaculus -abacus -Abadite -abaff -abaft -abaisance -abaiser -abaissed -abalienate -abalienation -abalone -Abama -abampere -abandon -abandonable -abandoned -abandonedly -abandonee -abandoner -abandonment -Abanic -Abantes -abaptiston -Abarambo -Abaris -abarthrosis -abarticular -abarticulation -abas -abase -abased -abasedly -abasedness -abasement -abaser -Abasgi -abash -abashed -abashedly -abashedness -abashless -abashlessly -abashment -abasia -abasic -abask -Abassin -abastardize -abatable -abate -abatement -abater -abatis -abatised -abaton -abator -abattoir -Abatua -abature -abave -abaxial -abaxile -abaze -abb -Abba -abbacomes -abbacy -Abbadide -abbas -abbasi -abbassi -Abbasside -abbatial -abbatical -abbess -abbey -abbeystede -Abbie -abbot -abbotcy -abbotnullius -abbotship -abbreviate -abbreviately -abbreviation -abbreviator -abbreviatory -abbreviature -Abby -abcoulomb -abdal -abdat -Abderian -Abderite -abdest -abdicable -abdicant -abdicate -abdication -abdicative -abdicator -Abdiel -abditive -abditory -abdomen -abdominal -Abdominales -abdominalian -abdominally -abdominoanterior -abdominocardiac -abdominocentesis -abdominocystic -abdominogenital -abdominohysterectomy -abdominohysterotomy -abdominoposterior -abdominoscope -abdominoscopy -abdominothoracic -abdominous -abdominovaginal -abdominovesical -abduce -abducens -abducent -abduct -abduction -abductor -Abe -abeam -abear -abearance -abecedarian -abecedarium -abecedary -abed -abeigh -Abel -abele -Abelia -Abelian -Abelicea -Abelite -abelite -Abelmoschus -abelmosk -Abelonian -abeltree -Abencerrages -abenteric -abepithymia -Aberdeen -aberdevine -Aberdonian -Aberia -aberrance -aberrancy -aberrant -aberrate -aberration -aberrational -aberrator -aberrometer -aberroscope -aberuncator -abet -abetment -abettal -abettor -abevacuation -abey -abeyance -abeyancy -abeyant -abfarad -abhenry -abhiseka -abhominable -abhor -abhorrence -abhorrency -abhorrent -abhorrently -abhorrer -abhorrible -abhorring -Abhorson -abidal -abidance -abide -abider -abidi -abiding -abidingly -abidingness -Abie -Abies -abietate -abietene -abietic -abietin -Abietineae -abietineous -abietinic -Abiezer -Abigail -abigail -abigailship -abigeat -abigeus -abilao -ability -abilla -abilo -abintestate -abiogenesis -abiogenesist -abiogenetic -abiogenetical -abiogenetically -abiogenist -abiogenous -abiogeny -abiological -abiologically -abiology -abiosis -abiotic -abiotrophic -abiotrophy -Abipon -abir -abirritant -abirritate -abirritation -abirritative -abiston -Abitibi -abiuret -abject -abjectedness -abjection -abjective -abjectly -abjectness -abjoint -abjudge -abjudicate -abjudication -abjunction -abjunctive -abjuration -abjuratory -abjure -abjurement -abjurer -abkar -abkari -Abkhas -Abkhasian -ablach -ablactate -ablactation -ablare -ablastemic -ablastous -ablate -ablation -ablatitious -ablatival -ablative -ablator -ablaut -ablaze -able -ableeze -ablegate -ableness -ablepharia -ablepharon -ablepharous -Ablepharus -ablepsia -ableptical -ableptically -abler -ablest -ablewhackets -ablins -abloom -ablow -ablude -abluent -ablush -ablution -ablutionary -abluvion -ably -abmho -Abnaki -abnegate -abnegation -abnegative -abnegator -Abner -abnerval -abnet -abneural -abnormal -abnormalism -abnormalist -abnormality -abnormalize -abnormally -abnormalness -abnormity -abnormous -abnumerable -Abo -aboard -Abobra -abode -abodement -abody -abohm -aboil -abolish -abolisher -abolishment -abolition -abolitionary -abolitionism -abolitionist -abolitionize -abolla -aboma -abomasum -abomasus -abominable -abominableness -abominably -abominate -abomination -abominator -abomine -Abongo -aboon -aborad -aboral -aborally -abord -aboriginal -aboriginality -aboriginally -aboriginary -aborigine -abort -aborted -aborticide -abortient -abortifacient -abortin -abortion -abortional -abortionist -abortive -abortively -abortiveness -abortus -abouchement -abound -abounder -abounding -aboundingly -about -abouts -above -aboveboard -abovedeck -aboveground -aboveproof -abovestairs -abox -abracadabra -abrachia -abradant -abrade -abrader -Abraham -Abrahamic -Abrahamidae -Abrahamite -Abrahamitic -abraid -Abram -Abramis -abranchial -abranchialism -abranchian -Abranchiata -abranchiate -abranchious -abrasax -abrase -abrash -abrasiometer -abrasion -abrasive -abrastol -abraum -abraxas -abreact -abreaction -abreast -abrenounce -abret -abrico -abridge -abridgeable -abridged -abridgedly -abridger -abridgment -abrim -abrin -abristle -abroach -abroad -Abrocoma -abrocome -abrogable -abrogate -abrogation -abrogative -abrogator -Abroma -Abronia -abrook -abrotanum -abrotine -abrupt -abruptedly -abruption -abruptly -abruptness -Abrus -Absalom -absampere -Absaroka -absarokite -abscess -abscessed -abscession -abscessroot -abscind -abscise -abscision -absciss -abscissa -abscissae -abscisse -abscission -absconce -abscond -absconded -abscondedly -abscondence -absconder -absconsa -abscoulomb -absence -absent -absentation -absentee -absenteeism -absenteeship -absenter -absently -absentment -absentmindedly -absentness -absfarad -abshenry -Absi -absinthe -absinthial -absinthian -absinthiate -absinthic -absinthin -absinthine -absinthism -absinthismic -absinthium -absinthol -absit -absmho -absohm -absolute -absolutely -absoluteness -absolution -absolutism -absolutist -absolutistic -absolutistically -absolutive -absolutization -absolutize -absolutory -absolvable -absolvatory -absolve -absolvent -absolver -absolvitor -absolvitory -absonant -absonous -absorb -absorbability -absorbable -absorbed -absorbedly -absorbedness -absorbefacient -absorbency -absorbent -absorber -absorbing -absorbingly -absorbition -absorpt -absorptance -absorptiometer -absorptiometric -absorption -absorptive -absorptively -absorptiveness -absorptivity -absquatulate -abstain -abstainer -abstainment -abstemious -abstemiously -abstemiousness -abstention -abstentionist -abstentious -absterge -abstergent -abstersion -abstersive -abstersiveness -abstinence -abstinency -abstinent -abstinential -abstinently -abstract -abstracted -abstractedly -abstractedness -abstracter -abstraction -abstractional -abstractionism -abstractionist -abstractitious -abstractive -abstractively -abstractiveness -abstractly -abstractness -abstractor -abstrahent -abstricted -abstriction -abstruse -abstrusely -abstruseness -abstrusion -abstrusity -absume -absumption -absurd -absurdity -absurdly -absurdness -absvolt -Absyrtus -abterminal -abthain -abthainrie -abthainry -abthanage -Abu -abu -abucco -abulia -abulic -abulomania -abuna -abundance -abundancy -abundant -Abundantia -abundantly -abura -aburabozu -aburban -aburst -aburton -abusable -abuse -abusedly -abusee -abuseful -abusefully -abusefulness -abuser -abusion -abusious -abusive -abusively -abusiveness -abut -Abuta -Abutilon -abutment -abuttal -abutter -abutting -abuzz -abvolt -abwab -aby -abysm -abysmal -abysmally -abyss -abyssal -Abyssinian -abyssobenthonic -abyssolith -abyssopelagic -acacatechin -acacatechol -acacetin -Acacia -Acacian -acaciin -acacin -academe -academial -academian -Academic -academic -academical -academically -academicals -academician -academicism -academism -academist -academite -academization -academize -Academus -academy -Acadia -acadialite -Acadian -Acadie -Acaena -acajou -acaleph -Acalepha -Acalephae -acalephan -acalephoid -acalycal -acalycine -acalycinous -acalyculate -Acalypha -Acalypterae -Acalyptrata -Acalyptratae -acalyptrate -Acamar -acampsia -acana -acanaceous -acanonical -acanth -acantha -Acanthaceae -acanthaceous -acanthad -Acantharia -Acanthia -acanthial -acanthin -acanthine -acanthion -acanthite -acanthocarpous -Acanthocephala -acanthocephalan -Acanthocephali -acanthocephalous -Acanthocereus -acanthocladous -Acanthodea -acanthodean -Acanthodei -Acanthodes -acanthodian -Acanthodidae -Acanthodii -Acanthodini -acanthoid -Acantholimon -acanthological -acanthology -acantholysis -acanthoma -Acanthomeridae -acanthon -Acanthopanax -Acanthophis -acanthophorous -acanthopod -acanthopodous -acanthopomatous -acanthopore -acanthopteran -Acanthopteri -acanthopterous -acanthopterygian -Acanthopterygii -acanthosis -acanthous -Acanthuridae -Acanthurus -acanthus -acapnia -acapnial -acapsular -acapu -acapulco -acara -Acarapis -acardia -acardiac -acari -acarian -acariasis -acaricidal -acaricide -acarid -Acarida -Acaridea -acaridean -acaridomatium -acariform -Acarina -acarine -acarinosis -acarocecidium -acarodermatitis -acaroid -acarol -acarologist -acarology -acarophilous -acarophobia -acarotoxic -acarpelous -acarpous -Acarus -Acastus -acatalectic -acatalepsia -acatalepsy -acataleptic -acatallactic -acatamathesia -acataphasia -acataposis -acatastasia -acatastatic -acate -acategorical -acatery -acatharsia -acatharsy -acatholic -acaudal -acaudate -acaulescent -acauline -acaulose -acaulous -acca -accede -accedence -acceder -accelerable -accelerando -accelerant -accelerate -accelerated -acceleratedly -acceleration -accelerative -accelerator -acceleratory -accelerograph -accelerometer -accend -accendibility -accendible -accension -accensor -accent -accentless -accentor -accentuable -accentual -accentuality -accentually -accentuate -accentuation -accentuator -accentus -accept -acceptability -acceptable -acceptableness -acceptably -acceptance -acceptancy -acceptant -acceptation -accepted -acceptedly -accepter -acceptilate -acceptilation -acception -acceptive -acceptor -acceptress -accerse -accersition -accersitor -access -accessarily -accessariness -accessary -accessaryship -accessibility -accessible -accessibly -accession -accessional -accessioner -accessive -accessively -accessless -accessorial -accessorily -accessoriness -accessorius -accessory -accidence -accidency -accident -accidental -accidentalism -accidentalist -accidentality -accidentally -accidentalness -accidented -accidential -accidentiality -accidently -accidia -accidie -accinge -accipient -Accipiter -accipitral -accipitrary -Accipitres -accipitrine -accismus -accite -acclaim -acclaimable -acclaimer -acclamation -acclamator -acclamatory -acclimatable -acclimatation -acclimate -acclimatement -acclimation -acclimatizable -acclimatization -acclimatize -acclimatizer -acclimature -acclinal -acclinate -acclivitous -acclivity -acclivous -accloy -accoast -accoil -accolade -accoladed -accolated -accolent -accolle -accombination -accommodable -accommodableness -accommodate -accommodately -accommodateness -accommodating -accommodatingly -accommodation -accommodational -accommodative -accommodativeness -accommodator -accompanier -accompaniment -accompanimental -accompanist -accompany -accompanyist -accompletive -accomplice -accompliceship -accomplicity -accomplish -accomplishable -accomplished -accomplisher -accomplishment -accomplisht -accompt -accord -accordable -accordance -accordancy -accordant diff --git a/testsuite/tests/lib/Data.ByteString/bytestring002.stdout b/testsuite/tests/lib/Data.ByteString/bytestring002.stdout deleted file mode 100644 index 83b33d238d..0000000000 --- a/testsuite/tests/lib/Data.ByteString/bytestring002.stdout +++ /dev/null @@ -1 +0,0 @@ -1000 diff --git a/testsuite/tests/lib/Data.ByteString/bytestring003.hs b/testsuite/tests/lib/Data.ByteString/bytestring003.hs deleted file mode 100644 index c31ab8d17f..0000000000 --- a/testsuite/tests/lib/Data.ByteString/bytestring003.hs +++ /dev/null @@ -1,36 +0,0 @@ -{-# OPTIONS -cpp #-} - --- --- 'sums' benchmark from the great language shootout --- - -import System.IO -import qualified Data.ByteString as B -import Data.ByteString (ByteString) -import Data.ByteString.Unsafe (unsafeTail,unsafeIndex) -import Data.Char -- seems to help! - -#define STRICT2(f) f a b | a `seq` b `seq` False = undefined - -main = print . go 0 =<< B.getContents - -STRICT2(go) -go i ps - | B.null ps = i - | x == 45 = neg 0 xs - | otherwise = pos (parse x) xs - where - (x, xs) = (ps `unsafeIndex` 0, unsafeTail ps) - - STRICT2(neg) - neg n qs | x == 10 = go (i-n) xs - | otherwise = neg (parse x + (10 * n)) xs - where (x, xs) = (qs `unsafeIndex` 0, unsafeTail qs) - - STRICT2(pos) - pos n qs | x == 10 = go (i+n) xs - | otherwise = pos (parse x + (10 * n)) xs - where (x, xs) = (qs `unsafeIndex` 0, unsafeTail qs) - -parse w = fromIntegral (w - 48) :: Int -{-# INLINE parse #-} diff --git a/testsuite/tests/lib/Data.ByteString/bytestring003.stdin b/testsuite/tests/lib/Data.ByteString/bytestring003.stdin deleted file mode 100644 index 956aba1447..0000000000 --- a/testsuite/tests/lib/Data.ByteString/bytestring003.stdin +++ /dev/null @@ -1,1000 +0,0 @@ -276 -498 --981 -770 --401 -702 -966 -950 --853 --53 --293 -604 -288 -892 --697 -204 -96 -408 -880 --7 --817 -422 --261 --485 --77 -826 -184 -864 --751 -626 -812 --369 --353 --371 -488 --83 --659 -24 -524 --21 -840 --757 --17 --973 --843 -260 -858 --389 --521 --99 -482 --561 --213 -630 -766 -932 -112 --419 --877 -762 -266 --837 -170 -834 -746 -764 -922 --89 -576 --63 -90 -684 -316 -506 --959 -708 -70 -252 --747 -342 --593 --895 --937 --707 -350 -588 --201 --683 --113 --511 --867 -322 -202 -472 -150 --9 --643 -28 -336 -86 --925 -836 --473 --451 --971 --805 --619 -84 --67 -806 -270 -366 -334 --555 --557 --331 --409 --553 --145 --71 -528 -490 -492 -828 -628 --961 -536 --859 --271 -974 --671 --749 -414 --257 -778 -56 -598 --437 --899 --785 --987 -32 --999 -132 --821 --209 -402 --543 -194 --967 -294 --943 --285 --483 --97 -660 --481 --829 --309 --597 --855 -80 --355 -192 --823 -436 -916 -282 --629 -612 --329 --535 -780 --47 -706 -110 -756 --857 --933 --345 --523 -718 --31 -902 -678 -540 -698 -456 --399 -126 -412 --563 --321 --487 --641 --195 --199 --955 -772 -570 -18 --217 -886 -984 --721 --995 -46 --989 -946 -64 -716 --719 --869 --579 -776 -450 -936 -980 --439 --977 --455 --997 -6 -268 --269 --421 -328 -352 -578 --575 -476 -976 --57 --469 -544 -582 --43 -510 --939 --581 --337 --203 --737 --827 -852 --279 --803 --911 --865 -548 -48 --75 -416 --275 -688 --255 --687 --461 --233 -420 -912 --901 --299 -12 -568 -694 --411 --883 --327 --361 --339 -646 --137 --905 -670 -686 --131 --849 --825 -256 -228 --841 -68 -368 --909 -242 -298 -118 -10 -222 -954 --493 --459 --445 -608 --765 -34 -468 --715 -690 --185 --551 --571 --241 -292 -92 -768 --923 -956 -614 -8 -730 -208 --417 -300 -136 --59 --251 --539 -166 -798 -866 -454 --391 --317 -668 -502 --15 -994 -854 --189 -666 -446 --565 --5 -42 --227 --87 --779 -26 -312 -354 -754 -396 --515 -220 -872 -654 -88 --667 -250 -572 -952 -72 -982 -972 --529 --471 --533 --427 -538 -154 --457 --819 -750 -152 -452 --41 -838 --489 -418 --649 --637 --197 -74 -394 --653 --727 --435 --23 -348 -638 --611 -914 --357 --743 --685 -580 --247 --577 -54 --931 --3 -558 --793 --443 --759 -162 --811 -384 -720 --117 -900 --519 --39 -744 -432 -286 --873 -380 --167 --283 -430 --155 --755 -206 -100 -364 --677 -332 --567 -382 --605 --181 -676 --475 --845 -910 -546 -14 -398 -616 --769 -424 -992 --235 --239 -774 -478 --919 -168 --771 --773 --69 --509 -930 -550 --463 -178 --861 --761 --795 -234 --831 --61 --979 --851 --665 --709 -896 -742 --123 -590 --693 --887 --379 -144 --717 -20 -174 -82 -464 -30 --969 --349 --531 --799 --661 --647 --623 -878 -148 --545 -238 --259 -554 -726 --37 --797 -98 -78 --591 --975 -962 -120 -906 --207 -656 --171 -652 -188 -672 --133 --91 -224 -818 --333 --839 --499 -22 --739 -142 -378 --403 --315 -370 -284 -122 -230 --527 --127 -442 -534 -160 -722 -262 --657 -304 -258 --103 -960 --495 --265 -634 --101 -480 --363 -308 -76 --949 --585 -904 -146 --703 -164 -850 -246 -732 --725 -566 -274 --163 --935 --681 --229 -254 --733 --547 --273 --903 -736 --711 -794 -392 --655 --549 -808 --429 -484 --701 --617 -804 -36 --775 --335 --927 -714 --177 --325 --413 --963 -114 --253 --789 --645 -40 -434 -898 -924 --19 -738 -788 -280 --121 -594 --913 -426 -816 --373 --45 -340 --109 --323 -58 --249 -940 --297 -988 -998 --607 --745 --633 --115 -996 --893 -696 -400 -848 -500 --263 -562 --807 --105 --603 -658 --73 --863 -448 -680 --157 --161 -728 -814 --477 --375 -1000 --631 --991 -362 -156 --187 --705 --917 --449 --741 -556 -440 --589 --11 --359 --891 --801 --153 --381 -938 --173 --243 -618 --599 --497 -486 -128 -790 -460 --27 --305 --205 --215 -324 --341 -50 -458 -52 --621 -874 -386 -560 --569 --51 -802 -786 -920 --425 -466 -444 --507 --915 -346 -622 --679 -784 --689 -388 -508 --613 --313 --447 -564 --897 --211 --225 --615 --367 -186 -894 --65 --453 --245 -602 -496 --651 --601 -820 -226 --695 --119 -372 -180 -94 -214 -542 -648 --871 -592 -584 -824 -796 -374 --945 --311 -516 -942 --221 --433 -200 --465 --953 -870 -868 --879 -518 -356 --223 -682 -990 --191 --541 --951 --921 --319 --169 --291 --289 -792 -876 -306 --491 -326 --885 -62 -514 --929 -318 --231 -632 -44 --107 -644 --267 --343 --847 -934 -734 --505 --351 -574 --627 -636 --93 --431 --835 -428 --183 --151 -2 --813 --595 -958 --141 -692 --385 -610 --179 -376 -948 -198 --675 -964 --907 -918 --165 --1 -406 -748 --111 -532 --55 --281 -740 -504 -236 --29 -662 --713 --537 -196 --587 -822 --135 -700 --35 -674 --407 -240 --673 --669 --393 -470 --525 --875 --383 --625 -296 --85 --147 --277 -800 --691 --143 -16 --983 --303 -290 --139 -172 -320 -512 -596 -640 -664 --791 --783 --387 --735 --467 --301 -810 -134 -216 -278 -176 -606 -140 --787 -978 -586 -890 -882 --753 --13 -970 --941 --175 --777 --809 --441 --347 --377 -390 --423 -842 -642 -190 -302 -438 -704 -310 --49 -124 --781 --287 -724 --767 -830 -620 --295 -244 --159 --307 --397 -66 --237 -314 --79 -624 -710 -272 --365 -928 -856 -138 --479 -520 -832 -862 -760 -846 --81 -106 --513 --193 -650 -782 --517 -944 -218 -712 --663 --559 -462 --635 --25 -182 -530 -844 -330 --833 -102 --881 -108 --947 --763 --405 -232 -410 -104 --729 --149 --889 -888 -360 -968 -908 -116 --815 --129 -522 --723 --993 -860 --503 -926 --219 --415 -60 -158 --609 --501 -986 --699 --583 -884 -212 -210 --957 -526 --985 -552 -344 --395 --95 -338 -248 -494 -130 -404 -358 -600 --639 --125 --33 --965 -752 -474 --731 -758 --573 -4 -38 -264 diff --git a/testsuite/tests/lib/Data.ByteString/bytestring003.stdout b/testsuite/tests/lib/Data.ByteString/bytestring003.stdout deleted file mode 100644 index 1b79f38e25..0000000000 --- a/testsuite/tests/lib/Data.ByteString/bytestring003.stdout +++ /dev/null @@ -1 +0,0 @@ -500 diff --git a/testsuite/tests/lib/Data.ByteString/bytestring004.hs b/testsuite/tests/lib/Data.ByteString/bytestring004.hs deleted file mode 100644 index 5c4df86a90..0000000000 --- a/testsuite/tests/lib/Data.ByteString/bytestring004.hs +++ /dev/null @@ -1,564 +0,0 @@ -#!/usr/bin/env runhaskell --- --- Uses multi-param type classes --- - -import Test.QuickCheck.Batch -import Test.QuickCheck -import Text.Show.Functions - -import Data.Char -import Data.Int -import Data.List -import Data.Maybe -import Data.Word - -import System.IO -import System.Environment -import System.IO.Unsafe -import System.Random - -import Control.Monad ( liftM2 ) -import Control.Monad.Instances () - -import Text.Printf -import Debug.Trace - -import Foreign.Ptr - -import Data.ByteString.Lazy (ByteString(..), pack , unpack) -import qualified Data.ByteString.Lazy as L -import qualified Data.ByteString.Lazy.Internal as L - -import Data.ByteString.Fusion -import qualified Data.ByteString as P -import qualified Data.ByteString.Lazy as L - -import qualified Data.ByteString.Char8 as PC -import qualified Data.ByteString.Lazy.Char8 as LC -import qualified Data.ByteString as P -import qualified Data.ByteString.Internal as P -import qualified Data.ByteString.Char8 as C -import qualified Data.ByteString.Lazy.Char8 as D -import Data.ByteString.Fusion - -import Prelude hiding (abs) - --- Enable this to get verbose test output. Including the actual tests. -debug = False - -mytest :: Testable a => a -> Int -> IO () -mytest a n = mycheck defaultConfig - { configMaxTest=n - , configEvery= \n args -> if debug then show n ++ ":\n" ++ unlines args else [] } a - -mycheck :: Testable a => Config -> a -> IO () -mycheck config a = - do let rnd = mkStdGen 99 - mytests config (evaluate a) rnd 0 0 [] - -mytests :: Config -> Gen Result -> StdGen -> Int -> Int -> [[String]] -> IO () -mytests config gen rnd0 ntest nfail stamps - | ntest == configMaxTest config = do done "OK," ntest stamps - | nfail == configMaxFail config = do done "Arguments exhausted after" ntest stamps - | otherwise = - do putStr (configEvery config ntest (arguments result)) >> hFlush stdout - case ok result of - Nothing -> - mytests config gen rnd1 ntest (nfail+1) stamps - Just True -> - mytests config gen rnd1 (ntest+1) nfail (stamp result:stamps) - Just False -> - putStr ( "Falsifiable after " - ++ show ntest - ++ " tests:\n" - ++ unlines (arguments result) - ) >> hFlush stdout - where - result = generate (configSize config ntest) rnd2 gen - (rnd1,rnd2) = split rnd0 - -done :: String -> Int -> [[String]] -> IO () -done mesg ntest stamps = - do putStr ( mesg ++ " " ++ show ntest ++ " tests" ++ table ) - where - table = display - . map entry - . reverse - . sort - . map pairLength - . group - . sort - . filter (not . null) - $ stamps - - display [] = ".\n" - display [x] = " (" ++ x ++ ").\n" - display xs = ".\n" ++ unlines (map (++ ".") xs) - - pairLength xss@(xs:_) = (length xss, xs) - entry (n, xs) = percentage n ntest - ++ " " - ++ concat (intersperse ", " xs) - - percentage n m = show ((100 * n) `div` m) ++ "%" - ------------------------------------------------------------------------- - -instance Arbitrary Char where - arbitrary = choose ('a', 'i') - coarbitrary c = variant (ord c `rem` 4) - -instance (Arbitrary a, Arbitrary b) => Arbitrary (PairS a b) where - arbitrary = liftM2 (:*:) arbitrary arbitrary - coarbitrary (a :*: b) = coarbitrary a . coarbitrary b - -instance Arbitrary Word8 where - arbitrary = choose (97, 105) - coarbitrary c = variant (fromIntegral ((fromIntegral c) `rem` 4)) - -instance Arbitrary Int64 where - arbitrary = sized $ \n -> choose (-fromIntegral n,fromIntegral n) - coarbitrary n = variant (fromIntegral (if n >= 0 then 2*n else 2*(-n) + 1)) - -instance Arbitrary a => Arbitrary (MaybeS a) where - arbitrary = do a <- arbitrary ; elements [NothingS, JustS a] - coarbitrary NothingS = variant 0 - coarbitrary _ = variant 1 -- ok? - -{- -instance Arbitrary Char where - arbitrary = choose ('\0', '\255') -- since we have to test words, unlines too - coarbitrary c = variant (ord c `rem` 16) - -instance Arbitrary Word8 where - arbitrary = choose (minBound, maxBound) - coarbitrary c = variant (fromIntegral ((fromIntegral c) `rem` 16)) --} - -instance Random Word8 where - randomR = integralRandomR - random = randomR (minBound,maxBound) - -instance Random Int64 where - randomR = integralRandomR - random = randomR (minBound,maxBound) - -integralRandomR :: (Integral a, RandomGen g) => (a,a) -> g -> (a,g) -integralRandomR (a,b) g = case randomR (fromIntegral a :: Integer, - fromIntegral b :: Integer) g of - (x,g) -> (fromIntegral x, g) - -instance Arbitrary L.ByteString where - arbitrary = arbitrary >>= return . L.fromChunks . filter (not. P.null) -- maintain the invariant. - coarbitrary s = coarbitrary (L.unpack s) - -instance Arbitrary P.ByteString where - arbitrary = P.pack `fmap` arbitrary - coarbitrary s = coarbitrary (P.unpack s) - ------------------------------------------------------------------------- --- --- We're doing two forms of testing here. Firstly, model based testing. --- For our Lazy and strict bytestring types, we have model types: --- --- i.e. Lazy == Byte --- \\ // --- List --- --- That is, the Lazy type can be modeled by functions in both the Byte --- and List type. For each of the 3 models, we have a set of tests that --- check those types match. --- --- The Model class connects a type and its model type, via a conversion --- function. --- --- -class Model a b where - model :: a -> b -- get the abstract vale from a concrete value - --- --- Connecting our Lazy and Strict types to their models. We also check --- the data invariant on Lazy types. --- --- These instances represent the arrows in the above diagram --- -instance Model B P where model = abstr . checkInvariant -instance Model P [W] where model = P.unpack -instance Model P [Char] where model = PC.unpack -instance Model B [W] where model = L.unpack . checkInvariant -instance Model B [Char] where model = LC.unpack . checkInvariant - --- Types are trivially modeled by themselves -instance Model Bool Bool where model = id -instance Model Int Int where model = id -instance Model Int64 Int64 where model = id -instance Model Int64 Int where model = fromIntegral -instance Model Word8 Word8 where model = id -instance Model Ordering Ordering where model = id - --- More structured types are modeled recursively, using the NatTrans class from Gofer. -class (Functor f, Functor g) => NatTrans f g where - eta :: f a -> g a - --- The transformation of the same type is identity -instance NatTrans [] [] where eta = id -instance NatTrans Maybe Maybe where eta = id -instance NatTrans ((->) X) ((->) X) where eta = id -instance NatTrans ((->) W) ((->) W) where eta = id - --- We have a transformation of pairs, if the pairs are in Model -instance Model f g => NatTrans ((,) f) ((,) g) where eta (f,a) = (model f, a) - --- And finally, we can take any (m a) to (n b), if we can Model m n, and a b -instance (NatTrans m n, Model a b) => Model (m a) (n b) where model x = fmap model (eta x) - ------------------------------------------------------------------------- - --- In a form more useful for QC testing (and it's lazy) -checkInvariant :: L.ByteString -> L.ByteString -checkInvariant cs0 = check cs0 - where check L.Empty = L.Empty - check (L.Chunk c cs) - | P.null c = error ("invariant violation: " ++ show cs0) - | otherwise = L.Chunk c (check cs) - -abstr :: L.ByteString -> P.ByteString -abstr = P.concat . L.toChunks - --- Some short hand. -type X = Int -type W = Word8 -type P = P.ByteString -type B = L.ByteString - ------------------------------------------------------------------------- --- --- These comparison functions handle wrapping and equality. --- --- A single class for these would be nice, but note that they differe in --- the number of arguments, and those argument types, so we'd need HList --- tricks. See here: http://okmij.org/ftp/Haskell/vararg-fn.lhs --- - -eq1 f g = \a -> - model (f a) == g (model a) -eq2 f g = \a b -> - model (f a b) == g (model a) (model b) -eq3 f g = \a b c -> - model (f a b c) == g (model a) (model b) (model c) -eq4 f g = \a b c d -> - model (f a b c d) == g (model a) (model b) (model c) (model d) -eq5 f g = \a b c d e -> - model (f a b c d e) == g (model a) (model b) (model c) (model d) (model e) - --- --- And for functions that take non-null input --- -eqnotnull1 f g = \x -> (not (isNull x)) ==> eq1 f g x -eqnotnull2 f g = \x y -> (not (isNull y)) ==> eq2 f g x y -eqnotnull3 f g = \x y z -> (not (isNull z)) ==> eq3 f g x y z - -class IsNull t where isNull :: t -> Bool -instance IsNull L.ByteString where isNull = L.null -instance IsNull P.ByteString where isNull = P.null - -main = do - x <- getArgs - let n = if null x then 100 else read . head $ x - mapM_ (\(s,a) -> printf "%-25s: " s >> a n) tests - --- --- Test that, after loop fusion, our code behaves the same as the --- unfused lazy or list models. Use -ddump-simpl to also check that --- rules are firing for each case. --- -tests = -- 29/5/06, all tests are fusing: - [("down/down list", mytest prop_downdown_list) -- checked - ,("down/filter list", mytest prop_downfilter_list) -- checked - ,("down/map list", mytest prop_downmap_list) -- checked - ,("filter/down lazy", mytest prop_filterdown_lazy) -- checked - ,("filter/down list", mytest prop_filterdown_list) -- checked - ,("filter/filter lazy", mytest prop_filterfilter_lazy) -- checked - ,("filter/filter list", mytest prop_filterfilter_list) -- checked - ,("filter/map lazy", mytest prop_filtermap_lazy) -- checked - ,("filter/map list", mytest prop_filtermap_list) -- checked - ,("filter/up lazy", mytest prop_filterup_lazy) -- checked - ,("filter/up list", mytest prop_filterup_list) -- checked - ,("map/down lazy", mytest prop_mapdown_lazy) -- checked - ,("map/down list", mytest prop_mapdown_list) -- checked - ,("map/filter lazy", mytest prop_mapfilter_lazy) -- checked - ,("map/filter list", mytest prop_mapfilter_list) -- checked - ,("map/map lazy", mytest prop_mapmap_lazy) -- checked - ,("map/map list", mytest prop_mapmap_list) -- checked - ,("map/up lazy", mytest prop_mapup_lazy) -- checked - ,("map/up list", mytest prop_mapup_list) -- checked - ,("up/filter lazy", mytest prop_upfilter_lazy) -- checked - ,("up/filter list", mytest prop_upfilter_list) -- checked - ,("up/map lazy", mytest prop_upmap_lazy) -- checked - ,("up/map list", mytest prop_upmap_list) -- checked - ,("up/up lazy", mytest prop_upup_lazy) -- checked - ,("up/up list", mytest prop_upup_list) -- checked - ,("noacc/noacc lazy", mytest prop_noacc_noacc_lazy) -- checked - ,("noacc/noacc list", mytest prop_noacc_noacc_list) -- checked - ,("noacc/up lazy", mytest prop_noacc_up_lazy) -- checked - ,("noacc/up list", mytest prop_noacc_up_list) -- checked - ,("up/noacc lazy", mytest prop_up_noacc_lazy) -- checked - ,("up/noacc list", mytest prop_up_noacc_list) -- checked - ,("map/noacc lazy", mytest prop_map_noacc_lazy) -- checked - ,("map/noacc list", mytest prop_map_noacc_list) -- checked - ,("noacc/map lazy", mytest prop_noacc_map_lazy) -- checked - ,("noacc/map list", mytest prop_noacc_map_list) -- checked - ,("filter/noacc lazy", mytest prop_filter_noacc_lazy) -- checked - ,("filter/noacc list", mytest prop_filter_noacc_list) -- checked - ,("noacc/filter lazy", mytest prop_noacc_filter_lazy) -- checked - ,("noacc/filter list", mytest prop_noacc_filter_list) -- checked - ,("noacc/down lazy", mytest prop_noacc_down_lazy) -- checked - ,("noacc/down list", mytest prop_noacc_down_list) -- checked --- ,("down/noacc lazy", mytest prop_down_noacc_lazy) -- checked - ,("down/noacc list", mytest prop_down_noacc_list) -- checked - - - ,("length/loop list", mytest prop_lengthloop_list) --- ,("length/loop lazy", mytest prop_lengthloop_lazy) - ,("maximum/loop list", mytest prop_maximumloop_list) --- ,("maximum/loop lazy", mytest prop_maximumloop_lazy) - ,("minimum/loop list", mytest prop_minimumloop_list) --- ,("minimum/loop lazy", mytest prop_minimumloop_lazy) - - ] - -prop_upup_list = eq3 - (\f g -> P.foldl f (0::Int) . P.scanl g (0::W)) - ((\f g -> foldl f (0::Int) . scanl g (0::W)) :: (X -> W -> X) -> (W -> W -> W) -> [W] -> X) - -prop_upup_lazy = eq3 - (\f g -> L.foldl f (0::X) . L.scanl g (0::W)) - (\f g -> P.foldl f (0::X) . P.scanl g (0::W)) - -prop_mapmap_list = eq3 - (\f g -> P.map f . P.map g) - ((\f g -> map f . map g) :: (W -> W) -> (W -> W) -> [W] -> [W]) - -prop_mapmap_lazy = eq3 - (\f g -> L.map f . L.map g) - (\f g -> P.map f . P.map g) - -prop_filterfilter_list = eq3 - (\f g -> P.filter f . P.filter g) - ((\f g -> filter f . filter g) :: (W -> Bool) -> (W -> Bool) -> [W] -> [W]) - -prop_filterfilter_lazy = eq3 - (\f g -> L.filter f . L.filter g) - (\f g -> P.filter f . P.filter g) - -prop_mapfilter_list = eq3 - (\f g -> P.filter f . P.map g) - ((\f g -> filter f . map g) :: (W -> Bool) -> (W -> W) -> [W] -> [W]) - -prop_mapfilter_lazy = eq3 - (\f g -> L.filter f . L.map g) - (\f g -> P.filter f . P.map g) - -prop_filtermap_list = eq3 - (\f g -> P.map f . P.filter g) - ((\f g -> map f . filter g) :: (W -> W) -> (W -> Bool) -> [W] -> [W]) - -prop_filtermap_lazy = eq3 - (\f g -> L.map f . L.filter g) - (\f g -> P.map f . P.filter g) - -prop_mapup_list = eq3 - (\f g -> P.foldl g (0::W) . P.map f) - ((\f g -> foldl g (0::W) . map f) :: (W -> W) -> (W -> W -> W) -> [W] -> W) - -prop_mapup_lazy = eq3 - (\f g -> L.foldl g (0::W) . L.map f) -- n.b. scan doesn't fuse here, atm - (\f g -> P.foldl g (0::W) . P.map f) - -prop_upmap_list = eq3 - (\f g -> P.map f . P.scanl g (0::W)) - ((\f g -> map f . scanl g (0::W)) :: (W -> W) -> (W -> W -> W) -> [W] -> [W]) - -prop_upmap_lazy = eq3 - (\f g -> L.map f . L.scanl g (0::W)) - (\f g -> P.map f . P.scanl g (0::W)) - -prop_filterup_list = eq3 - (\f g -> P.foldl g (0::W) . P.filter f) - ((\f g -> foldl g (0::W) . filter f) :: (W -> Bool) -> (W -> W -> W) -> [W] -> W) - -prop_filterup_lazy = eq3 - (\f g -> L.foldl g (0::W) . L.filter f) - (\f g -> P.foldl g (0::W) . P.filter f) - -prop_upfilter_list = eq3 - (\f g -> P.filter f . P.scanl g (0::W)) - ((\f g -> filter f . scanl g (0::W)) :: (W -> Bool) -> (W -> W -> W) -> [W] -> [W]) - -prop_upfilter_lazy = eq3 - (\f g -> L.filter f . L.scanl g (0::W)) - (\f g -> P.filter f . P.scanl g (0::W)) - -prop_downdown_list = eq3 - (\f g -> P.foldr f (0::X) . P.scanr g (0::W)) - ((\f g -> foldr f (0::X) . scanr g (0::W)) :: (W -> X -> X) -> (W -> W -> W) -> [W] -> X) - -{- --- no lazy scanr yet -prop_downdown_lazy = eq3 - (\f g -> L.foldr f (0::X) . L.scanr g (0::W)) - (\f g -> P.foldr f (0::X) . P.scanr g (0::W)) --} - -prop_mapdown_list = eq3 - (\f g -> P.foldr g (0::W) . P.map f) - ((\f g -> foldr g (0::W) . map f) :: (W -> W) -> (W -> W -> W) -> [W] -> W) - -prop_mapdown_lazy = eq3 - (\f g -> L.foldr g (0::W) . L.map f) -- n.b. scan doesn't fuse here, atm - (\f g -> P.foldr g (0::W) . P.map f) - -prop_downmap_list = eq3 - (\f g -> P.map f . P.scanr g (0::W)) - ((\f g -> map f . scanr g (0::W)) :: (W -> W) -> (W -> W -> W) -> [W] -> [W]) - -{- -prop_downmap_lazy = eq3 - (\f g -> L.map f . L.scanr g (0::W)) - (\f g -> P.map f . P.scanr g (0::W)) --} - -prop_filterdown_list = eq3 - (\f g -> P.foldr g (0::W) . P.filter f) - ((\f g -> foldr g (0::W) . filter f) :: (W -> Bool) -> (W -> W -> W) -> [W] -> W) - -prop_filterdown_lazy = eq3 - (\f g -> L.foldr g (0::W) . L.filter f) -- n.b. scan doesn't fuse here, atm - (\f g -> P.foldr g (0::W) . P.filter f) - -prop_downfilter_list = eq3 - (\f g -> P.filter f . P.scanr g (0::W)) - ((\f g -> filter f . scanr g (0::W)) :: (W -> Bool) -> (W -> W -> W) -> [W] -> [W]) - -{- -prop_downfilter_lazy = eq3 - (\f g -> L.filter f . L.scanr g (0::W)) - (\f g -> P.filter f . P.scanr g (0::W)) --} - -prop_noacc_noacc_list = eq5 - (\f g h i -> (P.map f . P.filter g) . (P.map h . P.filter i)) - ((\f g h i -> ( map f . filter g) . ( map h . filter i)) - :: (W -> W) -> (W -> Bool) -> (W -> W) -> (W -> Bool) -> [W] -> [W]) - -prop_noacc_noacc_lazy = eq5 - (\f g h i -> (L.map f . L.filter g) . (L.map h . L.filter i)) - (\f g h i -> (P.map f . P.filter g) . (P.map h . P.filter i)) - -prop_noacc_up_list = eq4 - ( \g h i -> P.foldl g (0::W) . (P.map h . P.filter i)) - ((\g h i -> foldl g (0::W) . ( map h . filter i)) - :: (W -> W -> W) -> (W -> W) -> (W -> Bool) -> [W] -> W) - -prop_noacc_up_lazy = eq4 - (\g h i -> L.foldl g (0::W) . (L.map h . L.filter i)) - (\g h i -> P.foldl g (0::W) . (P.map h . P.filter i)) - -prop_up_noacc_list = eq4 - ( \g h i -> (P.map h . P.filter i) . P.scanl g (0::W)) - ((\g h i -> ( map h . filter i) . scanl g (0::W)) - :: (W -> W -> W) -> (W -> W) -> (W -> Bool) -> [W] -> [W]) - -prop_up_noacc_lazy = eq4 - (\g h i -> (L.map h . L.filter i) . L.scanl g (0::W)) - (\g h i -> (P.map h . P.filter i) . P.scanl g (0::W)) - -prop_map_noacc_list = eq4 - ( \g h i -> (P.map h . P.filter i) . P.map g) - ((\g h i -> ( map h . filter i) . map g) - :: (W -> W) -> (W -> W) -> (W -> Bool) -> [W] -> [W]) - -prop_map_noacc_lazy = eq4 - (\g h i -> (L.map h . L.filter i) . L.map g) - (\g h i -> (P.map h . P.filter i) . P.map g) - -prop_noacc_map_list = eq4 - ( \g h i -> P.map g . (P.map h . P.filter i)) - ((\g h i -> map g . ( map h . filter i)) - :: (W -> W) -> (W -> W) -> (W -> Bool) -> [W] -> [W]) - -prop_noacc_map_lazy = eq4 - (\g h i -> L.map g . (L.map h . L.filter i)) - (\g h i -> P.map g . (P.map h . P.filter i)) - -prop_filter_noacc_list = eq4 - ( \g h i -> (P.map h . P.filter i) . P.filter g) - ((\g h i -> ( map h . filter i) . filter g) - :: (W -> Bool) -> (W -> W) -> (W -> Bool) -> [W] -> [W]) - -prop_filter_noacc_lazy = eq4 - (\g h i -> (L.map h . L.filter i) . L.filter g) - (\g h i -> (P.map h . P.filter i) . P.filter g) - -prop_noacc_filter_list = eq4 - ( \g h i -> P.filter g . (P.map h . P.filter i)) - ((\g h i -> filter g . ( map h . filter i)) - :: (W -> Bool) -> (W -> W) -> (W -> Bool) -> [W] -> [W]) - -prop_noacc_filter_lazy = eq4 - (\g h i -> L.filter g . (L.map h . L.filter i)) - (\g h i -> P.filter g . (P.map h . P.filter i)) - -prop_noacc_down_list = eq4 - ( \g h i -> P.foldr g (0::W) . (P.map h . P.filter i)) - ((\g h i -> foldr g (0::W) . ( map h . filter i)) - :: (W -> W -> W) -> (W -> W) -> (W -> Bool) -> [W] -> W) - -prop_noacc_down_lazy = eq4 - (\g h i -> L.foldr g (0::W) . (L.map h . L.filter i)) - (\g h i -> P.foldr g (0::W) . (P.map h . P.filter i)) - -prop_down_noacc_list = eq4 - ( \g h i -> (P.map h . P.filter i) . P.scanr g (0::W)) - ((\g h i -> ( map h . filter i) . scanr g (0::W)) - :: (W -> W -> W) -> (W -> W) -> (W -> Bool) -> [W] -> [W]) - -{- -prop_down_noacc_lazy = eq4 - (\g h i -> (L.map h . L.filter i) . L.scanl g (0::W)) - (\g h i -> (P.map h . P.filter i) . P.scanl g (0::W)) --} - ------------------------------------------------------------------------- - -prop_lengthloop_list = eq2 - (\f -> P.length . P.filter f) - ((\f -> length . filter f) :: (W -> Bool) -> [W] -> X) - -{- -prop_lengthloop_lazy = eq2 - (\f g -> L.length . L.filter f) -- n.b. scan doesn't fuse here, atm - (\f g -> P.length . P.filter f) --} - -prop_maximumloop_list = eqnotnull2 - (\f -> P.maximum . P.map f) -- so we don't get null strings - ((\f -> maximum . map f) :: (W -> W) -> [W] -> W) - -{- -prop_maximumloop_lazy = eq2 - (\f g -> L.maximum . L.filter f) -- n.b. scan doesn't fuse here, atm - (\f g -> P.maximum . P.filter f) --} - -prop_minimumloop_list = eqnotnull2 - (\f -> P.minimum . P.map f) - ((\f -> minimum . map f) :: (W -> W) -> [W] -> W) - -{- -prop_minimumloop_lazy = eq2 - (\f g -> L.minimum . L.filter f) -- n.b. scan doesn't fuse here, atm - (\f g -> P.minimum . P.filter f) --} - diff --git a/testsuite/tests/lib/Data.ByteString/bytestring004.stdout b/testsuite/tests/lib/Data.ByteString/bytestring004.stdout deleted file mode 100644 index cbc88dbf91..0000000000 --- a/testsuite/tests/lib/Data.ByteString/bytestring004.stdout +++ /dev/null @@ -1,45 +0,0 @@ -down/down list : OK, 100 tests. -down/filter list : OK, 100 tests. -down/map list : OK, 100 tests. -filter/down lazy : OK, 100 tests. -filter/down list : OK, 100 tests. -filter/filter lazy : OK, 100 tests. -filter/filter list : OK, 100 tests. -filter/map lazy : OK, 100 tests. -filter/map list : OK, 100 tests. -filter/up lazy : OK, 100 tests. -filter/up list : OK, 100 tests. -map/down lazy : OK, 100 tests. -map/down list : OK, 100 tests. -map/filter lazy : OK, 100 tests. -map/filter list : OK, 100 tests. -map/map lazy : OK, 100 tests. -map/map list : OK, 100 tests. -map/up lazy : OK, 100 tests. -map/up list : OK, 100 tests. -up/filter lazy : OK, 100 tests. -up/filter list : OK, 100 tests. -up/map lazy : OK, 100 tests. -up/map list : OK, 100 tests. -up/up lazy : OK, 100 tests. -up/up list : OK, 100 tests. -noacc/noacc lazy : OK, 100 tests. -noacc/noacc list : OK, 100 tests. -noacc/up lazy : OK, 100 tests. -noacc/up list : OK, 100 tests. -up/noacc lazy : OK, 100 tests. -up/noacc list : OK, 100 tests. -map/noacc lazy : OK, 100 tests. -map/noacc list : OK, 100 tests. -noacc/map lazy : OK, 100 tests. -noacc/map list : OK, 100 tests. -filter/noacc lazy : OK, 100 tests. -filter/noacc list : OK, 100 tests. -noacc/filter lazy : OK, 100 tests. -noacc/filter list : OK, 100 tests. -noacc/down lazy : OK, 100 tests. -noacc/down list : OK, 100 tests. -down/noacc list : OK, 100 tests. -length/loop list : OK, 100 tests. -maximum/loop list : OK, 100 tests. -minimum/loop list : OK, 100 tests. diff --git a/testsuite/tests/lib/Data.ByteString/bytestring005.hs b/testsuite/tests/lib/Data.ByteString/bytestring005.hs deleted file mode 100644 index 7bd37da004..0000000000 --- a/testsuite/tests/lib/Data.ByteString/bytestring005.hs +++ /dev/null @@ -1,1138 +0,0 @@ -#!/usr/bin/env runhaskell --- --- Uses multi-param type classes --- - -import Test.QuickCheck -import Text.Show.Functions - -import Data.Char -import Data.Int -import Data.List -import Data.Maybe -import Data.Word - -import System.IO -import System.Environment -import System.IO.Unsafe -import System.Random - -import Control.Monad ( liftM2 ) -import Control.Monad.Instances () - -import Text.Printf -import Debug.Trace - -import Foreign.Ptr - -import Data.ByteString.Lazy (ByteString(..), pack , unpack) -import qualified Data.ByteString.Lazy as L -import qualified Data.ByteString.Lazy.Internal as L - -import Data.ByteString.Fusion -import qualified Data.ByteString as P -import qualified Data.ByteString.Unsafe as P -import qualified Data.ByteString.Lazy as L - -import qualified Data.ByteString.Char8 as PC -import qualified Data.ByteString.Lazy.Char8 as LC -import qualified Data.ByteString as P -import qualified Data.ByteString.Internal as P -import qualified Data.ByteString.Char8 as C -import qualified Data.ByteString.Lazy.Char8 as D -import Data.ByteString.Fusion - -import Prelude hiding (abs) - --- Enable this to get verbose test output. Including the actual tests. -debug = False - -mytest :: Testable a => a -> Int -> IO () -mytest a n = mycheck defaultConfig - { configMaxTest=n - , configEvery= \n args -> if debug then show n ++ ":\n" ++ unlines args else [] } a - -mycheck :: Testable a => Config -> a -> IO () -mycheck config a = - do let rnd = mkStdGen 99 - mytests config (evaluate a) rnd 0 0 [] - -mytests :: Config -> Gen Result -> StdGen -> Int -> Int -> [[String]] -> IO () -mytests config gen rnd0 ntest nfail stamps - | ntest == configMaxTest config = do done "OK," ntest stamps - | nfail == configMaxFail config = do done "Arguments exhausted after" ntest stamps - | otherwise = - do putStr (configEvery config ntest (arguments result)) >> hFlush stdout - case ok result of - Nothing -> - mytests config gen rnd1 ntest (nfail+1) stamps - Just True -> - mytests config gen rnd1 (ntest+1) nfail (stamp result:stamps) - Just False -> - putStr ( "Falsifiable after " - ++ show ntest - ++ " tests:\n" - ++ unlines (arguments result) - ) >> hFlush stdout - where - result = generate (configSize config ntest) rnd2 gen - (rnd1,rnd2) = split rnd0 - -done :: String -> Int -> [[String]] -> IO () -done mesg ntest stamps = - do putStr ( mesg ++ " " ++ show ntest ++ " tests" ++ table ) - where - table = display - . map entry - . reverse - . sort - . map pairLength - . group - . sort - . filter (not . null) - $ stamps - - display [] = ".\n" - display [x] = " (" ++ x ++ ").\n" - display xs = ".\n" ++ unlines (map (++ ".") xs) - - pairLength xss@(xs:_) = (length xss, xs) - entry (n, xs) = percentage n ntest - ++ " " - ++ concat (intersperse ", " xs) - - percentage n m = show ((100 * n) `div` m) ++ "%" - ------------------------------------------------------------------------- - -instance Arbitrary Char where - arbitrary = choose ('a', 'i') - coarbitrary c = variant (ord c `rem` 4) - -instance (Arbitrary a, Arbitrary b) => Arbitrary (PairS a b) where - arbitrary = liftM2 (:*:) arbitrary arbitrary - coarbitrary (a :*: b) = coarbitrary a . coarbitrary b - -instance Arbitrary Word8 where - arbitrary = choose (97, 105) - coarbitrary c = variant (fromIntegral ((fromIntegral c) `rem` 4)) - -instance Arbitrary Int64 where - arbitrary = sized $ \n -> choose (-fromIntegral n,fromIntegral n) - coarbitrary n = variant (fromIntegral (if n >= 0 then 2*n else 2*(-n) + 1)) - -instance Arbitrary a => Arbitrary (MaybeS a) where - arbitrary = do a <- arbitrary ; elements [NothingS, JustS a] - coarbitrary NothingS = variant 0 - coarbitrary _ = variant 1 -- ok? - -{- -instance Arbitrary Char where - arbitrary = choose ('\0', '\255') -- since we have to test words, unlines too - coarbitrary c = variant (ord c `rem` 16) - -instance Arbitrary Word8 where - arbitrary = choose (minBound, maxBound) - coarbitrary c = variant (fromIntegral ((fromIntegral c) `rem` 16)) --} - -instance Random Word8 where - randomR = integralRandomR - random = randomR (minBound,maxBound) - -instance Random Int64 where - randomR = integralRandomR - random = randomR (minBound,maxBound) - -integralRandomR :: (Integral a, RandomGen g) => (a,a) -> g -> (a,g) -integralRandomR (a,b) g = case randomR (fromIntegral a :: Integer, - fromIntegral b :: Integer) g of - (x,g) -> (fromIntegral x, g) - -instance Arbitrary L.ByteString where - arbitrary = arbitrary >>= return . L.fromChunks . filter (not. P.null) -- maintain the invariant. - coarbitrary s = coarbitrary (L.unpack s) - -instance Arbitrary P.ByteString where - arbitrary = P.pack `fmap` arbitrary - coarbitrary s = coarbitrary (P.unpack s) - ------------------------------------------------------------------------- --- --- We're doing two forms of testing here. Firstly, model based testing. --- For our Lazy and strict bytestring types, we have model types: --- --- i.e. Lazy == Byte --- \\ // --- List --- --- That is, the Lazy type can be modeled by functions in both the Byte --- and List type. For each of the 3 models, we have a set of tests that --- check those types match. --- --- The Model class connects a type and its model type, via a conversion --- function. --- --- -class Model a b where - model :: a -> b -- get the abstract vale from a concrete value - --- --- Connecting our Lazy and Strict types to their models. We also check --- the data invariant on Lazy types. --- --- These instances represent the arrows in the above diagram --- -instance Model B P where model = abstr . checkInvariant -instance Model P [W] where model = P.unpack -instance Model P [Char] where model = PC.unpack -instance Model B [W] where model = L.unpack . checkInvariant -instance Model B [Char] where model = LC.unpack . checkInvariant - --- Types are trivially modeled by themselves -instance Model Bool Bool where model = id -instance Model Int Int where model = id -instance Model Int64 Int64 where model = id -instance Model Int64 Int where model = fromIntegral -instance Model Word8 Word8 where model = id -instance Model Ordering Ordering where model = id - --- More structured types are modeled recursively, using the NatTrans class from Gofer. -class (Functor f, Functor g) => NatTrans f g where - eta :: f a -> g a - --- The transformation of the same type is identity -instance NatTrans [] [] where eta = id -instance NatTrans Maybe Maybe where eta = id -instance NatTrans ((->) X) ((->) X) where eta = id -instance NatTrans ((->) W) ((->) W) where eta = id - --- We have a transformation of pairs, if the pairs are in Model -instance Model f g => NatTrans ((,) f) ((,) g) where eta (f,a) = (model f, a) - --- And finally, we can take any (m a) to (n b), if we can Model m n, and a b -instance (NatTrans m n, Model a b) => Model (m a) (n b) where model x = fmap model (eta x) - ------------------------------------------------------------------------- - --- In a form more useful for QC testing (and it's lazy) -checkInvariant :: L.ByteString -> L.ByteString -checkInvariant cs0 = check cs0 - where check L.Empty = L.Empty - check (L.Chunk c cs) - | P.null c = error ("invariant violation: " ++ show cs0) - | otherwise = L.Chunk c (check cs) - -abstr :: L.ByteString -> P.ByteString -abstr = P.concat . L.toChunks - --- Some short hand. -type X = Int -type W = Word8 -type P = P.ByteString -type B = L.ByteString - ------------------------------------------------------------------------- --- --- These comparison functions handle wrapping and equality. --- --- A single class for these would be nice, but note that they differe in --- the number of arguments, and those argument types, so we'd need HList --- tricks. See here: http://okmij.org/ftp/Haskell/vararg-fn.lhs --- - -eq1 f g = \a -> - model (f a) == g (model a) -eq2 f g = \a b -> - model (f a b) == g (model a) (model b) -eq3 f g = \a b c -> - model (f a b c) == g (model a) (model b) (model c) -eq4 f g = \a b c d -> - model (f a b c d) == g (model a) (model b) (model c) (model d) -eq5 f g = \a b c d e -> - model (f a b c d e) == g (model a) (model b) (model c) (model d) (model e) - --- --- And for functions that take non-null input --- -eqnotnull1 f g = \x -> (not (isNull x)) ==> eq1 f g x -eqnotnull2 f g = \x y -> (not (isNull y)) ==> eq2 f g x y -eqnotnull3 f g = \x y z -> (not (isNull z)) ==> eq3 f g x y z - -class IsNull t where isNull :: t -> Bool -instance IsNull L.ByteString where isNull = L.null -instance IsNull P.ByteString where isNull = P.null - ------------------------------------------------------------------------- - --- --- These are miscellaneous tests left over. Or else they test some --- property internal to a type (i.e. head . sort == minimum), without --- reference to a model type. --- - -invariant :: L.ByteString -> Bool -invariant L.Empty = True -invariant (L.Chunk c cs) = not (P.null c) && invariant cs - -prop_invariant = invariant - -prop_eq_refl x = x == (x :: ByteString) -prop_eq_symm x y = (x == y) == (y == (x :: ByteString)) - -prop_eq1 xs = xs == (unpack . pack $ xs) -prop_eq2 xs = xs == (xs :: ByteString) -prop_eq3 xs ys = (xs == ys) == (unpack xs == unpack ys) - -prop_compare1 xs = (pack xs `compare` pack xs) == EQ -prop_compare2 xs c = (pack (xs++[c]) `compare` pack xs) == GT -prop_compare3 xs c = (pack xs `compare` pack (xs++[c])) == LT - -prop_compare4 xs = (not (null xs)) ==> (pack xs `compare` L.empty) == GT -prop_compare5 xs = (not (null xs)) ==> (L.empty `compare` pack xs) == LT -prop_compare6 xs ys = (not (null ys)) ==> (pack (xs++ys) `compare` pack xs) == GT - -prop_compare7 x y = x `compare` y == (L.singleton x `compare` L.singleton y) -prop_compare8 xs ys = xs `compare` ys == (L.pack xs `compare` L.pack ys) - -prop_empty1 = L.length L.empty == 0 -prop_empty2 = L.unpack L.empty == [] - -prop_packunpack s = (L.unpack . L.pack) s == id s -prop_unpackpack s = (L.pack . L.unpack) s == id s - -prop_null xs = null (L.unpack xs) == L.null xs - -prop_length1 xs = fromIntegral (length xs) == L.length (L.pack xs) - -prop_length2 xs = L.length xs == length1 xs - where length1 ys - | L.null ys = 0 - | otherwise = 1 + length1 (L.tail ys) - -prop_cons1 c xs = unpack (L.cons c (pack xs)) == (c:xs) -prop_cons2 c = L.singleton c == (c `L.cons` L.empty) -prop_cons3 c = unpack (L.singleton c) == (c:[]) -prop_cons4 c = (c `L.cons` L.empty) == pack (c:[]) - -prop_snoc1 xs c = xs ++ [c] == unpack ((pack xs) `L.snoc` c) - -prop_head xs = (not (null xs)) ==> head xs == (L.head . pack) xs -prop_head1 xs = not (L.null xs) ==> L.head xs == head (L.unpack xs) - -prop_tail xs = not (L.null xs) ==> L.tail xs == pack (tail (unpack xs)) -prop_tail1 xs = (not (null xs)) ==> tail xs == (unpack . L.tail . pack) xs - -prop_last xs = (not (null xs)) ==> last xs == (L.last . pack) xs - -prop_init xs = - (not (null xs)) ==> - init xs == (unpack . L.init . pack) xs - -prop_append1 xs = (xs ++ xs) == (unpack $ pack xs `L.append` pack xs) -prop_append2 xs ys = (xs ++ ys) == (unpack $ pack xs `L.append` pack ys) -prop_append3 xs ys = L.append xs ys == pack (unpack xs ++ unpack ys) - -prop_map1 f xs = L.map f (pack xs) == pack (map f xs) -prop_map2 f g xs = L.map f (L.map g xs) == L.map (f . g) xs -prop_map3 f xs = map f xs == (unpack . L.map f . pack) xs - -prop_filter1 c xs = (filter (/=c) xs) == (unpack $ L.filter (/=c) (pack xs)) -prop_filter2 p xs = (filter p xs) == (unpack $ L.filter p (pack xs)) - -prop_reverse xs = reverse xs == (unpack . L.reverse . pack) xs -prop_reverse1 xs = L.reverse (pack xs) == pack (reverse xs) -prop_reverse2 xs = reverse (unpack xs) == (unpack . L.reverse) xs - -prop_transpose xs = (transpose xs) == ((map unpack) . L.transpose . (map pack)) xs - -prop_foldl f c xs = L.foldl f c (pack xs) == foldl f c xs - where _ = c :: Char - -prop_foldr f c xs = L.foldl f c (pack xs) == foldl f c xs - where _ = c :: Char - -prop_foldl_1 xs = L.foldl (\xs c -> c `L.cons` xs) L.empty xs == L.reverse xs -prop_foldr_1 xs = L.foldr (\c xs -> c `L.cons` xs) L.empty xs == id xs - -prop_foldl1_1 xs = - (not . L.null) xs ==> - L.foldl1 (\x c -> if c > x then c else x) xs == - L.foldl (\x c -> if c > x then c else x) 0 xs - -prop_foldl1_2 xs = - (not . L.null) xs ==> - L.foldl1 const xs == L.head xs - -prop_foldl1_3 xs = - (not . L.null) xs ==> - L.foldl1 (flip const) xs == L.last xs - -prop_foldr1_1 xs = - (not . L.null) xs ==> - L.foldr1 (\c x -> if c > x then c else x) xs == - L.foldr (\c x -> if c > x then c else x) 0 xs - -prop_foldr1_2 xs = - (not . L.null) xs ==> - L.foldr1 (flip const) xs == L.last xs - -prop_foldr1_3 xs = - (not . L.null) xs ==> - L.foldr1 const xs == L.head xs - -prop_concat1 xs = (concat [xs,xs]) == (unpack $ L.concat [pack xs, pack xs]) -prop_concat2 xs = (concat [xs,[]]) == (unpack $ L.concat [pack xs, pack []]) -prop_concat3 xss = L.concat (map pack xss) == pack (concat xss) - -prop_concatMap xs = L.concatMap L.singleton xs == (pack . concatMap (:[]) . unpack) xs - -prop_any xs a = (any (== a) xs) == (L.any (== a) (pack xs)) -prop_all xs a = (all (== a) xs) == (L.all (== a) (pack xs)) - -prop_maximum xs = (not (null xs)) ==> (maximum xs) == (L.maximum ( pack xs )) -prop_minimum xs = (not (null xs)) ==> (minimum xs) == (L.minimum ( pack xs )) - -prop_replicate1 n c = - (n >= 0) ==> unpack (L.replicate (fromIntegral n) c) == replicate n c - -prop_replicate2 c = unpack (L.replicate 0 c) == replicate 0 c - -prop_take1 i xs = L.take (fromIntegral i) (pack xs) == pack (take i xs) -prop_drop1 i xs = L.drop (fromIntegral i) (pack xs) == pack (drop i xs) - -prop_splitAt i xs = collect (i >= 0 && i < length xs) $ - L.splitAt (fromIntegral i) (pack xs) == let (a,b) = splitAt i xs in (pack a, pack b) - -prop_takeWhile f xs = L.takeWhile f (pack xs) == pack (takeWhile f xs) -prop_dropWhile f xs = L.dropWhile f (pack xs) == pack (dropWhile f xs) - -prop_break f xs = L.break f (pack xs) == - let (a,b) = break f xs in (pack a, pack b) - -prop_breakspan xs c = L.break (==c) xs == L.span (/=c) xs - -prop_span xs a = (span (/=a) xs) == (let (x,y) = L.span (/=a) (pack xs) in (unpack x, unpack y)) - --- prop_breakByte xs c = L.break (== c) xs == L.breakByte c xs - --- prop_spanByte c xs = (L.span (==c) xs) == L.spanByte c xs - -prop_split c xs = (map L.unpack . map checkInvariant . L.split c $ xs) - == (map P.unpack . P.split c . P.pack . L.unpack $ xs) - -prop_splitWith f xs = (l1 == l2 || l1 == l2+1) && - sum (map L.length splits) == L.length xs - l2 - where splits = L.splitWith f xs - l1 = fromIntegral (length splits) - l2 = L.length (L.filter f xs) - -prop_joinsplit c xs = L.intercalate (pack [c]) (L.split c xs) == id xs - -prop_group xs = group xs == (map unpack . L.group . pack) xs --- prop_groupBy f xs = groupBy f xs == (map unpack . L.groupBy f . pack) xs - --- prop_joinjoinByte xs ys c = L.joinWithByte c xs ys == L.join (L.singleton c) [xs,ys] - -prop_index xs = - not (null xs) ==> - forAll indices $ \i -> (xs !! i) == L.pack xs `L.index` (fromIntegral i) - where indices = choose (0, length xs -1) - -prop_elemIndex xs c = (elemIndex c xs) == fmap fromIntegral (L.elemIndex c (pack xs)) - -prop_elemIndices xs c = elemIndices c xs == map fromIntegral (L.elemIndices c (pack xs)) - -prop_count c xs = length (L.elemIndices c xs) == fromIntegral (L.count c xs) - -prop_findIndex xs f = (findIndex f xs) == fmap fromIntegral (L.findIndex f (pack xs)) -prop_findIndicies xs f = (findIndices f xs) == map fromIntegral (L.findIndices f (pack xs)) - -prop_elem xs c = (c `elem` xs) == (c `L.elem` (pack xs)) -prop_notElem xs c = (c `notElem` xs) == (L.notElem c (pack xs)) -prop_elem_notelem xs c = c `L.elem` xs == not (c `L.notElem` xs) - --- prop_filterByte xs c = L.filterByte c xs == L.filter (==c) xs --- prop_filterByte2 xs c = unpack (L.filterByte c xs) == filter (==c) (unpack xs) - --- prop_filterNotByte xs c = L.filterNotByte c xs == L.filter (/=c) xs --- prop_filterNotByte2 xs c = unpack (L.filterNotByte c xs) == filter (/=c) (unpack xs) - -prop_find p xs = find p xs == L.find p (pack xs) - -prop_find_findIndex p xs = - L.find p xs == case L.findIndex p xs of - Just n -> Just (xs `L.index` n) - _ -> Nothing - -prop_isPrefixOf xs ys = isPrefixOf xs ys == (pack xs `L.isPrefixOf` pack ys) - -{- -prop_sort1 xs = sort xs == (unpack . L.sort . pack) xs -prop_sort2 xs = (not (null xs)) ==> (L.head . L.sort . pack $ xs) == minimum xs -prop_sort3 xs = (not (null xs)) ==> (L.last . L.sort . pack $ xs) == maximum xs -prop_sort4 xs ys = - (not (null xs)) ==> - (not (null ys)) ==> - (L.head . L.sort) (L.append (pack xs) (pack ys)) == min (minimum xs) (minimum ys) - -prop_sort5 xs ys = - (not (null xs)) ==> - (not (null ys)) ==> - (L.last . L.sort) (L.append (pack xs) (pack ys)) == max (maximum xs) (maximum ys) - --} - ------------------------------------------------------------------------- --- Misc ByteString properties - -prop_nil1BB = P.length P.empty == 0 -prop_nil2BB = P.unpack P.empty == [] - -prop_tailSBB xs = not (P.null xs) ==> P.tail xs == P.pack (tail (P.unpack xs)) - -prop_nullBB xs = null (P.unpack xs) == P.null xs - -prop_lengthBB xs = P.length xs == length1 xs - where - length1 ys - | P.null ys = 0 - | otherwise = 1 + length1 (P.tail ys) - -prop_lengthSBB xs = length xs == P.length (P.pack xs) - -prop_indexBB xs = - not (null xs) ==> - forAll indices $ \i -> (xs !! i) == P.pack xs `P.index` i - where indices = choose (0, length xs -1) - -prop_unsafeIndexBB xs = - not (null xs) ==> - forAll indices $ \i -> (xs !! i) == P.pack xs `P.unsafeIndex` i - where indices = choose (0, length xs -1) - -prop_mapfusionBB f g xs = P.map f (P.map g xs) == P.map (f . g) xs - -prop_filterBB f xs = P.filter f (P.pack xs) == P.pack (filter f xs) - -prop_filterfusionBB f g xs = P.filter f (P.filter g xs) == P.filter (\c -> f c && g c) xs - -prop_elemSBB x xs = P.elem x (P.pack xs) == elem x xs - -prop_takeSBB i xs = P.take i (P.pack xs) == P.pack (take i xs) -prop_dropSBB i xs = P.drop i (P.pack xs) == P.pack (drop i xs) - -prop_splitAtSBB i xs = -- collect (i >= 0 && i < length xs) $ - P.splitAt i (P.pack xs) == - let (a,b) = splitAt i xs in (P.pack a, P.pack b) - -prop_foldlBB f c xs = P.foldl f c (P.pack xs) == foldl f c xs - where types = c :: Char - -prop_scanlfoldlBB f z xs = not (P.null xs) ==> P.last (P.scanl f z xs) == P.foldl f z xs - -prop_foldrBB f c xs = P.foldl f c (P.pack xs) == foldl f c xs - where types = c :: Char - -prop_takeWhileSBB f xs = P.takeWhile f (P.pack xs) == P.pack (takeWhile f xs) -prop_dropWhileSBB f xs = P.dropWhile f (P.pack xs) == P.pack (dropWhile f xs) - -prop_spanSBB f xs = P.span f (P.pack xs) == - let (a,b) = span f xs in (P.pack a, P.pack b) - -prop_breakSBB f xs = P.break f (P.pack xs) == - let (a,b) = break f xs in (P.pack a, P.pack b) - -prop_breakspan_1BB xs c = P.break (== c) xs == P.span (/= c) xs - -prop_linesSBB xs = C.lines (C.pack xs) == map C.pack (lines xs) - -prop_unlinesSBB xss = C.unlines (map C.pack xss) == C.pack (unlines xss) - -prop_wordsSBB xs = - C.words (C.pack xs) == map C.pack (words xs) - -prop_unwordsSBB xss = C.unwords (map C.pack xss) == C.pack (unwords xss) - -prop_splitWithBB f xs = (l1 == l2 || l1 == l2+1) && - sum (map P.length splits) == P.length xs - l2 - where splits = P.splitWith f xs - l1 = length splits - l2 = P.length (P.filter f xs) - -prop_joinsplitBB c xs = P.intercalate (P.pack [c]) (P.split c xs) == xs - --- prop_linessplitBB xs = --- (not . C.null) xs ==> --- C.lines' xs == C.split '\n' xs - -prop_linessplit2BB xs = - C.lines xs == C.split '\n' xs ++ (if C.last xs == '\n' then [C.empty] else []) - -prop_splitsplitWithBB c xs = P.split c xs == P.splitWith (== c) xs - -prop_bijectionBB c = (P.w2c . P.c2w) c == id c -prop_bijectionBB' w = (P.c2w . P.w2c) w == id w - -prop_packunpackBB s = (P.unpack . P.pack) s == id s -prop_packunpackBB' s = (P.pack . P.unpack) s == id s - -prop_eq1BB xs = xs == (P.unpack . P.pack $ xs) -prop_eq2BB xs = xs == xs -prop_eq3BB xs ys = (xs == ys) == (P.unpack xs == P.unpack ys) - -prop_compare1BB xs = (P.pack xs `compare` P.pack xs) == EQ -prop_compare2BB xs c = (P.pack (xs++[c]) `compare` P.pack xs) == GT -prop_compare3BB xs c = (P.pack xs `compare` P.pack (xs++[c])) == LT - -prop_compare4BB xs = (not (null xs)) ==> (P.pack xs `compare` P.empty) == GT -prop_compare5BB xs = (not (null xs)) ==> (P.empty `compare` P.pack xs) == LT -prop_compare6BB xs ys= (not (null ys)) ==> (P.pack (xs++ys) `compare` P.pack xs) == GT - -prop_compare7BB x y = x `compare` y == (C.singleton x `compare` C.singleton y) -prop_compare8BB xs ys = xs `compare` ys == (P.pack xs `compare` P.pack ys) - -prop_consBB c xs = P.unpack (P.cons c (P.pack xs)) == (c:xs) -prop_cons1BB xs = 'X' : xs == C.unpack ('X' `C.cons` (C.pack xs)) -prop_cons2BB xs c = c : xs == P.unpack (c `P.cons` (P.pack xs)) -prop_cons3BB c = C.unpack (C.singleton c) == (c:[]) -prop_cons4BB c = (c `P.cons` P.empty) == P.pack (c:[]) - -prop_snoc1BB xs c = xs ++ [c] == P.unpack ((P.pack xs) `P.snoc` c) - -prop_head1BB xs = (not (null xs)) ==> head xs == (P.head . P.pack) xs -prop_head2BB xs = (not (null xs)) ==> head xs == (P.unsafeHead . P.pack) xs -prop_head3BB xs = not (P.null xs) ==> P.head xs == head (P.unpack xs) - -prop_tailBB xs = (not (null xs)) ==> tail xs == (P.unpack . P.tail . P.pack) xs -prop_tail1BB xs = (not (null xs)) ==> tail xs == (P.unpack . P.unsafeTail. P.pack) xs - -prop_lastBB xs = (not (null xs)) ==> last xs == (P.last . P.pack) xs - -prop_initBB xs = - (not (null xs)) ==> - init xs == (P.unpack . P.init . P.pack) xs - --- prop_null xs = (null xs) ==> null xs == (nullPS (pack xs)) - -prop_append1BB xs = (xs ++ xs) == (P.unpack $ P.pack xs `P.append` P.pack xs) -prop_append2BB xs ys = (xs ++ ys) == (P.unpack $ P.pack xs `P.append` P.pack ys) -prop_append3BB xs ys = P.append xs ys == P.pack (P.unpack xs ++ P.unpack ys) - -prop_map1BB f xs = P.map f (P.pack xs) == P.pack (map f xs) -prop_map2BB f g xs = P.map f (P.map g xs) == P.map (f . g) xs -prop_map3BB f xs = map f xs == (P.unpack . P.map f . P.pack) xs --- prop_mapBB' f xs = P.map' f (P.pack xs) == P.pack (map f xs) - -prop_filter1BB xs = (filter (=='X') xs) == (C.unpack $ C.filter (=='X') (C.pack xs)) -prop_filter2BB p xs = (filter p xs) == (P.unpack $ P.filter p (P.pack xs)) - -prop_findBB p xs = find p xs == P.find p (P.pack xs) - -prop_find_findIndexBB p xs = - P.find p xs == case P.findIndex p xs of - Just n -> Just (xs `P.unsafeIndex` n) - _ -> Nothing - -prop_foldl1BB xs a = ((foldl (\x c -> if c == a then x else c:x) [] xs)) == - (P.unpack $ P.foldl (\x c -> if c == a then x else c `P.cons` x) P.empty (P.pack xs)) -prop_foldl2BB xs = P.foldl (\xs c -> c `P.cons` xs) P.empty (P.pack xs) == P.reverse (P.pack xs) - -prop_foldr1BB xs a = ((foldr (\c x -> if c == a then x else c:x) [] xs)) == - (P.unpack $ P.foldr (\c x -> if c == a then x else c `P.cons` x) - P.empty (P.pack xs)) - -prop_foldr2BB xs = P.foldr (\c xs -> c `P.cons` xs) P.empty (P.pack xs) == (P.pack xs) - -prop_foldl1_1BB xs = - (not . P.null) xs ==> - P.foldl1 (\x c -> if c > x then c else x) xs == - P.foldl (\x c -> if c > x then c else x) 0 xs - -prop_foldl1_2BB xs = - (not . P.null) xs ==> - P.foldl1 const xs == P.head xs - -prop_foldl1_3BB xs = - (not . P.null) xs ==> - P.foldl1 (flip const) xs == P.last xs - -prop_foldr1_1BB xs = - (not . P.null) xs ==> - P.foldr1 (\c x -> if c > x then c else x) xs == - P.foldr (\c x -> if c > x then c else x) 0 xs - -prop_foldr1_2BB xs = - (not . P.null) xs ==> - P.foldr1 (flip const) xs == P.last xs - -prop_foldr1_3BB xs = - (not . P.null) xs ==> - P.foldr1 const xs == P.head xs - -prop_takeWhileBB xs a = (takeWhile (/= a) xs) == (P.unpack . (P.takeWhile (/= a)) . P.pack) xs - -prop_dropWhileBB xs a = (dropWhile (/= a) xs) == (P.unpack . (P.dropWhile (/= a)) . P.pack) xs - -prop_takeBB xs = (take 10 xs) == (P.unpack . (P.take 10) . P.pack) xs - -prop_dropBB xs = (drop 10 xs) == (P.unpack . (P.drop 10) . P.pack) xs - -prop_splitAtBB i xs = -- collect (i >= 0 && i < length xs) $ - splitAt i xs == - let (x,y) = P.splitAt i (P.pack xs) in (P.unpack x, P.unpack y) - -prop_spanBB xs a = (span (/=a) xs) == (let (x,y) = P.span (/=a) (P.pack xs) - in (P.unpack x, P.unpack y)) - -prop_breakBB xs a = (break (/=a) xs) == (let (x,y) = P.break (/=a) (P.pack xs) - in (P.unpack x, P.unpack y)) - -prop_reverse1BB xs = (reverse xs) == (P.unpack . P.reverse . P.pack) xs -prop_reverse2BB xs = P.reverse (P.pack xs) == P.pack (reverse xs) -prop_reverse3BB xs = reverse (P.unpack xs) == (P.unpack . P.reverse) xs - -prop_elemBB xs a = (a `elem` xs) == (a `P.elem` (P.pack xs)) - -prop_notElemBB c xs = P.notElem c (P.pack xs) == notElem c xs - --- should try to stress it -prop_concat1BB xs = (concat [xs,xs]) == (P.unpack $ P.concat [P.pack xs, P.pack xs]) -prop_concat2BB xs = (concat [xs,[]]) == (P.unpack $ P.concat [P.pack xs, P.pack []]) -prop_concatBB xss = P.concat (map P.pack xss) == P.pack (concat xss) - -prop_concatMapBB xs = C.concatMap C.singleton xs == (C.pack . concatMap (:[]) . C.unpack) xs - -prop_anyBB xs a = (any (== a) xs) == (P.any (== a) (P.pack xs)) -prop_allBB xs a = (all (== a) xs) == (P.all (== a) (P.pack xs)) - -prop_linesBB xs = (lines xs) == ((map C.unpack) . C.lines . C.pack) xs - -prop_unlinesBB xs = (unlines.lines) xs == (C.unpack. C.unlines . C.lines .C.pack) xs - -prop_wordsBB xs = - (words xs) == ((map C.unpack) . C.words . C.pack) xs --- prop_wordstokensBB xs = C.words xs == C.tokens isSpace xs - -prop_unwordsBB xs = - (C.pack.unwords.words) xs == (C.unwords . C.words .C.pack) xs - -prop_groupBB xs = group xs == (map P.unpack . P.group . P.pack) xs - -prop_groupByBB xs = groupBy (==) xs == (map P.unpack . P.groupBy (==) . P.pack) xs -prop_groupBy1BB xs = groupBy (/=) xs == (map P.unpack . P.groupBy (/=) . P.pack) xs - -prop_joinBB xs ys = (concat . (intersperse ys) . lines) xs == - (C.unpack $ C.intercalate (C.pack ys) (C.lines (C.pack xs))) - -prop_elemIndex1BB xs = (elemIndex 'X' xs) == (C.elemIndex 'X' (C.pack xs)) -prop_elemIndex2BB xs c = (elemIndex c xs) == (C.elemIndex c (C.pack xs)) - --- prop_lineIndices1BB xs = C.elemIndices '\n' xs == C.lineIndices xs - -prop_countBB c xs = length (P.elemIndices c xs) == P.count c xs - -prop_elemIndexEnd1BB c xs = (P.elemIndexEnd c (P.pack xs)) == - (case P.elemIndex c (P.pack (reverse xs)) of - Nothing -> Nothing - Just i -> Just (length xs -1 -i)) - -prop_elemIndexEnd2BB c xs = (P.elemIndexEnd c (P.pack xs)) == - ((-) (length xs - 1) `fmap` P.elemIndex c (P.pack $ reverse xs)) - -prop_elemIndicesBB xs c = elemIndices c xs == P.elemIndices c (P.pack xs) - -prop_findIndexBB xs a = (findIndex (==a) xs) == (P.findIndex (==a) (P.pack xs)) - -prop_findIndiciesBB xs c = (findIndices (==c) xs) == (P.findIndices (==c) (P.pack xs)) - --- example properties from QuickCheck.Batch -prop_sort1BB xs = sort xs == (P.unpack . P.sort . P.pack) xs -prop_sort2BB xs = (not (null xs)) ==> (P.head . P.sort . P.pack $ xs) == minimum xs -prop_sort3BB xs = (not (null xs)) ==> (P.last . P.sort . P.pack $ xs) == maximum xs -prop_sort4BB xs ys = - (not (null xs)) ==> - (not (null ys)) ==> - (P.head . P.sort) (P.append (P.pack xs) (P.pack ys)) == min (minimum xs) (minimum ys) -prop_sort5BB xs ys = - (not (null xs)) ==> - (not (null ys)) ==> - (P.last . P.sort) (P.append (P.pack xs) (P.pack ys)) == max (maximum xs) (maximum ys) - -prop_intersperseBB c xs = (intersperse c xs) == (P.unpack $ P.intersperse c (P.pack xs)) - -prop_transposeBB xs = (transpose xs) == ((map P.unpack) . P.transpose . (map P.pack)) xs - -prop_maximumBB xs = (not (null xs)) ==> (maximum xs) == (P.maximum ( P.pack xs )) -prop_minimumBB xs = (not (null xs)) ==> (minimum xs) == (P.minimum ( P.pack xs )) - --- prop_dropSpaceBB xs = dropWhile isSpace xs == C.unpack (C.dropSpace (C.pack xs)) --- prop_dropSpaceEndBB xs = (C.reverse . (C.dropWhile isSpace) . C.reverse) (C.pack xs) == --- (C.dropSpaceEnd (C.pack xs)) - --- prop_breakSpaceBB xs = --- (let (x,y) = C.breakSpace (C.pack xs) --- in (C.unpack x, C.unpack y)) == (break isSpace xs) - -prop_spanEndBB xs = - (C.spanEnd (not . isSpace) (C.pack xs)) == - (let (x,y) = C.span (not.isSpace) (C.reverse (C.pack xs)) in (C.reverse y,C.reverse x)) - -prop_breakEndBB p xs = P.breakEnd (not.p) xs == P.spanEnd p xs - --- prop_breakCharBB c xs = --- (break (==c) xs) == --- (let (x,y) = C.breakChar c (C.pack xs) in (C.unpack x, C.unpack y)) - --- prop_spanCharBB c xs = --- (break (/=c) xs) == --- (let (x,y) = C.spanChar c (C.pack xs) in (C.unpack x, C.unpack y)) - --- prop_spanChar_1BB c xs = --- (C.span (==c) xs) == C.spanChar c xs - --- prop_wordsBB' xs = --- (C.unpack . C.unwords . C.words' . C.pack) xs == --- (map (\c -> if isSpace c then ' ' else c) xs) - --- prop_linesBB' xs = (C.unpack . C.unlines' . C.lines' . C.pack) xs == (xs) - -prop_unfoldrBB c n = - (fst $ C.unfoldrN n fn c) == (C.pack $ take n $ unfoldr fn c) - where - fn x = Just (x, chr (ord x + 1)) - -prop_prefixBB xs ys = isPrefixOf xs ys == (P.pack xs `P.isPrefixOf` P.pack ys) -prop_suffixBB xs ys = isSuffixOf xs ys == (P.pack xs `P.isSuffixOf` P.pack ys) - -prop_copyBB xs = let p = P.pack xs in P.copy p == p - -prop_initsBB xs = inits xs == map P.unpack (P.inits (P.pack xs)) - -prop_tailsBB xs = tails xs == map P.unpack (P.tails (P.pack xs)) - -prop_findSubstringsBB s x l - = C.findSubstrings (C.pack p) (C.pack s) == naive_findSubstrings p s - where - _ = l :: Int - _ = x :: Int - - -- we look for some random substring of the test string - p = take (model l) $ drop (model x) s - - -- naive reference implementation - naive_findSubstrings :: String -> String -> [Int] - naive_findSubstrings p s = [x | x <- [0..length s], p `isPrefixOf` drop x s] - -prop_replicate1BB n c = P.unpack (P.replicate n c) == replicate n c -prop_replicate2BB n c = P.replicate n c == fst (P.unfoldrN n (\u -> Just (u,u)) c) - -prop_replicate3BB c = P.unpack (P.replicate 0 c) == replicate 0 c - -prop_readintBB n = (fst . fromJust . C.readInt . C.pack . show) n == (n :: Int) -prop_readintLL n = (fst . fromJust . D.readInt . D.pack . show) n == (n :: Int) - -prop_readint2BB s = - let s' = filter (\c -> c `notElem` ['0'..'9']) s - in C.readInt (C.pack s') == Nothing - --- prop_filterChar1BB c xs = (filter (==c) xs) == ((C.unpack . C.filterChar c . C.pack) xs) --- prop_filterChar2BB c xs = (C.filter (==c) (C.pack xs)) == (C.filterChar c (C.pack xs)) --- prop_filterChar3BB c xs = C.filterChar c xs == C.replicate (C.count c xs) c - --- prop_filterNotChar1BB c xs = (filter (/=c) xs) == ((C.unpack . C.filterNotChar c . C.pack) xs) --- prop_filterNotChar2BB c xs = (C.filter (/=c) (C.pack xs)) == (C.filterNotChar c (C.pack xs)) - --- prop_joinjoinpathBB xs ys c = C.joinWithChar c xs ys == C.join (C.singleton c) [xs,ys] - -prop_zipBB xs ys = zip xs ys == P.zip (P.pack xs) (P.pack ys) -prop_zip1BB xs ys = P.zip xs ys == zip (P.unpack xs) (P.unpack ys) - -prop_zipWithBB xs ys = P.zipWith (,) xs ys == P.zip xs ys --- prop_zipWith'BB xs ys = P.pack (P.zipWith (+) xs ys) == P.zipWith' (+) xs ys - -prop_unzipBB x = let (xs,ys) = unzip x in (P.pack xs, P.pack ys) == P.unzip x - ------------------------------------------------------------------------- --- The entry point - -main = run tests - -run :: [(String, Int -> IO ())] -> IO () -run tests = do - x <- getArgs - let n = if null x then 100 else read . head $ x - mapM_ (\(s,a) -> printf "%-25s: " s >> a n) tests - --- --- And now a list of all the properties to test. --- - -tests = bb_tests ++ ll_tests - ------------------------------------------------------------------------- --- extra ByteString properties - -bb_tests = - [ ("bijection", mytest prop_bijectionBB) - , ("bijection'", mytest prop_bijectionBB') - , ("pack/unpack", mytest prop_packunpackBB) - , ("unpack/pack", mytest prop_packunpackBB') - , ("eq 1", mytest prop_eq1BB) - , ("eq 2", mytest prop_eq3BB) - , ("eq 3", mytest prop_eq3BB) - , ("compare 1", mytest prop_compare1BB) - , ("compare 2", mytest prop_compare2BB) - , ("compare 3", mytest prop_compare3BB) - , ("compare 4", mytest prop_compare4BB) - , ("compare 5", mytest prop_compare5BB) - , ("compare 6", mytest prop_compare6BB) - , ("compare 7", mytest prop_compare7BB) - , ("compare 8", mytest prop_compare8BB) - , ("empty 1", mytest prop_nil1BB) - , ("empty 2", mytest prop_nil2BB) - , ("null", mytest prop_nullBB) - , ("length 1", mytest prop_lengthBB) - , ("length 2", mytest prop_lengthSBB) - , ("cons 1", mytest prop_consBB) - , ("cons 2", mytest prop_cons1BB) - , ("cons 3", mytest prop_cons2BB) - , ("cons 4", mytest prop_cons3BB) - , ("cons 5", mytest prop_cons4BB) - , ("snoc", mytest prop_snoc1BB) - , ("head 1", mytest prop_head1BB) - , ("head 2", mytest prop_head2BB) - , ("head 3", mytest prop_head3BB) - , ("tail", mytest prop_tailBB) - , ("tail 1", mytest prop_tail1BB) - , ("last", mytest prop_lastBB) - , ("init", mytest prop_initBB) - , ("append 1", mytest prop_append1BB) - , ("append 2", mytest prop_append2BB) - , ("append 3", mytest prop_append3BB) - , ("map 1", mytest prop_map1BB) - , ("map 2", mytest prop_map2BB) - , ("map 3", mytest prop_map3BB) - , ("filter1", mytest prop_filter1BB) - , ("filter2", mytest prop_filter2BB) - , ("map fusion", mytest prop_mapfusionBB) - , ("filter fusion", mytest prop_filterfusionBB) - , ("reverse 1", mytest prop_reverse1BB) - , ("reverse 2", mytest prop_reverse2BB) - , ("reverse 3", mytest prop_reverse3BB) - , ("foldl 1", mytest prop_foldl1BB) - , ("foldl 2", mytest prop_foldl2BB) - , ("foldr 1", mytest prop_foldr1BB) - , ("foldr 2", mytest prop_foldr2BB) - , ("foldl1 1", mytest prop_foldl1_1BB) - , ("foldl1 2", mytest prop_foldl1_2BB) - , ("foldl1 3", mytest prop_foldl1_3BB) - , ("foldr1 1", mytest prop_foldr1_1BB) - , ("foldr1 2", mytest prop_foldr1_2BB) - , ("foldr1 3", mytest prop_foldr1_3BB) - , ("scanl/foldl", mytest prop_scanlfoldlBB) - , ("all", mytest prop_allBB) - , ("any", mytest prop_anyBB) - , ("take", mytest prop_takeBB) - , ("drop", mytest prop_dropBB) - , ("takeWhile", mytest prop_takeWhileBB) - , ("dropWhile", mytest prop_dropWhileBB) - , ("splitAt", mytest prop_splitAtBB) - , ("span", mytest prop_spanBB) - , ("break", mytest prop_breakBB) - , ("elem", mytest prop_elemBB) - , ("notElem", mytest prop_notElemBB) - , ("concat 1", mytest prop_concat1BB) - , ("concat 2", mytest prop_concat2BB) - , ("concat 3", mytest prop_concatBB) - , ("lines", mytest prop_linesBB) - , ("unlines", mytest prop_unlinesBB) - , ("words", mytest prop_wordsBB) - , ("unwords", mytest prop_unwordsBB) - , ("group", mytest prop_groupBB) - , ("groupBy", mytest prop_groupByBB) - , ("groupBy 1", mytest prop_groupBy1BB) - , ("join", mytest prop_joinBB) - , ("elemIndex 1", mytest prop_elemIndex1BB) - , ("elemIndex 2", mytest prop_elemIndex2BB) - , ("findIndex", mytest prop_findIndexBB) - , ("findIndicies", mytest prop_findIndiciesBB) - , ("elemIndices", mytest prop_elemIndicesBB) - , ("find", mytest prop_findBB) - , ("find/findIndex", mytest prop_find_findIndexBB) - , ("sort 1", mytest prop_sort1BB) - , ("sort 2", mytest prop_sort2BB) - , ("sort 3", mytest prop_sort3BB) - , ("sort 4", mytest prop_sort4BB) - , ("sort 5", mytest prop_sort5BB) - , ("intersperse", mytest prop_intersperseBB) - , ("maximum", mytest prop_maximumBB) - , ("minimum", mytest prop_minimumBB) --- , ("breakChar", mytest prop_breakCharBB) --- , ("spanChar 1", mytest prop_spanCharBB) --- , ("spanChar 2", mytest prop_spanChar_1BB) --- , ("breakSpace", mytest prop_breakSpaceBB) --- , ("dropSpace", mytest prop_dropSpaceBB) - , ("spanEnd", mytest prop_spanEndBB) - , ("breakEnd", mytest prop_breakEndBB) - , ("elemIndexEnd 1",mytest prop_elemIndexEnd1BB) - , ("elemIndexEnd 2",mytest prop_elemIndexEnd2BB) --- , ("words'", mytest prop_wordsBB') --- , ("lines'", mytest prop_linesBB') --- , ("dropSpaceEnd", mytest prop_dropSpaceEndBB) - , ("unfoldr", mytest prop_unfoldrBB) - , ("prefix", mytest prop_prefixBB) - , ("suffix", mytest prop_suffixBB) - , ("copy", mytest prop_copyBB) - , ("inits", mytest prop_initsBB) - , ("tails", mytest prop_tailsBB) - , ("findSubstrings ",mytest prop_findSubstringsBB) - , ("replicate1", mytest prop_replicate1BB) - , ("replicate2", mytest prop_replicate2BB) - , ("replicate3", mytest prop_replicate3BB) - , ("readInt", mytest prop_readintBB) - , ("readInt 2", mytest prop_readint2BB) - , ("Lazy.readInt", mytest prop_readintLL) --- , ("filterChar1", mytest prop_filterChar1BB) --- , ("filterChar2", mytest prop_filterChar2BB) --- , ("filterChar3", mytest prop_filterChar3BB) --- , ("filterNotChar1", mytest prop_filterNotChar1BB) --- , ("filterNotChar2", mytest prop_filterNotChar2BB) - , ("tail", mytest prop_tailSBB) - , ("index", mytest prop_indexBB) - , ("unsafeIndex", mytest prop_unsafeIndexBB) --- , ("map'", mytest prop_mapBB') - , ("filter", mytest prop_filterBB) - , ("elem", mytest prop_elemSBB) - , ("take", mytest prop_takeSBB) - , ("drop", mytest prop_dropSBB) - , ("splitAt", mytest prop_splitAtSBB) - , ("foldl", mytest prop_foldlBB) - , ("foldr", mytest prop_foldrBB) - , ("takeWhile ", mytest prop_takeWhileSBB) - , ("dropWhile ", mytest prop_dropWhileSBB) - , ("span ", mytest prop_spanSBB) - , ("break ", mytest prop_breakSBB) - , ("breakspan", mytest prop_breakspan_1BB) - , ("lines ", mytest prop_linesSBB) - , ("unlines ", mytest prop_unlinesSBB) - , ("words ", mytest prop_wordsSBB) - , ("unwords ", mytest prop_unwordsSBB) --- , ("wordstokens", mytest prop_wordstokensBB) - , ("splitWith", mytest prop_splitWithBB) - , ("joinsplit", mytest prop_joinsplitBB) --- , ("lineIndices", mytest prop_lineIndices1BB) - , ("count", mytest prop_countBB) --- , ("linessplit", mytest prop_linessplitBB) - , ("splitsplitWith", mytest prop_splitsplitWithBB) --- , ("joinjoinpath", mytest prop_joinjoinpathBB) - , ("zip", mytest prop_zipBB) - , ("zip1", mytest prop_zip1BB) - , ("zipWith", mytest prop_zipWithBB) --- , ("zipWith'", mytest prop_zipWith'BB) - , ("unzip", mytest prop_unzipBB) - , ("concatMap", mytest prop_concatMapBB) - ] - - ------------------------------------------------------------------------- --- Extra lazy properties - -ll_tests = - [("eq 1", mytest prop_eq1) - ,("eq 2", mytest prop_eq2) - ,("eq 3", mytest prop_eq3) - ,("eq refl", mytest prop_eq_refl) - ,("eq symm", mytest prop_eq_symm) - ,("compare 1", mytest prop_compare1) - ,("compare 2", mytest prop_compare2) - ,("compare 3", mytest prop_compare3) - ,("compare 4", mytest prop_compare4) - ,("compare 5", mytest prop_compare5) - ,("compare 6", mytest prop_compare6) - ,("compare 7", mytest prop_compare7) - ,("compare 8", mytest prop_compare8) - ,("empty 1", mytest prop_empty1) - ,("empty 2", mytest prop_empty2) - ,("pack/unpack", mytest prop_packunpack) - ,("unpack/pack", mytest prop_unpackpack) - ,("null", mytest prop_null) - ,("length 1", mytest prop_length1) - ,("length 2", mytest prop_length2) - ,("cons 1" , mytest prop_cons1) - ,("cons 2" , mytest prop_cons2) - ,("cons 3" , mytest prop_cons3) - ,("cons 4" , mytest prop_cons4) - ,("snoc" , mytest prop_snoc1) - ,("head/pack", mytest prop_head) - ,("head/unpack", mytest prop_head1) - ,("tail/pack", mytest prop_tail) - ,("tail/unpack", mytest prop_tail1) - ,("last", mytest prop_last) - ,("init", mytest prop_init) - ,("append 1", mytest prop_append1) - ,("append 2", mytest prop_append2) - ,("append 3", mytest prop_append3) - ,("map 1", mytest prop_map1) - ,("map 2", mytest prop_map2) - ,("map 3", mytest prop_map3) - ,("filter 1", mytest prop_filter1) - ,("filter 2", mytest prop_filter2) - ,("reverse", mytest prop_reverse) - ,("reverse1", mytest prop_reverse1) - ,("reverse2", mytest prop_reverse2) - ,("transpose", mytest prop_transpose) - ,("foldl", mytest prop_foldl) - ,("foldl/reverse", mytest prop_foldl_1) - ,("foldr", mytest prop_foldr) - ,("foldr/id", mytest prop_foldr_1) - ,("foldl1/foldl", mytest prop_foldl1_1) - ,("foldl1/head", mytest prop_foldl1_2) - ,("foldl1/tail", mytest prop_foldl1_3) - ,("foldr1/foldr", mytest prop_foldr1_1) - ,("foldr1/last", mytest prop_foldr1_2) - ,("foldr1/head", mytest prop_foldr1_3) - ,("concat 1", mytest prop_concat1) - ,("concat 2", mytest prop_concat2) - ,("concat/pack", mytest prop_concat3) - ,("any", mytest prop_any) - ,("all", mytest prop_all) - ,("maximum", mytest prop_maximum) - ,("minimum", mytest prop_minimum) - ,("replicate 1", mytest prop_replicate1) - ,("replicate 2", mytest prop_replicate2) - ,("take", mytest prop_take1) - ,("drop", mytest prop_drop1) - ,("splitAt", mytest prop_drop1) - ,("takeWhile", mytest prop_takeWhile) - ,("dropWhile", mytest prop_dropWhile) - ,("break", mytest prop_break) - ,("span", mytest prop_span) - ,("break/span", mytest prop_breakspan) --- ,("break/breakByte", mytest prop_breakByte) --- ,("span/spanByte", mytest prop_spanByte) - ,("split", mytest prop_split) - ,("splitWith", mytest prop_splitWith) - ,("join.split/id", mytest prop_joinsplit) --- ,("join/joinByte", mytest prop_joinjoinByte) - ,("group", mytest prop_group) --- ,("groupBy", mytest prop_groupBy) - ,("index", mytest prop_index) - ,("elemIndex", mytest prop_elemIndex) - ,("elemIndices", mytest prop_elemIndices) - ,("count/elemIndices", mytest prop_count) - ,("findIndex", mytest prop_findIndex) - ,("findIndices", mytest prop_findIndicies) - ,("find", mytest prop_find) - ,("find/findIndex", mytest prop_find_findIndex) - ,("elem", mytest prop_elem) - ,("notElem", mytest prop_notElem) - ,("elem/notElem", mytest prop_elem_notelem) --- ,("filterByte 1", mytest prop_filterByte) --- ,("filterByte 2", mytest prop_filterByte2) --- ,("filterNotByte 1", mytest prop_filterNotByte) --- ,("filterNotByte 2", mytest prop_filterNotByte2) - ,("isPrefixOf", mytest prop_isPrefixOf) - ,("concatMap", mytest prop_concatMap) - ] - diff --git a/testsuite/tests/lib/Data.ByteString/bytestring005.stdout b/testsuite/tests/lib/Data.ByteString/bytestring005.stdout deleted file mode 100644 index 2efe5278dc..0000000000 --- a/testsuite/tests/lib/Data.ByteString/bytestring005.stdout +++ /dev/null @@ -1,226 +0,0 @@ -bijection : OK, 100 tests. -bijection' : OK, 100 tests. -pack/unpack : OK, 100 tests. -unpack/pack : OK, 100 tests. -eq 1 : OK, 100 tests. -eq 2 : OK, 100 tests. -eq 3 : OK, 100 tests. -compare 1 : OK, 100 tests. -compare 2 : OK, 100 tests. -compare 3 : OK, 100 tests. -compare 4 : OK, 100 tests. -compare 5 : OK, 100 tests. -compare 6 : OK, 100 tests. -compare 7 : OK, 100 tests. -compare 8 : OK, 100 tests. -empty 1 : OK, 100 tests. -empty 2 : OK, 100 tests. -null : OK, 100 tests. -length 1 : OK, 100 tests. -length 2 : OK, 100 tests. -cons 1 : OK, 100 tests. -cons 2 : OK, 100 tests. -cons 3 : OK, 100 tests. -cons 4 : OK, 100 tests. -cons 5 : OK, 100 tests. -snoc : OK, 100 tests. -head 1 : OK, 100 tests. -head 2 : OK, 100 tests. -head 3 : OK, 100 tests. -tail : OK, 100 tests. -tail 1 : OK, 100 tests. -last : OK, 100 tests. -init : OK, 100 tests. -append 1 : OK, 100 tests. -append 2 : OK, 100 tests. -append 3 : OK, 100 tests. -map 1 : OK, 100 tests. -map 2 : OK, 100 tests. -map 3 : OK, 100 tests. -filter1 : OK, 100 tests. -filter2 : OK, 100 tests. -map fusion : OK, 100 tests. -filter fusion : OK, 100 tests. -reverse 1 : OK, 100 tests. -reverse 2 : OK, 100 tests. -reverse 3 : OK, 100 tests. -foldl 1 : OK, 100 tests. -foldl 2 : OK, 100 tests. -foldr 1 : OK, 100 tests. -foldr 2 : OK, 100 tests. -foldl1 1 : OK, 100 tests. -foldl1 2 : OK, 100 tests. -foldl1 3 : OK, 100 tests. -foldr1 1 : OK, 100 tests. -foldr1 2 : OK, 100 tests. -foldr1 3 : OK, 100 tests. -scanl/foldl : OK, 100 tests. -all : OK, 100 tests. -any : OK, 100 tests. -take : OK, 100 tests. -drop : OK, 100 tests. -takeWhile : OK, 100 tests. -dropWhile : OK, 100 tests. -splitAt : OK, 100 tests. -span : OK, 100 tests. -break : OK, 100 tests. -elem : OK, 100 tests. -notElem : OK, 100 tests. -concat 1 : OK, 100 tests. -concat 2 : OK, 100 tests. -concat 3 : OK, 100 tests. -lines : OK, 100 tests. -unlines : OK, 100 tests. -words : OK, 100 tests. -unwords : OK, 100 tests. -group : OK, 100 tests. -groupBy : OK, 100 tests. -groupBy 1 : OK, 100 tests. -join : OK, 100 tests. -elemIndex 1 : OK, 100 tests. -elemIndex 2 : OK, 100 tests. -findIndex : OK, 100 tests. -findIndicies : OK, 100 tests. -elemIndices : OK, 100 tests. -find : OK, 100 tests. -find/findIndex : OK, 100 tests. -sort 1 : OK, 100 tests. -sort 2 : OK, 100 tests. -sort 3 : OK, 100 tests. -sort 4 : OK, 100 tests. -sort 5 : OK, 100 tests. -intersperse : OK, 100 tests. -maximum : OK, 100 tests. -minimum : OK, 100 tests. -spanEnd : OK, 100 tests. -breakEnd : OK, 100 tests. -elemIndexEnd 1 : OK, 100 tests. -elemIndexEnd 2 : OK, 100 tests. -unfoldr : OK, 100 tests. -prefix : OK, 100 tests. -suffix : OK, 100 tests. -copy : OK, 100 tests. -inits : OK, 100 tests. -tails : OK, 100 tests. -findSubstrings : OK, 100 tests. -replicate1 : OK, 100 tests. -replicate2 : OK, 100 tests. -replicate3 : OK, 100 tests. -readInt : OK, 100 tests. -readInt 2 : OK, 100 tests. -Lazy.readInt : OK, 100 tests. -tail : OK, 100 tests. -index : OK, 100 tests. -unsafeIndex : OK, 100 tests. -filter : OK, 100 tests. -elem : OK, 100 tests. -take : OK, 100 tests. -drop : OK, 100 tests. -splitAt : OK, 100 tests. -foldl : OK, 100 tests. -foldr : OK, 100 tests. -takeWhile : OK, 100 tests. -dropWhile : OK, 100 tests. -span : OK, 100 tests. -break : OK, 100 tests. -breakspan : OK, 100 tests. -lines : OK, 100 tests. -unlines : OK, 100 tests. -words : OK, 100 tests. -unwords : OK, 100 tests. -splitWith : OK, 100 tests. -joinsplit : OK, 100 tests. -count : OK, 100 tests. -splitsplitWith : OK, 100 tests. -zip : OK, 100 tests. -zip1 : OK, 100 tests. -zipWith : OK, 100 tests. -unzip : OK, 100 tests. -concatMap : OK, 100 tests. -eq 1 : OK, 100 tests. -eq 2 : OK, 100 tests. -eq 3 : OK, 100 tests. -eq refl : OK, 100 tests. -eq symm : OK, 100 tests. -compare 1 : OK, 100 tests. -compare 2 : OK, 100 tests. -compare 3 : OK, 100 tests. -compare 4 : OK, 100 tests. -compare 5 : OK, 100 tests. -compare 6 : OK, 100 tests. -compare 7 : OK, 100 tests. -compare 8 : OK, 100 tests. -empty 1 : OK, 100 tests. -empty 2 : OK, 100 tests. -pack/unpack : OK, 100 tests. -unpack/pack : OK, 100 tests. -null : OK, 100 tests. -length 1 : OK, 100 tests. -length 2 : OK, 100 tests. -cons 1 : OK, 100 tests. -cons 2 : OK, 100 tests. -cons 3 : OK, 100 tests. -cons 4 : OK, 100 tests. -snoc : OK, 100 tests. -head/pack : OK, 100 tests. -head/unpack : OK, 100 tests. -tail/pack : OK, 100 tests. -tail/unpack : OK, 100 tests. -last : OK, 100 tests. -init : OK, 100 tests. -append 1 : OK, 100 tests. -append 2 : OK, 100 tests. -append 3 : OK, 100 tests. -map 1 : OK, 100 tests. -map 2 : OK, 100 tests. -map 3 : OK, 100 tests. -filter 1 : OK, 100 tests. -filter 2 : OK, 100 tests. -reverse : OK, 100 tests. -reverse1 : OK, 100 tests. -reverse2 : OK, 100 tests. -transpose : OK, 100 tests. -foldl : OK, 100 tests. -foldl/reverse : OK, 100 tests. -foldr : OK, 100 tests. -foldr/id : OK, 100 tests. -foldl1/foldl : OK, 100 tests. -foldl1/head : OK, 100 tests. -foldl1/tail : OK, 100 tests. -foldr1/foldr : OK, 100 tests. -foldr1/last : OK, 100 tests. -foldr1/head : OK, 100 tests. -concat 1 : OK, 100 tests. -concat 2 : OK, 100 tests. -concat/pack : OK, 100 tests. -any : OK, 100 tests. -all : OK, 100 tests. -maximum : OK, 100 tests. -minimum : OK, 100 tests. -replicate 1 : OK, 100 tests. -replicate 2 : OK, 100 tests. -take : OK, 100 tests. -drop : OK, 100 tests. -splitAt : OK, 100 tests. -takeWhile : OK, 100 tests. -dropWhile : OK, 100 tests. -break : OK, 100 tests. -span : OK, 100 tests. -break/span : OK, 100 tests. -split : OK, 100 tests. -splitWith : OK, 100 tests. -join.split/id : OK, 100 tests. -group : OK, 100 tests. -index : OK, 100 tests. -elemIndex : OK, 100 tests. -elemIndices : OK, 100 tests. -count/elemIndices : OK, 100 tests. -findIndex : OK, 100 tests. -findIndices : OK, 100 tests. -find : OK, 100 tests. -find/findIndex : OK, 100 tests. -elem : OK, 100 tests. -notElem : OK, 100 tests. -elem/notElem : OK, 100 tests. -isPrefixOf : OK, 100 tests. -concatMap : OK, 100 tests. diff --git a/testsuite/tests/lib/Data.ByteString/bytestring006.hs b/testsuite/tests/lib/Data.ByteString/bytestring006.hs deleted file mode 100644 index d58147a485..0000000000 --- a/testsuite/tests/lib/Data.ByteString/bytestring006.hs +++ /dev/null @@ -1,10 +0,0 @@ - -module Main (main) where - -import qualified Data.ByteString.Char8 as B -import qualified Data.ByteString.Lazy.Char8 as L - -main :: IO () -main = do print $ map B.unpack $ B.lines $ B.pack "a\n\nb\n\nc" - print $ map L.unpack $ L.lines $ L.pack "a\n\nb\n\nc" - diff --git a/testsuite/tests/lib/Data.ByteString/bytestring006.stdout b/testsuite/tests/lib/Data.ByteString/bytestring006.stdout deleted file mode 100644 index 240d746197..0000000000 --- a/testsuite/tests/lib/Data.ByteString/bytestring006.stdout +++ /dev/null @@ -1,2 +0,0 @@ -["a","","b","","c"] -["a","","b","","c"] |