packages feed

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))