From db0cb44e128f8dc20625bc0888000df262cbe2ac Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Sat, 15 Oct 2011 18:14:34 -0400 Subject: [PATCH] Define a few tests locally. Define domain_point local to those tests. Remove the 'xi' alias. --- src/Tetrahedron.hs | 105 ++++++++++++++++++++++----------------------- 1 file changed, 51 insertions(+), 54 deletions(-) diff --git a/src/Tetrahedron.hs b/src/Tetrahedron.hs index 359ade5..e71151a 100644 --- a/src/Tetrahedron.hs +++ b/src/Tetrahedron.hs @@ -119,23 +119,6 @@ polynomial t = ((c t 3 0 0 0) `cmult` (beta t 3 0 0 0)) --- | Returns the domain point of t with indices i,j,k,l. --- Simply an alias for the domain_point function. -xi :: Tetrahedron -> Int -> Int -> Int -> Int -> Point -xi = domain_point - --- | Returns the domain point of t with indices i,j,k,l. -domain_point :: Tetrahedron -> Int -> Int -> Int -> Int -> Point -domain_point t i j k l - | i + j + k + l == 3 = weighted_sum `scale` (1/3) - | otherwise = error "domain point index out of bounds" - where - v0' = (v0 t) `scale` (fromIntegral i) - v1' = (v1 t) `scale` (fromIntegral j) - v2' = (v2 t) `scale` (fromIntegral k) - v3' = (v3 t) `scale` (fromIntegral l) - weighted_sum = v0' + v1' + v2' + v3' - -- | The Bernstein polynomial on t with indices i,j,k,l. Denoted by a -- capital 'B' in the Sorokina/Zeilfelder paper. @@ -611,39 +594,6 @@ prop_b3_v2_always_zero t = (volume t) > 0 ==> (b3 t) (v2 t) ~= 0 --- | Used for convenience in the next few tests; not a test itself. -p :: Tetrahedron -> Int -> Int -> Int -> Int -> Double -p t i j k l = (polynomial t) (xi t i j k l) - --- | Given in Sorokina and Zeilfelder, p. 78. -prop_c3000_identity :: Tetrahedron -> Property -prop_c3000_identity t = - (volume t) > 0 ==> - c t 3 0 0 0 ~= p t 3 0 0 0 - --- | Given in Sorokina and Zeilfelder, p. 78. -prop_c2100_identity :: Tetrahedron -> Property -prop_c2100_identity t = - (volume t) > 0 ==> - c t 2 1 0 0 ~= (term1 - term2 + term3 - term4) - where - term1 = (1/3)*(p t 0 3 0 0) - term2 = (5/6)*(p t 3 0 0 0) - term3 = 3*(p t 2 1 0 0) - term4 = (3/2)*(p t 1 2 0 0) - --- | Given in Sorokina and Zeilfelder, p. 78. -prop_c1110_identity :: Tetrahedron -> Property -prop_c1110_identity t = - (volume t) > 0 ==> - c t 1 1 1 0 ~= (term1 + term2 - term3 - term4) - where - term1 = (1/3)*((p t 3 0 0 0) + (p t 0 3 0 0) + (p t 0 0 3 0)) - term2 = (9/2)*(p t 1 1 1 0) - term3 = (3/4)*((p t 2 1 0 0) + (p t 1 2 0 0) + (p t 2 0 1 0)) - term4 = (3/4)*((p t 1 0 2 0) + (p t 0 2 1 0) + (p t 0 1 2 0)) - - prop_swapping_vertices_doesnt_affect_coefficients1 :: Tetrahedron -> Bool prop_swapping_vertices_doesnt_affect_coefficients1 t = c t 0 0 1 2 == c t' 0 0 1 2 @@ -682,10 +632,57 @@ tetrahedron_tests = p78_24_properties :: Test.Framework.Test p78_24_properties = - testGroup "p. 78, Section (2.4) Properties" [ - testProperty "c3000 identity" prop_c3000_identity, - testProperty "c2100 identity" prop_c2100_identity, - testProperty "c1110 identity" prop_c1110_identity] + testGroup "p. 78, Section (2.4) Properties" [ + testProperty "c3000 identity" prop_c3000_identity, + testProperty "c2100 identity" prop_c2100_identity, + testProperty "c1110 identity" prop_c1110_identity] + where + -- | Returns the domain point of t with indices i,j,k,l. + domain_point :: Tetrahedron -> Int -> Int -> Int -> Int -> Point + domain_point t i j k l + | i + j + k + l == 3 = weighted_sum `scale` (1/3) + | otherwise = error "domain point index out of bounds" + where + v0' = (v0 t) `scale` (fromIntegral i) + v1' = (v1 t) `scale` (fromIntegral j) + v2' = (v2 t) `scale` (fromIntegral k) + v3' = (v3 t) `scale` (fromIntegral l) + weighted_sum = v0' + v1' + v2' + v3' + + + -- | Used for convenience in the next few tests. + p :: Tetrahedron -> Int -> Int -> Int -> Int -> Double + p t i j k l = (polynomial t) (domain_point t i j k l) + + + -- | Given in Sorokina and Zeilfelder, p. 78. + prop_c3000_identity :: Tetrahedron -> Property + prop_c3000_identity t = + (volume t) > 0 ==> + c t 3 0 0 0 ~= p t 3 0 0 0 + + -- | Given in Sorokina and Zeilfelder, p. 78. + prop_c2100_identity :: Tetrahedron -> Property + prop_c2100_identity t = + (volume t) > 0 ==> + c t 2 1 0 0 ~= (term1 - term2 + term3 - term4) + where + term1 = (1/3)*(p t 0 3 0 0) + term2 = (5/6)*(p t 3 0 0 0) + term3 = 3*(p t 2 1 0 0) + term4 = (3/2)*(p t 1 2 0 0) + + -- | Given in Sorokina and Zeilfelder, p. 78. + prop_c1110_identity :: Tetrahedron -> Property + prop_c1110_identity t = + (volume t) > 0 ==> + c t 1 1 1 0 ~= (term1 + term2 - term3 - term4) + where + term1 = (1/3)*((p t 3 0 0 0) + (p t 0 3 0 0) + (p t 0 0 3 0)) + term2 = (9/2)*(p t 1 1 1 0) + term3 = (3/4)*((p t 2 1 0 0) + (p t 1 2 0 0) + (p t 2 0 1 0)) + term4 = (3/4)*((p t 1 0 2 0) + (p t 0 2 1 0) + (p t 0 1 2 0)) + tetrahedron_properties :: Test.Framework.Test -- 2.43.2