From 358115c489b638df96dd264887924cb5ce268b99 Mon Sep 17 00:00:00 2001 From: Alexey Kuleshevich Date: Mon, 13 Jan 2020 03:47:34 +0300 Subject: [PATCH] More spec for alternative RGB color spaces --- Color/Color.cabal | 4 +++ Color/tests/Graphics/Color/Model/CMYKSpec.hs | 1 - .../Color/Space/RGB/Alternative/CMYKSpec.hs | 26 +++++++++++++++++++ .../Color/Space/RGB/Alternative/HSISpec.hs | 21 +++++++++++++++ .../Color/Space/RGB/Alternative/HSLSpec.hs | 21 +++++++++++++++ .../Color/Space/RGB/Alternative/HSVSpec.hs | 21 +++++++++++++++ 6 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 Color/tests/Graphics/Color/Space/RGB/Alternative/CMYKSpec.hs create mode 100644 Color/tests/Graphics/Color/Space/RGB/Alternative/HSISpec.hs create mode 100644 Color/tests/Graphics/Color/Space/RGB/Alternative/HSLSpec.hs create mode 100644 Color/tests/Graphics/Color/Space/RGB/Alternative/HSVSpec.hs diff --git a/Color/Color.cabal b/Color/Color.cabal index b86790f..cb97637 100644 --- a/Color/Color.cabal +++ b/Color/Color.cabal @@ -123,6 +123,10 @@ test-suite tests , Graphics.Color.Space.RGB.ITU.Rec470Spec , Graphics.Color.Space.RGB.ITU.Rec601Spec , Graphics.Color.Space.RGB.ITU.Rec709Spec + , Graphics.Color.Space.RGB.Alternative.CMYKSpec + , Graphics.Color.Space.RGB.Alternative.HSISpec + , Graphics.Color.Space.RGB.Alternative.HSLSpec + , Graphics.Color.Space.RGB.Alternative.HSVSpec , Graphics.Color.Space.RGB.Alternative.YCbCrSpec , Graphics.Color.Standard.RALSpec , Spec diff --git a/Color/tests/Graphics/Color/Model/CMYKSpec.hs b/Color/tests/Graphics/Color/Model/CMYKSpec.hs index e3f7533..d40a9e2 100644 --- a/Color/tests/Graphics/Color/Model/CMYKSpec.hs +++ b/Color/tests/Graphics/Color/Model/CMYKSpec.hs @@ -33,7 +33,6 @@ spec = prop "cmyk2rgb - 16bit" $ \(cmyk@(ColorCMYK c m y k) :: Color CMYK Word16) -> case JuicyPixels.convertPixel (JuicyPixels.PixelCMYK16 c m y k) of JuicyPixels.PixelRGB16 r g b -> - -- toWord16 <$> cmyk2rgb (toFloat <$> cmyk) `approxIntegralColorExpect1` ColorRGB r g b approxIntegralColorExpect 2 (toWord16 <$> cmyk2rgb (toFloat <$> cmyk)) (ColorRGB r g b) prop "rgb2cmyk - 16bit" $ \(rgb@(ColorRGB r g b) :: Color RGB Word16) -> case JuicyPixels.convertPixel (JuicyPixels.PixelRGB16 r g b) of diff --git a/Color/tests/Graphics/Color/Space/RGB/Alternative/CMYKSpec.hs b/Color/tests/Graphics/Color/Space/RGB/Alternative/CMYKSpec.hs new file mode 100644 index 0000000..a27cfeb --- /dev/null +++ b/Color/tests/Graphics/Color/Space/RGB/Alternative/CMYKSpec.hs @@ -0,0 +1,26 @@ +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TypeApplications #-} +module Graphics.Color.Space.RGB.Alternative.CMYKSpec (spec) where + +import Graphics.Color.Space.Common +import Graphics.Color.Space.RGB.SRGB +import qualified Graphics.Color.Space.RGB.Derived.SRGB as Derived +import Graphics.Color.Space.RGB.Alternative.CMYK +import Graphics.Color.Space.RGB.Derived.SRGBSpec () + + +instance (Elevator e, Random e) => Arbitrary (Color (CMYK cs) e) where + arbitrary = + ColorCMYK <$> arbitraryElevator <*> arbitraryElevator <*> arbitraryElevator <*> + arbitraryElevator + +spec :: Spec +spec = + describe "CMYK" $ do + colorModelSpec @(CMYK (Derived.SRGB D65)) @Word "CMYK" + colorSpaceCommonSpec @(CMYK (Derived.SRGB D65)) @_ @Double $ pure () + -- Arbitrary inverse CMYKtoSRGB is not true. + prop "sRGBtoCMYK" $ \ (srgb :: Color (Derived.SRGB D65) Double) -> + toBaseSpace (fromBaseSpace srgb :: Color (CMYK (Derived.SRGB D65)) Double) + `epsilonEqColor` srgb diff --git a/Color/tests/Graphics/Color/Space/RGB/Alternative/HSISpec.hs b/Color/tests/Graphics/Color/Space/RGB/Alternative/HSISpec.hs new file mode 100644 index 0000000..a3c9413 --- /dev/null +++ b/Color/tests/Graphics/Color/Space/RGB/Alternative/HSISpec.hs @@ -0,0 +1,21 @@ +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE TypeApplications #-} +module Graphics.Color.Space.RGB.Alternative.HSISpec (spec) where + +import Graphics.Color.Space.Common +import Graphics.Color.Space.RGB.SRGB +import qualified Graphics.Color.Space.RGB.Derived.SRGB as Derived +import Graphics.Color.Space.RGB.Alternative.HSI +import Graphics.Color.Space.RGB.SRGBSpec () +import Graphics.Color.Space.RGB.Derived.SRGBSpec () + + +instance (Elevator e, Random e) => Arbitrary (Color (HSI cs) e) where + arbitrary = ColorHSI <$> arbitraryElevator <*> arbitraryElevator <*> arbitraryElevator + +spec :: Spec +spec = + describe "HSI" $ do + describe "Derived-sRGB" $ do + colorModelSpec @(HSI (Derived.SRGB D65)) @Word "HSI" + colorSpaceSpec @(HSI (Derived.SRGB D65)) @_ @Double diff --git a/Color/tests/Graphics/Color/Space/RGB/Alternative/HSLSpec.hs b/Color/tests/Graphics/Color/Space/RGB/Alternative/HSLSpec.hs new file mode 100644 index 0000000..3b1bf78 --- /dev/null +++ b/Color/tests/Graphics/Color/Space/RGB/Alternative/HSLSpec.hs @@ -0,0 +1,21 @@ +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE TypeApplications #-} +module Graphics.Color.Space.RGB.Alternative.HSLSpec (spec) where + +import Graphics.Color.Space.Common +import Graphics.Color.Space.RGB.SRGB +import qualified Graphics.Color.Space.RGB.Derived.SRGB as Derived +import Graphics.Color.Space.RGB.Alternative.HSL +import Graphics.Color.Space.RGB.SRGBSpec () +import Graphics.Color.Space.RGB.Derived.SRGBSpec () + + +instance (Elevator e, Random e) => Arbitrary (Color (HSL cs) e) where + arbitrary = ColorHSL <$> arbitraryElevator <*> arbitraryElevator <*> arbitraryElevator + +spec :: Spec +spec = + describe "HSL" $ do + describe "Derived-sRGB" $ do + colorModelSpec @(HSL (Derived.SRGB D65)) @Word "HSL" + colorSpaceSpec @(HSL (Derived.SRGB D65)) @_ @Double diff --git a/Color/tests/Graphics/Color/Space/RGB/Alternative/HSVSpec.hs b/Color/tests/Graphics/Color/Space/RGB/Alternative/HSVSpec.hs new file mode 100644 index 0000000..bd76e24 --- /dev/null +++ b/Color/tests/Graphics/Color/Space/RGB/Alternative/HSVSpec.hs @@ -0,0 +1,21 @@ +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE TypeApplications #-} +module Graphics.Color.Space.RGB.Alternative.HSVSpec (spec) where + +import Graphics.Color.Space.Common +import Graphics.Color.Space.RGB.SRGB +import qualified Graphics.Color.Space.RGB.Derived.SRGB as Derived +import Graphics.Color.Space.RGB.Alternative.HSV +import Graphics.Color.Space.RGB.SRGBSpec () +import Graphics.Color.Space.RGB.Derived.SRGBSpec () + + +instance (Elevator e, Random e) => Arbitrary (Color (HSV cs) e) where + arbitrary = ColorHSV <$> arbitraryElevator <*> arbitraryElevator <*> arbitraryElevator + +spec :: Spec +spec = + describe "HSV" $ do + describe "Derived-sRGB" $ do + colorModelSpec @(HSV (Derived.SRGB D65)) @Word "HSV" + colorSpaceSpec @(HSV (Derived.SRGB D65)) @_ @Double