{- | module: Main description: Testing the computation of the nth prime license: MIT maintainer: Joe Leslie-Hurd stability: provisional portability: portable -} module Main ( main ) where import qualified OpenTheory.Primitive.Natural as Natural import qualified OpenTheory.Natural.Prime as VerifiedSieve import qualified NaiveSieve import qualified OptimizedSieve import qualified GenuineSieve sieves :: [[Natural.Natural]] sieves = [VerifiedSieve.primes, NaiveSieve.primes, OptimizedSieve.primes, GenuineSieve.primes] checkInitialPrimes :: Int -> IO () checkInitialPrimes k = case map (take k) sieves of [] -> error "no sieves defined" l : ls -> if all ((==) l) ls then putStrLn $ " checked initial " ++ show k ++ " primes are " ++ show l else error $ "wrong initial " ++ show k ++ " primes" checkNthPrime :: Int -> IO () checkNthPrime k = case map (\s -> s !! k) sieves of [] -> error "no sieves defined" p : ps -> if all ((==) p) ps then putStrLn $ " checked prime[" ++ show k ++ "] is " ++ show p else error $ "wrong prime[" ++ show k ++ "]" main :: IO () main = do checkInitialPrimes 10 checkNthPrime 100 checkNthPrime 1000 return ()