File tree Expand file tree Collapse file tree 2 files changed +86
-3
lines changed Expand file tree Collapse file tree 2 files changed +86
-3
lines changed Original file line number Diff line number Diff line change @@ -53,11 +53,11 @@ jobs:
5353 - name : Generate code coverage
5454 run : cargo llvm-cov --features default --workspace --json > coverage.json
5555 - name : Coverage (60% by line)
56- run : python3 utils/code_coverage.py -p 60.0 --whitelist util.rs coverage.json >> $GITHUB_STEP_SUMMARY
56+ run : python3 utils/code_coverage.py -p 60.0 coverage.json --whitelist util.rs >> $GITHUB_STEP_SUMMARY
5757 - name : Coverage (80% by line)
58- run : python3 utils/code_coverage.py -p 80.0 --whitelist util.rs coverage.json >> $GITHUB_STEP_SUMMARY
58+ run : python3 utils/code_coverage.py -p 80.0 coverage.json --whitelist util.rs >> $GITHUB_STEP_SUMMARY
5959 - name : Coverage (90% by line)
60- run : python3 utils/code_coverage.py -p 90.0 --whitelist util.rs coverage.json >> $GITHUB_STEP_SUMMARY
60+ run : python3 utils/code_coverage.py -p 90.0 coverage.json --whitelist util.rs >> $GITHUB_STEP_SUMMARY
6161
6262 mdformat :
6363 name : Markdown format
Original file line number Diff line number Diff line change 1+ use safety_net:: assert_verilog_eq;
12use safety_net:: netlist:: Gate ;
23use safety_net:: netlist:: GateNetlist ;
34use safety_net:: netlist:: Netlist ;
@@ -38,3 +39,85 @@ fn test_clean() {
3839 assert_eq ! ( netlist. objects( ) . count( ) , 3 ) ;
3940 assert ! ( !netlist. clean( ) . unwrap( ) ) ;
4041}
42+
43+ #[ test]
44+ fn test_replace ( ) {
45+ let netlist = get_simple_example ( ) ;
46+ let input = netlist. inputs ( ) . next ( ) . unwrap ( ) ;
47+ let inverter = Gate :: new_logical ( "INV" . into ( ) , vec ! [ "I" . into( ) ] , "O" . into ( ) ) ;
48+ let inverted = netlist
49+ . insert_gate ( inverter, "inst_0" . into ( ) , & [ input. clone ( ) ] )
50+ . unwrap ( ) ;
51+ assert ! ( netlist. replace_net_uses( input. unwrap( ) , & inverted) . is_ok( ) ) ;
52+ assert_verilog_eq ! (
53+ netlist. to_string( ) ,
54+ "module example (
55+ a,
56+ b,
57+ y
58+ );
59+ input a;
60+ wire a;
61+ input b;
62+ wire b;
63+ output y;
64+ wire y;
65+ wire inst_0_Y;
66+ wire inst_0_O;
67+ AND inst_0 (
68+ .A(inst_0_O),
69+ .B(b),
70+ .Y(inst_0_Y)
71+ );
72+ INV inst_0 (
73+ .I(inst_0_O),
74+ .O(inst_0_O)
75+ );
76+ assign y = inst_0_Y;
77+ endmodule\n "
78+ ) ;
79+ }
80+
81+ #[ test]
82+ fn test_replace2 ( ) {
83+ let netlist = get_simple_example ( ) ;
84+ let input = netlist. inputs ( ) . next ( ) . unwrap ( ) ;
85+ let inverter = Gate :: new_logical ( "INV" . into ( ) , vec ! [ "I" . into( ) ] , "O" . into ( ) ) ;
86+ let inverted = netlist
87+ . insert_gate_disconnected ( inverter, "inst_0" . into ( ) )
88+ . unwrap ( ) ;
89+ // This errors, because input is not safe to delete. No replace is done.
90+ assert ! (
91+ netlist
92+ . replace_net_uses( input. clone( ) . unwrap( ) , & inverted)
93+ . is_err( )
94+ ) ;
95+ inverted. find_input ( & "I" . into ( ) ) . unwrap ( ) . connect ( input) ;
96+ assert_verilog_eq ! (
97+ netlist. to_string( ) ,
98+ "module example (
99+ a,
100+ b,
101+ y
102+ );
103+ input a;
104+ wire a;
105+ input b;
106+ wire b;
107+ output y;
108+ wire y;
109+ wire inst_0_Y;
110+ wire inst_0_O;
111+ AND inst_0 (
112+ .A(a),
113+ .B(b),
114+ .Y(inst_0_Y)
115+ );
116+ INV inst_0 (
117+ .I(a),
118+ .O(inst_0_O)
119+ );
120+ assign y = inst_0_Y;
121+ endmodule\n "
122+ ) ;
123+ }
You can’t perform that action at this time.
0 commit comments