module Unit ( unitTests ) where import Control.Lens import Parser (parseUnitTests) import Test.Tasty import Test.Tasty.HUnit import VeriFuzz unitTests :: TestTree unitTests = testGroup "Unit tests" [ testCase "Transformation of AST" $ assertEqual "Successful transformation" transformExpectedResult (transform trans transformTestData) , parseUnitTests ] transformTestData :: Expr transformTestData = BinOp (BinOp (BinOp (Id "id1") BinAnd (Id "id2")) BinAnd (BinOp (Id "id1") BinAnd (Id "id2")) ) BinAnd (BinOp (BinOp (BinOp (Id "id1") BinAnd (Id "id2")) BinAnd (BinOp (Id "id1") BinAnd (BinOp (BinOp (Id "id1") BinAnd (Id "id2")) BinAnd (BinOp (Id "id1") BinAnd (Id "id2")) ) ) ) BinOr (Concat [ Concat [ Concat [Id "id1", Id "id2", Id "id2"] , Id "id2" , Id "id2" , Concat [Id "id2", Id "id2", Concat [Id "id1", Id "id2"]] , Id "id2" ] , Id "id1" , Id "id2" ] ) ) transformExpectedResult :: Expr transformExpectedResult = BinOp (BinOp (BinOp (Id "id1") BinAnd (Id "Replaced")) BinAnd (BinOp (Id "id1") BinAnd (Id "Replaced")) ) BinAnd (BinOp (BinOp (BinOp (Id "id1") BinAnd (Id "Replaced")) BinAnd (BinOp (Id "id1") BinAnd (BinOp (BinOp (Id "id1") BinAnd (Id "Replaced")) BinAnd (BinOp (Id "id1") BinAnd (Id "Replaced")) ) ) ) BinOr (Concat [ Concat [ Concat [Id "id1", Id "Replaced", Id "Replaced"] , Id "Replaced" , Id "Replaced" , Concat [ Id "Replaced" , Id "Replaced" , Concat [Id "id1", Id "Replaced"] ] , Id "Replaced" ] , Id "id1" , Id "Replaced" ] ) ) trans :: Expr -> Expr trans e = case e of Id i -> if i == Identifier "id2" then Id $ Identifier "Replaced" else Id i _ -> e