packages feed

Color-0.1.2: tests/Graphics/Color/Illuminant/Common.hs

{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
module Graphics.Color.Illuminant.Common
  ( illuminantSpec
  ) where

import Data.Proxy
import Graphics.Color.Space
import Graphics.Color.Model.Common


colorTemperatureExpectation ::
     forall i. Illuminant i
  => Expectation
colorTemperatureExpectation =
  round (unCCT (colorTemperature :: CCT i)) `shouldBe` natVal (Proxy :: Proxy (Temperature i))


illuminantSpec ::
     forall i. (Illuminant i)
  => Spec
illuminantSpec =
  let wp = whitePoint :: WhitePoint i Double
  in describe (showsType (Proxy :: Proxy i) "") $ do
       it "colorTemperature" $ colorTemperatureExpectation @i
       it "tristimulus to chromaticity" $
         fromColorXYZ (whitePointTristimulus :: Color (XYZ i) Double) `epsilonEqColorDouble`
           case wp of
             WhitePointChromaticity (Chromaticity c) -> c
       prop "whitePointXZ" $ forAll arbitraryElevator $ \ vY ->
         sum (whitePointXZ vY wp) `epsilonEqDouble` vY / yWhitePoint wp