-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Utility functions for testing implementations of the math-programming library. -- -- Please see the README on GitHub. @package math-programming-tests @version 0.5.0 module Math.Programming.Tests.Api makeApiTests :: (MonadIO m, MonadLP v c o m) => (m () -> IO ()) -> Spec setGetVariableName :: (MonadIO m, MonadLP v c o m) => m () setGetConstraintName :: (MonadIO m, MonadLP v c o m) => m () -- | Fuzz testing for math programming backends. module Math.Programming.Tests.Fuzz newtype Variable Variable :: Int -> Variable newtype Constraint Constraint :: Int -> Constraint newtype Objective Objective :: Int -> Objective -- | The types of actions we can perform on a linear program data LPAction AddVariable :: Variable -> LPAction AddThenRemoveVariable :: Variable -> LPAction AddConstraint :: Constraint -> LPAction AddThenRemoveConstraint :: Constraint -> LPAction AddObjective :: Objective -> LPAction AddThenRemoveObjective :: Objective -> LPAction Optimize :: LPAction newtype LPActions LPActions :: [LPAction] -> LPActions data LPState v c o LPState :: Map Variable v -> Map Variable Text -> Map Constraint c -> Map Constraint Text -> Map Objective o -> Map Objective Text -> [LPAction] -> IOGenM StdGen -> LPState v c o [_variables] :: LPState v c o -> Map Variable v [_variableNames] :: LPState v c o -> Map Variable Text [_constraints] :: LPState v c o -> Map Constraint c [_constraintNames] :: LPState v c o -> Map Constraint Text [_objectives] :: LPState v c o -> Map Objective o [_objectiveNames] :: LPState v c o -> Map Objective Text [_pending] :: LPState v c o -> [LPAction] [_randomGen] :: LPState v c o -> IOGenM StdGen variables :: forall v_aa1t c_aa1u o_aa1v v_aaQf. Lens (LPState v_aa1t c_aa1u o_aa1v) (LPState v_aaQf c_aa1u o_aa1v) (Map Variable v_aa1t) (Map Variable v_aaQf) variableNames :: forall v_aa1t c_aa1u o_aa1v. Lens' (LPState v_aa1t c_aa1u o_aa1v) (Map Variable Text) randomGen :: forall v_aa1t c_aa1u o_aa1v. Lens' (LPState v_aa1t c_aa1u o_aa1v) (IOGenM StdGen) pending :: forall v_aa1t c_aa1u o_aa1v. Lens' (LPState v_aa1t c_aa1u o_aa1v) [LPAction] objectives :: forall v_aa1t c_aa1u o_aa1v o_aaQe. Lens (LPState v_aa1t c_aa1u o_aa1v) (LPState v_aa1t c_aa1u o_aaQe) (Map Objective o_aa1v) (Map Objective o_aaQe) objectiveNames :: forall v_aa1t c_aa1u o_aa1v. Lens' (LPState v_aa1t c_aa1u o_aa1v) (Map Objective Text) constraints :: forall v_aa1t c_aa1u o_aa1v c_aaQd. Lens (LPState v_aa1t c_aa1u o_aa1v) (LPState v_aa1t c_aaQd o_aa1v) (Map Constraint c_aa1u) (Map Constraint c_aaQd) constraintNames :: forall v_aa1t c_aa1u o_aa1v. Lens' (LPState v_aa1t c_aa1u o_aa1v) (Map Constraint Text) initLPState :: Int -> [LPAction] -> IO (LPState v c o) type LPFuzz v c o m = (MonadState (LPState v c o) m, MonadLP v c o m, MonadWriter (Seq String) m, MonadIO m) evalPending :: LPFuzz v c o m => m () evalAction :: LPFuzz v c o m => LPAction -> m () evalAction' :: LPFuzz v c o m => LPAction -> m () add :: (LPFuzz v c o m, Ord k) => k -> m a -> ASetter' (LPState v c o) (Map k a) -> m () addThenRemove :: (LPFuzz v c o m, Ord k) => k -> m a -> (a -> m ()) -> Lens' (LPState v c o) (Map k a) -> m () makeConstraint :: LPFuzz v c o m => m c chooseExpr :: LPFuzz v c o m => m (Expr v) chooseInequality :: LPFuzz v c o m => m (Expr v -> Expr v -> m c) makeObjective :: LPFuzz v c o m => m o makeFuzzTests :: (MonadIO m, MonadLP v c o m) => (m (Seq String) -> IO ()) -> Spec instance GHC.Classes.Ord Math.Programming.Tests.Fuzz.Variable instance GHC.Classes.Eq Math.Programming.Tests.Fuzz.Variable instance GHC.Show.Show Math.Programming.Tests.Fuzz.Variable instance GHC.Classes.Ord Math.Programming.Tests.Fuzz.Constraint instance GHC.Classes.Eq Math.Programming.Tests.Fuzz.Constraint instance GHC.Show.Show Math.Programming.Tests.Fuzz.Constraint instance GHC.Classes.Ord Math.Programming.Tests.Fuzz.Objective instance GHC.Classes.Eq Math.Programming.Tests.Fuzz.Objective instance GHC.Show.Show Math.Programming.Tests.Fuzz.Objective instance GHC.Show.Show Math.Programming.Tests.Fuzz.LPAction instance GHC.Show.Show Math.Programming.Tests.Fuzz.LPActions instance Test.QuickCheck.Arbitrary.Arbitrary Math.Programming.Tests.Fuzz.LPActions module Math.Programming.Tests.IP makeIPTests :: (MonadIO m, MonadIP v c o m) => (m () -> IO ()) -> Spec -- | We solve a simple MIP of the form -- --
--   min  x + y
--   s.t. x >= 1.1
--        y >= 1.1
--        0 <= x <= 5
--        0 <= y <= 5
--        x integer
--   
-- -- The optimal solution to this MIP is x = 2, y = 1.1. simpleMIPTest :: (MonadIO m, MonadIP v c o m) => m () module Math.Programming.Tests.LP makeLPTests :: (MonadIO m, MonadLP v c o m) => (m () -> IO ()) -> Spec data Food Corn :: Food Milk :: Food Bread :: Food data Nutrient Calories :: Nutrient VitaminA :: Nutrient dietProblemTest :: (MonadIO m, MonadLP v c o m) => m () instance GHC.Show.Show Math.Programming.Tests.LP.Food instance GHC.Read.Read Math.Programming.Tests.LP.Food instance GHC.Classes.Ord Math.Programming.Tests.LP.Food instance GHC.Classes.Eq Math.Programming.Tests.LP.Food instance GHC.Show.Show Math.Programming.Tests.LP.Nutrient instance GHC.Read.Read Math.Programming.Tests.LP.Nutrient instance GHC.Classes.Ord Math.Programming.Tests.LP.Nutrient instance GHC.Classes.Eq Math.Programming.Tests.LP.Nutrient module Math.Programming.Tests makeAllTests :: (MonadIO m, MonadIP v c o m) => String -> (m () -> IO ()) -> Spec