@@ -16,6 +16,7 @@ import Data.IORef ( newIORef, readIORef, writeIORef, modifyIORef' )
1616import Data.Int (Int64)
1717import Data.List (sort, group, intercalate)
1818import Data.Maybe ( isJust, fromJust )
19+import Data.Word (Word8)
1920import Foreign.Storable (Storable)
2021#if __GLASGOW_HASKELL__ < 808
2122import Data.Semigroup ((<>))
@@ -290,6 +291,21 @@ splitterProperties sep desc = do
290291 listEquals (==) lys xss
291292 listEquals (==) sys xss
292293
294+intercalateSplitOnId ::
295+ forall a. (Arbitrary a, Eq a, Show a, Num a) =>
296+ a -> String -> Spec
297+intercalateSplitOnId x desc =
298+ prop (desc <> " intercalate [x] . splitOn (== x) == id") $
299+ forAll listWithZeroes $ \xs -> do
300+ withMaxSuccess maxTestCount $
301+ monadicIO $ do
302+ ys <- S.toList $ S.splitOn (== x) toListFL (S.fromList xs)
303+ listEquals (==) (intercalate [x] ys) xs
304+
305+ where
306+
307+ listWithZeroes :: Gen [a]
308+ listWithZeroes = listOf $ frequency [(3, arbitrary), (1, elements [0])]
293309
294310groupSplitOps :: String -> Spec
295311groupSplitOps desc = do
@@ -299,20 +315,9 @@ groupSplitOps desc = do
299315
300316 -- splitting properties
301317 splitterProperties (0 :: Int) desc
302− -- XXX This will fail
303− -- splitterProperties (0 :: Word8) desc
304−
305− prop (desc <> " intercalate [x] . splitOn (== x) == id") $
306− forAll listWithZeroes $ \xs -> do
307− withMaxSuccess maxTestCount $
308− monadicIO $ do
309− ys <- S.toList $ S.splitOn (== 0) toListFL (S.fromList xs)
310− listEquals (==) (intercalate [0] ys) xs
311−
312− where
313−
314− listWithZeroes :: Gen [Int]
315− listWithZeroes = listOf $ frequency [(3, arbitrary), (1, elements [0])]
318+ splitterProperties (0 :: Word8) desc
319+ intercalateSplitOnId (0 :: Int) desc
320+ intercalateSplitOnId (0 :: Word8) desc
316321
317322-- |
318323-- After grouping (and folding) Int stream using @>@ operation,