{-# LANGUAGE DataKinds #-} module Main (main) where import Data.TDigest import Data.TDigest.Postprocess import Data.TDigest.Postprocess.Internal (validateHistogram) import Test.Tasty import Test.Tasty.QuickCheck main :: IO () main = defaultMain tests tests :: TestTree tests = testGroup "properties" [ testProperty "tdigest validity" propTDigestIsValid , testProperty "histogram validity" propHistogramIsValid ] propTDigestIsValid :: [Double] -> Property propTDigestIsValid ds = case validate td of Right _ -> property True Left err -> counterexample (err ++ " " ++ show td) (valid td) where td = tdigest ds :: TDigest 2 propHistogramIsValid :: [Double] -> Property propHistogramIsValid ds = case fmap validateHistogram $ histogram td of Nothing -> property True Just (Right _) -> property True Just (Left err) -> counterexample msg $ property False where msg = "Error: " ++ err ++ ", " ++ "TDigest: " ++ show td where td = tdigest ds :: TDigest 2