54 lines
1.4 KiB
Haskell
54 lines
1.4 KiB
Haskell
import Test.QuickCheck
|
|
|
|
import Dodge.LevelGen.StaticWalls
|
|
import Geometry
|
|
|
|
main :: IO ()
|
|
main = do
|
|
putStrLn "Running tests:"
|
|
quickCheck prop_looping
|
|
|
|
nextPair :: Eq a => (a,a) -> [(a,a)] -> [(a,a)]
|
|
nextPair (_,y) = filter (\(x,_) -> x == y)
|
|
|
|
isLooping :: Eq a => [(a,a)] -> Bool
|
|
isLooping xs = all (( == 1) . length . flip nextPair xs) xs
|
|
|
|
isLooping' :: Eq a => [(a,a)] -> Bool
|
|
isLooping' xs = all (f xs) xs
|
|
where
|
|
f ys (x,y) = length ins == length outs && length rins == length routs
|
|
where
|
|
ins = filter (\(a,b) -> a == x) ys
|
|
outs = filter (\(a,b) -> b == x) ys
|
|
rins = filter (\(a,b) -> a == y) ys
|
|
routs = filter (\(a,b) -> b == y) ys
|
|
|
|
polygonStrictlyConvex :: [Point2] -> Bool
|
|
polygonStrictlyConvex ps = True
|
|
|
|
--prop_looping :: [Point2] -> [WallP] -> Bool
|
|
|
|
prop_looping = forAllShrink genTris shrinkTris $ \tris ->
|
|
(all (not . (\[a,b,c] -> isOnLine a b c
|
|
|| isOnLine a c b
|
|
|| isOnLine b c a
|
|
) ) tris)
|
|
==> (isLooping' $ foldr cutWalls' [] tris)
|
|
|
|
shrinkTris [] = []
|
|
shrinkTris (x:xs) = xs : map (x :) (shrinkTris xs)
|
|
|
|
genTri = zip <$> trip <*> trip
|
|
where
|
|
trip = vectorOf 3 $ fmap fromIntegral $ choose (0,3::Int)
|
|
|
|
genTris = listOf genTri
|
|
|
|
--extractLoops :: Eq a => [(a,a)] -> [[(a,a)]]
|
|
--extractLoops [] = []
|
|
--extractLoops (x:xs) =
|
|
|
|
--
|
|
--[[(0.0,1.0),(3.0,4.0),(5.0,5.0)],[(2.0,0.0),(2.0,4.0),(1.0,1.0)],[(5.0,5.0),(2.0,2.0),(1.0,3.0)]]
|