module Main (main) where
import Criterion.Main
import qualified Data.Vector.Storable as V
import qualified Data.Vector.Storable.Mutable as VM
import qualified Data.Vector.Unboxed as U
import DistanceTransform.Euclidean
testRes :: Int
testRes = 64
-- A cube of ones with a zero at the center.
testData :: V.Vector Int
testData = V.create $ do v <- VM.replicate (testRes^3) 1
VM.write v (4*testRes^2+4*testRes+4) 0
return v
main = do putStr "I am sane, true or false? "
print (edt' dims testData == edtPar' dims testData)
defaultMain [ bench "serial" $ whnf (edt' dims) testData
, bench "parallel" $ whnf (edtPar' dims) testData ]
where dims = replicate 3 testRes
edt' :: [Int] -> V.Vector Int -> V.Vector Float
edt' = edt
edtPar' :: [Int] -> V.Vector Int -> V.Vector Float
edtPar' = edtPar