difftreelog
test run cpp test suite with criterion
in: master
5 files changed
tests/.gitignorediffbeforeafterboth--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -1,2 +1,5 @@
/cpp_test_suite
/go_testdata
+/go_builtin_benchmarks
+/cpp_benchmarks
+/cpp_perf_tests
tests/Cargo.tomldiffbeforeafterboth--- a/tests/Cargo.toml
+++ b/tests/Cargo.toml
@@ -29,5 +29,5 @@
bench = false
[[bench]]
-name = "prim_comparsion"
+name = "cpp_test_suite"
harness = false
tests/benches/cpp_test_suite.rsdiffbeforeafterboth--- /dev/null
+++ b/tests/benches/cpp_test_suite.rs
@@ -0,0 +1,56 @@
+use std::{collections::HashMap, fs::read_dir, hint::black_box, path::Path};
+
+use criterion::{Criterion, criterion_group, criterion_main};
+use jrsonnet_evaluator::{
+ FileImportResolver, State, apply_tla, manifest::JsonFormat, trace::PathResolver,
+};
+
+fn bench_entry(c: &mut Criterion, path: &Path) {
+ c.bench_function(
+ path.file_name()
+ .expect("file path")
+ .to_str()
+ .expect("name is utf-8"),
+ |b| {
+ let mut s = State::builder();
+
+ s.context_initializer(jrsonnet_stdlib::ContextInitializer::new(
+ PathResolver::Absolute,
+ ))
+ .import_resolver(FileImportResolver::new(vec![]));
+
+ let s = s.build();
+ let _s = s.enter();
+
+ b.iter(|| {
+ let imported = s.import(path).expect("evaluated");
+ let res = apply_tla(&HashMap::new(), imported).expect("tla applied");
+ black_box(res.manifest(JsonFormat::cli(3)))
+ });
+ },
+ );
+}
+fn criterion_benchmark(c: &mut Criterion) {
+ for entry in read_dir("go_builtin_benchmarks").expect("dir exists") {
+ let entry = entry.expect("entry is valid");
+ assert!(entry.metadata().expect("entry is valid").is_file());
+ bench_entry(c, &entry.path());
+ }
+ for entry in read_dir("cpp_perf_tests").expect("dir exists") {
+ let entry = entry.expect("entry is valid");
+ assert!(entry.metadata().expect("entry is valid").is_file());
+ bench_entry(c, &entry.path());
+ }
+ for entry in read_dir("cpp_benchmarks").expect("dir exists") {
+ let entry = entry.expect("entry is valid");
+ // Skip .gitignore
+ if entry.path().extension().is_none() {
+ continue;
+ }
+ assert!(entry.metadata().expect("entry is valid").is_file());
+ bench_entry(c, &entry.path());
+ }
+}
+
+criterion_group!(benches, criterion_benchmark);
+criterion_main!(benches);
tests/benches/prim_comparsion.rsdiffbeforeafterbothno changes
xtask/src/main.rsdiffbeforeafterboth--- a/xtask/src/main.rs
+++ b/xtask/src/main.rs
@@ -123,8 +123,18 @@
.run()?;
sh.remove_path("cpp_test_suite")?;
sh.remove_path("go_testdata")?;
+ sh.remove_path("cpp_perf_tests")?;
+ sh.remove_path("cpp_benchmarks")?;
+ sh.remove_path("go_builtin_benchmarks")?;
cmd!(sh, "mv {git_dir_path}/jsonnet/test_suite cpp_test_suite").run()?;
cmd!(sh, "mv {git_dir_path}/go-jsonnet/testdata go_testdata").run()?;
+ cmd!(sh, "mv {git_dir_path}/jsonnet/perf_tests cpp_perf_tests").run()?;
+ cmd!(sh, "mv {git_dir_path}/jsonnet/benchmarks cpp_benchmarks").run()?;
+ cmd!(
+ sh,
+ "mv {git_dir_path}/go-jsonnet/builtin-benchmarks go_builtin_benchmarks"
+ )
+ .run()?;
Ok(())
}