-- HUnit Tests
--- | 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 :: Assertion
-test_volume1 =
- assertEqual "volume is correct" True (vol ~= (-1/3))
- where
- p0 = (0, -0.5, 0)
- p1 = (0, 0.5, 0)
- p2 = (2, 0, 0)
- p3 = (1, 0, 1)
- t = Tetrahedron { v0 = p0,
- v1 = p1,
- v2 = p2,
- v3 = p3,
- fv = empty_values }
- vol = volume t
+-- | Check the volume of a particular tetrahedron (computed by hand)
+-- and whether or not it contains a specific point chosen to be
+-- outside of it. Its vertices are in clockwise order, so the volume
+-- should be negative.
+tetrahedron1_geometry_tests :: Test.Framework.Test
+tetrahedron1_geometry_tests =
+ testGroup "tetrahedron1 geometry"
+ [ testCase "volume1" volume1,
+ testCase "doesn't contain point1" doesnt_contain_point1]
+ where
+ p0 = (0, -0.5, 0)
+ p1 = (0, 0.5, 0)
+ p2 = (2, 0, 0)
+ p3 = (1, 0, 1)
+ t = Tetrahedron { v0 = p0,
+ v1 = p1,
+ v2 = p2,
+ v3 = p3,
+ fv = empty_values }
+
+ volume1 :: Assertion
+ volume1 =
+ assertEqual "volume is correct" True (vol ~= (-1/3))
+ where
+ vol = volume t
+
+ doesnt_contain_point1 :: Assertion
+ doesnt_contain_point1 =
+ assertEqual "doesn't contain an exterior point" False contained
+ where
+ exterior_point = (5, 2, -9.0212)
+ contained = contains_point t exterior_point
-- | Check the volume of a particular tetrahedron (computed by hand)
contained = contains_point t inner_point
--- | Ensure that a tetrahedron does not contain a particular point chosen to
--- be outside of it (first test).
-test_doesnt_contain_point1 :: Assertion
-test_doesnt_contain_point1 =
- assertEqual "doesn't contain an exterior point" False contained
- where
- p0 = (0, -0.5, 0)
- p1 = (0, 0.5, 0)
- p2 = (2, 0, 0)
- p3 = (1, 0, 1)
- exterior_point = (5, 2, -9.0212)
- t = Tetrahedron { v0 = p0,
- v1 = p1,
- v2 = p2,
- v3 = p3,
- fv = empty_values }
- contained = contains_point t exterior_point
-
-
-- | Ensure that a tetrahedron does not contain a particular point chosen to
-- be outside of it (second test).
test_doesnt_contain_point2 :: Assertion
tetrahedron_tests :: Test.Framework.Test
tetrahedron_tests =
testGroup "Tetrahedron Tests" [
+ tetrahedron1_geometry_tests,
tetrahedron2_geometry_tests,
- tc "volume (1)" test_volume1,
- tc "doesn't contain point (1)" test_doesnt_contain_point1,
tc "doesn't contain point (2)" test_doesnt_contain_point2,
tc "doesn't contain point (3)" test_doesnt_contain_point3,
tc "doesn't contain point (4)" test_doesnt_contain_point4,