packages feed

board-games-0.4: test/Test/Game/Mastermind.hs

-- Do not edit! Automatically created with doctest-extract from src/Game/Mastermind.hs
{-# LINE 56 "src/Game/Mastermind.hs" #-}

module Test.Game.Mastermind where

import Test.DocTest.Base
import qualified Test.DocTest.Driver as DocTest

{-# LINE 57 "src/Game/Mastermind.hs" #-}
import     qualified Test.Mastermind as TestMM
import     Test.Mastermind (CodeSetInt, alphabet, Code(Code), CodePair(CodePair), forAllEval)
import     qualified Game.Mastermind.CodeSet.Tree as CodeSetTree
import     qualified Game.Mastermind.CodeSet as CodeSet
import     qualified Game.Mastermind as MM
import     qualified Data.EnumSet as EnumSet
import     Game.Mastermind (Eval(Eval))
import     Control.Monad (replicateM)
import     Data.Function.HT (compose2)

test :: DocTest.T ()
test = do
 DocTest.printPrefix "Game.Mastermind:74: "
{-# LINE 74 "src/Game/Mastermind.hs" #-}
 DocTest.property
{-# LINE 74 "src/Game/Mastermind.hs" #-}
     (\(CodePair secret attempt) -> MM.evaluate secret attempt == MM.evaluate attempt secret)
 DocTest.printPrefix "Game.Mastermind:133: "
{-# LINE 133 "src/Game/Mastermind.hs" #-}
 DocTest.property
{-# LINE 133 "src/Game/Mastermind.hs" #-}
     (\(CodePair secret attempt) -> CodeSetTree.member secret $ MM.matching alphabet attempt (MM.evaluate secret attempt))
 DocTest.printPrefix "Game.Mastermind:134: "
{-# LINE 134 "src/Game/Mastermind.hs" #-}
 DocTest.property
{-# LINE 134 "src/Game/Mastermind.hs" #-}
     (\(CodePair secret attempt) -> forAllEval secret $ \eval -> (eval == MM.evaluate secret attempt) == CodeSetTree.member secret (MM.matching alphabet attempt eval))
 DocTest.printPrefix "Game.Mastermind:135: "
{-# LINE 135 "src/Game/Mastermind.hs" #-}
 DocTest.property
{-# LINE 135 "src/Game/Mastermind.hs" #-}
     (\(Code attempt) -> forAllEval attempt $ \eval0 -> forAllEval attempt $ \eval1 -> eval0 == eval1 || CodeSetTree.null (compose2 CodeSetTree.intersection (MM.matching alphabet attempt) eval0 eval1))
 DocTest.printPrefix "Game.Mastermind:136: "
{-# LINE 136 "src/Game/Mastermind.hs" #-}
 DocTest.property
{-# LINE 136 "src/Game/Mastermind.hs" #-}
     (\(Code attempt) -> forAllEval attempt $ \eval -> all ((eval ==) . MM.evaluate attempt) $ take 100 $ CodeSet.flatten $ (MM.matching alphabet attempt eval :: CodeSetInt))
 DocTest.printPrefix "Game.Mastermind:137: "
{-# LINE 137 "src/Game/Mastermind.hs" #-}
 DocTest.property
{-# LINE 137 "src/Game/Mastermind.hs" #-}
     (\(Code attempt) -> forAllEval attempt $ \eval -> let set :: CodeSetInt; set = MM.matching alphabet attempt eval in map (CodeSet.select set) [0 .. min 100 (CodeSet.size set) - 1] == take 100 (CodeSet.flatten set))
 DocTest.printPrefix "Game.Mastermind:138: "
{-# LINE 138 "src/Game/Mastermind.hs" #-}
 DocTest.property
{-# LINE 138 "src/Game/Mastermind.hs" #-}
     (TestMM.intersections)
 DocTest.printPrefix "Game.Mastermind:139: "
{-# LINE 139 "src/Game/Mastermind.hs" #-}
 DocTest.property
{-# LINE 139 "src/Game/Mastermind.hs" #-}
     (TestMM.solve)
 DocTest.printPrefix "Game.Mastermind:128: "
{-# LINE 128 "src/Game/Mastermind.hs" #-}
 DocTest.example
{-# LINE 128 "src/Game/Mastermind.hs" #-}
   (filter ((MM.Eval 2 0 ==) . MM.evaluate "aabbb") $ replicateM 5 ['a'..'c'])
  [ExpectedLine [LineChunk "[\"aaaaa\",\"aaaac\",\"aaaca\",\"aaacc\",\"aacaa\",\"aacac\",\"aacca\",\"aaccc\",\"acbcc\",\"accbc\",\"acccb\",\"cabcc\",\"cacbc\",\"caccb\",\"ccbbc\",\"ccbcb\",\"cccbb\"]"]]
 DocTest.printPrefix "Game.Mastermind:130: "
{-# LINE 130 "src/Game/Mastermind.hs" #-}
 DocTest.example
{-# LINE 130 "src/Game/Mastermind.hs" #-}
   (CodeSet.flatten (MM.matching (EnumSet.fromList ['a'..'c']) "aabbb" (Eval 2 0) :: CodeSetTree.T Char))
  [ExpectedLine [LineChunk "[\"aaaaa\",\"aaaac\",\"aaaca\",\"aaacc\",\"aacaa\",\"aacac\",\"aacca\",\"aaccc\",\"acbcc\",\"accbc\",\"acccb\",\"cabcc\",\"cacbc\",\"caccb\",\"ccbbc\",\"ccbcb\",\"cccbb\"]"]]
 DocTest.printPrefix "Game.Mastermind:180: "
{-# LINE 180 "src/Game/Mastermind.hs" #-}
 DocTest.property
{-# LINE 180 "src/Game/Mastermind.hs" #-}
     (\(Code attempt) -> fromIntegral (EnumSet.size alphabet) ^ length attempt == sum (map snd (MM.partitionSizes alphabet attempt)))
 DocTest.printPrefix "Game.Mastermind:250: "
{-# LINE 250 "src/Game/Mastermind.hs" #-}
 DocTest.property
{-# LINE 250 "src/Game/Mastermind.hs" #-}
     (TestMM.bestSeparatingCode)