|
1 | | -#![cfg(test)] |
| 1 | +use criterion::criterion_main; |
2 | 2 |
|
3 | 3 | extern crate structdiff_benchmarks; |
4 | 4 |
|
5 | | -use std::time::Duration; |
6 | | - |
7 | | -use criterion::{black_box, criterion_group, criterion_main, Criterion}; |
8 | | -use nanorand::WyRand; |
9 | | -use structdiff::StructDiff; |
10 | | -use structdiff_benchmarks::TestBench; |
11 | | -const SAMPLE_SIZE: usize = 1000; |
12 | | -const MEASUREMENT_TIME: Duration = Duration::from_secs(25); |
13 | | -const SEED: u64 = 42; |
14 | | - |
15 | | -#[cfg(feature = "compare")] |
16 | | -criterion_group!( |
17 | | - benches, |
18 | | - bench_basic_generation, |
19 | | - bench_basic_full, |
20 | | - diff_struct_bench::bench_basic, |
21 | | - serde_diff_bench::bench_basic |
| 5 | +criterion_main!( |
| 6 | + structdiff_benchmarks::basic::apply::benches, |
| 7 | + structdiff_benchmarks::basic::generate::benches, |
| 8 | + structdiff_benchmarks::basic::mutate::benches, |
| 9 | + structdiff_benchmarks::basic::full::benches, |
22 | 10 | ); |
23 | | -#[cfg(not(feature = "compare"))] |
24 | | -criterion_group!(benches, bench_basic_generation, bench_basic_full); |
25 | | - |
26 | | -criterion_main!(benches); |
27 | | - |
28 | | -fn bench_basic_generation(c: &mut Criterion) { |
29 | | - const GROUP_NAME: &str = "bench_basic_ref_gen"; |
30 | | - let mut rng = WyRand::new_seed(SEED); |
31 | | - let first = black_box(TestBench::generate_random(&mut rng)); |
32 | | - let second = black_box(TestBench::generate_random(&mut rng)); |
33 | | - let mut group = c.benchmark_group(GROUP_NAME); |
34 | | - group |
35 | | - .sample_size(SAMPLE_SIZE) |
36 | | - .measurement_time(MEASUREMENT_TIME); |
37 | | - group.bench_function(GROUP_NAME, |b| { |
38 | | - b.iter(|| { |
39 | | - let diff = black_box(StructDiff::diff_ref(&first, &second)); |
40 | | - black_box(diff); |
41 | | - }) |
42 | | - }); |
43 | | - group.finish(); |
44 | | -} |
45 | | - |
46 | | -fn bench_basic_full(c: &mut Criterion) { |
47 | | - const GROUP_NAME: &str = "bench_basic_owned"; |
48 | | - let mut rng = WyRand::new_seed(SEED); |
49 | | - let mut first = black_box(TestBench::generate_random(&mut rng)); |
50 | | - |
51 | | - let second = black_box(TestBench::generate_random(&mut rng)); |
52 | | - let mut diff: Vec<<TestBench as StructDiff>::Diff> = Vec::new(); |
53 | | - let mut group = c.benchmark_group(GROUP_NAME); |
54 | | - group |
55 | | - .sample_size(SAMPLE_SIZE) |
56 | | - .measurement_time(MEASUREMENT_TIME); |
57 | | - group.bench_function(GROUP_NAME, |b| { |
58 | | - b.iter(|| { |
59 | | - diff = black_box(StructDiff::diff(&first, &second)); |
60 | | - black_box(first.apply_mut(diff.clone())); |
61 | | - }) |
62 | | - }); |
63 | | - group.finish(); |
64 | | - first.assert_eq(second, &diff); |
65 | | -} |
66 | | - |
67 | | -#[cfg(feature = "compare")] |
68 | | -mod diff_struct_bench { |
69 | | - use super::{black_box, Criterion, TestBench, WyRand, MEASUREMENT_TIME, SAMPLE_SIZE, SEED}; |
70 | | - use diff::Diff; |
71 | | - |
72 | | - pub(super) fn bench_basic(c: &mut Criterion) { |
73 | | - const GROUP_NAME: &str = "diff_struct_bench_basic"; |
74 | | - let mut rng = WyRand::new_seed(SEED); |
75 | | - let mut first = black_box(TestBench::generate_random(&mut rng)); |
76 | | - let second = black_box(TestBench::generate_random(&mut rng)); |
77 | | - let mut group = c.benchmark_group(GROUP_NAME); |
78 | | - group |
79 | | - .sample_size(SAMPLE_SIZE) |
80 | | - .measurement_time(MEASUREMENT_TIME); |
81 | | - group.bench_function(GROUP_NAME, |b| { |
82 | | - b.iter(|| { |
83 | | - let diff = black_box(Diff::diff(&first, &second)); |
84 | | - black_box(Diff::apply(&mut first, &diff)) |
85 | | - }) |
86 | | - }); |
87 | | - group.finish(); |
88 | | - assert_eq!(first.b, second.b); |
89 | | - } |
90 | | -} |
91 | | - |
92 | | -#[cfg(feature = "compare")] |
93 | | -mod serde_diff_bench { |
94 | | - use super::{black_box, Criterion, TestBench, WyRand, MEASUREMENT_TIME, SAMPLE_SIZE, SEED}; |
95 | | - use bincode::Options; |
96 | | - |
97 | | - pub(super) fn bench_basic(c: &mut Criterion) { |
98 | | - const GROUP_NAME: &str = "serde_diff_bench_basic"; |
99 | | - let mut rng = WyRand::new_seed(SEED); |
100 | | - let mut first = black_box(TestBench::generate_random(&mut rng)); |
101 | | - let second = black_box(TestBench::generate_random(&mut rng)); |
102 | | - let options = bincode::DefaultOptions::new() |
103 | | - .with_fixint_encoding() |
104 | | - .allow_trailing_bytes(); |
105 | | - let mut group = c.benchmark_group(GROUP_NAME); |
106 | | - group |
107 | | - .sample_size(SAMPLE_SIZE) |
108 | | - .measurement_time(MEASUREMENT_TIME); |
109 | | - group.bench_function(GROUP_NAME, |b| { |
110 | | - b.iter(|| { |
111 | | - let mut diff = black_box( |
112 | | - options |
113 | | - .serialize(&serde_diff::Diff::serializable(&first, &second)) |
114 | | - .unwrap(), |
115 | | - ); |
116 | | - let mut deserializer = |
117 | | - black_box(bincode::Deserializer::from_slice(&mut diff[..], options)); |
118 | | - serde_diff::Apply::apply(&mut deserializer, &mut first).unwrap(); |
119 | | - }) |
120 | | - }); |
121 | | - group.finish(); |
122 | | - assert_eq!(first.b, second.b); |
123 | | - } |
124 | | -} |
0 commit comments