Skip to content

Commit 0e5381d

Browse files
committed
Add Samples-based evaluator benchmarks
This change adds some benchmarking of the evaluator using the checked in Teleportation and Deutsch-Jozsa samples.
1 parent 29c6fd5 commit 0e5381d

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

compiler/qsc/Cargo.toml

+15
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,25 @@ thiserror = { workspace = true }
2626
criterion = { workspace = true, features = ["cargo_bench_support"] }
2727
indoc = { workspace = true }
2828

29+
[lib]
30+
bench = false
31+
32+
[[bin]]
33+
name = "qsc"
34+
bench = false
35+
36+
[[bin]]
37+
name = "qsi"
38+
bench = false
39+
2940
[[bench]]
3041
name = "nqueens"
3142
harness = false
3243

3344
[[bench]]
3445
name = "library"
3546
harness = false
47+
48+
[[bench]]
49+
name = "eval"
50+
harness = false

compiler/qsc/benches/eval.rs

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
4+
use criterion::{criterion_group, criterion_main, Criterion};
5+
use qsc::interpret::stateless;
6+
use qsc_eval::output::GenericReceiver;
7+
use qsc_frontend::compile::SourceMap;
8+
9+
const TELEPORT: &str = include_str!("../../../samples/Teleportation.qs");
10+
const DEUTSCHJOZSA: &str = include_str!("../../../samples/DeutschJozsa.qs");
11+
12+
pub fn teleport(c: &mut Criterion) {
13+
c.bench_function("Teleport evaluation", |b| {
14+
let sources = SourceMap::new([("Teleportation.qs".into(), TELEPORT.into())], None);
15+
let evaluator = stateless::Context::new(true, sources).expect("code should compile");
16+
b.iter(move || {
17+
let mut out = Vec::new();
18+
let mut rec = GenericReceiver::new(&mut out);
19+
assert!(evaluator.eval(&mut rec).is_ok());
20+
})
21+
});
22+
}
23+
24+
pub fn deutsch_jozsa(c: &mut Criterion) {
25+
c.bench_function("Deutsch-Jozsa evaluation", |b| {
26+
let sources = SourceMap::new([("DeutschJozsa.qs".into(), DEUTSCHJOZSA.into())], None);
27+
let evaluator = stateless::Context::new(true, sources).expect("code should compile");
28+
b.iter(move || {
29+
let mut out = Vec::new();
30+
let mut rec = GenericReceiver::new(&mut out);
31+
assert!(evaluator.eval(&mut rec).is_ok());
32+
})
33+
});
34+
}
35+
36+
criterion_group!(benches, teleport, deutsch_jozsa);
37+
criterion_main!(benches);

0 commit comments

Comments
 (0)