packages feed

hip-1.2.0.0: tests/Graphics/Image/Interface/VectorSpec.hs

{-# LANGUAGE FlexibleContexts #-}
module Graphics.Image.Interface.VectorSpec (spec) where

import Test.Hspec
import Test.QuickCheck

import qualified Graphics.Image as IM
import qualified Graphics.Image.Interface.Vector as IV
import Graphics.Image.Types

import Graphics.Image.InterfaceSpec ()

prop_fromToIx :: Positive Int -> (NonNegative Int, NonNegative Int) -> Bool
prop_fromToIx (Positive n) (NonNegative i, NonNegative j) =
  (i, j `mod` n) == IV.toIx n (IV.fromIx n (i, j `mod` n))

prop_toFromIx :: Positive Int -> NonNegative Int -> Bool
prop_toFromIx (Positive n) (NonNegative k) = k == IV.fromIx n (IV.toIx n k)

prop_toFromVector
  :: Image VU Y Word8 -> Bool
prop_toFromVector img = img == IV.fromUnboxedVector (IM.dims img) (IV.toUnboxedVector img)

spec :: Spec
spec = do
  describe "Vector Representation Properties" $ do
    it "fromToIx" $ property $ prop_fromToIx
    it "toFromIx" $ property $ prop_toFromIx
    it "toFromVector" $ property $ prop_toFromVector