{-# LANGUAGE FlexibleContexts #-}
module Math.Programming.Tests where
import Control.Monad
import Control.Monad.IO.Class
import Math.Programming
import Math.Programming.Tests.Api
import Math.Programming.Tests.Fuzz
import Math.Programming.Tests.IP
import Math.Programming.Tests.LP
import Test.Hspec
import Text.Printf
makeAllTests ::
(MonadIO m, MonadIP v c o m) =>
-- | The name of the API being tested. This will
-- be used to generate test group names.
String ->
-- | The runner for the API being tested.
(m () -> IO ()) ->
-- | The resulting test suite.
Spec
makeAllTests apiName runner =
describe (printf "Math.Programming API tests (%s backend)" apiName) $ do
makeApiTests runner
makeLPTests runner
makeIPTests runner
makeFuzzTests (runner . void)