-- | Assertions shared by every test slice. Nothing here may depend on an
-- optional package flag, so that the minimal core configuration compiles the
-- same helpers the full configuration does.
module Support
( requireRight
, requireQueryPoint
, assertEqual
, assertValid
) where
import Control.Monad (unless)
import Moonlight.Triangulation
( Point
, QueryPoint
, Triangulation
, mkQueryPoint
, validateTriangulation
)
requireRight :: Show error => String -> Either error value -> IO value
requireRight label value = case value of
Left failure -> fail (label <> ": " <> show failure)
Right result -> pure result
requireQueryPoint :: String -> Point -> IO (QueryPoint)
requireQueryPoint label = requireRight label . mkQueryPoint
assertEqual :: (Eq value, Show value) => String -> value -> value -> IO ()
assertEqual label expected actual =
unless (expected == actual) $
fail (label <> ": expected " <> show expected <> ", got " <> show actual)
assertValid :: String -> Triangulation mode vertex directed undirected face -> IO ()
assertValid label triangulation =
case validateTriangulation triangulation of
[] -> pure ()
violations -> fail (label <> " invariant violations: " <> show violations)