]> gitweb.michael.orlitzky.com - spline3.git/blobdiff - src/FunctionValues.hs
Fix all orphan instances.
[spline3.git] / src / FunctionValues.hs
index 681a23b9fa517a935faf3d553d1202deaacb6bae..1fbc044909d4ba28de0b74fcc1c494e754a6829d 100644 (file)
@@ -4,6 +4,7 @@ module FunctionValues
 where
 
 import Prelude hiding (LT)
+import Test.QuickCheck (Arbitrary(..), choose)
 
 import Cardinal
 
@@ -41,6 +42,78 @@ data FunctionValues =
                      interior :: Double }
       deriving (Eq, Show)
 
+
+instance Arbitrary FunctionValues where
+    arbitrary = do
+      front'  <- choose (min_double, max_double)
+      back'   <- choose (min_double, max_double)
+      left'   <- choose (min_double, max_double)
+      right'  <- choose (min_double, max_double)
+      top'    <- choose (min_double, max_double)
+      down'   <- choose (min_double, max_double)
+      front_left' <- choose (min_double, max_double)
+      front_right' <- choose (min_double, max_double)
+      front_top' <- choose (min_double, max_double)
+      front_down' <- choose (min_double, max_double)
+      back_left' <- choose (min_double, max_double)
+      back_right' <- choose (min_double, max_double)
+      back_top' <- choose (min_double, max_double)
+      back_down' <- choose (min_double, max_double)
+      left_top' <- choose (min_double, max_double)
+      left_down' <- choose (min_double, max_double)
+      right_top' <- choose (min_double, max_double)
+      right_down' <- choose (min_double, max_double)
+      front_left_top' <- choose (min_double, max_double)
+      front_left_down' <- choose (min_double, max_double)
+      front_right_top' <- choose (min_double, max_double)
+      front_right_down' <- choose (min_double, max_double)
+      back_left_top' <- choose (min_double, max_double)
+      back_left_down' <- choose (min_double, max_double)
+      back_right_top' <- choose (min_double, max_double)
+      back_right_down' <- choose (min_double, max_double)
+      interior' <- choose (min_double, max_double)
+
+      return empty_values { front = front',
+                            back  = back',
+                            left  = left',
+                            right = right',
+                            top   = top',
+                            down  = down',
+                            front_left = front_left',
+                            front_right = front_right',
+                            front_top = front_top',
+                            front_down = front_down',
+                            back_left = back_left',
+                            back_right = back_right',
+                            back_top = back_top',
+                            back_down = back_down',
+                            left_top = left_top',
+                            left_down = left_down',
+                            right_top = right_top',
+                            right_down = right_down',
+                            front_left_top = front_left_top',
+                            front_left_down = front_left_down',
+                            front_right_top = front_right_top',
+                            front_right_down = front_right_down',
+                            back_left_top = back_left_top',
+                            back_left_down = back_left_down',
+                            back_right_top = back_right_top',
+                            back_right_down = back_right_down',
+                            interior = interior' }
+      where
+        -- | We perform addition with the function values contained in a
+        --   FunctionValues object. If we choose random doubles near the machine
+        --   min/max, we risk overflowing or underflowing the 'Double'. This
+        --   places a reasonably safe limit on the maximum size of our generated
+        --   'Double' members.
+        max_double :: Double
+        max_double = 10000.0
+
+        -- | See 'max_double'.
+        min_double :: Double
+        min_double = (-1) * max_double
+
+
 -- | Return a 'FunctionValues' with a bunch of zeros for data points.
 empty_values :: FunctionValues
 empty_values =