Skip to content

Commit 546cb21

Browse files
committed
Auto merge of rust-lang#59657 - Centril:rollup-w5p98mc, r=Centril
Rollup of 4 pull requests Successful merges: - rust-lang#55448 (Add 'partition_at_index/_by/_by_key' for slices.) - rust-lang#59186 (improve worst-case performance of BTreeSet intersection v3) - rust-lang#59514 (Remove adt_def from projections and downcasts in MIR) - rust-lang#59630 (Shrink `mir::Statement`.) Failed merges: r? @ghost
2 parents 7641873 + d31d80b commit 546cb21

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+1031
-459
lines changed

src/liballoc/benches/btree/set.rs

+57-57
Original file line numberDiff line numberDiff line change
@@ -3,86 +3,86 @@ use std::collections::BTreeSet;
33
use rand::{thread_rng, Rng};
44
use test::{black_box, Bencher};
55

6-
fn random(n1: u32, n2: u32) -> [BTreeSet<usize>; 2] {
6+
fn random(n: usize) -> BTreeSet<usize> {
77
let mut rng = thread_rng();
8-
let mut set1 = BTreeSet::new();
9-
let mut set2 = BTreeSet::new();
10-
for _ in 0..n1 {
11-
let i = rng.gen::<usize>();
12-
set1.insert(i);
8+
let mut set = BTreeSet::new();
9+
while set.len() < n {
10+
set.insert(rng.gen());
1311
}
14-
for _ in 0..n2 {
15-
let i = rng.gen::<usize>();
16-
set2.insert(i);
17-
}
18-
[set1, set2]
12+
assert_eq!(set.len(), n);
13+
set
1914
}
2015

21-
fn staggered(n1: u32, n2: u32) -> [BTreeSet<u32>; 2] {
22-
let mut even = BTreeSet::new();
23-
let mut odd = BTreeSet::new();
24-
for i in 0..n1 {
25-
even.insert(i * 2);
26-
}
27-
for i in 0..n2 {
28-
odd.insert(i * 2 + 1);
16+
fn neg(n: usize) -> BTreeSet<i32> {
17+
let mut set = BTreeSet::new();
18+
for i in -(n as i32)..=-1 {
19+
set.insert(i);
2920
}
30-
[even, odd]
21+
assert_eq!(set.len(), n);
22+
set
3123
}
3224

33-
fn neg_vs_pos(n1: u32, n2: u32) -> [BTreeSet<i32>; 2] {
34-
let mut neg = BTreeSet::new();
35-
let mut pos = BTreeSet::new();
36-
for i in -(n1 as i32)..=-1 {
37-
neg.insert(i);
38-
}
39-
for i in 1..=(n2 as i32) {
40-
pos.insert(i);
25+
fn pos(n: usize) -> BTreeSet<i32> {
26+
let mut set = BTreeSet::new();
27+
for i in 1..=(n as i32) {
28+
set.insert(i);
4129
}
42-
[neg, pos]
30+
assert_eq!(set.len(), n);
31+
set
4332
}
4433

45-
fn pos_vs_neg(n1: u32, n2: u32) -> [BTreeSet<i32>; 2] {
46-
let mut neg = BTreeSet::new();
47-
let mut pos = BTreeSet::new();
48-
for i in -(n1 as i32)..=-1 {
49-
neg.insert(i);
50-
}
51-
for i in 1..=(n2 as i32) {
52-
pos.insert(i);
34+
35+
fn stagger(n1: usize, factor: usize) -> [BTreeSet<u32>; 2] {
36+
let n2 = n1 * factor;
37+
let mut sets = [BTreeSet::new(), BTreeSet::new()];
38+
for i in 0..(n1 + n2) {
39+
let b = i % (factor + 1) != 0;
40+
sets[b as usize].insert(i as u32);
5341
}
54-
[pos, neg]
42+
assert_eq!(sets[0].len(), n1);
43+
assert_eq!(sets[1].len(), n2);
44+
sets
5545
}
5646

57-
macro_rules! set_intersection_bench {
58-
($name: ident, $sets: expr) => {
47+
macro_rules! set_bench {
48+
($name: ident, $set_func: ident, $result_func: ident, $sets: expr) => {
5949
#[bench]
6050
pub fn $name(b: &mut Bencher) {
6151
// setup
6252
let sets = $sets;
6353

6454
// measure
6555
b.iter(|| {
66-
let x = sets[0].intersection(&sets[1]).count();
56+
let x = sets[0].$set_func(&sets[1]).$result_func();
6757
black_box(x);
6858
})
6959
}
7060
};
7161
}
7262

73-
set_intersection_bench! {intersect_random_100, random(100, 100)}
74-
set_intersection_bench! {intersect_random_10k, random(10_000, 10_000)}
75-
set_intersection_bench! {intersect_random_10_vs_10k, random(10, 10_000)}
76-
set_intersection_bench! {intersect_random_10k_vs_10, random(10_000, 10)}
77-
set_intersection_bench! {intersect_staggered_100, staggered(100, 100)}
78-
set_intersection_bench! {intersect_staggered_10k, staggered(10_000, 10_000)}
79-
set_intersection_bench! {intersect_staggered_10_vs_10k, staggered(10, 10_000)}
80-
set_intersection_bench! {intersect_staggered_10k_vs_10, staggered(10_000, 10)}
81-
set_intersection_bench! {intersect_neg_vs_pos_100, neg_vs_pos(100, 100)}
82-
set_intersection_bench! {intersect_neg_vs_pos_10k, neg_vs_pos(10_000, 10_000)}
83-
set_intersection_bench! {intersect_neg_vs_pos_10_vs_10k,neg_vs_pos(10, 10_000)}
84-
set_intersection_bench! {intersect_neg_vs_pos_10k_vs_10,neg_vs_pos(10_000, 10)}
85-
set_intersection_bench! {intersect_pos_vs_neg_100, pos_vs_neg(100, 100)}
86-
set_intersection_bench! {intersect_pos_vs_neg_10k, pos_vs_neg(10_000, 10_000)}
87-
set_intersection_bench! {intersect_pos_vs_neg_10_vs_10k,pos_vs_neg(10, 10_000)}
88-
set_intersection_bench! {intersect_pos_vs_neg_10k_vs_10,pos_vs_neg(10_000, 10)}
63+
set_bench! {intersection_100_neg_vs_100_pos, intersection, count, [neg(100), pos(100)]}
64+
set_bench! {intersection_100_neg_vs_10k_pos, intersection, count, [neg(100), pos(10_000)]}
65+
set_bench! {intersection_100_pos_vs_100_neg, intersection, count, [pos(100), neg(100)]}
66+
set_bench! {intersection_100_pos_vs_10k_neg, intersection, count, [pos(100), neg(10_000)]}
67+
set_bench! {intersection_10k_neg_vs_100_pos, intersection, count, [neg(10_000), pos(100)]}
68+
set_bench! {intersection_10k_neg_vs_10k_pos, intersection, count, [neg(10_000), pos(10_000)]}
69+
set_bench! {intersection_10k_pos_vs_100_neg, intersection, count, [pos(10_000), neg(100)]}
70+
set_bench! {intersection_10k_pos_vs_10k_neg, intersection, count, [pos(10_000), neg(10_000)]}
71+
set_bench! {intersection_random_100_vs_100, intersection, count, [random(100), random(100)]}
72+
set_bench! {intersection_random_100_vs_10k, intersection, count, [random(100), random(10_000)]}
73+
set_bench! {intersection_random_10k_vs_100, intersection, count, [random(10_000), random(100)]}
74+
set_bench! {intersection_random_10k_vs_10k, intersection, count, [random(10_000), random(10_000)]}
75+
set_bench! {intersection_staggered_100_vs_100, intersection, count, stagger(100, 1)}
76+
set_bench! {intersection_staggered_10k_vs_10k, intersection, count, stagger(10_000, 1)}
77+
set_bench! {intersection_staggered_100_vs_10k, intersection, count, stagger(100, 100)}
78+
set_bench! {difference_random_100_vs_100, difference, count, [random(100), random(100)]}
79+
set_bench! {difference_random_100_vs_10k, difference, count, [random(100), random(10_000)]}
80+
set_bench! {difference_random_10k_vs_100, difference, count, [random(10_000), random(100)]}
81+
set_bench! {difference_random_10k_vs_10k, difference, count, [random(10_000), random(10_000)]}
82+
set_bench! {difference_staggered_100_vs_100, difference, count, stagger(100, 1)}
83+
set_bench! {difference_staggered_10k_vs_10k, difference, count, stagger(10_000, 1)}
84+
set_bench! {difference_staggered_100_vs_10k, difference, count, stagger(100, 100)}
85+
set_bench! {is_subset_100_vs_100, is_subset, clone, [pos(100), pos(100)]}
86+
set_bench! {is_subset_100_vs_10k, is_subset, clone, [pos(100), pos(10_000)]}
87+
set_bench! {is_subset_10k_vs_100, is_subset, clone, [pos(10_000), pos(100)]}
88+
set_bench! {is_subset_10k_vs_10k, is_subset, clone, [pos(10_000), pos(10_000)]}

0 commit comments

Comments
 (0)