packages feed

rhine-1.8: test/Clock/FixedStep.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeApplications #-}

module Clock.FixedStep where

-- vector-sized
import Data.Vector.Sized (toList)

-- tasty
import Test.Tasty (testGroup)

-- tasty-hunit
import Test.Tasty.HUnit (testCase, (@?=))

-- rhine
import FRP.Rhine
import Util

tests =
  testGroup
    "Clock.FixedStep"
    [ testCase "Outputs linearly increasing ticks" $
        let
          output = runScheduleRhinePure (absoluteS @@ (FixedStep @5)) $ replicate 4 ()
         in
          output @?= Just <$> [5, 10, 15, 20]
    , testCase "Outputs scheduled ticks in order" $
        let
          output = runScheduleRhinePure ((absoluteS @@ (FixedStep @5)) |@| (absoluteS @@ (FixedStep @3))) $ replicate 6 ()
         in
          output @?= Just <$> [3, 5, 6, 9, 10, 12]
    , testCase "Outputs scheduled ticks in order (mirrored)" $
        let
          output = runScheduleRhinePure ((absoluteS @@ (FixedStep @3)) |@| (absoluteS @@ (FixedStep @5))) $ replicate 6 ()
         in
          output @?= Just <$> [3, 5, 6, 9, 10, 12]
    , testCase "Resamples correctly (downsampleFixedStep)" $
        let
          output = fmap (fmap (first toList)) $ runScheduleRhinePure ((absoluteS @@ (FixedStep @3)) >-- downsampleFixedStep --> ((clId &&& absoluteS) @@ (FixedStep @12))) $ replicate 10 ()
         in
          output
            @?= [ Nothing
                , Nothing
                , Nothing
                , Nothing
                , Just ([12, 9, 6, 3], 12)
                , Nothing
                , Nothing
                , Nothing
                , Nothing
                , Just ([24, 21, 18, 15], 24)
                ]
    , testCase "Resamples correctly (collect)" $
        let
          output = runScheduleRhinePure ((absoluteS @@ (FixedStep @3)) >-- collect --> ((clId &&& absoluteS) @@ (FixedStep @12))) $ replicate 10 ()
         in
          output
            @?= [ Nothing
                , Nothing
                , Nothing
                , Nothing
                , Just ([12, 9, 6, 3], 12)
                , Nothing
                , Nothing
                , Nothing
                , Nothing
                , Just ([24, 21, 18, 15], 24)
                ]
    ]