packages feed

multiarg-0.30.0.10: tests/Multiarg/Types/Instances.hs

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

import Control.Applicative
import Test.QuickCheck
import Multiarg.Types

instance Arbitrary a => Arbitrary (ArgSpec a) where
  arbitrary = oneof
    [ ZeroArg <$> arbitrary
    , OneArg <$> arbitrary
    , TwoArg <$> arbitrary
    , ThreeArg <$> arbitrary
    ]

instance Arbitrary ShortName where
  arbitrary = do
    c <- arbitrary
    case shortName c of
      Nothing -> arbitrary
      Just n -> return n

instance Arbitrary LongName where
  arbitrary = do
    c1 <- arbitrary `suchThat` (\c -> c /= '-' && c /= '=')
    cs <- listOf (arbitrary `suchThat` (/= '='))
    case longName (c1 : cs) of
      Nothing -> error $ "could not generate long name: " ++ (c1:cs)
      Just n -> return n

instance Arbitrary OptName where
  arbitrary = fmap OptName arbitrary

instance Arbitrary Multiarg.Types.Word where
  arbitrary = Multiarg.Types.Word <$> arbitrary

instance CoArbitrary Multiarg.Types.Word where
  coarbitrary (Multiarg.Types.Word s) = coarbitrary s

instance Arbitrary OptArg where
  arbitrary = OptArg <$> arbitrary