1 use std
::collections
::BTreeSet
;
3 use rand
::{thread_rng, Rng}
;
4 use test
::{black_box, Bencher}
;
6 fn random(n1
: u32, n2
: u32) -> [BTreeSet
<usize>; 2] {
7 let mut rng
= thread_rng();
8 let mut set1
= BTreeSet
::new();
9 let mut set2
= BTreeSet
::new();
11 let i
= rng
.gen
::<usize>();
15 let i
= rng
.gen
::<usize>();
21 fn staggered(n1
: u32, n2
: u32) -> [BTreeSet
<u32>; 2] {
22 let mut even
= BTreeSet
::new();
23 let mut odd
= BTreeSet
::new();
28 odd
.insert(i
* 2 + 1);
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 {
39 for i
in 1..=(n2
as i32) {
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 {
51 for i
in 1..=(n2
as i32) {
57 macro_rules
! set_intersection_bench
{
58 ($name
: ident
, $sets
: expr
) => {
60 pub fn $
name(b
: &mut Bencher
) {
66 let x
= sets
[0].intersection(&sets
[1]).count();
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)}