diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2018-12-23 11:27:11 +0000 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2018-12-23 11:27:18 +0000 |
commit | 434c2828ab622c4b9d07a1f1a8a09ede0696f4e0 (patch) | |
tree | 4a8ff0f4b78640a596b5cea26725bf991c65f070 /tests/Unit.hs | |
parent | 856034f1eaa0785cb9f29717fc32d0d6ed798460 (diff) | |
download | verismith-434c2828ab622c4b9d07a1f1a8a09ede0696f4e0.tar.gz verismith-434c2828ab622c4b9d07a1f1a8a09ede0696f4e0.zip |
Add unit tests for the traversal
Diffstat (limited to 'tests/Unit.hs')
-rw-r--r-- | tests/Unit.hs | 50 |
1 files changed, 44 insertions, 6 deletions
diff --git a/tests/Unit.hs b/tests/Unit.hs index a04098b..976f23b 100644 --- a/tests/Unit.hs +++ b/tests/Unit.hs @@ -1,13 +1,51 @@ +{-# LANGUAGE OverloadedStrings #-} + module Unit (unitTests) where +import Control.Lens +import qualified Data.Graph.Inductive as G +import Data.Text (Text) +import qualified Data.Text as T import Test.Tasty import Test.Tasty.HUnit +import Test.VeriFuzz unitTests = testGroup "Unit tests" - [ testCase "List comparison (different length)" $ - [1, 2, 3] `compare` [1,2] @?= GT - - -- the following test does not hold - , testCase "List comparison (same length)" $ - [1, 2, 3] `compare` [1,2,2] @?= GT + [ testCase "Transformation of AST" $ + assertEqual "Successful transformation" transformExpectedResult + (transformOf traverseExpr trans transformTestData) ] + +primExpr :: Text -> Expression +primExpr = PrimExpr . PrimId . Identifier + +transformTestData :: Expression +transformTestData = OpExpr (OpExpr (OpExpr (primExpr "id1") BinAnd (primExpr "id2")) BinAnd + (OpExpr (primExpr "id1") BinAnd (primExpr "id2"))) BinAnd + (OpExpr (OpExpr (primExpr "id1") BinAnd (primExpr "id2")) BinAnd + (OpExpr (primExpr "id1") BinAnd (OpExpr (OpExpr (primExpr "id1") BinAnd (primExpr "id2")) BinAnd + (OpExpr (primExpr "id1") BinAnd (primExpr "id2"))))) + +transformExpectedResult :: Expression +transformExpectedResult = OpExpr (OpExpr (OpExpr (primExpr "id1") BinAnd (primExpr "Replaced")) BinAnd + (OpExpr (primExpr "id1") BinAnd (primExpr "Replaced"))) BinAnd + (OpExpr (OpExpr (primExpr "id1") BinAnd (primExpr "Replaced")) BinAnd + (OpExpr (primExpr "id1") BinAnd (OpExpr (OpExpr (primExpr "id1") BinAnd + (primExpr "Replaced")) BinAnd + (OpExpr (primExpr "id1") BinAnd (primExpr "Replaced"))))) + +trans e = + case e of + PrimExpr (PrimId id) -> if id == Identifier "id2" then + PrimExpr . PrimId $ Identifier "Replaced" + else PrimExpr (PrimId id) + _ -> e + +runMain = do + gr <- genRandomDAG 100 :: IO (G.Gr Gate ()) +-- _ <- runGraphviz (graphToDot quickParams $ emap (const "") gr) Png "output.png", +-- T.putStrLn $ generate gr + --g <- QC.generate (QC.arbitrary :: QC.Gen SourceText) + let x = generateAST $ Circuit gr + let y = head . reverse $ x ^.. getSourceText . traverse . getDescription . moduleItems . traverse . _Assign . contAssignExpr + print $ transformOf traverseExpr trans y |