aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorYann Herklotz <git@ymhg.org>2019-05-12 00:14:15 +0100
committerYann Herklotz <git@ymhg.org>2019-05-12 00:14:15 +0100
commitf3c1942b50bfc294cbede8ae502b5f6cb306da7e (patch)
tree4d863ff6dca8f158a5dbf57d0f7dbd3d3c73a885 /test
parent9637980a562d79582689daa5dff43814a531f900 (diff)
downloadverismith-f3c1942b50bfc294cbede8ae502b5f6cb306da7e.tar.gz
verismith-f3c1942b50bfc294cbede8ae502b5f6cb306da7e.zip
Add working statement reduction
Diffstat (limited to 'test')
-rw-r--r--test/Reduce.hs85
1 files changed, 85 insertions, 0 deletions
diff --git a/test/Reduce.hs b/test/Reduce.hs
index 5afae18..37a2604 100644
--- a/test/Reduce.hs
+++ b/test/Reduce.hs
@@ -26,6 +26,7 @@ reduceUnitTests :: TestTree
reduceUnitTests = testGroup "Reducer tests"
[ moduleReducerTest
, modItemReduceTest
+ , halveStatementsTest
, activeWireTest
]
@@ -33,6 +34,7 @@ activeWireTest :: TestTree
activeWireTest = testCase "Active wires" $ do
findActiveWires verilog1 \\ ["x", "y", "z", "w"] @?= []
findActiveWires verilog2 \\ ["x", "y", "z"] @?= []
+ findActiveWires verilog3 \\ ["x", "y", "clk", "r1", "r2"] @?= []
where
verilog1 = head $ getVerilog [verilog|
module top(y, x);
@@ -54,6 +56,89 @@ module top(y, x);
assign z = 0;
endmodule
|]
+ verilog3 = head $ getVerilog [verilog|
+module top(clk, y, x);
+ input clk;
+ input x;
+ output y;
+ reg r1;
+ reg r2;
+ reg r3;
+ always @(posedge clk) begin
+ r1 <= r3;
+ r2 <= r1;
+ end
+
+ always @(posedge clk) begin
+ r1 <= r2;
+ end
+ assign y = {r1, r2, r3};
+endmodule
+|]
+
+halveStatementsTest :: TestTree
+halveStatementsTest = testCase "Statements" $ do
+ GenVerilog <$> halveStatements srcInfo1 @?= golden1
+ where
+ srcInfo1 = SourceInfo "top" [verilog|
+module top(clk, y, x);
+ input clk;
+ input x;
+ output y;
+ reg r1;
+ reg r2;
+ reg r3;
+ always @(posedge clk) begin
+ r1 <= r3;
+ r2 <= r1;
+ r3 <= r2;
+ end
+
+ always @(posedge clk) begin
+ r1 <= r2;
+ r2 <= r3;
+ r3 <= r1;
+ end
+ assign y = {r1, r2, r3};
+endmodule
+|]
+ golden1 = GenVerilog <$> Dual (SourceInfo "top" [verilog|
+module top(clk, y, x);
+ input clk;
+ input x;
+ output y;
+ reg r1;
+ reg r2;
+ reg r3;
+ always @(posedge clk) begin
+ r1 <= 1'b0;
+ end
+
+ always @(posedge clk) begin
+ r1 <= 1'b0;
+ end
+ assign y = {r1, 1'b0, 1'b0};
+endmodule
+|]) (SourceInfo "top" [verilog|
+module top(clk, y, x);
+ input clk;
+ input x;
+ output y;
+ reg r1;
+ reg r2;
+ reg r3;
+ always @(posedge clk) begin
+ r2 <= 1'b0;
+ r3 <= r2;
+ end
+
+ always @(posedge clk) begin
+ r2 <= r3;
+ r3 <= 1'b0;
+ end
+ assign y = {1'b0, r2, r3};
+endmodule
+|])
modItemReduceTest :: TestTree
modItemReduceTest = testCase "Module items" $ do