packages feed

toysolver-0.2.0: test/TestLPFile.hs

{-# LANGUAGE TemplateHaskell #-}
module Main (main) where

import Control.Monad
import Data.List
import Data.Maybe
import Test.HUnit hiding (Test)
import Test.Framework (Test, defaultMain, testGroup)
import Test.Framework.TH
import Test.Framework.Providers.HUnit
import ToySolver.Text.LPFile

case_testdata       = checkString "testdata" testdata
case_test_indicator = checkFile "samples/lp/test-indicator.lp"
case_test_qcp       = checkFile "samples/lp/test-qcp.lp"
case_test_qcp2      = checkFile "samples/lp/test-qcp2.lp"
case_test_qp        = checkFile "samples/lp/test-qp.lp"
case_empty_obj_1    = checkFile "samples/lp/empty_obj_1.lp"
case_empty_obj_2    = checkFile "samples/lp/empty_obj_2.lp"  

------------------------------------------------------------------------
-- Sample data

testdata :: String
testdata = unlines
  [ "Maximize"
  , " obj: x1 + 2 x2 + 3 x3 + x4"
  , "Subject To"
  , " c1: - x1 + x2 + x3 + 10 x4 <= 20"
  , " c2: x1 - 3 x2 + x3 <= 30"
  , " c3: x2 - 3.5 x4 = 0"
  , "Bounds"
  , " 0 <= x1 <= 40"
  , " 2 <= x4 <= 3"
  , "General"
  , " x4"
  , "End"
  ]

------------------------------------------------------------------------
-- Utilities

checkFile :: FilePath -> IO ()
checkFile fname = do
  r <- parseFile fname
  case r of
    Left err -> assertFailure $ show err
    Right lp ->
      case render lp of
        Left err -> assertFailure ("render failure: " ++ err)
        Right _ -> return ()

checkString :: String -> String -> IO ()
checkString name str = do
  case parseString name str of
    Left err -> assertFailure $ show err
    Right lp ->
      case render lp of
        Left err -> assertFailure ("render failure: " ++ err)
        Right _ -> return ()

------------------------------------------------------------------------
-- Test harness

main :: IO ()
main = $(defaultMainGenerator)