packages feed

mediabus-0.3.0.0: specs/Data/MediaBus/Basics/TicksSpec.hs

module Data.MediaBus.Basics.TicksSpec
  ( spec
  ) where

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

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