packages feed

delaunay-0.1.0.2: tests/Tests.hs

module Main where
import Test.HUnit(Counts(..),Test(..),runTestTT,(~?=),(~:))
import Control.Monad (unless)
import Data.Vector.V2
import System.Exit (exitFailure)

-- modules under test
import Graphics.Triangulation.Delaunay (triangulate)

-- TODO: use test-framework
success :: Counts -> Bool
success cs = errors cs == 0 && failures cs == 0

tests ::  IO Counts
tests = runTestTT $ TestList 
  [ fewPointsTests
  , triPointsAreDistinctTests
  ]

fewPointsTests = TestList 
  [ "triangulate no points"  ~: triangulate []                     ~?= []
  , "triangulate one point"  ~: triangulate [v2 1 1]               ~?= []
  , "triangulate two points" ~: triangulate [v2 1 1, v2 2 2]       ~?= []
  , "triangulate many dups"  ~: triangulate (replicate 5 (v2 1 1)) ~?= []
  ]
  where
    v2 = Vector2 

triPointsAreDistinctTests = TestList 
  [ "each tri has distinct pts" ~: filter (not . hasDistinctPoints) (triangulate pts) ~?= []
  ]
  where 
    pts = [v 0 7, v 24 33, v 10 13, v 20 0, v 22 11] where v = Vector2

hasDistinctPoints :: (Vector2, Vector2, Vector2) -> Bool
hasDistinctPoints (p1,p2,p3) = p1/=p2 && p1/=p3 && p2/=p3

main = do
  result <- tests
  unless (success result) exitFailure