packages feed

moo-1.2: Tests/Internals/TestControl.hs

module Tests.Internals.TestControl where


import Test.HUnit
import System.Random.Mersenne.Pure64 (pureMT)


import Moo.GeneticAlgorithm.Types
import Moo.GeneticAlgorithm.Binary
import Moo.GeneticAlgorithm.Random


instance (Eq a) => Eq (StepResult a) where
    (==) (StopGA xs) (StopGA ys) = xs == ys
    (==) (ContinueGA xs) (ContinueGA ys) = xs == ys
    (==) _ _ = False


testControl =
    TestList
    [ "nextGeneration" ~: do
        let select = tournamentSelect Minimizing 2 8
        let objective = (fromIntegral . length) :: [Int] -> Double
        assertEqual "stop at initial population"  -- initial population is not changed
                    (StopGA [([1],1.0),([2,2],2.0)]) $
                    flip evalRand (pureMT 1) $
                             (nextGeneration Minimizing objective select 0 noCrossover noMutation)
                             (Generations 0) (Left [[1],[2,2]])
        assertEqual "do at least one step"
                    (ContinueGA [([1],1.0),([1],1.0),([1],1.0),([1],1.0)
                                ,([1],1.0),([1],1.0),([1],1.0),([1],1.0)]) $
                    flip evalRand (pureMT 1) $
                             (nextGeneration Minimizing objective select 0 noCrossover noMutation)
                             (Generations 1) (Left [[1],[2,2]])
    ]