packages feed

covariance-0.2.0.1: test/Test.hs

-- |
-- Module      :  Spec
-- Description :  Covariance test suite
-- Copyright   :  2021 Dominik Schrempf
-- License     :  GPL-3.0-or-later
--
-- Maintainer  :  dominik.schrempf@gmail.com
-- Stability   :  experimental
-- Portability :  portable
--
-- Creation date: Thu Sep  9 21:59:03 2021.
module Main
  ( main,
  )
where

import Data.Either
import qualified Numeric.LinearAlgebra as L
import Statistics.Covariance
import Test.Tasty
import Test.Tasty.HUnit

main :: IO ()
main = defaultMain unitTests

emptyM :: L.Matrix Double
emptyM = L.fromLists [[]]

oneSampleM :: L.Matrix Double
oneSampleM = L.fromLists [[1, 2, 3, 4, 5]]

type Estimator = (L.Matrix Double -> Either String (L.Herm Double), String)

unitTestsForEstimator :: Estimator -> [TestTree]
unitTestsForEstimator (e, m) =
  [ testCase (m <> " fails on empty data matrices.") $
      assertEqual "" True (isLeft $ e emptyM),
    testCase (m <> " fails on one sample data matrices.") $
      assertEqual "" True (isLeft $ raoBlackwellLedoitWolf oneSampleM)
  ]

unitTestsForEstimators :: [Estimator] -> [TestTree]
unitTestsForEstimators = concatMap unitTestsForEstimator

estimators :: [Estimator]
estimators =
  [ (ledoitWolf DoCenter, "ledoitWolf"),
    (raoBlackwellLedoitWolf, "raoBlackwellLedoitWolf"),
    (oracleApproximatingShrinkage, "oracleApproximatingShrinkage"),
    (fmap fst . graphicalLasso 1.0, "graphicalLasso")
  ]

unitTests :: TestTree
unitTests = testGroup "Unit tests" $ unitTestsForEstimators estimators

-- import qualified Numeric.LinearAlgebra as L
-- let m = L.gaussianSample 666 30 (L.fromList [0..40]) (L.trustSym $ L.diagl [1..41])