Skip to content

Commit 1b5f06b

Browse files
committed
Add benchmark for a fixpoint iteration with nested cycles
1 parent adf0556 commit 1b5f06b

File tree

1 file changed

+42
-1
lines changed

1 file changed

+42
-1
lines changed

benches/dataflow.rs

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,5 +167,46 @@ fn dataflow(criterion: &mut Criterion) {
167167
});
168168
}
169169

170-
criterion_group!(benches, dataflow);
170+
/// Emulates a data flow problem of the form:
171+
/// ```py
172+
/// self.x0 = self.x1 + self.x2 + self.x3 + self.x4
173+
/// self.x1 = self.x0 + self.x2 + self.x3 + self.x4
174+
/// self.x2 = self.x0 + self.x1 + self.x3 + self.x4
175+
/// self.x3 = self.x0 + self.x1 + self.x2 + self.x4
176+
/// self.x4 = 0
177+
/// ```
178+
fn nested(criterion: &mut Criterion) {
179+
criterion.bench_function("converge_diverge_nested", |b| {
180+
b.iter_batched_ref(
181+
|| {
182+
let mut db = salsa::DatabaseImpl::new();
183+
184+
let def_x0 = Definition::new(&db, None, 0);
185+
let def_x1 = Definition::new(&db, None, 0);
186+
let def_x2 = Definition::new(&db, None, 0);
187+
let def_x3 = Definition::new(&db, None, 0);
188+
let def_x4 = Definition::new(&db, None, 0);
189+
190+
let use_x0 = Use::new(&db, vec![def_x1, def_x2, def_x3, def_x4]);
191+
let use_x1 = Use::new(&db, vec![def_x0, def_x2, def_x3, def_x4]);
192+
let use_x2 = Use::new(&db, vec![def_x0, def_x1, def_x3, def_x4]);
193+
let use_x3 = Use::new(&db, vec![def_x0, def_x1, def_x3, def_x4]);
194+
195+
def_x0.set_base(&mut db).to(Some(use_x0));
196+
def_x1.set_base(&mut db).to(Some(use_x1));
197+
def_x2.set_base(&mut db).to(Some(use_x2));
198+
def_x3.set_base(&mut db).to(Some(use_x3));
199+
200+
(db, def_x0)
201+
},
202+
|(db, def_x0)| {
203+
// All symbols converge on 0.
204+
assert_eq!(infer_definition(db, *def_x0), Type::Values(Box::from([0])));
205+
},
206+
BatchSize::LargeInput,
207+
);
208+
});
209+
}
210+
211+
criterion_group!(benches, dataflow, nested);
171212
criterion_main!(benches);

0 commit comments

Comments
 (0)