Skip to content

Commit 77ee50e

Browse files
committed
Merge pull request diesel-rs#299 from killercup/feature/benchmarks-factor-10
Execute Benchmarks for 0, 1, 10, 100, 1k, 10k Rows [ci skip]
2 parents e40242d + 72ed447 commit 77ee50e

1 file changed

Lines changed: 99 additions & 83 deletions

File tree

diesel_tests/tests/bench.rs

Lines changed: 99 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
#![feature(custom_derive, plugin, custom_attribute, test)]
22
#![plugin(diesel_codegen, dotenv_macros)]
3+
4+
#![allow(non_snake_case)]
5+
36
#[macro_use]
47
extern crate diesel;
58
extern crate test;
@@ -22,90 +25,103 @@ fn connection() -> TestConnection {
2225
schema::connection()
2326
}
2427

25-
#[bench]
26-
fn bench_selecting_0_rows_with_trivial_query(b: &mut Bencher) {
27-
let conn = connection();
28-
29-
b.iter(|| {
30-
users::table.load::<User>(&conn).unwrap();
31-
})
32-
}
33-
34-
#[bench]
35-
fn bench_selecting_10k_rows_with_trivial_query(b: &mut Bencher) {
36-
let conn = connection();
37-
let data: Vec<_> = (0..10_000).map(|i| {
38-
NewUser::new(&format!("User {}", i), None)
39-
}).collect();
40-
batch_insert(&data, users::table, &conn);
41-
42-
b.iter(|| {
43-
users::table.load::<User>(&conn).unwrap()
44-
})
45-
}
46-
47-
#[bench]
48-
fn bench_selecting_10k_rows_with_trivial_query_boxed(b: &mut Bencher) {
49-
let conn = connection();
50-
let data: Vec<_> = (0..10_000).map(|i| {
51-
NewUser::new(&format!("User {}", i), None)
52-
}).collect();
53-
batch_insert(&data, users::table, &conn);
54-
55-
b.iter(|| {
56-
users::table.into_boxed().load::<User>(&conn).unwrap()
57-
})
58-
}
59-
60-
61-
#[bench]
62-
fn bench_selecting_0_rows_with_medium_complex_query(b: &mut Bencher) {
63-
let conn = connection();
64-
65-
b.iter(|| {
66-
use schema::users::dsl::*;
67-
let target = users.left_outer_join(posts::table)
68-
.filter(hair_color.eq("black"))
69-
.order(name.desc());
70-
target.load::<(User, Option<Post>)>(&conn).unwrap()
71-
})
28+
macro_rules! bench_trivial_query {
29+
($n:expr, $name:ident, $name_boxed:ident) => {
30+
#[bench]
31+
fn $name(b: &mut Bencher) {
32+
let conn = connection();
33+
34+
let data: Vec<_> = (0..$n).map(|i| {
35+
NewUser::new(&format!("User {}", i), None)
36+
}).collect();
37+
batch_insert(&data, users::table, &conn);
38+
39+
b.iter(|| {
40+
users::table.load::<User>(&conn).unwrap()
41+
})
42+
}
43+
44+
#[bench]
45+
fn $name_boxed(b: &mut Bencher) {
46+
let conn = connection();
47+
48+
let data: Vec<_> = (0..$n).map(|i| {
49+
NewUser::new(&format!("User {}", i), None)
50+
}).collect();
51+
batch_insert(&data, users::table, &conn);
52+
53+
b.iter(|| {
54+
users::table.into_boxed().load::<User>(&conn).unwrap()
55+
})
56+
}
57+
};
7258
}
7359

74-
#[bench]
75-
fn bench_selecting_10k_rows_with_medium_complex_query(b: &mut Bencher) {
76-
let conn = connection();
77-
78-
let data: Vec<_> = (0..10_000).map(|i| {
79-
let hair_color = if i % 2 == 0 { "black" } else { "brown" };
80-
NewUser::new(&format!("User {}", i), Some(hair_color))
81-
}).collect();
82-
batch_insert(&data, users::table, &conn);
83-
84-
b.iter(|| {
85-
use schema::users::dsl::*;
86-
let target = users.left_outer_join(posts::table)
87-
.filter(hair_color.eq("black"))
88-
.order(name.desc());
89-
target.load::<(User, Option<Post>)>(&conn).unwrap()
90-
})
60+
bench_trivial_query!(0,
61+
bench_trivial_query_selecting______0_rows, bench_trivial_query_selecting______0_rows_boxed);
62+
bench_trivial_query!(1,
63+
bench_trivial_query_selecting______1_row, bench_trivial_query_selecting______1_row_boxed);
64+
bench_trivial_query!(10,
65+
bench_trivial_query_selecting_____10_rows, bench_trivial_query_selecting_____10_rows_boxed);
66+
bench_trivial_query!(100,
67+
bench_trivial_query_selecting____100_rows, bench_trivial_query_selecting____100_rows_boxed);
68+
bench_trivial_query!(1_000,
69+
bench_trivial_query_selecting__1_000_rows, bench_trivial_query_selecting__1_000_rows_boxed);
70+
bench_trivial_query!(10_000,
71+
bench_trivial_query_selecting_10_000_rows, bench_trivial_query_selecting_10_000_rows_boxed);
72+
73+
macro_rules! bench_medium_complex_query {
74+
($n:expr, $name:ident, $name_boxed:ident) => {
75+
#[bench]
76+
fn $name(b: &mut Bencher) {
77+
let conn = connection();
78+
79+
let data: Vec<_> = (0..$n).map(|i| {
80+
let hair_color = if i % 2 == 0 { "black" } else { "brown" };
81+
NewUser::new(&format!("User {}", i), Some(hair_color))
82+
}).collect();
83+
batch_insert(&data, users::table, &conn);
84+
85+
b.iter(|| {
86+
use schema::users::dsl::*;
87+
let target = users.left_outer_join(posts::table)
88+
.filter(hair_color.eq("black"))
89+
.order(name.desc());
90+
target.load::<(User, Option<Post>)>(&conn).unwrap()
91+
})
92+
}
93+
94+
#[bench]
95+
fn $name_boxed(b: &mut Bencher) {
96+
let conn = connection();
97+
98+
let data: Vec<_> = (0..$n).map(|i| {
99+
let hair_color = if i % 2 == 0 { "black" } else { "brown" };
100+
NewUser::new(&format!("User {}", i), Some(hair_color))
101+
}).collect();
102+
batch_insert(&data, users::table, &conn);
103+
104+
b.iter(|| {
105+
use schema::users::dsl::*;
106+
let target = users.left_outer_join(posts::table)
107+
.filter(hair_color.eq("black"))
108+
.order(name.desc())
109+
.into_boxed();
110+
target.load::<(User, Option<Post>)>(&conn).unwrap()
111+
})
112+
}
113+
};
91114
}
92115

93-
#[bench]
94-
fn bench_selecting_10k_rows_with_medium_complex_query_boxed(b: &mut Bencher) {
95-
let conn = connection();
96-
97-
let data: Vec<_> = (0..10_000).map(|i| {
98-
let hair_color = if i % 2 == 0 { "black" } else { "brown" };
99-
NewUser::new(&format!("User {}", i), Some(hair_color))
100-
}).collect();
101-
batch_insert(&data, users::table, &conn);
102-
103-
b.iter(|| {
104-
use schema::users::dsl::*;
105-
let target = users.left_outer_join(posts::table)
106-
.filter(hair_color.eq("black"))
107-
.order(name.desc())
108-
.into_boxed();
109-
target.load::<(User, Option<Post>)>(&conn).unwrap()
110-
})
111-
}
116+
bench_medium_complex_query!(0,
117+
bench_medium_complex_query_selecting______0_rows, bench_medium_complex_query_selecting______0_rows_boxed);
118+
bench_medium_complex_query!(1,
119+
bench_medium_complex_query_selecting______1_row, bench_medium_complex_query_selecting______1_row_boxed);
120+
bench_medium_complex_query!(10,
121+
bench_medium_complex_query_selecting_____10_rows, bench_medium_complex_query_selecting_____10_rows_boxed);
122+
bench_medium_complex_query!(100,
123+
bench_medium_complex_query_selecting____100_rows, bench_medium_complex_query_selecting____100_rows_boxed);
124+
bench_medium_complex_query!(1_000,
125+
bench_medium_complex_query_selecting__1_000_rows, bench_medium_complex_query_selecting__1_000_rows_boxed);
126+
bench_medium_complex_query!(10_000,
127+
bench_medium_complex_query_selecting_10_000_rows, bench_medium_complex_query_selecting_10_000_rows_boxed);

0 commit comments

Comments
 (0)