packages feed

moonlight-triangulation-1.3.0.0: bench/delaunay-compare/Main.hs

-- | Haskell owner of the upstream-compatible construction comparison.
module Main (main) where

import Moonlight.Triangulation.Bench.DelaunayCompare.Domain (renderCompareObstruction)
import Moonlight.Triangulation.Bench.DelaunayCompare.Native (withNativeApi)
import Moonlight.Triangulation.Bench.DelaunayCompare.Suite
  ( preflightSuite
  , suiteAgreementMessage
  , suiteBenchmarks
  , withPreparedSuite
  )
import System.Exit (die)
import Test.Tasty.Bench (defaultMain)

main :: IO ()
main = do
  outcome <-
    withNativeApi $ \api ->
      withPreparedSuite api $ \suite -> do
        agreement <- preflightSuite api suite
        case agreement of
          Left obstruction -> pure (Left obstruction)
          Right () -> do
            putStrLn suiteAgreementMessage
            defaultMain (suiteBenchmarks api suite)
            pure (Right ())
  either (die . renderCompareObstruction) pure outcome