aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/Main.hs44
1 files changed, 32 insertions, 12 deletions
diff --git a/test/Main.hs b/test/Main.hs
index a04533f..f149ab7 100644
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -8,35 +8,55 @@ import Test.Tasty.Hedgehog
import Test.Tasty.HUnit
import qualified Numeric.AD as AD
+import qualified Numeric.AD.Double as AD.Double
import Numeric.ADDual
+import qualified Numeric.ADDual.Array.Internal as ADDA
import Numeric.ADDual.Examples
-(~==) :: (Foldable t, Fractional a, Ord a, Show (t a)) => t a -> t a -> PropertyT IO ()
-a ~== b
- | length (toList a) == length (toList b)
- , and (zipWith close (toList a) (toList b))
- = return ()
- | otherwise
- = diff a (\_ _ -> False) b
- where
- close x y = abs (x - y) < 1e-5 ||
- (let m = max (abs x) (abs y) in m > 1e-5 && abs (x - y) / m < 1e-5)
+(~=) :: (Fractional a, Ord a) => a -> a -> Bool
+x ~= y = abs (x - y) < 1e-5 || (let m = max (abs x) (abs y) in m > 1e-5 && abs (x - y) / m < 1e-5)
+
+(~==) :: (Fractional a, Ord a, Show a) => a -> a -> PropertyT IO ()
+x ~== y = diff x (~=) y
+
+(~=!) :: (Foldable t, Fractional a, Ord a) => t a -> t a -> Bool
+a ~=! b = length (toList a) == length (toList b) && and (zipWith (~=) (toList a) (toList b))
+
+(~==!) :: (Foldable t, Fractional a, Ord a, Show (t a)) => t a -> t a -> PropertyT IO ()
+a ~==! b = diff a (~=!) b
main :: IO ()
main = defaultMain $ testGroup "Tests"
[testCase "product [1..5]" $
gradient' @Double product [1..5] 1 @?= (120, [120, 60, 40, 30, 24])
+
,testProperty "neural 80" $ property $ do
input <- forAll (genNeuralInput 80)
let (res, grad) = gradient' fneural input 1
res === fneural input
- grad ~== AD.grad fneural input
+ grad ~==! AD.grad fneural input
+ AD.grad fneural input === AD.Double.grad fneural input
+
,testProperty "neural 150" $ property $ do
input <- forAll (genNeuralInput 150)
let (res, grad) = gradient' fneural input 1
res === fneural input
- grad ~== AD.grad fneural input
+ grad ~==! AD.grad fneural input
+ AD.grad fneural input === AD.Double.grad fneural input
+
+ ,testProperty "primal neural == neural_A" $ property $ do
+ input <- forAll (genNeuralInput_A 100)
+ let resA = fneural_A input
+ let res = fneural (cvtFNeuralAtoFNeural input)
+ resA ~== res
+
+ ,testProperty "neural_A 100" $ property $ do
+ input <- forAll (genNeuralInput_A 100)
+ let (resA, gradA) = ADDA.gradient' fneural_A input 1
+ let (res, grad) = gradient' fneural (cvtFNeuralAtoFNeural input) 1
+ resA ~== res
+ cvtFNeuralAtoFNeural gradA ~==! grad
]