@@ -0,0 +1,70 @@
2+-- Module : Streamly.Benchmark.Data.Ring.Unboxed
3+-- Copyright : (c) 2022 Composewell
4+-- License : BSD-3-Clause
5+-- Maintainer : streamly@composewell.com
7+{-# LANGUAGE FlexibleContexts #-}
8+{-# LANGUAGE RankNTypes #-}
9+{-# LANGUAGE ScopedTypeVariables #-}
11+module Main (main) where
13+import Control.Monad (void)
14+import GHC.Ptr (Ptr(..))
16+import qualified Streamly.Internal.Data.Array.Foreign.Type as Array
17+import qualified Streamly.Internal.Data.Ring.Foreign as Ring
18+import qualified Data.Foldable as P
21+import Streamly.Benchmark.Common
25+-------------------------------------------------------------------------------
27+-------------------------------------------------------------------------------
29+unsafeEqArrayN :: (Int, Array.Array Int, (Ring.Ring Int, Ptr Int)) -> Bool
30+unsafeEqArrayN (value, arr, (ring, rh)) = Ring.unsafeEqArrayN ring rh arr value
32+unsafeEqArray :: (Array.Array Int, (Ring.Ring Int, Ptr Int)) -> Bool
33+unsafeEqArray (arr, (ring, rh)) = Ring.unsafeEqArray ring rh arr
35+-------------------------------------------------------------------------------
37+-------------------------------------------------------------------------------
40+ Int -> Array.Array Int -> (Ring.Ring Int, Ptr Int) -> [Benchmark]
41+o_1_space_serial value arr (ring, rh) =
42+ [ bench "unsafeEqArrayN" $ nf unsafeEqArrayN (value, arr, (ring, rh))
43+ , bench "unsafeEqArray" $ nf unsafeEqArray (arr, (ring, rh))
46+-------------------------------------------------------------------------------
48+-------------------------------------------------------------------------------
51+moduleName = "Data.Ring.Unboxed"
55+ runWithCLIOptsEnv defaultStreamSize alloc allBenchmarks
60+ let input = [1 .. value] :: [Int]
61+ let arr = Array.fromList input
62+ (ring, rh) <- Ring.new value
63+ void $ P.foldlM (Ring.unsafeInsert ring) rh input
64+ return (arr, (ring, rh))
66+ allBenchmarks (arr, (ring, rh)) value =
68+ (o_1_space_prefix moduleName)
69+ (o_1_space_serial value arr (ring, rh))