module Verify.Data.SpacePart.AABB ( module Verify.Data.SpacePart.AABB , module Data.SpacePart.AABB ) where import Data.SpacePart.AABB import Control.Monad import Test.QuickCheck instance Arbitrary Boundary where arbitrary = do corner <- arbitrary s <- liftM abs arbitrary return \$ Boundary corner s data NonIntersectingBounds = NonIntersectingBounds Boundary Boundary deriving (Eq, Show) {- Two non-intersecting bounds can be generated by generating an arbitrary rectange defined by a min - extent and max extent. - The min extent is the corner of one boundary, p_0. The max extent is the corner of the other boundary, p_1. - The boundary with a corner at p_1 can have any size. - While the boundary with a corner at p_0 can not be given a size that could imply a boundary - intersection. -} instance Arbitrary NonIntersectingBounds where arbitrary = do x_0 <- arbitrary y_0 <- arbitrary x_1 <- arbitrary y_1 <- arbitrary let p_0 = (min x_0 x_1, min y_0 y_1) p_1 = (max x_0 x_1, max y_0 y_1) s_0 <- choose (0.0, min (fst p_1 - fst p_0) (snd p_1 - snd p_0)) s_1 <- arbitrary return \$ NonIntersectingBounds (Boundary p_0 s_0) (Boundary p_1 s_1) intersects_is_reflexive_prop :: Boundary -> Bool intersects_is_reflexive_prop b = b `intersects` b encloses_is_reflexive_prop :: Boundary -> Bool encloses_is_reflexive_prop b = b `encloses` b