import Control.Monad import Data.Data import Data.Foldable import Data.IORef import Data.List import System.Exit import System.IO import Generic.Random.Data import Generic.Random.Internal.Data import Test.Tree import Test.Stats eps, del :: Double eps = 0.01 del = 0.001 -- | Periodically print stuff so that Travis does not think we're stuck. counting x gen = do modifyIORef x (+ 1) readIORef x >>= \x -> when (x `mod` 1000 == 0) $ putStr "." >> hFlush stdout gen main = do success <- newIORef True let n = 64 range = tolerance epsilon n for_ [ ( "reject " , generatorSR , expected Nothing range eps del ) , ( "rejectSimple " , generatorR' , expected (Just (fromIntegral n)) range eps del ) ] $ \(name, g, kdist) -> do putStrLn $ name ++ show n let gen = (fmap size . asMonadRandom . g) n x <- newIORef 0 (expectedDist, estimatedDist, diff) <- runExperiment kdist (counting x gen) putStrLn "" when (diff > eps) $ do writeIORef success False putStrLn $ "FAIL > " ++ show diff print expectedDist print estimatedDist {- let k = 80000 eps = 0.1 gen = (fmap size . asMonadRandom . generatorP') n putStrLn $ "pointed " ++ show n x <- newIORef 0 sizes <- replicateM k (counting x gen) putStrLn "" let diff = abs (mean sizes - fromIntegral (n `div` 2)) when (diff > eps) $ do writeIORef success False putStrLn $ "FAIL > " ++ show diff -} success <- readIORef success unless success exitFailure