{-# LANGUAGE DeriveGeneric #-}
module Main
where
-- project imports
import Cfg
import Fqn
import Token
import Bitcode
import Location
-- general imports
import Data.Set
import Data.List
import System.Exit
import Test.QuickCheck
prop_nonAtomCfgsHaveEdges :: Cfg -> Cfg -> Bool
prop_nonAtomCfgsHaveEdges cfg1 cfg2 = let cfg3 = Cfg.concat cfg1 cfg2 in (length (toList (actualEdges (edges cfg3)))) >= 1
instance Arbitrary Cfg
where arbitrary = Cfg <$> arbitrary <*> arbitrary <*> arbitrary
instance Arbitrary Node
where arbitrary = Node <$> arbitrary
instance Arbitrary Instruction
where arbitrary = Instruction <$> arbitrary <*> arbitrary
instance Arbitrary InstructionContent
where arbitrary = LoadImmInt <$> arbitrary
instance Arbitrary IntContent
where arbitrary = IntContent <$> arbitrary <*> arbitrary
instance Arbitrary ConstInt
where arbitrary = ConstInt <$> arbitrary <*> arbitrary
instance Arbitrary TmpVariable
where arbitrary = TmpVariable <$> arbitrary <*> arbitrary
instance Arbitrary Fqn
where arbitrary = Fqn <$> arbitrary
instance Arbitrary Edges
where arbitrary = Edges <$> arbitrary
instance Arbitrary Edge
where arbitrary = Edge <$> arbitrary <*> arbitrary
instance Arbitrary Location
where arbitrary = Location <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
main :: IO ()
main = do
result <- quickCheckResult prop_nonAtomCfgsHaveEdges
case (isSuccess result) of { True -> exitSuccess; False -> exitFailure }