freq-0.1.0.0: test/Main.hs
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE OverloadedStrings #-}
module Main (main) where
import Control.Monad (forever)
import Data.ByteString (ByteString)
import Data.Char (ord)
import Data.Word (Word8)
import Freq
import Hedgehog
import qualified Data.ByteString as B
import qualified Hedgehog.Gen as Gen
import qualified Hedgehog.Range as Range
import qualified Data.List as List
main :: IO Bool
main = do
!freak <- trainWithMany trainTexts
let !freakTable = tabulate freak
Prelude.putStrLn "done loading frequencies"
Prelude.putStrLn "now testing with Hedgehog"
checkParallel $ Group "Freak Equality"
[ ("Freak Equality", prop_Equal freak freakTable)
]
trainTexts :: [FilePath]
trainTexts
= fmap (\x -> "txtdocs/" ++ x ++ ".txt")
[ "2000010"
, "2city10"
, "80day10"
, "alcott-little-261"
, "byron-don-315"
, "carol10"
, "center_earth"
, "defoe-robinson-103"
, "dracula"
, "freck10"
, "invisman"
, "kipling-jungle-148"
, "lesms10"
, "london-call-203"
, "london-sea-206"
, "longfellow-paul-210"
, "madambov"
, "monroe-d"
, "moon10"
, "ozland10"
, "plgrm10"
, "sawy210"
, "speckldb"
, "swift-modest-171"
, "time_machine"
, "top-1m"
, "war_peace"
, "white_fang"
, "zenda10"
]
sizedByteString :: Range.Size -> Gen ByteString
sizedByteString (Range.Size n) = do
m <- Gen.enum 0 n
fmap B.pack $ Gen.list (Range.constant 0 m) (randWord8)
where
randWord8 :: Gen Word8
randWord8 = Gen.word8 Range.constantBounded
prop_Equal :: FreqTrain -> Freq -> Property
prop_Equal f ft =
property $ do
b <- forAll $ Gen.sized sizedByteString
measure f b === measure ft b