From 3ca93d34820387778ebdd8817130e719302bf02d Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Sun, 8 May 2011 16:51:47 -0400 Subject: [PATCH] More doc updates. --- src/Point.hs | 3 +- src/Tests/Tetrahedron.hs | 63 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 60 insertions(+), 6 deletions(-) diff --git a/src/Point.hs b/src/Point.hs index 94bcd70..bf6fe8e 100644 --- a/src/Point.hs +++ b/src/Point.hs @@ -68,6 +68,7 @@ distance p1 p2 = z2 = z_coord p2 --- | Returns 'True' if p1 'is_close' to p2, 'False' otherwise. +-- | Returns 'True' if p1 is close to (within 'epsilon' of) p2, +-- 'False' otherwise. is_close :: Point -> Point -> Bool is_close p1 p2 = (distance p1 p2) ~= 0 diff --git a/src/Tests/Tetrahedron.hs b/src/Tests/Tetrahedron.hs index d4b7b9b..bafb7fe 100644 --- a/src/Tests/Tetrahedron.hs +++ b/src/Tests/Tetrahedron.hs @@ -22,8 +22,10 @@ instance Arbitrary Tetrahedron where -- HUnit Tests --- Since p0, p1, p2 are in clockwise order, we expect the volume here --- to be negative. + +-- | Check the volume of a particular tetrahedron against the value +-- computed by hand. Its vertices are in clockwise order, so the +-- volume should be negative. test_volume1 :: Test test_volume1 = TestCase $ assertEqual "volume is correct" True (vol ~= (-1/3)) @@ -40,8 +42,9 @@ test_volume1 = vol = volume t --- Now, p0, p1, and p2 are in counter-clockwise order. The volume --- should therefore be positive. +-- | Check the volume of a particular tetrahedron against the value +-- computed by hand. Its vertices are in counter-clockwise order, so +-- the volume should be positive. test_volume2 :: Test test_volume2 = TestCase $ assertEqual "volume is correct" True (vol ~= (1/3)) @@ -57,6 +60,9 @@ test_volume2 = fv = empty_values } vol = volume t + +-- | Ensure that a tetrahedron contains a particular point chosen to +-- be inside of it. test_contains_point1 :: Test test_contains_point1 = TestCase $ assertEqual "contains an inner point" True (contains_point t inner_point) @@ -73,6 +79,8 @@ test_contains_point1 = fv = empty_values } +-- | Ensure that a tetrahedron does not contain a particular point chosen to +-- be outside of it (first test). test_doesnt_contain_point1 :: Test test_doesnt_contain_point1 = TestCase $ assertEqual "doesn't contain an exterior point" False (contains_point t exterior_point) @@ -89,6 +97,8 @@ test_doesnt_contain_point1 = fv = empty_values } +-- | Ensure that a tetrahedron does not contain a particular point chosen to +-- be outside of it (second test). test_doesnt_contain_point2 :: Test test_doesnt_contain_point2 = TestCase $ assertEqual "doesn't contain an exterior point" False (contains_point t exterior_point) @@ -104,6 +114,9 @@ test_doesnt_contain_point2 = v3 = p3, fv = empty_values } + +-- | Ensure that a tetrahedron does not contain a particular point chosen to +-- be outside of it (third test). test_doesnt_contain_point3 :: Test test_doesnt_contain_point3 = TestCase $ assertEqual "doesn't contain an exterior point" False (contains_point t exterior_point) @@ -119,6 +132,9 @@ test_doesnt_contain_point3 = v3 = p3, fv = empty_values } + +-- | Ensure that a tetrahedron does not contain a particular point chosen to +-- be outside of it (fourth test). test_doesnt_contain_point4 :: Test test_doesnt_contain_point4 = TestCase $ assertEqual "doesn't contain an exterior point" False (contains_point t exterior_point) @@ -134,6 +150,9 @@ test_doesnt_contain_point4 = v3 = p3, fv = empty_values } + +-- | Ensure that a tetrahedron does not contain a particular point chosen to +-- be outside of it (fifth test). test_doesnt_contain_point5 :: Test test_doesnt_contain_point5 = TestCase $ assertEqual "doesn't contain an exterior point" False (contains_point t exterior_point) @@ -149,6 +168,7 @@ test_doesnt_contain_point5 = v3 = p3, fv = empty_values } +-- | A list of all HUnit tests defined in this module. tetrahedron_tests :: [Test] tetrahedron_tests = [test_volume1, test_volume2, @@ -159,72 +179,105 @@ tetrahedron_tests = [test_volume1, test_doesnt_contain_point4, test_doesnt_contain_point5 ] + +-- | The barycentric coordinate of v0 with respect to itself should +-- be one. prop_b0_v0_always_unity :: Tetrahedron -> Property prop_b0_v0_always_unity t = (volume t) > 0 ==> (b0 t) (v0 t) ~= 1.0 +-- | The barycentric coordinate of v1 with respect to v0 should +-- be zero. prop_b0_v1_always_zero :: Tetrahedron -> Property prop_b0_v1_always_zero t = (volume t) > 0 ==> (b0 t) (v1 t) ~= 0 +-- | The barycentric coordinate of v2 with respect to v0 should +-- be zero. prop_b0_v2_always_zero :: Tetrahedron -> Property prop_b0_v2_always_zero t = (volume t) > 0 ==> (b0 t) (v2 t) ~= 0 +-- | The barycentric coordinate of v3 with respect to v0 should +-- be zero. prop_b0_v3_always_zero :: Tetrahedron -> Property prop_b0_v3_always_zero t = (volume t) > 0 ==> (b0 t) (v3 t) ~= 0 +-- | The barycentric coordinate of v1 with respect to itself should +-- be one. prop_b1_v1_always_unity :: Tetrahedron -> Property prop_b1_v1_always_unity t = (volume t) > 0 ==> (b1 t) (v1 t) ~= 1.0 +-- | The barycentric coordinate of v0 with respect to v1 should +-- be zero. prop_b1_v0_always_zero :: Tetrahedron -> Property prop_b1_v0_always_zero t = (volume t) > 0 ==> (b1 t) (v0 t) ~= 0 +-- | The barycentric coordinate of v2 with respect to v1 should +-- be zero. prop_b1_v2_always_zero :: Tetrahedron -> Property prop_b1_v2_always_zero t = (volume t) > 0 ==> (b1 t) (v2 t) ~= 0 +-- | The barycentric coordinate of v3 with respect to v1 should +-- be zero. prop_b1_v3_always_zero :: Tetrahedron -> Property prop_b1_v3_always_zero t = (volume t) > 0 ==> (b1 t) (v3 t) ~= 0 +-- | The barycentric coordinate of v2 with respect to itself should +-- be one. prop_b2_v2_always_unity :: Tetrahedron -> Property prop_b2_v2_always_unity t = (volume t) > 0 ==> (b2 t) (v2 t) ~= 1.0 +-- | The barycentric coordinate of v0 with respect to v2 should +-- be zero. prop_b2_v0_always_zero :: Tetrahedron -> Property prop_b2_v0_always_zero t = (volume t) > 0 ==> (b2 t) (v0 t) ~= 0 +-- | The barycentric coordinate of v1 with respect to v2 should +-- be zero. prop_b2_v1_always_zero :: Tetrahedron -> Property prop_b2_v1_always_zero t = (volume t) > 0 ==> (b2 t) (v1 t) ~= 0 +-- | The barycentric coordinate of v3 with respect to v2 should +-- be zero. prop_b2_v3_always_zero :: Tetrahedron -> Property prop_b2_v3_always_zero t = (volume t) > 0 ==> (b2 t) (v3 t) ~= 0 +-- | The barycentric coordinate of v3 with respect to itself should +-- be one. prop_b3_v3_always_unity :: Tetrahedron -> Property prop_b3_v3_always_unity t = (volume t) > 0 ==> (b3 t) (v3 t) ~= 1.0 +-- | The barycentric coordinate of v0 with respect to v3 should +-- be zero. prop_b3_v0_always_zero :: Tetrahedron -> Property prop_b3_v0_always_zero t = (volume t) > 0 ==> (b3 t) (v0 t) ~= 0 +-- | The barycentric coordinate of v1 with respect to v3 should +-- be zero. prop_b3_v1_always_zero :: Tetrahedron -> Property prop_b3_v1_always_zero t = (volume t) > 0 ==> (b3 t) (v1 t) ~= 0 +-- | The barycentric coordinate of v2 with respect to v3 should +-- be zero. prop_b3_v2_always_zero :: Tetrahedron -> Property prop_b3_v2_always_zero t = (volume t) > 0 ==> (b3 t) (v2 t) ~= 0 --- Used for convenience in the next few tests. +-- | 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) -- 2.43.2