packages feed

streamly-0.7.1: test/Streamly/Test/Internal/Data/Fold.hs

module Main (main) where

import qualified Streamly.Prelude as S
import Streamly.Internal.Data.Fold

import Test.Hspec.QuickCheck
import Test.QuickCheck (Property, forAll, Gen, vectorOf, arbitrary, choose)
import Test.QuickCheck.Monadic (monadicIO, assert, run)

import Test.Hspec as H

maxStreamLen :: Int
maxStreamLen = 1000

testRollingHashFirstN :: Property
testRollingHashFirstN = 
    forAll (choose (0, maxStreamLen)) $ \len ->
        forAll (choose (0, len)) $ \n ->
            forAll (vectorOf len (arbitrary :: Gen Int)) $ \vec -> monadicIO $ do
                a <- run $ S.fold rollingHash $ S.take n $ S.fromList vec
                b <- run $ S.fold (rollingHashFirstN n) $ S.fromList vec
                assert $ a == b

main :: IO ()
main = hspec $
    describe "Rolling Hash Folds" $
        prop "testRollingHashFirstN" testRollingHashFirstN