Skip to content

Commit 968e262

Browse files
fix: remove discrepancies between original divan API and compat layer
1 parent 39c4a0f commit 968e262

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

crates/divan_compat/benches/basic_example.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use codspeed_divan_compat::Bencher;
2+
13
fn fibo(n: i32) -> i32 {
24
let mut a = 0;
35
let mut b = 1;
@@ -21,6 +23,15 @@ fn fibo_10() -> i32 {
2123
codspeed_divan_compat::black_box(fibo(10))
2224
}
2325

26+
#[codspeed_divan_compat::bench]
27+
fn mut_borrow(bencher: Bencher) {
28+
let mut bytes = Vec::<i32>::new();
29+
30+
bencher.bench_local(|| {
31+
bytes.push(42);
32+
});
33+
}
34+
2435
fn main() {
2536
codspeed_divan_compat::main();
2637
}

crates/divan_compat/src/compat/bench/mod.rs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use std::cell::RefCell;
1919
pub struct Unit;
2020

2121
pub struct BencherConfig<GenI = Unit> {
22-
gen_input: GenI,
22+
gen_input: RefCell<GenI>,
2323
}
2424

2525
pub struct Bencher<'a, 'b, C = BencherConfig> {
@@ -29,11 +29,12 @@ pub struct Bencher<'a, 'b, C = BencherConfig> {
2929
pub(crate) _marker: std::marker::PhantomData<&'b ()>,
3030
}
3131

32-
#[allow(clippy::needless_lifetimes)]
3332
impl<'a, 'b> Bencher<'a, 'b> {
3433
pub(crate) fn new(codspeed: &'a RefCell<CodSpeed>, uri: String) -> Self {
3534
Self {
36-
config: BencherConfig { gen_input: Unit },
35+
config: BencherConfig {
36+
gen_input: RefCell::new(Unit),
37+
},
3738
codspeed,
3839
uri,
3940
_marker: std::marker::PhantomData,
@@ -42,7 +43,9 @@ impl<'a, 'b> Bencher<'a, 'b> {
4243

4344
pub fn with_inputs<G>(self, gen_input: G) -> Bencher<'a, 'b, BencherConfig<G>> {
4445
Bencher {
45-
config: BencherConfig { gen_input },
46+
config: BencherConfig {
47+
gen_input: RefCell::new(gen_input),
48+
},
4649
codspeed: self.codspeed,
4750
uri: self.uri,
4851
_marker: self._marker,
@@ -58,9 +61,9 @@ impl<'a, 'b> Bencher<'a, 'b> {
5861
self.with_inputs(|| ()).bench_values(|_| benched())
5962
}
6063

61-
pub fn bench_local<O, B>(self, benched: B)
64+
pub fn bench_local<O, B>(self, mut benched: B)
6265
where
63-
B: Fn() -> O,
66+
B: FnMut() -> O,
6467
{
6568
self.with_inputs(|| ()).bench_local_values(|_| benched())
6669
}
@@ -86,24 +89,24 @@ where
8689
self.bench_local_refs(benched)
8790
}
8891

89-
pub fn bench_local_values<O, B>(mut self, benched: B)
92+
pub fn bench_local_values<O, B>(self, mut benched: B)
9093
where
91-
B: Fn(I) -> O,
94+
B: FnMut(I) -> O,
9295
{
9396
let mut codspeed = self.codspeed.borrow_mut();
94-
let gen_input = &mut self.config.gen_input;
97+
let mut gen_input = self.config.gen_input.borrow_mut();
9598
let input = gen_input();
9699
codspeed.start_benchmark(self.uri.as_str());
97100
divan::black_box(benched(input));
98101
codspeed.end_benchmark();
99102
}
100103

101-
pub fn bench_local_refs<O, B>(mut self, mut benched: B)
104+
pub fn bench_local_refs<O, B>(self, mut benched: B)
102105
where
103106
B: FnMut(&mut I) -> O,
104107
{
105108
let mut codspeed = self.codspeed.borrow_mut();
106-
let gen_input = &mut self.config.gen_input;
109+
let mut gen_input = self.config.gen_input.borrow_mut();
107110
let mut input = gen_input();
108111

109112
codspeed.start_benchmark(self.uri.as_str());

0 commit comments

Comments
 (0)