Skip to content

Commit 5561f90

Browse files
authored
add replace tests (#21)
1 parent 21223a0 commit 5561f90

File tree

2 files changed

+86
-3
lines changed

2 files changed

+86
-3
lines changed

.github/workflows/rust.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff 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

tests/edits.rs

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use safety_net::assert_verilog_eq;
12
use safety_net::netlist::Gate;
23
use safety_net::netlist::GateNetlist;
34
use 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+
}

0 commit comments

Comments
 (0)