module Main (main) where
import Data.Functor.Identity (Identity)
import Test.Framework (defaultMain, testGroup, Test)
import Test.Framework.Providers.HUnit
import Test.HUnit hiding (Test)
import Pipes (Pipe, (>->), each)
import Pipes.Prelude (toList)
import Pipes.Extras (scan1i)
main :: IO ()
main = defaultMain tests
tests :: [Test]
tests =
[ testGroup "Scans" [
testCase "Scan1i works for EMA calculation" testScan1i
]
]
testScan1i :: Assertion
testScan1i = transduce (scan1i (\l i -> l * α + i * (1 - α))) [2, 0, 0, 1.5] @?= ([2, 1, 0.5, 1] :: [Double])
where α = 0.5
transduce :: Pipe a b Identity () -> [a] -> [b]
transduce pipe xs = toList (each xs >-> pipe)