git.delta.rocks / jrsonnet / refs/commits / 7b1ce4254e51

difftreelog

test run cpp test suite with criterion

txxqmvqmYaroslav Bolyukin2026-04-25parent: #150f286.patch.diff
in: master

5 files changed

modifiedtests/.gitignorediffbeforeafterboth
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -1,2 +1,5 @@
 /cpp_test_suite
 /go_testdata
+/go_builtin_benchmarks
+/cpp_benchmarks
+/cpp_perf_tests
modifiedtests/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
addedtests/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);
deletedtests/benches/prim_comparsion.rsdiffbeforeafterboth

no changes

modifiedxtask/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(())
 		}