{-# LANGUAGE TypeApplications #-}
import Data.Semigroup (Sum (Sum))
import Streaming.NonEmpty (groupSemigroupBy, groupSemigroupByPure)
import qualified Streaming.Prelude as S
import Test.Hspec
main :: IO ()
main = hspec $ do
describe "groupSemigroupBy" $ do
it "collapse no stream" $ do
xs S.:> () <- S.toList $ groupSemigroupBy (==) $ S.each ([] @(Sum Int))
xs `shouldBe` []
it "collapse one elem stream" $ do
xs S.:> () <- S.toList $ groupSemigroupBy (==) $ S.each [Sum 1]
xs `shouldBe` [Sum 1]
it "collapse 2 elems of different groups stream" $ do
xs S.:> () <- S.toList $ groupSemigroupBy (==) $ S.each [Sum 1, Sum 2]
xs `shouldBe` [Sum 1, Sum 2]
it "collapse 2 elems of same group stream " $ do
xs S.:> () <- S.toList $ groupSemigroupBy (==) $ S.each [Sum 1, Sum 1]
xs `shouldBe` [Sum 2]
it "collapse 4 elems of 2 groups stream" $ do
xs S.:> () <- S.toList $ groupSemigroupBy (==) $ S.each [Sum 1, Sum 1, Sum 2, Sum 2]
xs `shouldBe` [Sum 2, Sum 4]
describe "groupSemigroupByPure" $ do
it "collapse 4 elems of group 2 stream" $ do
groupSemigroupByPure (==) [Sum 1, Sum 1, Sum 2, Sum 2]
`shouldBe` [Sum 2, Sum 4]