]> git.proxmox.com Git - rustc.git/blame - src/liballoc/benches/btree/set.rs
New upstream version 1.41.1+dfsg1
[rustc.git] / src / liballoc / benches / btree / set.rs
CommitLineData
9fa01778
XL
1use std::collections::BTreeSet;
2
3use rand::{thread_rng, Rng};
60c5eb7d 4use test::Bencher;
9fa01778 5
532ac7d7 6fn random(n: usize) -> BTreeSet<usize> {
9fa01778 7 let mut rng = thread_rng();
532ac7d7
XL
8 let mut set = BTreeSet::new();
9 while set.len() < n {
10 set.insert(rng.gen());
9fa01778 11 }
532ac7d7
XL
12 assert_eq!(set.len(), n);
13 set
9fa01778
XL
14}
15
532ac7d7
XL
16fn neg(n: usize) -> BTreeSet<i32> {
17 let mut set = BTreeSet::new();
18 for i in -(n as i32)..=-1 {
19 set.insert(i);
9fa01778 20 }
532ac7d7
XL
21 assert_eq!(set.len(), n);
22 set
9fa01778
XL
23}
24
532ac7d7
XL
25fn pos(n: usize) -> BTreeSet<i32> {
26 let mut set = BTreeSet::new();
27 for i in 1..=(n as i32) {
28 set.insert(i);
9fa01778 29 }
532ac7d7
XL
30 assert_eq!(set.len(), n);
31 set
9fa01778
XL
32}
33
532ac7d7
XL
34fn stagger(n1: usize, factor: usize) -> [BTreeSet<u32>; 2] {
35 let n2 = n1 * factor;
36 let mut sets = [BTreeSet::new(), BTreeSet::new()];
37 for i in 0..(n1 + n2) {
38 let b = i % (factor + 1) != 0;
39 sets[b as usize].insert(i as u32);
9fa01778 40 }
532ac7d7
XL
41 assert_eq!(sets[0].len(), n1);
42 assert_eq!(sets[1].len(), n2);
43 sets
9fa01778
XL
44}
45
532ac7d7
XL
46macro_rules! set_bench {
47 ($name: ident, $set_func: ident, $result_func: ident, $sets: expr) => {
9fa01778
XL
48 #[bench]
49 pub fn $name(b: &mut Bencher) {
50 // setup
51 let sets = $sets;
52
53 // measure
60c5eb7d 54 b.iter(|| sets[0].$set_func(&sets[1]).$result_func())
9fa01778
XL
55 }
56 };
57}
58
532ac7d7
XL
59set_bench! {intersection_100_neg_vs_100_pos, intersection, count, [neg(100), pos(100)]}
60set_bench! {intersection_100_neg_vs_10k_pos, intersection, count, [neg(100), pos(10_000)]}
61set_bench! {intersection_100_pos_vs_100_neg, intersection, count, [pos(100), neg(100)]}
62set_bench! {intersection_100_pos_vs_10k_neg, intersection, count, [pos(100), neg(10_000)]}
63set_bench! {intersection_10k_neg_vs_100_pos, intersection, count, [neg(10_000), pos(100)]}
64set_bench! {intersection_10k_neg_vs_10k_pos, intersection, count, [neg(10_000), pos(10_000)]}
65set_bench! {intersection_10k_pos_vs_100_neg, intersection, count, [pos(10_000), neg(100)]}
66set_bench! {intersection_10k_pos_vs_10k_neg, intersection, count, [pos(10_000), neg(10_000)]}
67set_bench! {intersection_random_100_vs_100, intersection, count, [random(100), random(100)]}
68set_bench! {intersection_random_100_vs_10k, intersection, count, [random(100), random(10_000)]}
69set_bench! {intersection_random_10k_vs_100, intersection, count, [random(10_000), random(100)]}
70set_bench! {intersection_random_10k_vs_10k, intersection, count, [random(10_000), random(10_000)]}
71set_bench! {intersection_staggered_100_vs_100, intersection, count, stagger(100, 1)}
72set_bench! {intersection_staggered_10k_vs_10k, intersection, count, stagger(10_000, 1)}
73set_bench! {intersection_staggered_100_vs_10k, intersection, count, stagger(100, 100)}
74set_bench! {difference_random_100_vs_100, difference, count, [random(100), random(100)]}
75set_bench! {difference_random_100_vs_10k, difference, count, [random(100), random(10_000)]}
76set_bench! {difference_random_10k_vs_100, difference, count, [random(10_000), random(100)]}
77set_bench! {difference_random_10k_vs_10k, difference, count, [random(10_000), random(10_000)]}
78set_bench! {difference_staggered_100_vs_100, difference, count, stagger(100, 1)}
79set_bench! {difference_staggered_10k_vs_10k, difference, count, stagger(10_000, 1)}
80set_bench! {difference_staggered_100_vs_10k, difference, count, stagger(100, 100)}
81set_bench! {is_subset_100_vs_100, is_subset, clone, [pos(100), pos(100)]}
82set_bench! {is_subset_100_vs_10k, is_subset, clone, [pos(100), pos(10_000)]}
83set_bench! {is_subset_10k_vs_100, is_subset, clone, [pos(10_000), pos(100)]}
84set_bench! {is_subset_10k_vs_10k, is_subset, clone, [pos(10_000), pos(10_000)]}