combinatorial-0.1.1: test/Test/Combinatorics/Mastermind.hs
-- Do not edit! Automatically created with doctest-extract from src/Combinatorics/Mastermind.hs
{-# LINE 22 "src/Combinatorics/Mastermind.hs" #-}
module Test.Combinatorics.Mastermind where
import Test.DocTest.Base
import qualified Test.DocTest.Driver as DocTest
{-# LINE 23 "src/Combinatorics/Mastermind.hs" #-}
import qualified Combinatorics.Mastermind as Mastermind
import qualified Combinatorics as Comb
import qualified Test.QuickCheck as QC
import Control.Monad (replicateM)
import Data.List (genericLength)
genMastermindDistinct :: QC.Gen (Int, Int, Int, Int)
genMastermindDistinct = do
n <- QC.choose (0,12)
k <- QC.choose (0, min 5 n)
b <- QC.choose (0,k)
w <- QC.choose (0,k-b)
return (n,k,b,w)
test :: DocTest.T ()
test = do
DocTest.printPrefix "Combinatorics.Mastermind:48: "
{-# LINE 48 "src/Combinatorics/Mastermind.hs" #-}
DocTest.example
{-# LINE 48 "src/Combinatorics/Mastermind.hs" #-}
(filter ((Mastermind.Eval 2 0 ==) . Mastermind.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 "Combinatorics.Mastermind:86: "
{-# LINE 86 "src/Combinatorics/Mastermind.hs" #-}
DocTest.property
{-# LINE 86 "src/Combinatorics/Mastermind.hs" #-}
(QC.forAll genMastermindDistinct $ \(n,k,b,w) -> let alphabet = take n ['a'..]; code = take k alphabet in Mastermind.numberDistinct n k b w == (genericLength $ filter ((Mastermind.Eval b w ==) . Mastermind.evaluate code) $ Comb.variate k alphabet))
DocTest.printPrefix "Combinatorics.Mastermind:95: "
{-# LINE 95 "src/Combinatorics/Mastermind.hs" #-}
DocTest.property
{-# LINE 95 "src/Combinatorics/Mastermind.hs" #-}
(QC.forAll genMastermindDistinct $ \(n,k,_b,w) -> Mastermind.numberDistinctWhite n k w == Mastermind.numberDistinct n k 0 w)