comfort-array-0.5.3: test/DocTest/Data/Array/Comfort/Storable.hs
-- Do not edit! Automatically created with doctest-extract from src/Data/Array/Comfort/Storable.hs
{-# LINE 87 "src/Data/Array/Comfort/Storable.hs" #-}
module DocTest.Data.Array.Comfort.Storable where
import Test.DocTest.Base
import qualified Test.DocTest.Driver as DocTest
{-# LINE 88 "src/Data/Array/Comfort/Storable.hs" #-}
import qualified Data.Array.Comfort.Storable as Array
import qualified Data.Array.Comfort.Shape as Shape
import Data.Array.Comfort.Storable (Array, (!))
import qualified Test.QuickCheck as QC
import Test.ChasingBottoms.IsBottom (isBottom)
import Control.Applicative ((<$>), (<*>))
import Data.Complex (Complex((:+)))
import Data.Word (Word16)
type ShapeInt = Shape.ZeroBased Int
genArray :: QC.Gen (Array ShapeInt Word16)
genArray = Array.vectorFromList <$> QC.arbitrary
genArray2 :: QC.Gen (Array (ShapeInt,ShapeInt) Word16)
genArray2 = do
xs <- QC.arbitrary
let n = length xs
(k,m) <-
if n == 0
then QC.elements [(,) 0, flip (,) 0] <*> QC.choose (1,n)
else fmap (\m -> (div n m, m)) $ QC.choose (1,n)
return $ Array.fromList (Shape.ZeroBased k, Shape.ZeroBased m) xs
genNonEmptyArray2 :: QC.Gen (Array (ShapeInt,ShapeInt) Word16)
genNonEmptyArray2 = do
xs <- QC.getNonEmpty <$> QC.arbitrary
let n = length xs
m <- QC.choose (1,n)
return $ Array.fromList (Shape.ZeroBased (div n m), Shape.ZeroBased m) xs
infix 4 ==?
(==?) :: a -> a -> (a,a)
(==?) = (,)
forAllNonEmpty :: (Eq b) => (Array ShapeInt Word16 -> (b,b)) -> QC.Property
forAllNonEmpty f =
QC.forAll genArray $ \xs ->
case f xs of
(resultArray,resultList) ->
if Array.shape xs == Shape.ZeroBased 0
then isBottom resultArray
else resultArray == resultList
type X = Shape.Element
test :: DocTest.T ()
test = do
DocTest.printPrefix "Data.Array.Comfort.Storable:152: "
{-# LINE 152 "src/Data/Array/Comfort/Storable.hs" #-}
DocTest.example
{-# LINE 152 "src/Data/Array/Comfort/Storable.hs" #-}
(Array.fromList (Shape.ZeroBased (5::Int)) ['a'..])
[ExpectedLine [LineChunk "StorableArray.fromList (ZeroBased {zeroBasedSize = 5}) \"abcde\""]]
DocTest.printPrefix "Data.Array.Comfort.Storable:165: "
{-# LINE 165 "src/Data/Array/Comfort/Storable.hs" #-}
DocTest.example
{-# LINE 165 "src/Data/Array/Comfort/Storable.hs" #-}
(Array.fromTuple ('a',('b','c')) :: Array.Array (Shape.NestedTuple Shape.TupleIndex (X,(X,X))) Char)
[ExpectedLine [LineChunk "StorableArray.fromList (NestedTuple {getNestedTuple = (Element 0,(Element 1,Element 2))}) \"abc\""]]
DocTest.printPrefix "Data.Array.Comfort.Storable:168: "
{-# LINE 168 "src/Data/Array/Comfort/Storable.hs" #-}
DocTest.example
{-# LINE 168 "src/Data/Array/Comfort/Storable.hs" #-}
( let arr = Array.fromTuple ('a',('b','c')) :: Array.Array (Shape.NestedTuple Shape.TupleAccessor (X,(X,X))) Char
in (arr ! fst, arr ! (fst.snd))
)
[ExpectedLine [LineChunk "('a','b')"]]
DocTest.printPrefix "Data.Array.Comfort.Storable:189: "
{-# LINE 189 "src/Data/Array/Comfort/Storable.hs" #-}
DocTest.example
{-# LINE 189 "src/Data/Array/Comfort/Storable.hs" #-}
( let arr = Array.fromRecord ('a' :+ 'b') in
let (real:+imag) = Shape.indexRecordFromShape $ Array.shape arr in
(arr ! real, arr ! imag)
)
[ExpectedLine [LineChunk "('a','b')"]]
DocTest.printPrefix "Data.Array.Comfort.Storable:310: "
{-# LINE 310 "src/Data/Array/Comfort/Storable.hs" #-}
DocTest.property
{-# LINE 310 "src/Data/Array/Comfort/Storable.hs" #-}
(QC.forAll genNonEmptyArray2 $ \xs -> QC.forAll (QC.elements $ Shape.indices $ Array.shape xs) $ \(ix0,ix1) -> Array.pick xs ix0 ! ix1 == xs!(ix0,ix1))
DocTest.printPrefix "Data.Array.Comfort.Storable:328: "
{-# LINE 328 "src/Data/Array/Comfort/Storable.hs" #-}
DocTest.property
{-# LINE 328 "src/Data/Array/Comfort/Storable.hs" #-}
(QC.forAll genArray2 $ \xs -> xs == Array.fromRowArray (snd $ Array.shape xs) (Array.toRowArray xs))
DocTest.printPrefix "Data.Array.Comfort.Storable:345: "
{-# LINE 345 "src/Data/Array/Comfort/Storable.hs" #-}
DocTest.property
{-# LINE 345 "src/Data/Array/Comfort/Storable.hs" #-}
(forAllNonEmpty $ \xs -> Array.minimum xs ==? minimum (Array.toList xs))
DocTest.printPrefix "Data.Array.Comfort.Storable:353: "
{-# LINE 353 "src/Data/Array/Comfort/Storable.hs" #-}
DocTest.property
{-# LINE 353 "src/Data/Array/Comfort/Storable.hs" #-}
(forAllNonEmpty $ \xs -> Array.maximum xs ==? maximum (Array.toList xs))
DocTest.printPrefix "Data.Array.Comfort.Storable:365: "
{-# LINE 365 "src/Data/Array/Comfort/Storable.hs" #-}
DocTest.property
{-# LINE 365 "src/Data/Array/Comfort/Storable.hs" #-}
(forAllNonEmpty $ \xs -> Array.limits xs ==? (Array.minimum xs, Array.maximum xs))