toysolver-0.1.0: test/TestUtil.hs
{-# LANGUAGE TemplateHaskell, ScopedTypeVariables #-}
module Main (main) where
import Control.Monad
import Test.HUnit hiding (Test)
import Test.QuickCheck
import Test.Framework (Test, defaultMain, testGroup)
import Test.Framework.TH
import Test.Framework.Providers.QuickCheck2
import Test.Framework.Providers.HUnit
import qualified ToySolver.Data.Vec as Vec
import ToySolver.Internal.Util
import ToySolver.Internal.TextUtil
import qualified ToySolver.Knapsack as Knapsack
case_showRationalAsDecimal :: IO ()
case_showRationalAsDecimal = do
showRationalAsFiniteDecimal 0 @?= Just "0.0"
showRationalAsFiniteDecimal 1 @?= Just "1.0"
showRationalAsFiniteDecimal (-1) @?= Just "-1.0"
showRationalAsFiniteDecimal 0.1 @?= Just "0.1"
showRationalAsFiniteDecimal (-0.1) @?= Just "-0.1"
showRationalAsFiniteDecimal 1.1 @?= Just "1.1"
showRationalAsFiniteDecimal (-1.1) @?= Just "-1.1"
showRationalAsFiniteDecimal (5/4) @?= Just "1.25"
showRationalAsFiniteDecimal (-5/4) @?= Just "-1.25"
showRationalAsFiniteDecimal (4/3) @?= Nothing
showRationalAsFiniteDecimal (-4/3) @?= Nothing
case_readUnsignedInteger_maxBound_bug :: IO ()
case_readUnsignedInteger_maxBound_bug =
readUnsignedInteger "006666666666666667" @?= 6666666666666667
prop_readUnsignedInteger =
forAll (choose (0, 2^128)) $ \i ->
readUnsignedInteger (show i) == i
case_knapsack_1 :: IO ()
case_knapsack_1 = Knapsack.solve [(5,4), (6,5), (3,2)] 9 @?= (11, 9, [True,True,False])
case_knapsack_2 :: IO ()
case_knapsack_2 = Knapsack.solve [(16,2), (19,3), (23,4), (28,5)] 7 @?= (44, 7, [True,False,False,True])
case_Vec :: IO ()
case_Vec = do
(v::Vec.UVec Int) <- Vec.new
let xs = [0..100]
forM_ xs $ \i -> Vec.push v i
ys <- Vec.getElems v
ys @?= xs
Vec.resize v 4
zs <- Vec.getElems v
zs @?= take 4 xs
Vec.push v 1
Vec.push v 2
Vec.push v 3
ws <- Vec.getElems v
ws @?= take 4 xs ++ [1,2,3]
case_Vec_clone :: IO ()
case_Vec_clone = do
(v::Vec.UVec Int) <- Vec.new
Vec.push v 0
v2 <- Vec.clone v
Vec.write v2 0 1
a <- Vec.read v 0
a @?= 0
b <- Vec.read v2 0
b @?= 1
------------------------------------------------------------------------
-- Test harness
main :: IO ()
main = $(defaultMainGenerator)