Skip to content

Commit 49c8fd6

Browse files
committed
Rollup merge of rust-lang#22151 - Gankro:macro-bench, r=alexcrichton
r? @alexcrichton
2 parents c2ab6a8 + b24c6fd commit 49c8fd6

File tree

4 files changed

+120
-223
lines changed

4 files changed

+120
-223
lines changed

src/libcollections/bench.rs

+103-93
Original file line numberDiff line numberDiff line change
@@ -8,103 +8,113 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11-
use prelude::*;
12-
use std::rand;
13-
use std::rand::Rng;
14-
use test::{Bencher, black_box};
15-
16-
pub fn insert_rand_n<M, I, R>(n: usize,
17-
map: &mut M,
18-
b: &mut Bencher,
19-
mut insert: I,
20-
mut remove: R) where
21-
I: FnMut(&mut M, usize),
22-
R: FnMut(&mut M, usize),
23-
{
24-
// setup
25-
let mut rng = rand::weak_rng();
26-
27-
for _ in 0..n {
28-
insert(map, rng.gen::<usize>() % n);
29-
}
30-
31-
// measure
32-
b.iter(|| {
33-
let k = rng.gen::<usize>() % n;
34-
insert(map, k);
35-
remove(map, k);
36-
});
37-
black_box(map);
11+
macro_rules! map_insert_rand_bench {
12+
($name: ident, $n: expr, $map: ident) => (
13+
#[bench]
14+
pub fn $name(b: &mut ::test::Bencher) {
15+
use std::rand;
16+
use std::rand::Rng;
17+
use test::black_box;
18+
19+
let n: usize = $n;
20+
let mut map = $map::new();
21+
// setup
22+
let mut rng = rand::weak_rng();
23+
24+
for _ in 0..n {
25+
let i = rng.gen() % n;
26+
map.insert(i, i);
27+
}
28+
29+
// measure
30+
b.iter(|| {
31+
let k = rng.gen() % n;
32+
map.insert(k, k);
33+
map.remove(&k);
34+
});
35+
black_box(map);
36+
}
37+
)
3838
}
3939

40-
pub fn insert_seq_n<M, I, R>(n: usize,
41-
map: &mut M,
42-
b: &mut Bencher,
43-
mut insert: I,
44-
mut remove: R) where
45-
I: FnMut(&mut M, usize),
46-
R: FnMut(&mut M, usize),
47-
{
48-
// setup
49-
for i in 0..n {
50-
insert(map, i * 2);
51-
}
52-
53-
// measure
54-
let mut i = 1;
55-
b.iter(|| {
56-
insert(map, i);
57-
remove(map, i);
58-
i = (i + 2) % n;
59-
});
60-
black_box(map);
40+
macro_rules! map_insert_seq_bench {
41+
($name: ident, $n: expr, $map: ident) => (
42+
#[bench]
43+
pub fn $name(b: &mut ::test::Bencher) {
44+
use test::black_box;
45+
46+
let mut map = $map::new();
47+
let n: usize = $n;
48+
// setup
49+
for i in 0..n {
50+
map.insert(i * 2, i * 2);
51+
}
52+
53+
// measure
54+
let mut i = 1;
55+
b.iter(|| {
56+
map.insert(i, i);
57+
map.remove(&i);
58+
i = (i + 2) % n;
59+
});
60+
black_box(map);
61+
}
62+
)
6163
}
6264

63-
pub fn find_rand_n<M, T, I, F>(n: usize,
64-
map: &mut M,
65-
b: &mut Bencher,
66-
mut insert: I,
67-
mut find: F) where
68-
I: FnMut(&mut M, usize),
69-
F: FnMut(&M, usize) -> T,
70-
{
71-
// setup
72-
let mut rng = rand::weak_rng();
73-
let mut keys: Vec<_> = (0..n).map(|_| rng.gen::<usize>() % n).collect();
74-
75-
for k in &keys {
76-
insert(map, *k);
77-
}
78-
79-
rng.shuffle(&mut keys);
80-
81-
// measure
82-
let mut i = 0;
83-
b.iter(|| {
84-
let t = find(map, keys[i]);
85-
i = (i + 1) % n;
86-
black_box(t);
87-
})
65+
macro_rules! map_find_rand_bench {
66+
($name: ident, $n: expr, $map: ident) => (
67+
#[bench]
68+
pub fn $name(b: &mut ::test::Bencher) {
69+
use std::rand;
70+
use std::rand::Rng;
71+
use test::black_box;
72+
73+
let mut map = $map::new();
74+
let n: usize = $n;
75+
76+
// setup
77+
let mut rng = rand::weak_rng();
78+
let mut keys: Vec<_> = (0..n).map(|_| rng.gen() % n).collect();
79+
80+
for &k in &keys {
81+
map.insert(k, k);
82+
}
83+
84+
rng.shuffle(&mut keys);
85+
86+
// measure
87+
let mut i = 0;
88+
b.iter(|| {
89+
let t = map.get(&keys[i]);
90+
i = (i + 1) % n;
91+
black_box(t);
92+
})
93+
}
94+
)
8895
}
8996

90-
pub fn find_seq_n<M, T, I, F>(n: usize,
91-
map: &mut M,
92-
b: &mut Bencher,
93-
mut insert: I,
94-
mut find: F) where
95-
I: FnMut(&mut M, usize),
96-
F: FnMut(&M, usize) -> T,
97-
{
98-
// setup
99-
for i in 0..n {
100-
insert(map, i);
101-
}
102-
103-
// measure
104-
let mut i = 0;
105-
b.iter(|| {
106-
let x = find(map, i);
107-
i = (i + 1) % n;
108-
black_box(x);
109-
})
97+
macro_rules! map_find_seq_bench {
98+
($name: ident, $n: expr, $map: ident) => (
99+
#[bench]
100+
pub fn $name(b: &mut ::test::Bencher) {
101+
use test::black_box;
102+
103+
let mut map = $map::new();
104+
let n: usize = $n;
105+
106+
// setup
107+
for i in 0..n {
108+
map.insert(i, i);
109+
}
110+
111+
// measure
112+
let mut i = 0;
113+
b.iter(|| {
114+
let x = map.get(&i);
115+
i = (i + 1) % n;
116+
black_box(x);
117+
})
118+
}
119+
)
110120
}

src/libcollections/btree/map.rs

+8-64
Original file line numberDiff line numberDiff line change
@@ -1843,74 +1843,18 @@ mod bench {
18431843
use test::{Bencher, black_box};
18441844

18451845
use super::BTreeMap;
1846-
use bench::{insert_rand_n, insert_seq_n, find_rand_n, find_seq_n};
18471846

1848-
#[bench]
1849-
pub fn insert_rand_100(b: &mut Bencher) {
1850-
let mut m = BTreeMap::new();
1851-
insert_rand_n(100, &mut m, b,
1852-
|m, i| { m.insert(i, 1); },
1853-
|m, i| { m.remove(&i); });
1854-
}
1855-
1856-
#[bench]
1857-
pub fn insert_rand_10_000(b: &mut Bencher) {
1858-
let mut m = BTreeMap::new();
1859-
insert_rand_n(10_000, &mut m, b,
1860-
|m, i| { m.insert(i, 1); },
1861-
|m, i| { m.remove(&i); });
1862-
}
1863-
1864-
// Insert seq
1865-
#[bench]
1866-
pub fn insert_seq_100(b: &mut Bencher) {
1867-
let mut m = BTreeMap::new();
1868-
insert_seq_n(100, &mut m, b,
1869-
|m, i| { m.insert(i, 1); },
1870-
|m, i| { m.remove(&i); });
1871-
}
1872-
1873-
#[bench]
1874-
pub fn insert_seq_10_000(b: &mut Bencher) {
1875-
let mut m = BTreeMap::new();
1876-
insert_seq_n(10_000, &mut m, b,
1877-
|m, i| { m.insert(i, 1); },
1878-
|m, i| { m.remove(&i); });
1879-
}
1847+
map_insert_rand_bench!{insert_rand_100, 100, BTreeMap}
1848+
map_insert_rand_bench!{insert_rand_10_000, 10_000, BTreeMap}
18801849

1881-
// Find rand
1882-
#[bench]
1883-
pub fn find_rand_100(b: &mut Bencher) {
1884-
let mut m = BTreeMap::new();
1885-
find_rand_n(100, &mut m, b,
1886-
|m, i| { m.insert(i, 1); },
1887-
|m, i| { m.get(&i); });
1888-
}
1889-
1890-
#[bench]
1891-
pub fn find_rand_10_000(b: &mut Bencher) {
1892-
let mut m = BTreeMap::new();
1893-
find_rand_n(10_000, &mut m, b,
1894-
|m, i| { m.insert(i, 1); },
1895-
|m, i| { m.get(&i); });
1896-
}
1850+
map_insert_seq_bench!{insert_seq_100, 100, BTreeMap}
1851+
map_insert_seq_bench!{insert_seq_10_000, 10_000, BTreeMap}
18971852

1898-
// Find seq
1899-
#[bench]
1900-
pub fn find_seq_100(b: &mut Bencher) {
1901-
let mut m = BTreeMap::new();
1902-
find_seq_n(100, &mut m, b,
1903-
|m, i| { m.insert(i, 1); },
1904-
|m, i| { m.get(&i); });
1905-
}
1853+
map_find_rand_bench!{find_rand_100, 100, BTreeMap}
1854+
map_find_rand_bench!{find_rand_10_000, 10_000, BTreeMap}
19061855

1907-
#[bench]
1908-
pub fn find_seq_10_000(b: &mut Bencher) {
1909-
let mut m = BTreeMap::new();
1910-
find_seq_n(10_000, &mut m, b,
1911-
|m, i| { m.insert(i, 1); },
1912-
|m, i| { m.get(&i); });
1913-
}
1856+
map_find_seq_bench!{find_seq_100, 100, BTreeMap}
1857+
map_find_seq_bench!{find_seq_10_000, 10_000, BTreeMap}
19141858

19151859
fn bench_iter(b: &mut Bencher, size: i32) {
19161860
let mut map = BTreeMap::<i32, i32>::new();

src/libcollections/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ pub mod btree_set {
101101
}
102102

103103

104-
#[cfg(test)] mod bench;
104+
#[cfg(test)] #[macro_use] mod bench;
105105

106106
// FIXME(#14344) this shouldn't be necessary
107107
#[doc(hidden)]

src/libcollections/vec_map.rs

+8-65
Original file line numberDiff line numberDiff line change
@@ -1321,74 +1321,17 @@ mod test_map {
13211321

13221322
#[cfg(test)]
13231323
mod bench {
1324-
use test::Bencher;
13251324
use super::VecMap;
1326-
use bench::{insert_rand_n, insert_seq_n, find_rand_n, find_seq_n};
13271325

1328-
#[bench]
1329-
pub fn insert_rand_100(b: &mut Bencher) {
1330-
let mut m = VecMap::new();
1331-
insert_rand_n(100, &mut m, b,
1332-
|m, i| { m.insert(i, 1); },
1333-
|m, i| { m.remove(&i); });
1334-
}
1335-
1336-
#[bench]
1337-
pub fn insert_rand_10_000(b: &mut Bencher) {
1338-
let mut m = VecMap::new();
1339-
insert_rand_n(10_000, &mut m, b,
1340-
|m, i| { m.insert(i, 1); },
1341-
|m, i| { m.remove(&i); });
1342-
}
1343-
1344-
// Insert seq
1345-
#[bench]
1346-
pub fn insert_seq_100(b: &mut Bencher) {
1347-
let mut m = VecMap::new();
1348-
insert_seq_n(100, &mut m, b,
1349-
|m, i| { m.insert(i, 1); },
1350-
|m, i| { m.remove(&i); });
1351-
}
1352-
1353-
#[bench]
1354-
pub fn insert_seq_10_000(b: &mut Bencher) {
1355-
let mut m = VecMap::new();
1356-
insert_seq_n(10_000, &mut m, b,
1357-
|m, i| { m.insert(i, 1); },
1358-
|m, i| { m.remove(&i); });
1359-
}
1326+
map_insert_rand_bench!{insert_rand_100, 100, VecMap}
1327+
map_insert_rand_bench!{insert_rand_10_000, 10_000, VecMap}
13601328

1361-
// Find rand
1362-
#[bench]
1363-
pub fn find_rand_100(b: &mut Bencher) {
1364-
let mut m = VecMap::new();
1365-
find_rand_n(100, &mut m, b,
1366-
|m, i| { m.insert(i, 1); },
1367-
|m, i| { m.get(&i); });
1368-
}
1369-
1370-
#[bench]
1371-
pub fn find_rand_10_000(b: &mut Bencher) {
1372-
let mut m = VecMap::new();
1373-
find_rand_n(10_000, &mut m, b,
1374-
|m, i| { m.insert(i, 1); },
1375-
|m, i| { m.get(&i); });
1376-
}
1329+
map_insert_seq_bench!{insert_seq_100, 100, VecMap}
1330+
map_insert_seq_bench!{insert_seq_10_000, 10_000, VecMap}
13771331

1378-
// Find seq
1379-
#[bench]
1380-
pub fn find_seq_100(b: &mut Bencher) {
1381-
let mut m = VecMap::new();
1382-
find_seq_n(100, &mut m, b,
1383-
|m, i| { m.insert(i, 1); },
1384-
|m, i| { m.get(&i); });
1385-
}
1332+
map_find_rand_bench!{find_rand_100, 100, VecMap}
1333+
map_find_rand_bench!{find_rand_10_000, 10_000, VecMap}
13861334

1387-
#[bench]
1388-
pub fn find_seq_10_000(b: &mut Bencher) {
1389-
let mut m = VecMap::new();
1390-
find_seq_n(10_000, &mut m, b,
1391-
|m, i| { m.insert(i, 1); },
1392-
|m, i| { m.get(&i); });
1393-
}
1335+
map_find_seq_bench!{find_seq_100, 100, VecMap}
1336+
map_find_seq_bench!{find_seq_10_000, 10_000, VecMap}
13941337
}

0 commit comments

Comments
 (0)