packages feed

prizm-2.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                     (Hex, RGB (..))
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 RGB (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) :: Hex)

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