packages feed

nth-prime-1.0: src/Test.hs

{- |
module: Main
description: Testing the computation of the nth prime
license: MIT

maintainer: Joe Leslie-Hurd <joe@gilith.com>
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 ()