Skip to content

Commit 72a1ec9

Browse files
committed
sigh, do clone
1 parent 122ba17 commit 72a1ec9

File tree

2 files changed

+37
-46
lines changed

2 files changed

+37
-46
lines changed

benches/bench.rs

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ pub fn bench_from_vec_unchecked(c: &mut Criterion) {
2626
c,
2727
format!("from_vec_unchecked/{size}"),
2828
arbitrary_raw_nibbles(size),
29-
|data| Nibbles::from_vec_unchecked(black_box(data)),
29+
|data| Nibbles::from_vec_unchecked(black_box(data.clone())),
3030
);
3131
}
3232
}
@@ -44,9 +44,8 @@ pub fn bench_pack(c: &mut Criterion) {
4444
format!("pack_to/{size}"),
4545
arbitrary_bytes(size)
4646
.prop_map(|nibbles| (vec![0; nibbles.len()], Nibbles::unpack(nibbles))),
47-
|(mut buffer, nibbles)| {
48-
black_box(nibbles).pack_to(black_box(&mut buffer));
49-
buffer
47+
|(buffer, nibbles)| {
48+
black_box(nibbles).pack_to(black_box(&mut buffer.clone()));
5049
},
5150
);
5251
}
@@ -69,7 +68,7 @@ pub fn bench_push(c: &mut Criterion) {
6968
|raw_nibbles| {
7069
let mut nibbles = Nibbles::new();
7170
for nibble in raw_nibbles {
72-
nibbles.push(black_box(nibble));
71+
nibbles.push(black_box(*nibble));
7372
}
7473
nibbles
7574
},
@@ -91,7 +90,7 @@ pub fn bench_slice(c: &mut Criterion) {
9190
let end = start..nibbles.len();
9291
(Just(nibbles), Just(start), end)
9392
}),
94-
|(nibbles, start, end)| nibbles.slice(black_box(start..end)),
93+
|(nibbles, start, end)| nibbles.slice(black_box(*start..*end)),
9594
);
9695
}
9796
}
@@ -102,7 +101,7 @@ pub fn bench_join(c: &mut Criterion) {
102101
c,
103102
format!("join/{size}"),
104103
(arbitrary_nibbles(size), arbitrary_nibbles(size)),
105-
|(a, b)| a.join(black_box(&b)),
104+
|(a, b)| a.join(black_box(b)),
106105
);
107106
}
108107
}
@@ -113,8 +112,8 @@ pub fn bench_extend(c: &mut Criterion) {
113112
c,
114113
format!("extend/{size}"),
115114
(arbitrary_nibbles(size), arbitrary_nibbles(size)),
116-
|(mut base, extension)| {
117-
base.extend_from_slice(black_box(&extension));
115+
|(base, extension)| {
116+
base.clone().extend_from_slice(black_box(extension));
118117
},
119118
);
120119
}
@@ -125,34 +124,34 @@ pub fn bench_set_at(c: &mut Criterion) {
125124
bench_arbitrary_with(
126125
c,
127126
format!("set_at/{size}"),
128-
arbitrary_nibbles(size).prop_flat_map(|nibbles| {
127+
arbitrary_non_empty_nibbles(size).prop_flat_map(|nibbles| {
129128
let i = 0..nibbles.len();
130129
(Just(nibbles), i)
131130
}),
132-
|(mut nibbles, i)| {
133-
nibbles.set_at(black_box(i), black_box((i % 16) as u8));
131+
|(nibbles, i)| {
132+
nibbles.clone().set_at(black_box(*i), black_box((i % 16) as u8));
134133
},
135134
);
136135
}
137136
}
138137

139138
pub fn bench_get_byte(c: &mut Criterion) {
140139
for size in SIZE_NIBBLES {
141-
let strategy = arbitrary_nibbles(size).prop_flat_map(|nibbles| {
140+
let strategy = arbitrary_non_empty_nibbles(size).prop_flat_map(|nibbles| {
142141
let i = 0..nibbles.len();
143142
(Just(nibbles), i)
144143
});
145144

146145
bench_arbitrary_with(c, format!("get_byte/{size}"), strategy.clone(), |(nibbles, i)| {
147-
nibbles.get_byte(black_box(i));
146+
nibbles.get_byte(black_box(*i));
148147
});
149148

150149
bench_arbitrary_with(
151150
c,
152151
format!("get_byte_unchecked/{size}"),
153152
strategy,
154153
|(nibbles, i)| unsafe {
155-
nibbles.get_byte_unchecked(black_box(i));
154+
nibbles.get_byte_unchecked(black_box(*i));
156155
},
157156
);
158157
}
@@ -172,7 +171,7 @@ pub fn bench_common_prefix_length(c: &mut Criterion) {
172171
let prefix = nibbles.slice(..prefix_size);
173172
(nibbles, prefix)
174173
}),
175-
|(nibbles, prefix)| nibbles.common_prefix_length(black_box(&prefix)),
174+
|(nibbles, prefix)| nibbles.common_prefix_length(black_box(prefix)),
176175
);
177176
}
178177
}
@@ -183,7 +182,7 @@ pub fn bench_cmp(c: &mut Criterion) {
183182
c,
184183
format!("cmp/{size}"),
185184
(arbitrary_nibbles(size), arbitrary_nibbles(size)),
186-
|(a, b)| a.cmp(black_box(&b)),
185+
|(a, b)| a.cmp(black_box(b)),
187186
);
188187
}
189188
}
@@ -206,8 +205,8 @@ pub fn bench_increment(c: &mut Criterion) {
206205

207206
pub fn bench_pop(c: &mut Criterion) {
208207
for size in SIZE_NIBBLES {
209-
bench_arbitrary_with(c, format!("pop/{size}"), arbitrary_nibbles(size), |mut nibbles| {
210-
black_box(&mut nibbles).pop()
208+
bench_arbitrary_with(c, format!("pop/{size}"), arbitrary_nibbles(size), |nibbles| {
209+
black_box(nibbles.clone()).pop()
211210
});
212211
}
213212
}
@@ -242,7 +241,7 @@ pub fn bench_starts_with(c: &mut Criterion) {
242241
let prefix = nibbles.slice(..prefix_size);
243242
(nibbles, prefix)
244243
}),
245-
|(nibbles, prefix)| nibbles.starts_with(black_box(&prefix)),
244+
|(nibbles, prefix)| nibbles.starts_with(black_box(prefix)),
246245
);
247246
}
248247
}
@@ -261,7 +260,7 @@ pub fn bench_ends_with(c: &mut Criterion) {
261260
let suffix = nibbles.slice(nibbles.len() - suffix_size..);
262261
(nibbles, suffix)
263262
}),
264-
|(nibbles, suffix)| nibbles.ends_with(black_box(&suffix)),
263+
|(nibbles, suffix)| nibbles.ends_with(black_box(suffix)),
265264
);
266265
}
267266
}
@@ -275,18 +274,17 @@ pub fn bench_truncate(c: &mut Criterion) {
275274
let new_len = 0..nibbles.len();
276275
(Just(nibbles), new_len)
277276
}),
278-
|(mut nibbles, new_len)| {
279-
nibbles.truncate(black_box(new_len));
280-
nibbles
277+
|(nibbles, new_len)| {
278+
nibbles.clone().truncate(black_box(*new_len));
281279
},
282280
);
283281
}
284282
}
285283

286284
pub fn bench_clear(c: &mut Criterion) {
287285
for size in SIZE_NIBBLES {
288-
bench_arbitrary_with(c, format!("clear/{size}"), arbitrary_nibbles(size), |mut nibbles| {
289-
black_box(&mut nibbles).clear()
286+
bench_arbitrary_with(c, format!("clear/{size}"), arbitrary_nibbles(size), |nibbles| {
287+
black_box(nibbles.clone()).clear()
290288
});
291289
}
292290
}

benches/prelude.rs

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ pub fn arbitrary_nibbles(size: usize) -> impl Strategy<Value = Nibbles> + Clone
1919
proptest::collection::vec(0u8..16, size).prop_map(Nibbles::from_nibbles)
2020
}
2121

22+
pub fn arbitrary_non_empty_nibbles(size: usize) -> impl Strategy<Value = Nibbles> + Clone {
23+
proptest::collection::vec(0u8..16, 1..size).prop_map(Nibbles::from_nibbles)
24+
}
25+
2226
pub fn arbitrary_raw_nibbles(size: usize) -> impl Strategy<Value = Vec<u8>> + Clone {
2327
proptest::collection::vec(0u8..16, size)
2428
}
@@ -31,7 +35,7 @@ pub fn bench_arbitrary_with<T: Strategy, U>(
3135
criterion: &mut criterion::Criterion,
3236
name: impl AsRef<str>,
3337
input: T,
34-
f: impl FnMut(T::Value) -> U,
38+
f: impl FnMut(&T::Value) -> U,
3539
) {
3640
let name = name.as_ref();
3741
let runner = std::cell::RefCell::new(TestRunner::deterministic());
@@ -52,33 +56,22 @@ fn mk_setup<'a, T: Strategy>(
5256
/// Codspeed does not batch inputs even if `iter_batched` is used, so we have to
5357
/// do it ourselves for operations that would otherwise be too fast to be
5458
/// measured accurately.
55-
#[cfg(codspeed)]
59+
// #[cfg(codspeed)]
5660
#[inline]
57-
fn manual_batch<T, U>(mut setup: impl FnMut() -> T, mut f: impl FnMut(T) -> U) -> impl FnMut(T) {
58-
assert!(
59-
!std::mem::needs_drop::<T>(),
60-
"cannot batch inputs that need to be dropped: {}",
61-
std::any::type_name::<T>(),
62-
);
63-
assert!(
64-
!std::mem::needs_drop::<U>(),
65-
"cannot batch outputs that need to be dropped: {}",
66-
std::any::type_name::<U>(),
67-
);
68-
61+
fn manual_batch<T, U>(mut setup: impl FnMut() -> T, mut f: impl FnMut(&T) -> U) -> impl FnMut(T) {
6962
let inputs =
70-
criterion::black_box((0..CODSPEED_BATCH_SIZE).map(|_| setup()).collect::<Box<[_]>>());
63+
criterion::black_box((0..CODSPEED_BATCH_SIZE).map(|_| setup()).collect::<Vec<_>>());
7164
let mut out = criterion::black_box(Box::new_uninit_slice(CODSPEED_BATCH_SIZE));
7265
move |_| {
7366
for i in 0..criterion::black_box(CODSPEED_BATCH_SIZE) {
74-
let input = unsafe { std::ptr::read(inputs.get_unchecked(i)) };
67+
let input = unsafe { inputs.get_unchecked(i) };
7568
let output = unsafe { out.get_unchecked_mut(i) };
7669
output.write(f(input));
7770
}
7871
}
7972
}
8073

81-
#[cfg(not(codspeed))]
82-
fn manual_batch<T, U>(_setup: impl FnMut() -> T, f: impl FnMut(T) -> U) -> impl FnMut(T) -> U {
83-
f
84-
}
74+
// #[cfg(not(codspeed))]
75+
// fn manual_batch<T, U>(_setup: impl FnMut() -> T, f: impl FnMut(T) -> U) -> impl FnMut(T) -> U {
76+
// f
77+
// }

0 commit comments

Comments
 (0)