on master help sign in
Add tests for unboxed ring array
commitaaa279c9b28716b88ac5205975c7952485ab3f9c authorAdithya Kumar <adithya@composewell.com> dateMon 11 Jul 2022, 11:39 (4 years ago) parentc361a31
3 files changed+60
streamly.cabal+1 test/Streamly/Test/Data/Ring/Unboxed.hs+53 test/streamly-tests.cabal+6
streamly.cabal+1
@@ -98,6 +98,7 @@ extra-source-files:
9898 test/Streamly/Test/Data/Array/Prim.hs
9999 test/Streamly/Test/Data/Array/Prim/Pinned.hs
100100 test/Streamly/Test/Data/Array/Foreign.hs
101+ test/Streamly/Test/Data/Ring/Unboxed.hs
101102 test/Streamly/Test/Data/Array/Stream/Foreign.hs
102103 test/Streamly/Test/Data/Parser/ParserD.hs
103104 test/Streamly/Test/FileSystem/Event.hs
test/Streamly/Test/Data/Ring/Unboxed.hsnew file+53
@@ -0,0 +1,53 @@
1+-- |
2+-- Module : Streamly.Test.Data.Ring.Unboxed
3+-- Copyright : (c) 2022 Composewell Technologies
4+-- License : BSD-3-Clause
5+-- Maintainer : streamly@composewell.com
6+-- Stability : experimental
7+-- Portability : GHC
8+
9+module Streamly.Test.Data.Ring.Unboxed (main) where
10+
11+import Control.Monad (void)
12+
13+import qualified Streamly.Internal.Data.Array.Foreign.Type as Array
14+import qualified Streamly.Internal.Data.Ring.Foreign as Ring
15+
16+import Prelude as P
17+import qualified Data.Foldable as P
18+
19+import Test.Hspec as H
20+
21+unsafeEqArrayN :: [Int] -> [Int] -> Int -> Int -> Bool -> IO ()
22+unsafeEqArrayN lstArr lstRing startR nelem expected = do
23+ let arr = Array.fromList lstArr
24+ (ring, rh) <- Ring.new (length lstRing)
25+ void $ P.foldlM (Ring.unsafeInsert ring) rh lstRing
26+ Ring.unsafeEqArrayN ring (Ring.moveBy startR ring rh) arr nelem
27+ `shouldBe` expected
28+
29+unsafeEqArray :: [Int] -> [Int] -> Int -> Bool -> IO ()
30+unsafeEqArray lstArr lstRing startR expected = do
31+ let arr = Array.fromList lstArr
32+ (ring, rh) <- Ring.new (length lstRing)
33+ void $ P.foldlM (Ring.unsafeInsert ring) rh lstRing
34+ Ring.unsafeEqArray ring (Ring.moveBy startR ring rh) arr
35+ `shouldBe` expected
36+
37+moduleName :: String
38+moduleName = "Data.Ring.Unboxed"
39+
40+main :: IO ()
41+main = hspec $ do
42+ describe moduleName $ do
43+ describe "Eq" $ do
44+ let lstArr = [0..99]
45+ lstRing = [50..99] ++ [0..49]
46+ it "unsafeEqArrayN True (n < len)"
47+ $ unsafeEqArrayN lstArr lstRing 50 75 True
48+ it "unsafeEqArrayN True (n > len)"
49+ $ unsafeEqArrayN lstArr lstRing 50 200 True
50+ it "unsafeEqArrayN False"
51+ $ unsafeEqArrayN lstArr lstRing 10 75 False
52+ it "unsafeEqArray True" $ unsafeEqArray lstArr lstRing 50 True
53+ it "unsafeEqArray False" $ unsafeEqArray lstArr lstRing 20 False
test/streamly-tests.cabal+6
@@ -241,6 +241,12 @@ test-suite Data.Array.Foreign
241241 main-is: Streamly/Test/Data/Array/Foreign.hs
242242 ghc-options: -main-is Streamly.Test.Data.Array.Foreign.main
243243
244+test-suite Data.Ring.Unboxed
245+ import: test-options
246+ type: exitcode-stdio-1.0
247+ main-is: Streamly/Test/Data/Ring/Unboxed.hs
248+ ghc-options: -main-is Streamly.Test.Data.Ring.Unboxed.main
249+
244250test-suite Data.Array.Stream.Foreign
245251 import: test-options
246252 type: exitcode-stdio-1.0