packages feed

mediabus-0.2.0.0: specs/Data/MediaBus/TicksSpec.hs

module Data.MediaBus.TicksSpec ( spec ) where

import           Data.MediaBus
import           Test.QuickCheck
import           Test.Hspec
import           Control.Lens
import           Data.Word

spec :: Spec
spec = do
    describe "nominalDiffTime At8kHzU32" $
        it "is isomorphic" $
            property $
                \tix -> (view (from nominalDiffTime)
                              (view nominalDiffTime (mkTicks at8kHzU32 tix)))
                        `shouldBe`
                        mkTicks at8kHzU32 tix
    describe "nominalDiffTime At48kHzU64" $
        it "is isomorphic" $
            property $
                \tix -> (view (from nominalDiffTime)
                              (view nominalDiffTime (mkTicks at48kHzU64 tix)))
                        `shouldBe`
                        mkTicks at48kHzU64 tix
    describe "convertTicks between At16kHzU32 and At16kHzU32" $
        it "is idempotent" $
            property $
                \tix -> let t = mkTicks at16kHzU32 tix
                        in
                            convertTicks t `shouldBe` t
    describe "convertTicks between At8kHzU32 and At16kHzU64" $
        it "preserves nominalDiffTime when converting back and forth" $
            property $
                \tix -> let t = mkTicks at8kHzU32 tix
                        in
                            view nominalDiffTime
                                 (convertTicks t :: Ticks 16000 Word64) `shouldBe`
                                view nominalDiffTime t