about summary refs log tree commit diff
path: root/tvix/eval/benches/eval.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tvix/eval/benches/eval.rs')
-rw-r--r--tvix/eval/benches/eval.rs39
1 files changed, 39 insertions, 0 deletions
diff --git a/tvix/eval/benches/eval.rs b/tvix/eval/benches/eval.rs
new file mode 100644
index 000000000000..f85e3585f017
--- /dev/null
+++ b/tvix/eval/benches/eval.rs
@@ -0,0 +1,39 @@
+use criterion::{black_box, criterion_group, criterion_main, Criterion};
+use itertools::Itertools;
+
+fn interpret(code: &str) {
+    tvix_eval::Evaluation::new(code, None).evaluate();
+}
+
+fn eval_literals(c: &mut Criterion) {
+    c.bench_function("int", |b| {
+        b.iter(|| {
+            interpret("42");
+            black_box(())
+        })
+    });
+}
+
+fn eval_merge_attrs(c: &mut Criterion) {
+    c.bench_function("merge small attrs", |b| {
+        b.iter(|| {
+            interpret("{ a = 1; b = 2; } // { c = 3; }");
+            black_box(())
+        })
+    });
+
+    c.bench_function("merge large attrs with small attrs", |b| {
+        let large_attrs = format!(
+            "{{{}}}",
+            (0..10000).map(|n| format!("a{n} = {n};")).join(" ")
+        );
+        let expr = format!("{large_attrs} // {{ c = 3; }}");
+        b.iter(move || {
+            interpret(&expr);
+            black_box(())
+        })
+    });
+}
+
+criterion_group!(benches, eval_literals, eval_merge_attrs);
+criterion_main!(benches);