Skip to content

Commit a93554b

Browse files
authored
Diff by ref (#25)
* update benches * add generation of diffs by ref * patch nanoserde version until new version released * bump to latest nanoserde version
1 parent 1e8382a commit a93554b

File tree

15 files changed

+1521
-321
lines changed

15 files changed

+1521
-321
lines changed

Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "structdiff"
3-
version = "0.5.9"
3+
version = "0.6.0"
44
edition = "2021"
55
license = "Apache-2.0 OR MIT"
66
repository = "https://github.com/knickish/structdiff"
@@ -9,12 +9,12 @@ keywords = ["delta-compression", "difference"]
99
categories = ["compression"]
1010

1111
[dependencies]
12-
nanoserde = { version = "^0.1.32", optional = true }
12+
nanoserde = { version = "^0.1.37", optional = true }
1313
serde = { version = "^1.0.0", optional = true, features = ["derive"] }
14-
structdiff-derive = { path = "derive", version = "=0.5.9" }
14+
structdiff-derive = { path = "derive", version = "=0.6.0" }
1515

1616
[features]
17-
"default" = []
17+
"default" = ["nanoserde"]
1818
"nanoserde" = ["dep:nanoserde", "structdiff-derive/nanoserde"]
1919
"serde" = ["dep:serde", "structdiff-derive/serde"]
2020
"debug_diffs" = ["structdiff-derive/debug_diffs"]

benchmarks/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ edition = "2021"
77

88
[dependencies]
99
assert_unordered = "0.3.5"
10-
structdiff = { path = "..", features = ["serde"] }
10+
structdiff = { path = "..", features = ["serde", "debug_diffs"] }
1111
nanorand = { version = "0.7.0" }
1212
diff-struct = { version = "0.5.1", optional = true}
1313
serde = { version = "^1.0.0", features = ["derive"] }
@@ -16,6 +16,7 @@ bincode = { version = "1.3.3" }
1616
criterion = "0.5.1"
1717

1818
[features]
19+
default = ["compare"]
1920
compare = ["dep:serde-diff", "dep:diff-struct"]
2021

2122
[profile.bench]

benchmarks/benches/basic.rs

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,32 +15,53 @@ const SEED: u64 = 42;
1515
#[cfg(feature = "compare")]
1616
criterion_group!(
1717
benches,
18-
bench_basic,
18+
bench_basic_generation,
19+
bench_basic_full,
1920
diff_struct_bench::bench_basic,
2021
serde_diff_bench::bench_basic
2122
);
2223
#[cfg(not(feature = "compare"))]
23-
criterion_group!(benches, bench_basic);
24+
criterion_group!(benches, bench_basic_generation, bench_basic_full);
2425

2526
criterion_main!(benches);
2627

27-
fn bench_basic(c: &mut Criterion) {
28+
fn bench_basic_generation(c: &mut Criterion) {
29+
const GROUP_NAME: &str = "bench_basic";
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) {
2847
const GROUP_NAME: &str = "bench_basic";
2948
let mut rng = WyRand::new_seed(SEED);
3049
let mut first = black_box(TestBench::generate_random(&mut rng));
50+
3151
let second = black_box(TestBench::generate_random(&mut rng));
52+
let mut diff: Vec<<TestBench as StructDiff>::Diff> = Vec::new();
3253
let mut group = c.benchmark_group(GROUP_NAME);
3354
group
3455
.sample_size(SAMPLE_SIZE)
3556
.measurement_time(MEASUREMENT_TIME);
3657
group.bench_function(GROUP_NAME, |b| {
3758
b.iter(|| {
38-
let diff = black_box(StructDiff::diff(&first, &second));
39-
black_box(first.apply_mut(diff));
40-
})
59+
diff = black_box(StructDiff::diff(&first, &second));
60+
black_box(first.apply_mut(diff.clone()));
61+
})
4162
});
4263
group.finish();
43-
first.assert_eq(second);
64+
first.assert_eq(second, &diff);
4465
}
4566

4667
#[cfg(feature = "compare")]

benchmarks/benches/large.rs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,35 @@ const SEED: u64 = 42;
1515
#[cfg(feature = "compare")]
1616
criterion_group!(
1717
benches,
18-
bench_large,
18+
bench_large_generation,
19+
bench_large_full,
1920
diff_struct_bench::bench_large,
2021
serde_diff_bench::bench_large
2122
);
2223
#[cfg(not(feature = "compare"))]
23-
criterion_group!(benches, bench_large);
24+
criterion_group!(benches, bench_large_generation, bench_large_full);
2425

2526
criterion_main!(benches);
2627

27-
fn bench_large(c: &mut Criterion) {
28+
fn bench_large_generation(c: &mut Criterion) {
29+
const GROUP_NAME: &str = "bench_large";
30+
let mut rng = WyRand::new_seed(SEED);
31+
let first = black_box(TestBench::generate_random_large(&mut rng));
32+
let second = black_box(TestBench::generate_random_large(&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_large_full(c: &mut Criterion) {
2847
const GROUP_NAME: &str = "bench_large";
2948
let mut rng = WyRand::new_seed(SEED);
3049
let mut first = black_box(TestBench::generate_random_large(&mut rng));

benchmarks/src/lib.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,16 +87,19 @@ impl TestBench {
8787
}
8888
}
8989

90-
pub fn assert_eq(self, right: TestBench) {
91-
assert_eq!(self.a, right.a);
92-
assert_eq!(self.b, right.b);
93-
assert_eq_unordered_sort!(self.c, right.c);
94-
assert_eq_unordered_sort!(self.d, right.d);
90+
#[track_caller]
91+
pub fn assert_eq(self, right: TestBench, diff: &Vec<<TestBench as StructDiff>::Diff>) {
92+
assert_eq!(self.a, right.a, "{:?}", diff);
93+
assert_eq!(self.b, right.b, "{:?}", diff);
94+
assert_eq_unordered_sort!(self.c, right.c, "{:?}", diff);
95+
assert_eq_unordered_sort!(self.d, right.d, "{:?}", diff);
9596
assert_eq_unordered_sort!(
9697
self.e.iter().map(|x| x.0).collect::<Vec<_>>(),
97-
right.e.iter().map(|x| x.0).collect::<Vec<_>>()
98+
right.e.iter().map(|x| x.0).collect::<Vec<_>>(),
99+
"{:?}",
100+
diff
98101
);
99-
assert_eq_unordered_sort!(self.f, right.f);
102+
assert_eq_unordered_sort!(self.f, right.f, "{:?}", diff);
100103
}
101104
}
102105

derive/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "structdiff-derive"
3-
version = "0.5.9"
3+
version = "0.6.0"
44
authors = ["Makepad <[email protected]>", "Fedor <[email protected]>", "Kirk <[email protected]"]
55
edition = "2018"
66
description = "derive macro library for structdiff"
@@ -10,7 +10,7 @@ license = "MIT"
1010
proc-macro = true
1111

1212
[dependencies]
13-
nanoserde = { version = "^0.1.32", optional = true }
13+
nanoserde = { version = "^0.1.37", optional = true }
1414
serde = { version = "^1.0.0", optional = true, features = ["derive"] }
1515

1616
[features]

0 commit comments

Comments
 (0)