1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
use super::*;
// ------------------------------------------------------------------
// 2. Live variables
// ------------------------------------------------------------------
#[test]
fn analysis_matrix_live() {
let mut cases = 0u64;
for size in [0, 1, 10, 100] {
let seeds = if size == 0 { 10 } else { 20 };
let probs = if size == 0 {
vec![0.0]
} else {
vec![0.1, 0.5, 0.9]
};
for seed in 0..seeds {
for &prob in &probs {
if size == 0 {
let shape = ProgramGraphShape::new(64, 64);
assert!(!weir::live::live_step(shape, "fin", "fout")
.entry()
.is_empty());
record_case();
cases += 1;
let r = weir::live::live_closure_borrowed_via(
&fake_dispatch_borrowed(&FakeResidentBackend::new()),
0,
&[],
&[],
&[],
&[],
10,
);
assert!(r.is_err() || r.unwrap().is_empty());
record_case();
cases += 1;
continue;
}
let fixture = CsrFactory::random_valid(size, prob, seed);
let shape =
ProgramGraphShape::new(fixture.node_count, fixture.edge_targets.len() as u32);
assert!(!weir::live::live_step(shape, "fin", "fout")
.entry()
.is_empty());
record_case();
cases += 1;
assert!(!weir::live::live_step(shape, "x", "y").entry().is_empty());
record_case();
cases += 1;
assert!(weir::live::prepare_live_graph(
fixture.node_count,
&fixture.edge_offsets,
&fixture.edge_targets,
&fixture.edge_kind_mask
)
.is_ok());
record_case();
cases += 1;
let seed_bits = vec![0b1u32];
let fake = FakeResidentBackend::new();
let r = weir::live::live_closure_borrowed_via(
&fake_dispatch_borrowed(&fake),
fixture.node_count,
&fixture.edge_offsets,
&fixture.edge_targets,
&fixture.edge_kind_mask,
&seed_bits,
100,
);
assert!(r.is_err());
record_case();
cases += 1;
#[cfg(feature = "cpu-parity")]
{
let cpu = weir::oracle::graph::live_closure(
fixture.node_count,
&fixture.edge_offsets,
&fixture.edge_targets,
&fixture.edge_kind_mask,
&seed_bits,
);
assert_eq!(cpu[0] & 0b1, 0b1);
record_case();
cases += 1;
}
}
}
}
eprintln!("analysis_matrix_live: {cases} cases");
assert!(cases >= 500, "expected ≥500 cases, got {cases}");
}