+
+
+
+-- | Ensure that the trilinear values wind up where we think they
+-- should.
+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]
+
+
+function_values_tests :: Test.Framework.Test
+function_values_tests =
+ testGroup "FunctionValues Tests"
+ [ testCase "test directions" test_directions ]
+
+
+prop_x_rotation_doesnt_affect_front :: FunctionValues -> Bool
+prop_x_rotation_doesnt_affect_front fv0 =
+ expr1 == expr2
+ where
+ fv1 = rotate cwx fv0
+ expr1 = front fv0
+ expr2 = front fv1
+
+prop_x_rotation_doesnt_affect_back :: FunctionValues -> Bool
+prop_x_rotation_doesnt_affect_back fv0 =
+ expr1 == expr2
+ where
+ fv1 = rotate cwx fv0
+ expr1 = back fv0
+ expr2 = back fv1
+
+
+prop_y_rotation_doesnt_affect_left :: FunctionValues -> Bool
+prop_y_rotation_doesnt_affect_left fv0 =
+ expr1 == expr2
+ where
+ fv1 = rotate cwy fv0
+ expr1 = left fv0
+ expr2 = left fv1
+
+prop_y_rotation_doesnt_affect_right :: FunctionValues -> Bool
+prop_y_rotation_doesnt_affect_right fv0 =
+ expr1 == expr2
+ where
+ fv1 = rotate cwy fv0
+ expr1 = right fv0
+ expr2 = right fv1
+
+
+prop_z_rotation_doesnt_affect_down :: FunctionValues -> Bool
+prop_z_rotation_doesnt_affect_down fv0 =
+ expr1 == expr2
+ where
+ fv1 = rotate cwz fv0
+ expr1 = down fv0
+ expr2 = down fv1
+
+
+prop_z_rotation_doesnt_affect_top :: FunctionValues -> Bool
+prop_z_rotation_doesnt_affect_top fv0 =
+ expr1 == expr2
+ where
+ fv1 = rotate cwz fv0
+ expr1 = top fv0
+ expr2 = top fv1
+
+
+function_values_properties :: Test.Framework.Test
+function_values_properties =
+ let tp = testProperty
+ in
+ testGroup "FunctionValues Properties" [
+ tp "x rotation doesn't affect front" prop_x_rotation_doesnt_affect_front,
+ tp "x rotation doesn't affect back" prop_x_rotation_doesnt_affect_back,
+ tp "y rotation doesn't affect left" prop_y_rotation_doesnt_affect_left,
+ tp "y rotation doesn't affect right" prop_y_rotation_doesnt_affect_right,
+ tp "z rotation doesn't affect top" prop_z_rotation_doesnt_affect_top,
+ tp "z rotation doesn't affect down" prop_z_rotation_doesnt_affect_down ]