packages feed

gev-lib-0.1.0.0: src/Tests/tests.hs

-- | tests for the library

module Main where

import Gev
import Gev.Gumbel
import Gev.Frechet
import Gev.Weibull
import Gev.GevDist

import Test.HUnit
import qualified System.Exit as Exit

------------------------------------ Gumbel ------------------------------------

-- | Gumbel dist instance.
gumbel :: GumbelDistribution
gumbel = gumbelDist 0.5 2.0

-- | individual test
testGumbelCDF :: Test
testGumbelCDF = TestCase (assertEqual "Gumbel CDF test" 0.6235249162568004 (cdf gumbel 2.0))

testGumbelPDF :: Test
testGumbelPDF = TestCase (assertEqual "Gumbel PDF test" 0.14726615762017733 (pdf gumbel 2.0))

testGumbelQuant :: Test
testGumbelQuant = TestCase (assertEqual "Gumbel Qauntile test" 2.5618608663174456 (quantile gumbel 0.7))

------------------------------------ Frechet -----------------------------------

-- | Frechet dist instance.
frechet :: FrechetDistribution
frechet = frechetDist 1.0 0.1 1.0

-- | individual test
testFrechetCDF :: Test
testFrechetCDF = TestCase (assertEqual "Frechet CDF test" 0.951229424500714 (cdf frechet 3.0))

testFrechetPDF :: Test
testFrechetPDF = TestCase (assertEqual "Frechet PDF test" 0.023780735612517853 (pdf frechet 3.0))

testFrechetQuant :: Test
testFrechetQuant = TestCase (assertEqual "Frechet Qauntile test" 1.2803673252057128 (quantile frechet 0.7))

------------------------------------ Weibull -----------------------------------

-- | Weibull dist instance.
weibull :: WeibullDistribution
weibull = weibullDist 2.0 2.0 2.0

-- | individual test
testWeibullCDF :: Test
testWeibullCDF = TestCase (assertEqual "Weibull CDF test" 0.7788007830714049 (cdf weibull 1.0))

testWeibullPDF :: Test
testWeibullPDF = TestCase (assertEqual "Weibull PDF test" 0.38940039153570244 (pdf weibull 1.0))

testWeibullQuant :: Test
testWeibullQuant = TestCase (assertEqual "Weibull Qauntile test" 0.8055546158342233 (quantile weibull 0.7))


------------------------------------ GEV -----------------------------------

--------- GEV with shape not equal to 0

-- | GEV dist instance.
gev :: GevDistribution
gev = gevDist 2.0 2.0 2.0

-- | individual test
testGEVCDF :: Test
testGEVCDF = TestCase (assertEqual "GEV CDF test" 0.4930686913952398 (cdf gev 3.0))

testGEVPDF :: Test
testGEVPDF = TestCase (assertEqual "GEV PDF test" 0.0871630538190878 (pdf gev 3.0))

testGEVQuant :: Test
testGEVQuant = TestCase (assertEqual "GEV Qauntile test" 8.860583704300595 (quantile gev 0.7))


--------- GEV with shape equal to 0

-- | GEV dist instance with shape equal to 0.
gevAlt :: GevDistribution
gevAlt = gevDist 2.0 2.0 0.0

-- | individual test
testGEVCDFAlt :: Test
testGEVCDFAlt = TestCase (assertEqual "GEV CDF test" 0.545239211892605 (cdf gevAlt 3.0))

testGEVPDFAlt :: Test
testGEVPDFAlt = TestCase (assertEqual "GEV PDF test" 0.16535214944520904 (pdf gevAlt 3.0))

testGEVQuantAlt :: Test
testGEVQuantAlt = TestCase (assertEqual "GEV Qauntile test" 4.061860866317446 (quantile gevAlt 0.7))

-- | list of tests
testList :: Test
testList = TestList [ TestLabel "testGumbelCDF" testGumbelCDF
                    , TestLabel "testGumbelPDF" testGumbelPDF
                    , TestLabel "testGumbelQuant" testGumbelQuant
                    , TestLabel "testFrechetCDF" testFrechetCDF
                    , TestLabel "testFrechetPDF" testFrechetPDF
                    , TestLabel "testFrechetQuant" testFrechetQuant
                    , TestLabel "testWeibullCDF" testWeibullCDF
                    , TestLabel "testWeibullPDF" testWeibullPDF
                    , TestLabel "testWeibullQuant" testWeibullQuant
                    , TestLabel "testGEVCDF" testGEVCDF
                    , TestLabel "testGEVPDF" testGEVPDF
                    , TestLabel "testGEVQuant" testGEVQuant
                    , TestLabel "testGEVCDFAlt" testGEVCDFAlt
                    , TestLabel "testGEVPDFAlt" testGEVPDFAlt
                    , TestLabel "testGEVQuantAlt" testGEVQuantAlt]

main :: IO ()
main = do
    result <- runTestTT testList
    if failures result > 0 then Exit.exitFailure else Exit.exitSuccess