module Tests.FunctionValues
where
+import Test.HUnit
import Test.QuickCheck
+import Assertions
+import Examples
import FunctionValues
+-- | We perform addition with the function values contained in a
+-- FunctionValues object. If we choose random doubles near the machine
+-- min/max, we risk overflowing or underflowing the 'Double'. This
+-- places a reasonably safe limit on the maximum size of our generated
+-- 'Double' members.
+max_double :: Double
+max_double = 10000.0
+
+-- | See 'max_double'.
+min_double :: Double
+min_double = (-1) * max_double
+
+
instance Arbitrary FunctionValues where
arbitrary = do
- front' <- arbitrary :: Gen Double
- back' <- arbitrary :: Gen Double
- left' <- arbitrary :: Gen Double
- right' <- arbitrary :: Gen Double
- top' <- arbitrary :: Gen Double
- down' <- arbitrary :: Gen Double
- front_left' <- arbitrary :: Gen Double
- front_right' <- arbitrary :: Gen Double
- front_top' <- arbitrary :: Gen Double
- front_down' <- arbitrary :: Gen Double
- back_left' <- arbitrary :: Gen Double
- back_right' <- arbitrary :: Gen Double
- back_top' <- arbitrary :: Gen Double
- back_down' <- arbitrary :: Gen Double
- left_top' <- arbitrary :: Gen Double
- left_down' <- arbitrary :: Gen Double
- right_top' <- arbitrary :: Gen Double
- right_down' <- arbitrary :: Gen Double
- front_left_top' <- arbitrary :: Gen Double
- front_left_down' <- arbitrary :: Gen Double
- front_right_top' <- arbitrary :: Gen Double
- front_right_down' <- arbitrary :: Gen Double
- back_left_top' <- arbitrary :: Gen Double
- back_left_down' <- arbitrary :: Gen Double
- back_right_top' <- arbitrary :: Gen Double
- back_right_down' <- arbitrary :: Gen Double
- interior' <- arbitrary :: Gen Double
+ front' <- choose (min_double, max_double)
+ back' <- choose (min_double, max_double)
+ left' <- choose (min_double, max_double)
+ right' <- choose (min_double, max_double)
+ top' <- choose (min_double, max_double)
+ down' <- choose (min_double, max_double)
+ front_left' <- choose (min_double, max_double)
+ front_right' <- choose (min_double, max_double)
+ front_top' <- choose (min_double, max_double)
+ front_down' <- choose (min_double, max_double)
+ back_left' <- choose (min_double, max_double)
+ back_right' <- choose (min_double, max_double)
+ back_top' <- choose (min_double, max_double)
+ back_down' <- choose (min_double, max_double)
+ left_top' <- choose (min_double, max_double)
+ left_down' <- choose (min_double, max_double)
+ right_top' <- choose (min_double, max_double)
+ right_down' <- choose (min_double, max_double)
+ front_left_top' <- choose (min_double, max_double)
+ front_left_down' <- choose (min_double, max_double)
+ front_right_top' <- choose (min_double, max_double)
+ front_right_down' <- choose (min_double, max_double)
+ back_left_top' <- choose (min_double, max_double)
+ back_left_down' <- choose (min_double, max_double)
+ back_right_top' <- choose (min_double, max_double)
+ back_right_down' <- choose (min_double, max_double)
+ interior' <- choose (min_double, max_double)
return empty_values { front = front',
back = back',
back_right_top = back_right_top',
back_right_down = back_right_down',
interior = interior' }
+
+
+
+
+test_directions :: Assertion
+test_directions =
+ assertTrue "all direction functions work" (and equalities)
+ where
+ fvs = make_values trilinear 1 1 1
+ equalities = [ interior fvs == 4,
+ front fvs == 1,
+ back fvs == 7,
+ left fvs == 2,
+ right fvs == 6,
+ down fvs == 3,
+ top fvs == 5,
+ front_left fvs == 1,
+ front_right fvs == 1,
+ front_down fvs == 1,
+ front_top fvs == 1,
+ back_left fvs == 3,
+ back_right fvs == 11,
+ back_down fvs == 5,
+ back_top fvs == 9,
+ left_down fvs == 2,
+ left_top fvs == 2,
+ right_down fvs == 4,
+ right_top fvs == 8,
+ front_left_down fvs == 1,
+ front_left_top fvs == 1,
+ front_right_down fvs == 1,
+ front_right_top fvs == 1,
+ back_left_down fvs == 3,
+ back_left_top fvs == 3,
+ back_right_down fvs == 7,
+ back_right_top fvs == 15]