packages feed

flat-0.3.4: test/Test/Data/Arbitrary.hs

{-# LANGUAGE CPP #-}
-- {-# LANGUAGE TemplateHaskell , CPP#-}

module Test.Data.Arbitrary where
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BL
import qualified Data.ByteString.Short as SBS
import qualified Data.Text as TS
import qualified Data.Text.Lazy as TL
import Test.Tasty.QuickCheck
import           Test.Data
-- import           Data.DeriveTH

import Numeric.Natural (Natural)

instance Arbitrary Natural where
  arbitrary = arbitrarySizedNatural
  shrink    = shrinkIntegral

-- Copied from quickcheck-instances (not used directly as it requires old-time that is incompatible with ghcjs)

instance Arbitrary BS.ByteString where
  arbitrary = BS.pack <$> arbitrary
  shrink xs = BS.pack <$> shrink (BS.unpack xs)

instance Arbitrary BL.ByteString where
  arbitrary = BL.pack <$> arbitrary
  shrink xs = BL.pack <$> shrink (BL.unpack xs)

instance Arbitrary SBS.ShortByteString where
  arbitrary = SBS.pack <$> arbitrary
  shrink xs = SBS.pack <$> shrink (SBS.unpack xs)

instance Arbitrary TS.Text where
    arbitrary = TS.pack <$> arbitrary
    shrink xs = TS.pack <$> shrink (TS.unpack xs)

instance Arbitrary TL.Text where
    arbitrary = TL.pack <$> arbitrary
    shrink xs = TL.pack <$> shrink (TL.unpack xs)

-- xxx = generate (arbitrary :: Gen (Large (Int)))

{-
-- derive makeArbitrary ''N
derive makeArbitrary ''Tree

derive makeArbitrary ''List

derive makeArbitrary ''Unit

derive makeArbitrary ''Un

derive makeArbitrary ''A

derive makeArbitrary ''B
-}
-- instance Arbitrary Word7 where arbitrary  = toEnum <$> choose (0, 127)
-- derive makeArbitrary ''ASCII
-- To generate Arbitrary instances while avoiding a direct dependency on 'derive' (that is not supported by Eta)
-- , run in the project directory:  derive -a test/Test/Data.hs --derive=Arbitrary
{-!
deriving instance Arbitrary N
deriving instance Arbitrary Tree
deriving instance Arbitrary List
deriving instance Arbitrary Unit
deriving instance Arbitrary Un
deriving instance Arbitrary A
deriving instance Arbitrary B
!-}
-- GENERATED START
instance () => Arbitrary N where
  arbitrary = do
    x <- choose (0 :: Int, 4)
    case x of
      0 -> return One
      1 -> return Two
      2 -> return Three
      3 -> return Four
      4 -> return Five
      _ -> error "FATAL ERROR: Arbitrary instance, logic bug"

instance (Arbitrary a) => Arbitrary (Tree a) where
  arbitrary = do
    x <- choose (0 :: Int, 1)
    case x of
      0 -> do
        x1 <- arbitrary
        x2 <- arbitrary
        return (Node x1 x2)
      1 -> Leaf <$> arbitrary
      _ -> error "FATAL ERROR: Arbitrary instance, logic bug"

instance (Arbitrary a) => Arbitrary (List a) where
  arbitrary = do
    x <- choose (0 :: Int, 1)
    case x of
      0 -> do
        x1 <- arbitrary
        x2 <- arbitrary
        return (C x1 x2)
      1 -> return N
      _ -> error "FATAL ERROR: Arbitrary instance, logic bug"

instance () => Arbitrary Unit where
  arbitrary = return Unit

instance () => Arbitrary Un where
  arbitrary = Un <$> arbitrary

instance () => Arbitrary A where
  arbitrary = do
    x <- choose (0 :: Int, 1)
    case x of
      0 -> A <$> arbitrary
      1 -> AA <$> arbitrary
      _ -> error "FATAL ERROR: Arbitrary instance, logic bug"

instance () => Arbitrary B where
  arbitrary = do
    x <- choose (0 :: Int, 1)
    case x of
      0 -> B <$> arbitrary
      1 -> BB <$> arbitrary
      _ -> error "FATAL ERROR: Arbitrary instance, logic bug"
-- GENERATED STOP