@@ -0,0 +1,53 @@
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
9+module Streamly.Test.Data.Ring.Unboxed (main) where
11+import Control.Monad (void)
13+import qualified Streamly.Internal.Data.Array.Foreign.Type as Array
14+import qualified Streamly.Internal.Data.Ring.Foreign as Ring
17+import qualified Data.Foldable as P
19+import Test.Hspec as H
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
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
38+moduleName = "Data.Ring.Unboxed"
42+ describe moduleName $ do
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