{-# LANGUAGE PartialTypeSignatures #-}
module WSPDBench where

import Control.DeepSeq
import Control.Lens
import Criterion.Main
import Data.Ext
import Data.Geometry.Point
import Demo.ExpectedPairwiseDistance


readInput'     :: FilePath -> Int -> IO [Point 2 Double :+ _]
readInput' fp k = take k <$> readInput fp


benchWSPD :: Benchmark
benchWSPD = bgroup "Well-Separated Pair Decomposition"
    [ env (readInput' "pco.9420_convert.txt" 200) $ \pts -> bgroup "pco"
        [ bench "exact"     $ nf pairwiseDist                  pts
        , bench "wspd 0.05" $ nf (approxPairwiseDistance 0.05) pts
        , bench "wspd 0.10" $ nf (approxPairwiseDistance 0.10) pts
        , bench "wspd 0.20" $ nf (approxPairwiseDistance 0.20) pts
        ]
    ]

-- main = defaultMain [ benchWSPD ]