Skip to content

libtest: Fix padding of benchmarks run as tests #118548

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jan 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 8 additions & 14 deletions library/test/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -298,24 +298,18 @@ where

let mut filtered = FilteredTests { tests: Vec::new(), benches: Vec::new(), next_id: 0 };

for test in filter_tests(opts, tests) {
let mut filtered_tests = filter_tests(opts, tests);
if !opts.bench_benchmarks {
filtered_tests = convert_benchmarks_to_tests(filtered_tests);
}

for test in filtered_tests {
let mut desc = test.desc;
desc.name = desc.name.with_padding(test.testfn.padding());

match test.testfn {
DynBenchFn(benchfn) => {
if opts.bench_benchmarks {
filtered.add_bench(desc, DynBenchFn(benchfn));
} else {
filtered.add_test(desc, DynBenchAsTestFn(benchfn));
}
}
StaticBenchFn(benchfn) => {
if opts.bench_benchmarks {
filtered.add_bench(desc, StaticBenchFn(benchfn));
} else {
filtered.add_test(desc, StaticBenchAsTestFn(benchfn));
}
DynBenchFn(_) | StaticBenchFn(_) => {
filtered.add_bench(desc, test.testfn);
}
testfn => {
filtered.add_test(desc, testfn);
Expand Down
14 changes: 14 additions & 0 deletions tests/run-make/libtest-padding/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# ignore-cross-compile because we run the compiled code
# needs-unwind because #[bench] and -Cpanic=abort requires -Zpanic-abort-tests
include ../tools.mk

NORMALIZE=sed 's%[0-9,]\{1,\} ns/iter (+/- [0-9,]\{1,\})%?? ns/iter (+/- ??)%' | sed 's%finished in [0-9\.]\{1,\}%finished in ??%'

all:
$(RUSTC) --test tests.rs

$(call RUN,tests) --test-threads=1 | $(NORMALIZE) > "$(TMPDIR)"/test.stdout
$(RUSTC_TEST_OP) "$(TMPDIR)"/test.stdout test.stdout

$(call RUN,tests) --test-threads=1 --bench | $(NORMALIZE) > "$(TMPDIR)"/bench.stdout
$(RUSTC_TEST_OP) "$(TMPDIR)"/bench.stdout bench.stdout
9 changes: 9 additions & 0 deletions tests/run-make/libtest-padding/bench.stdout
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@

running 4 tests
test short_test_name ... ignored
test this_is_a_really_long_test_name ... ignored
test short_bench_name ... bench: ?? ns/iter (+/- ??)
test this_is_a_really_long_bench_name ... bench: ?? ns/iter (+/- ??)

test result: ok. 0 passed; 0 failed; 2 ignored; 2 measured; 0 filtered out; finished in ??s

9 changes: 9 additions & 0 deletions tests/run-make/libtest-padding/test.stdout
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@

running 4 tests
test short_bench_name ... ok
test short_test_name ... ok
test this_is_a_really_long_bench_name ... ok
test this_is_a_really_long_test_name ... ok

test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in ??s

18 changes: 18 additions & 0 deletions tests/run-make/libtest-padding/tests.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#![feature(test)]
extern crate test;

#[test]
fn short_test_name() {}

#[test]
fn this_is_a_really_long_test_name() {}

#[bench]
fn short_bench_name(b: &mut test::Bencher) {
b.iter(|| 1);
}

#[bench]
fn this_is_a_really_long_bench_name(b: &mut test::Bencher) {
b.iter(|| 1);
}