synthesizer-core-0.8: test/Test/Sound/Synthesizer/Causal/Analysis.hs
module Test.Sound.Synthesizer.Causal.Analysis (tests) where
import qualified Synthesizer.Causal.Analysis as AnaC
import qualified Synthesizer.Causal.Process as Causal
import qualified Synthesizer.Plain.Analysis as Ana
import Control.Arrow ((<<<), )
import qualified Data.NonEmpty.Class as NonEmptyC
import qualified Data.NonEmpty as NonEmpty
import qualified Data.List.Match as Match
import qualified Data.List as List
import qualified Test.QuickCheck as QC
import Test.QuickCheck (quickCheck, )
import NumericPrelude.Numeric
import NumericPrelude.Base
import Prelude ()
movingMedian :: (Ord a) => Int -> [a] -> [a]
movingMedian n =
map (\xs -> List.sort xs !! div (length xs) 2) . NonEmpty.tail .
NonEmptyC.zipWith (drop . max 0) (NonEmptyC.iterate succ (negate n)) .
NonEmpty.inits
tests :: [(String, IO ())]
tests =
("deltaSigmaModulation",
quickCheck $ \xs ->
Match.take xs (Ana.deltaSigmaModulation xs)
==
Causal.apply AnaC.deltaSigmaModulation (xs::[Rational])) :
("deltaSigmaModulationPositive",
quickCheck $ \threshold xs ->
Match.take xs (Ana.deltaSigmaModulationPositive threshold xs)
==
Causal.apply
(AnaC.deltaSigmaModulationPositive <<<
Causal.feedConstFst threshold) (xs::[Rational])) :
("movingMedian",
quickCheck $
QC.forAll (QC.choose (1,20)) $ \n xs ->
movingMedian n xs
==
Causal.apply (AnaC.movingMedian n) (xs::[Char])) :
[]