packages feed

llvm-dsl-0.2.1: test/DocTest/LLVM/DSL/Expression/Vector.hs

-- Do not edit! Automatically created with doctest-extract from src/LLVM/DSL/Expression/Vector.hs
{-# LINE 20 "src/LLVM/DSL/Expression/Vector.hs" #-}

module DocTest.LLVM.DSL.Expression.Vector where

import Test.DocTest.Base
import qualified Test.DocTest.Driver as DocTest

{-# LINE 21 "src/LLVM/DSL/Expression/Vector.hs" #-}
import     Test.LLVM.DSL.Run (sharedRun, run)
import     qualified LLVM.DSL.Expression.Vector as Vector
import     qualified LLVM.DSL.Expression as Expr
import     qualified LLVM.Core as LLVM
import     Type.Data.Num.Decimal (D4, D8)
import     qualified Data.Traversable as Trav
import     qualified Data.Foldable as Fold
import     qualified Data.List as List
import     qualified Data.NonEmpty as NonEmpty
import     qualified Data.Tuple.HT as Tuple
import     Control.Applicative (liftA2)
import     Data.Int (Int32)
import     Test.QuickCheck ((===))

type     N = D8
type     VectorN = LLVM.Vector N

test :: DocTest.T ()
test = do
 DocTest.printPrefix "LLVM.DSL.Expression.Vector:109: "
{-# LINE 109 "src/LLVM/DSL/Expression/Vector.hs" #-}
 DocTest.example(
{-# LINE 109 "src/LLVM/DSL/Expression/Vector.hs" #-}
    run Vector.replicate 42 :: LLVM.Vector D4 Int32
  )
  [ExpectedLine [LineChunk "Vector [42,42,42,42]"]]
 DocTest.printPrefix "LLVM.DSL.Expression.Vector:118: "
{-# LINE 118 "src/LLVM/DSL/Expression/Vector.hs" #-}
 DocTest.example(
{-# LINE 118 "src/LLVM/DSL/Expression/Vector.hs" #-}
    run (Expr.uncurry3 Vector.replicateSegmented) (LLVM.consVector False False True False False True False False, 8, LLVM.consVector 7 6 5 4 3 2 1 0) :: LLVM.Vector D8 Int32
  )
  [ExpectedLine [LineChunk "Vector [8,8,5,5,5,2,2,2]"]]
 DocTest.printPrefix "LLVM.DSL.Expression.Vector:121: "
{-# LINE 121 "src/LLVM/DSL/Expression/Vector.hs" #-}
 DocTest.property(
{-# LINE 121 "src/LLVM/DSL/Expression/Vector.hs" #-}
        
   sharedRun (Expr.uncurry3 Vector.replicateSegmented) $ \replicateSegmented ->
   \bs x xs ->
      NonEmpty.tail
         (NonEmpty.scanl (\lastX (b,xi) -> if b then xi else lastX)
            x (liftA2 (,) bs xs))
      ===
      replicateSegmented (bs, x, xs :: VectorN Int32)
  )
 DocTest.printPrefix "LLVM.DSL.Expression.Vector:138: "
{-# LINE 138 "src/LLVM/DSL/Expression/Vector.hs" #-}
 DocTest.example(
{-# LINE 138 "src/LLVM/DSL/Expression/Vector.hs" #-}
    run (Vector.iterate (6+)) 0 :: LLVM.Vector D8 Int32
  )
  [ExpectedLine [LineChunk "Vector [0,6,12,18,24,30,36,42]"]]
 DocTest.printPrefix "LLVM.DSL.Expression.Vector:141: "
{-# LINE 141 "src/LLVM/DSL/Expression/Vector.hs" #-}
 DocTest.property(
{-# LINE 141 "src/LLVM/DSL/Expression/Vector.hs" #-}
        
   sharedRun (Expr.uncurry (\d -> Vector.iterate (d+))) $ \iter ->
   \d x ->
      List.take 8 (List.iterate (d+) x)
      ===
      Fold.toList (iter (d,x) :: LLVM.Vector D8 Int32)
  )
 DocTest.printPrefix "LLVM.DSL.Expression.Vector:178: "
{-# LINE 178 "src/LLVM/DSL/Expression/Vector.hs" #-}
 DocTest.example(
{-# LINE 178 "src/LLVM/DSL/Expression/Vector.hs" #-}
    run (Expr.uncurry Vector.cumulateJoint) (3, LLVM.consVector 1 4 1 5 :: LLVM.Vector D4 Int32)
  )
  [ExpectedLine [LineChunk "(14,Vector [3,4,8,9])"]]
 DocTest.printPrefix "LLVM.DSL.Expression.Vector:181: "
{-# LINE 181 "src/LLVM/DSL/Expression/Vector.hs" #-}
 DocTest.property(
{-# LINE 181 "src/LLVM/DSL/Expression/Vector.hs" #-}
        
   sharedRun (Expr.uncurry Vector.cumulateJoint) $ \cumulateJoint ->
   \x xs ->
      Tuple.swap (NonEmpty.viewR (NonEmpty.scanl (+) x xs))
      ===
      cumulateJoint (x, xs :: VectorN Int32)
  )
 DocTest.printPrefix "LLVM.DSL.Expression.Vector:201: "
{-# LINE 201 "src/LLVM/DSL/Expression/Vector.hs" #-}
 DocTest.example(
{-# LINE 201 "src/LLVM/DSL/Expression/Vector.hs" #-}
    run Vector.cumulate1 (LLVM.consVector 3 1 4 1 :: LLVM.Vector D4 Int32)
  )
  [ExpectedLine [LineChunk "Vector [3,4,8,9]"]]
 DocTest.printPrefix "LLVM.DSL.Expression.Vector:204: "
{-# LINE 204 "src/LLVM/DSL/Expression/Vector.hs" #-}
 DocTest.example(
{-# LINE 204 "src/LLVM/DSL/Expression/Vector.hs" #-}
    run Vector.cumulate1 (LLVM.consVector 3 1 4 1 5 9 2 6 :: LLVM.Vector D8 Int32)
  )
  [ExpectedLine [LineChunk "Vector [3,4,8,9,14,23,25,31]"]]
 DocTest.printPrefix "LLVM.DSL.Expression.Vector:207: "
{-# LINE 207 "src/LLVM/DSL/Expression/Vector.hs" #-}
 DocTest.example(
{-# LINE 207 "src/LLVM/DSL/Expression/Vector.hs" #-}
    run Vector.cumulate1 (LLVM.consVector 0 0 1 0 0 (-1) 0 0 :: LLVM.Vector D8 Int32)
  )
  [ExpectedLine [LineChunk "Vector [0,0,1,1,1,0,0,0]"]]
 DocTest.printPrefix "LLVM.DSL.Expression.Vector:210: "
{-# LINE 210 "src/LLVM/DSL/Expression/Vector.hs" #-}
 DocTest.property(
{-# LINE 210 "src/LLVM/DSL/Expression/Vector.hs" #-}
        
   sharedRun Vector.cumulate1 $ \cumulate1 ->
   \x ->
      scanl1 (+) (Fold.toList x)
      ===
      Fold.toList (cumulate1 (x :: VectorN Int32))
  )
 DocTest.printPrefix "LLVM.DSL.Expression.Vector:218: "
{-# LINE 218 "src/LLVM/DSL/Expression/Vector.hs" #-}
 DocTest.property(
{-# LINE 218 "src/LLVM/DSL/Expression/Vector.hs" #-}
        
   sharedRun Vector.cumulate1 $ \cumulate1 ->
   \x ->
      NonEmpty.tail (NonEmpty.scanl (+) 0 x)
      ===
      cumulate1 (x :: VectorN Int32)
  )
 DocTest.printPrefix "LLVM.DSL.Expression.Vector:242: "
{-# LINE 242 "src/LLVM/DSL/Expression/Vector.hs" #-}
 DocTest.example(
{-# LINE 242 "src/LLVM/DSL/Expression/Vector.hs" #-}
    run (Expr.uncurry3 Vector.cumulateSegmentedJoint) (LLVM.consVector False False True False False True False False, 3, LLVM.consVector 1 4 1 5 9 2 6 5) :: (Int32, LLVM.Vector D8 Int32)
  )
  [ExpectedLine [LineChunk "(13,Vector [3,4,0,1,6,0,2,8])"]]
 DocTest.printPrefix "LLVM.DSL.Expression.Vector:245: "
{-# LINE 245 "src/LLVM/DSL/Expression/Vector.hs" #-}
 DocTest.property(
{-# LINE 245 "src/LLVM/DSL/Expression/Vector.hs" #-}
        
   sharedRun (Expr.uncurry3 Vector.cumulateSegmentedJoint) $
   \cumulateSegmentedJoint ->
   \bs x xs ->
      Trav.mapAccumL
         (\acc (b,xi) ->
            let yi = if b then 0 else acc in (yi+xi, yi))
         x (liftA2 (,) bs xs)
      ===
      cumulateSegmentedJoint (bs, x, xs :: VectorN Int32)
  )