packages feed

streaming-nonempty-0.1.0.0: test/Spec.hs

{-# 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]