packages feed

prednote-0.28.0.0: tests/Rainbow/Types/Instances.hs

{-# OPTIONS_GHC -fno-warn-orphans #-}
module Rainbow.Types.Instances where

import Control.Monad
import Control.Applicative
import Data.Monoid
import Test.QuickCheck
import Rainbow.Types
import qualified Data.Text as X

instance Arbitrary a => Arbitrary (Last a) where
  arbitrary = Last <$> arbitrary

instance CoArbitrary a => CoArbitrary (Last a) where
  coarbitrary (Last m) = case m of
    Nothing -> varInt 0
    Just x -> varInt 1 . coarbitrary x

instance Arbitrary Enum8 where
  arbitrary = elements [ E0, E1, E2, E3, E4, E5, E6, E7 ]

varInt :: Int -> Gen b -> Gen b
varInt = variant

instance CoArbitrary Enum8 where
  coarbitrary a = case a of
    { E0 -> varInt 0; E1 -> varInt 1; E2 -> varInt 2; E3 -> varInt 3;
      E4 -> varInt 4; E5 -> varInt 5; E6 -> varInt 6; E7 -> varInt 7 }

instance Arbitrary Color8 where
  arbitrary = Color8 <$> arbitrary

instance CoArbitrary Color8 where
  coarbitrary (Color8 a) = coarbitrary a

instance Arbitrary Color256 where
  arbitrary = Color256 <$> arbitrary

instance CoArbitrary Color256 where
  coarbitrary (Color256 a) = coarbitrary a

instance Arbitrary StyleCommon where
  arbitrary = liftM4 StyleCommon arbitrary arbitrary arbitrary
    arbitrary

instance CoArbitrary StyleCommon where
  coarbitrary (StyleCommon a b c d) =
    coarbitrary a . coarbitrary b . coarbitrary c . coarbitrary d

instance Arbitrary Style8 where
  arbitrary = liftM3 Style8 arbitrary arbitrary arbitrary

instance CoArbitrary Style8 where
  coarbitrary (Style8 a b c) =
    coarbitrary a . coarbitrary b . coarbitrary c

instance Arbitrary Style256 where
  arbitrary = liftM3 Style256 arbitrary arbitrary arbitrary

instance CoArbitrary Style256 where
  coarbitrary (Style256 a b c) =
    coarbitrary a . coarbitrary b . coarbitrary c

instance Arbitrary TextSpec where
  arbitrary = liftM2 TextSpec arbitrary arbitrary

instance CoArbitrary TextSpec where
  coarbitrary (TextSpec x y) = coarbitrary x . coarbitrary y

instance Arbitrary X.Text where
  arbitrary = X.pack <$> listOf arbitrary

instance CoArbitrary X.Text where
  coarbitrary = coarbitrary . X.unpack

instance Arbitrary Chunk where
  arbitrary = liftM2 Chunk arbitrary arbitrary

instance CoArbitrary Chunk where
  coarbitrary (Chunk x y) = coarbitrary x . coarbitrary y