prizm-2.0.0: tests/QC/CIE.hs
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ViewPatterns #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module QC.CIE (tests) where
import Control.Monad (liftM3)
import Data.Convertible
import Data.MonoTraversable
import Data.Prizm.Color
import Data.Prizm.Color.CIE as CIE
import Data.Prizm.Color.Transform
import Test.Framework (Test)
import Test.Framework.Providers.QuickCheck2 as QuickCheck
import Test.QuickCheck
instance Arbitrary CIE.XYZ where
arbitrary = liftM3 CIE.XYZ (choose (0, 95.047)) (choose (0, 100.000)) (choose (0, 108.883))
instance Arbitrary CIE.LAB where
arbitrary = liftM3 CIE.LAB (choose (0, 100)) (choose ((-129), 129)) (choose ((-129), 129))
rN :: Double -> Double
rN = roundN 11
xyz2LAB :: CIE.XYZ -> Bool
xyz2LAB ((omap rN ) -> genVal) = genVal == xyz
where
((omap rN) -> xyz) =
convert ((convert genVal) :: CIE.LAB)
lab2XYZ :: CIE.LAB -> Bool
lab2XYZ ((omap rN ) -> genVal) = genVal == lab
where
((omap rN) -> lab) =
convert ((convert genVal) :: CIE.XYZ)
lab2LCH :: CIE.LAB -> Bool
lab2LCH ((omap rN ) -> genVal) = genVal == lch
where
((omap rN) -> lch) =
convert ((convert genVal) :: CIE.LCH)
tests :: [Test]
tests =
[ QuickCheck.testProperty "CIE XYZ <-> CIE L*a*b*" xyz2LAB
, QuickCheck.testProperty "CIE L*ab <-> CIE XYZ " lab2XYZ
, QuickCheck.testProperty "CIE L*ab <-> CIE L*Ch " lab2LCH
]