+
+
+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 :: TestTree
+function_values_properties =
+ testGroup "FunctionValues properties" [
+ testProperty
+ "x rotation doesn't affect front"
+ prop_x_rotation_doesnt_affect_front,
+ testProperty
+ "x rotation doesn't affect back"
+ prop_x_rotation_doesnt_affect_back,
+ testProperty
+ "y rotation doesn't affect left"
+ prop_y_rotation_doesnt_affect_left,
+ testProperty
+ "y rotation doesn't affect right"
+ prop_y_rotation_doesnt_affect_right,
+ testProperty
+ "z rotation doesn't affect top"
+ prop_z_rotation_doesnt_affect_top,
+ testProperty
+ "z rotation doesn't affect down"
+ prop_z_rotation_doesnt_affect_down ]