packages feed

prizm-3.0.0: tests/QC/RGB.hs

{-# LANGUAGE FlexibleInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}

module QC.RGB (tests) where

import           Control.Monad                        (liftM3)
import           Data.Convertible
import           Data.Prizm.Color
import           Data.Prizm.Color.CIE                 as CIE
import           Test.Framework                       (Test)
import           Test.Framework.Providers.QuickCheck2 as QuickCheck
import           Test.QuickCheck

instance Arbitrary RGB where
  arbitrary = liftM3 mkRGB (choose rgbRange) (choose rgbRange) (choose rgbRange)
    where
      rgbRange = (0, 255)

rgb2XYZ :: RGB -> Bool
rgb2XYZ gVal = gVal == iso
  where
    iso = convert ((convert gVal) :: CIE.XYZ)

rgb2HEX :: RGB -> Bool
rgb2HEX gVal = gVal == iso
  where
    iso = convert ((convert gVal) :: HexRGB)

tests :: [Test]
tests =
  [ QuickCheck.testProperty "RGB    <-> CIE XYZ" rgb2XYZ
  , QuickCheck.testProperty "HexRGB <-> RGB    " rgb2HEX
  ]