packages feed

AlgoRhythm-0.1.0.0: test/TChaos.hs

{-# LANGUAGE GADTs #-}

module TChaos where

import           Control.Monad.Trans.State
import qualified Generate                       as Gen
import           Test.Framework                 (Test, testGroup)
import           Test.Framework.Providers.HUnit (testCase)
import           Test.HUnit                     hiding (Test)
import           Utils.Vec

-- | Tests if the Chaos function correctly updates every iteration.
chaosTests :: Test
chaosTests = testGroup "Chaos"
  [ testCase "chaos1" $ do
      let mapping = Gen.defaultMapping {Gen.pcSel=Gen.chaos1Selector, Gen.octSel=Gen.chaos1Selector}
      (_, genState) <- runStateT Gen.bSolo (Gen.chaosState Gen.chaos1 mapping)
      let chaosState = Gen.state genState
      let ds = Gen.variables   chaosState
      case Gen.updateFunctions chaosState of
        (f :. Nil) -> do
          let expectedVs = [ -1.0
                           , -0.9521
                           , -0.7695677377609997
                           , -0.15610097331134187
                           ,  0.9524321761768165
                           , -0.7708027147284231
                           , -0.15981449614634702
                           ,  0.9501420518882291
                           , -0.7622971584238392
                           , -0.1343593712063227
                           ]
          let actualVs = reverse
                       $ snd
                       $ foldr (\_ (d',vs) -> (f d' :. Nil, f d' : vs)) (ds, []) [(1 :: Int)..10]
          actualVs @?= expectedVs
  ]