+ t0 = tetrahedron cube 0
+ t6 = tetrahedron cube 6
+
+ -- What gets computed for c2100 of t6.
+ expr1 = eval (Tetrahedron.fv t6) $
+ (3/8)*I +
+ (1/12)*(T + R + L + D) +
+ (1/64)*(FT + FR + FL + FD) +
+ (7/48)*F +
+ (1/48)*B +
+ (1/96)*(RT + LD + LT + RD) +
+ (1/192)*(BT + BR + BL + BD)
+
+ -- What should be computed for c2100 of t6.
+ expr2 = eval (Tetrahedron.fv t0) $
+ (3/8)*I +
+ (1/12)*(F + R + L + B) +
+ (1/64)*(FT + RT + LT + BT) +
+ (7/48)*T +
+ (1/48)*D +
+ (1/96)*(FR + FL + BR + BL) +
+ (1/192)*(FD + RD + LD + BD)
+
+
+-- | We know what (c t6 2 1 0 0) should be from Sorokina and
+-- Zeilfelder, p. 87. This test checks the actual value based on
+-- the FunctionValues of the cube.
+--
+-- If 'prop_c_tilde_2100_rotation_correct' passes, then this test is
+-- even meaningful!
+prop_c_tilde_2100_correct :: Cube -> Bool
+prop_c_tilde_2100_correct cube =
+ c t6 2 1 0 0 == expected
+ where
+ t0 = tetrahedron cube 0
+ t6 = tetrahedron cube 6
+ fvs = Tetrahedron.fv t0
+ expected = eval fvs $
+ (3/8)*I +
+ (1/12)*(F + R + L + B) +
+ (1/64)*(FT + RT + LT + BT) +
+ (7/48)*T +
+ (1/48)*D +
+ (1/96)*(FR + FL + BR + BL) +
+ (1/192)*(FD + RD + LD + BD)
+
+
+-- Tests to check that the correct edges are incidental.
+prop_t0_shares_edge_with_t1 :: Cube -> Bool
+prop_t0_shares_edge_with_t1 cube =
+ (v1 t0) == (v1 t1) && (v3 t0) == (v2 t1)
+ where
+ t0 = tetrahedron cube 0
+ t1 = tetrahedron cube 1
+
+prop_t0_shares_edge_with_t3 :: Cube -> Bool
+prop_t0_shares_edge_with_t3 cube =
+ (v1 t0) == (v1 t3) && (v2 t0) == (v3 t3)
+ where
+ t0 = tetrahedron cube 0
+ t3 = tetrahedron cube 3
+
+prop_t0_shares_edge_with_t6 :: Cube -> Bool
+prop_t0_shares_edge_with_t6 cube =
+ (v2 t0) == (v3 t6) && (v3 t0) == (v2 t6)
+ where
+ t0 = tetrahedron cube 0
+ t6 = tetrahedron cube 6
+
+prop_t1_shares_edge_with_t2 :: Cube -> Bool
+prop_t1_shares_edge_with_t2 cube =
+ (v1 t1) == (v1 t2) && (v3 t1) == (v2 t2)
+ where
+ t1 = tetrahedron cube 1
+ t2 = tetrahedron cube 2
+
+prop_t1_shares_edge_with_t19 :: Cube -> Bool
+prop_t1_shares_edge_with_t19 cube =
+ (v2 t1) == (v3 t19) && (v3 t1) == (v2 t19)
+ where
+ t1 = tetrahedron cube 1
+ t19 = tetrahedron cube 19
+
+prop_t2_shares_edge_with_t3 :: Cube -> Bool
+prop_t2_shares_edge_with_t3 cube =
+ (v1 t1) == (v1 t2) && (v3 t1) == (v2 t2)
+ where
+ t1 = tetrahedron cube 1
+ t2 = tetrahedron cube 2
+
+prop_t2_shares_edge_with_t12 :: Cube -> Bool
+prop_t2_shares_edge_with_t12 cube =
+ (v2 t2) == (v3 t12) && (v3 t2) == (v2 t12)
+ where
+ t2 = tetrahedron cube 2
+ t12 = tetrahedron cube 12
+
+prop_t3_shares_edge_with_t21 :: Cube -> Bool
+prop_t3_shares_edge_with_t21 cube =
+ (v2 t3) == (v3 t21) && (v3 t3) == (v2 t21)
+ where
+ t3 = tetrahedron cube 3
+ t21 = tetrahedron cube 21
+
+prop_t4_shares_edge_with_t5 :: Cube -> Bool
+prop_t4_shares_edge_with_t5 cube =
+ (v1 t4) == (v1 t5) && (v3 t4) == (v2 t5)
+ where
+ t4 = tetrahedron cube 4
+ t5 = tetrahedron cube 5
+
+prop_t4_shares_edge_with_t7 :: Cube -> Bool
+prop_t4_shares_edge_with_t7 cube =
+ (v1 t4) == (v1 t7) && (v2 t4) == (v3 t7)
+ where
+ t4 = tetrahedron cube 4
+ t7 = tetrahedron cube 7
+
+prop_t4_shares_edge_with_t10 :: Cube -> Bool
+prop_t4_shares_edge_with_t10 cube =
+ (v2 t4) == (v3 t10) && (v3 t4) == (v2 t10)
+ where
+ t4 = tetrahedron cube 4
+ t10 = tetrahedron cube 10
+
+prop_t5_shares_edge_with_t6 :: Cube -> Bool
+prop_t5_shares_edge_with_t6 cube =
+ (v1 t5) == (v1 t6) && (v3 t5) == (v2 t6)
+ where
+ t5 = tetrahedron cube 5
+ t6 = tetrahedron cube 6
+
+prop_t5_shares_edge_with_t16 :: Cube -> Bool
+prop_t5_shares_edge_with_t16 cube =
+ (v2 t5) == (v3 t16) && (v3 t5) == (v2 t16)
+ where
+ t5 = tetrahedron cube 5
+ t16 = tetrahedron cube 16
+
+prop_t6_shares_edge_with_t7 :: Cube -> Bool
+prop_t6_shares_edge_with_t7 cube =
+ (v1 t6) == (v1 t7) && (v3 t6) == (v2 t7)
+ where
+ t6 = tetrahedron cube 6
+ t7 = tetrahedron cube 7
+
+prop_t7_shares_edge_with_t20 :: Cube -> Bool
+prop_t7_shares_edge_with_t20 cube =
+ (v2 t7) == (v3 t20) && (v2 t7) == (v3 t20)
+ where
+ t7 = tetrahedron cube 7
+ t20 = tetrahedron cube 20