streamly-0.11.0: test/Streamly/Test/Data/RingArray.hs
-- |
-- Module : Streamly.Test.Data.RingArray
-- Copyright : (c) 2022 Composewell Technologies
-- License : BSD-3-Clause
-- Maintainer : streamly@composewell.com
-- Stability : experimental
-- Portability : GHC
module Streamly.Test.Data.RingArray (main) where
import Streamly.Test.Common (performGCSweep)
import qualified Streamly.Internal.Data.MutArray as MutArray
import qualified Streamly.Internal.Data.Array as Array
import qualified Streamly.Internal.Data.RingArray as RingArray
import Prelude as P
import Test.Hspec as H
eqArrayN :: [Int] -> [Int] -> Int -> Int -> Bool -> IO ()
eqArrayN lstArr lstRing startR nBytes expected = do
let arr = Array.fromList lstArr
marr <- MutArray.fromList lstRing
let ring =
maybe (error "cast failed") id $ RingArray.castMutArrayWith startR marr
performGCSweep 4 100000
res <- RingArray.eqArrayN ring arr nBytes
res `shouldBe` expected
eqArray :: [Int] -> [Int] -> Int -> Bool -> IO ()
eqArray lstArr lstRing startR expected = do
let arr = Array.fromList lstArr
marr <- MutArray.fromList lstRing
let ring =
maybe (error "cast failed") id $ RingArray.castMutArrayWith startR marr
performGCSweep 4 100000
res <- RingArray.eqArray ring arr
res `shouldBe` expected
moduleName :: String
moduleName = "Data.RingArray"
main :: IO ()
main = hspec $ do
describe moduleName $ do
describe "Eq" $ do
let lstArr = [0..99]
lstRing = [50..99] ++ [0..49]
it "eqArrayN True (n < len)"
$ eqArrayN lstArr lstRing 50 75 True
it "eqArrayN True (n > len)"
$ eqArrayN lstArr lstRing 50 200 True
it "eqArrayN False"
$ eqArrayN lstArr lstRing 10 75 False
it "eqArray True" $ eqArray lstArr lstRing 50 True
it "eqArray False" $ eqArray lstArr lstRing 20 False