module Tests.Cube where import Test.QuickCheck import Comparisons import Cube import FunctionValues (FunctionValues) import Tests.FunctionValues () import Tetrahedron (v0, volume) instance Arbitrary Cube where arbitrary = do (Positive h') <- arbitrary :: Gen (Positive Double) i' <- choose (coordmin, coordmax) j' <- choose (coordmin, coordmax) k' <- choose (coordmin, coordmax) fv' <- arbitrary :: Gen FunctionValues return (Cube h' i' j' k' fv') where coordmin = -268435456 -- -(2^29 / 2) coordmax = 268435456 -- +(2^29 / 2) -- Quickcheck tests. -- | Since the grid size is necessarily positive, all tetrahedrons -- (which comprise cubes of positive volume) must have positive volume -- as well. prop_all_volumes_positive :: Cube -> Bool prop_all_volumes_positive c = null nonpositive_volumes where ts = tetrahedrons c volumes = map volume ts nonpositive_volumes = filter (<= 0) volumes -- | In fact, since all of the tetrahedra are identical, we should -- already know their volumes. There's 24 tetrahedra to a cube, so -- we'd expect the volume of each one to be (1/24)*h^3. prop_tetrahedron0_volumes_exact :: Cube -> Bool prop_tetrahedron0_volumes_exact c = volume (tetrahedron0 c) ~= (1/24)*(delta^(3::Int)) where delta = h c -- | In fact, since all of the tetrahedra are identical, we should -- already know their volumes. There's 24 tetrahedra to a cube, so -- we'd expect the volume of each one to be (1/24)*h^3. prop_tetrahedron1_volumes_exact :: Cube -> Bool prop_tetrahedron1_volumes_exact c = volume (tetrahedron1 c) ~= (1/24)*(delta^(3::Int)) where delta = h c -- | In fact, since all of the tetrahedra are identical, we should -- already know their volumes. There's 24 tetrahedra to a cube, so -- we'd expect the volume of each one to be (1/24)*h^3. prop_tetrahedron2_volumes_exact :: Cube -> Bool prop_tetrahedron2_volumes_exact c = volume (tetrahedron2 c) ~= (1/24)*(delta^(3::Int)) where delta = h c -- | In fact, since all of the tetrahedra are identical, we should -- already know their volumes. There's 24 tetrahedra to a cube, so -- we'd expect the volume of each one to be (1/24)*h^3. prop_tetrahedron3_volumes_exact :: Cube -> Bool prop_tetrahedron3_volumes_exact c = volume (tetrahedron3 c) ~= (1/24)*(delta^(3::Int)) where delta = h c -- | In fact, since all of the tetrahedra are identical, we should -- already know their volumes. There's 24 tetrahedra to a cube, so -- we'd expect the volume of each one to be (1/24)*h^3. prop_tetrahedron4_volumes_exact :: Cube -> Bool prop_tetrahedron4_volumes_exact c = volume (tetrahedron4 c) ~= (1/24)*(delta^(3::Int)) where delta = h c -- | In fact, since all of the tetrahedra are identical, we should -- already know their volumes. There's 24 tetrahedra to a cube, so -- we'd expect the volume of each one to be (1/24)*h^3. prop_tetrahedron5_volumes_exact :: Cube -> Bool prop_tetrahedron5_volumes_exact c = volume (tetrahedron5 c) ~= (1/24)*(delta^(3::Int)) where delta = h c -- | In fact, since all of the tetrahedra are identical, we should -- already know their volumes. There's 24 tetrahedra to a cube, so -- we'd expect the volume of each one to be (1/24)*h^3. prop_tetrahedron6_volumes_exact :: Cube -> Bool prop_tetrahedron6_volumes_exact c = volume (tetrahedron6 c) ~= (1/24)*(delta^(3::Int)) where delta = h c -- | In fact, since all of the tetrahedra are identical, we should -- already know their volumes. There's 24 tetrahedra to a cube, so -- we'd expect the volume of each one to be (1/24)*h^3. prop_tetrahedron7_volumes_exact :: Cube -> Bool prop_tetrahedron7_volumes_exact c = volume (tetrahedron7 c) ~= (1/24)*(delta^(3::Int)) where delta = h c -- | All tetrahedron should have their v0 located at the center of the cube. prop_v0_all_equal :: Cube -> Bool prop_v0_all_equal c = (v0 t0) == (v0 t1) where t0 = head (tetrahedrons c) -- Doesn't matter which two we choose. t1 = head $ tail (tetrahedrons c) -- | This pretty much repeats the prop_all_volumes_positive property, -- but will let me know which tetrahedrons's vertices are disoriented. prop_tetrahedron0_volumes_positive :: Cube -> Bool prop_tetrahedron0_volumes_positive c = volume (tetrahedron0 c) > 0 -- | This pretty much repeats the prop_all_volumes_positive property, -- but will let me know which tetrahedrons's vertices are disoriented. prop_tetrahedron1_volumes_positive :: Cube -> Bool prop_tetrahedron1_volumes_positive c = volume (tetrahedron1 c) > 0 -- | This pretty much repeats the prop_all_volumes_positive property, -- but will let me know which tetrahedrons's vertices are disoriented. prop_tetrahedron2_volumes_positive :: Cube -> Bool prop_tetrahedron2_volumes_positive c = volume (tetrahedron2 c) > 0 -- | This pretty much repeats the prop_all_volumes_positive property, -- but will let me know which tetrahedrons's vertices are disoriented. prop_tetrahedron3_volumes_positive :: Cube -> Bool prop_tetrahedron3_volumes_positive c = volume (tetrahedron3 c) > 0 -- | This pretty much repeats the prop_all_volumes_positive property, -- but will let me know which tetrahedrons's vertices are disoriented. prop_tetrahedron4_volumes_positive :: Cube -> Bool prop_tetrahedron4_volumes_positive c = volume (tetrahedron4 c) > 0 -- | This pretty much repeats the prop_all_volumes_positive property, -- but will let me know which tetrahedrons's vertices are disoriented. prop_tetrahedron5_volumes_positive :: Cube -> Bool prop_tetrahedron5_volumes_positive c = volume (tetrahedron5 c) > 0 -- | This pretty much repeats the prop_all_volumes_positive property, -- but will let me know which tetrahedrons's vertices are disoriented. prop_tetrahedron6_volumes_positive :: Cube -> Bool prop_tetrahedron6_volumes_positive c = volume (tetrahedron6 c) > 0 -- | This pretty much repeats the prop_all_volumes_positive property, -- but will let me know which tetrahedrons's vertices are disoriented. prop_tetrahedron7_volumes_positive :: Cube -> Bool prop_tetrahedron7_volumes_positive c = volume (tetrahedron7 c) > 0 -- | This pretty much repeats the prop_all_volumes_positive property, -- but will let me know which tetrahedrons's vertices are disoriented. prop_tetrahedron8_volumes_positive :: Cube -> Bool prop_tetrahedron8_volumes_positive c = volume (tetrahedron8 c) > 0 -- | This pretty much repeats the prop_all_volumes_positive property, -- but will let me know which tetrahedrons's vertices are disoriented. prop_tetrahedron9_volumes_positive :: Cube -> Bool prop_tetrahedron9_volumes_positive c = volume (tetrahedron9 c) > 0 -- | This pretty much repeats the prop_all_volumes_positive property, -- but will let me know which tetrahedrons's vertices are disoriented. prop_tetrahedron10_volumes_positive :: Cube -> Bool prop_tetrahedron10_volumes_positive c = volume (tetrahedron10 c) > 0 -- | This pretty much repeats the prop_all_volumes_positive property, -- but will let me know which tetrahedrons's vertices are disoriented. prop_tetrahedron11_volumes_positive :: Cube -> Bool prop_tetrahedron11_volumes_positive c = volume (tetrahedron11 c) > 0 -- | This pretty much repeats the prop_all_volumes_positive property, -- but will let me know which tetrahedrons's vertices are disoriented. prop_tetrahedron12_volumes_positive :: Cube -> Bool prop_tetrahedron12_volumes_positive c = volume (tetrahedron12 c) > 0 -- | This pretty much repeats the prop_all_volumes_positive property, -- but will let me know which tetrahedrons's vertices are disoriented. prop_tetrahedron13_volumes_positive :: Cube -> Bool prop_tetrahedron13_volumes_positive c = volume (tetrahedron13 c) > 0 -- | This pretty much repeats the prop_all_volumes_positive property, -- but will let me know which tetrahedrons's vertices are disoriented. prop_tetrahedron14_volumes_positive :: Cube -> Bool prop_tetrahedron14_volumes_positive c = volume (tetrahedron14 c) > 0 -- | This pretty much repeats the prop_all_volumes_positive property, -- but will let me know which tetrahedrons's vertices are disoriented. prop_tetrahedron15_volumes_positive :: Cube -> Bool prop_tetrahedron15_volumes_positive c = volume (tetrahedron15 c) > 0