on master help sign in
152 lines 4.2 kB history raw
1module Streamly.Test.Data.MutArray (main) where
3import Test.QuickCheck (listOf)
5import Control.Monad (void)
6import Data.Complex (Complex)
7import Data.Functor.Const (Const)
8import Data.Functor.Identity (Identity)
9import Foreign.Ptr (IntPtr, WordPtr)
10import GHC.Exts
11import GHC.Fingerprint.Type (Fingerprint(..))
12import GHC.Int (Int16(..), Int32(..), Int64(..), Int8(..))
13import GHC.Real (Ratio(..))
14import GHC.Stable (StablePtr(..))
15import GHC.Word (Word16(..), Word32(..), Word64(..), Word8(..))
16import Streamly.Internal.Data.MutByteArray (Unbox)
17import Streamly.Test.Common (chooseInt)
18import Test.Hspec (hspec, describe, it)
19import Test.Hspec.QuickCheck
20import Test.QuickCheck (forAll, Property)
21import Test.QuickCheck.Monadic (monadicIO, assert)
22#if MIN_VERSION_base(4,15,0)
23import GHC.RTS.Flags (IoSubSystem(..))
24#endif
26import qualified Streamly.Internal.Data.MutArray as MArray
27import qualified Streamly.Internal.Data.Stream as Stream
28import qualified Test.Hspec as Hspec
30maxTestCount :: Int
31maxTestCount = 100
33moduleName :: String
34moduleName = "Data.MutArray"
36testAppend :: Property
37testAppend =
38 forAll (listOf (chooseInt (-50, 100))) $ \ls0 ->
39 monadicIO $ action ls0
41 where
43 action ls = do
44 x <- Stream.fold
45 (MArray.writeAppend (MArray.pinnedNew 0))
46 (Stream.fromList (ls::[Int]))
47 lst <- MArray.toList x
48 assert (ls == lst)
50#define TEST_IE(_type) it "_type" $ testIE ([] :: [_type])
52-- XXX This should be in test/Data.Unbox
53-- C-ish foreign types are platfor specific. The platform needs to be taken into
54-- consideration when making instances.
55testUnboxInstanceExistance :: Hspec.SpecWith ()
56testUnboxInstanceExistance = do
57 describe "Unbox instances" $ do
58 -- TEST_IE(CBool)
59 -- TEST_IE(CChar)
60 -- TEST_IE(CClock)
61 -- TEST_IE(CDouble)
62 -- TEST_IE(CFloat)
63 -- TEST_IE(CInt)
64 -- TEST_IE(CIntMax)
65 -- TEST_IE(CIntPtr)
66 -- TEST_IE(CLLong)
67 -- TEST_IE(CLong)
68 -- TEST_IE(CPtrdiff)
69 -- TEST_IE(CSChar)
70 -- TEST_IE(CSUSeconds)
71 -- TEST_IE(CShort)
72 -- TEST_IE(CSigAtomic)
73 -- TEST_IE(CSize)
74 -- TEST_IE(CTime)
75 -- TEST_IE(CUChar)
76 -- TEST_IE(CUInt)
77 -- TEST_IE(CUIntMax)
78 -- TEST_IE(CUIntPtr)
79 -- TEST_IE(CULLong)
80 -- TEST_IE(CULong)
81 -- TEST_IE(CUSeconds)
82 -- TEST_IE(CUShort)
83 -- TEST_IE(CWchar)
84 TEST_IE(IntPtr)
85 TEST_IE(WordPtr)
86 TEST_IE(Fingerprint)
87 TEST_IE(Int16)
88 TEST_IE(Int32)
89 TEST_IE(Int64)
90 TEST_IE(Int8)
91#if MIN_VERSION_base(4,15,0)
92 TEST_IE(IoSubSystem)
93#endif
94 TEST_IE(Word16)
95 TEST_IE(Word32)
96 TEST_IE(Word64)
97 TEST_IE(Word8)
98 -- TEST_IE(CBlkCnt)
99 -- TEST_IE(CBlkSize)
100 -- TEST_IE(CCc)
101 -- TEST_IE(CClockId)
102 -- TEST_IE(CDev)
103 -- TEST_IE(CFsBlkCnt)
104 -- TEST_IE(CFsFilCnt)
105 -- TEST_IE(CGid)
106 -- TEST_IE(CId)
107 -- TEST_IE(CIno)
108 -- TEST_IE(CKey)
109 -- TEST_IE(CMode)
110 -- TEST_IE(CNfds)
111 -- TEST_IE(CNlink)
112 -- TEST_IE(COff)
113 -- TEST_IE(CPid)
114 -- TEST_IE(CRLim)
115 -- TEST_IE(CSocklen)
116 -- TEST_IE(CSpeed)
117 -- TEST_IE(CSsize)
118 -- TEST_IE(CTcflag)
119 -- TEST_IE(CTimer)
120 -- TEST_IE(CUid)
121 -- TEST_IE(Fd)
122 TEST_IE(())
123 TEST_IE(Bool)
124 TEST_IE(Char)
125 TEST_IE(Double)
126 TEST_IE(Float)
127 TEST_IE(Int)
128 TEST_IE(Word)
129 TEST_IE(Complex Int)
130 TEST_IE(Identity Int)
131#if MIN_VERSION_base(4,14,0)
132 TEST_IE(Down Int)
133#endif
134 TEST_IE(FunPtr Int)
135 TEST_IE(Ptr Int)
136 TEST_IE(Ratio Int)
137 TEST_IE(StablePtr Int)
138 TEST_IE(Const Int Int)
139 where
141 testIE :: Unbox a => [a] -> IO ()
142 testIE lst = void $ MArray.fromList lst
144main :: IO ()
145main =
146 hspec $
147 Hspec.parallel $
148 modifyMaxSuccess (const maxTestCount) $ do
149 describe moduleName $ do
150 describe "Stream Append" $ do
151 prop "testAppend" testAppend
152 testUnboxInstanceExistance