module System.Console.MultiArg.QuickCheckHelpers where

import Test.QuickCheck ( Arbitrary ( arbitrary ),
                         Gen,
                         CoArbitrary ( coarbitrary ),
                         coarbitraryShow )
import Data.Text ( Text, pack )
import qualified Data.Set as Set
import Control.Monad ( liftM )

randText :: Gen Text
randText = liftM pack arbitrary

randSet :: (Ord a, Arbitrary a) => Gen (Set.Set a)
randSet = liftM Set.fromList arbitrary

newtype WText = WText { unWText :: Text }
                deriving Show

instance Arbitrary WText where
  arbitrary = liftM WText randText

instance CoArbitrary WText where
  coarbitrary (WText a) gc = coarbitraryShow a gc