module IntervalTest where
import Data.List (nub, permutations)
import Jaeger.Interval
import Test.Tasty.Hspec
-- https://hspec.github.io/writing-specs.html
-- https://hackage.haskell.org/package/tasty-discover
spec_interval :: Spec
spec_interval = do
describe "measure" $ do
it "should support one interval" $ do
(measure [interval 10 12]) `shouldBe` 2
it "should support disjoint intervals" $ do
(measure [(interval 10 12), (interval 20 25)]) `shouldBe` 7
it "should support a more complex interval" $ do
(measure [ (interval 10 12)
, (interval 20 25)
, (interval 10 25)
, (interval 21 22)
]) `shouldBe` 15
prop_lte :: [Interval] -> Bool
prop_lte is = (measure is) <= (sum $ width <$> is)
-- permutations is too slow, so trim the list
prop_permutations :: [Interval] -> Bool
prop_permutations is =
1 == (length $ nub $ measure <$> (permutations . take 7 $ is))