@@ -2,11 +2,26 @@ module Streamly.Test.Data.Array.Unboxed.Mut (main) where
22
33import Test.QuickCheck (listOf)
44
5+import Control.Monad (void)
6+import Data.Complex (Complex)
7+import Data.Functor.Const (Const)
8+import Data.Functor.Identity (Identity)
9+import Foreign.Ptr (IntPtr, WordPtr)
10+import GHC.Exts
11+import GHC.Fingerprint.Type (Fingerprint(..))
12+import GHC.Int (Int16(..), Int32(..), Int64(..), Int8(..))
13+import GHC.Real (Ratio(..))
14+import GHC.Stable (StablePtr(..))
15+import GHC.Word (Word16(..), Word32(..), Word64(..), Word8(..))
16+import Streamly.Internal.Data.Unboxed (Unboxed)
517import Streamly.Test.Common (chooseInt)
6−import Test.Hspec (hspec, describe)
18+import Test.Hspec (hspec, describe, it)
719import Test.Hspec.QuickCheck
820import Test.QuickCheck (forAll, Property)
921import Test.QuickCheck.Monadic (monadicIO, assert)
22+#if MIN_VERSION_base(4,15,0)
23+import GHC.RTS.Flags (IoSubSystem(..))
24+#endif
1025
1126import qualified Streamly.Internal.Data.Array.Unboxed.Mut as MArray
1227import qualified Streamly.Internal.Data.Stream as Stream
@@ -32,6 +47,100 @@ testAppend =
3247 lst <- MArray.toList x
3348 assert (ls == lst)
3449
50+#define TEST_IE(_type) it "_type" $ testIE ([] :: [_type])
51+
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.
55+testUnboxInstanceExistance :: Hspec.SpecWith ()
56+testUnboxInstanceExistance = 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
140+
141+ testIE :: Unboxed a => [a] -> IO ()
142+ testIE lst = void $ MArray.fromList lst
143+
35144main :: IO ()
36145main =
37146 hspec $
@@ -40,3 +149,4 @@ main =
40149 describe moduleName $ do
41150 describe "Stream Append" $ do
42151 prop "testAppend" testAppend
152+ testUnboxInstanceExistance