Skip to content

Commit c325cb0

Browse files
committed
auto merge of #7912 : graydon/rust/extra-new-benchmarks-1, r=catamorphism
This adds new #[bench] benchmarks for extra::smallintmap, treemap, sha1, sha256 and 512, and base64. Also fixes a bunch of warnings in bitv.
2 parents d029ebf + 0ba6a51 commit c325cb0

File tree

6 files changed

+409
-68
lines changed

6 files changed

+409
-68
lines changed

src/libextra/base64.rs

Lines changed: 95 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -284,81 +284,109 @@ impl<'self> FromBase64 for &'self str {
284284
}
285285
}
286286

287-
#[test]
288-
fn test_to_base64_basic() {
289-
assert_eq!("".to_base64(STANDARD), ~"");
290-
assert_eq!("f".to_base64(STANDARD), ~"Zg==");
291-
assert_eq!("fo".to_base64(STANDARD), ~"Zm8=");
292-
assert_eq!("foo".to_base64(STANDARD), ~"Zm9v");
293-
assert_eq!("foob".to_base64(STANDARD), ~"Zm9vYg==");
294-
assert_eq!("fooba".to_base64(STANDARD), ~"Zm9vYmE=");
295-
assert_eq!("foobar".to_base64(STANDARD), ~"Zm9vYmFy");
296-
}
287+
#[cfg(test)]
288+
mod test {
289+
use test::BenchHarness;
290+
use base64::*;
291+
292+
#[test]
293+
fn test_to_base64_basic() {
294+
assert_eq!("".to_base64(STANDARD), ~"");
295+
assert_eq!("f".to_base64(STANDARD), ~"Zg==");
296+
assert_eq!("fo".to_base64(STANDARD), ~"Zm8=");
297+
assert_eq!("foo".to_base64(STANDARD), ~"Zm9v");
298+
assert_eq!("foob".to_base64(STANDARD), ~"Zm9vYg==");
299+
assert_eq!("fooba".to_base64(STANDARD), ~"Zm9vYmE=");
300+
assert_eq!("foobar".to_base64(STANDARD), ~"Zm9vYmFy");
301+
}
297302
298-
#[test]
299-
fn test_to_base64_line_break() {
300-
assert!(![0u8, 1000].to_base64(Config {line_length: None, ..STANDARD})
301-
.contains("\r\n"));
302-
assert_eq!("foobar".to_base64(Config {line_length: Some(4), ..STANDARD}),
303-
~"Zm9v\r\nYmFy");
304-
}
303+
#[test]
304+
fn test_to_base64_line_break() {
305+
assert!(![0u8, 1000].to_base64(Config {line_length: None, ..STANDARD})
306+
.contains("\r\n"));
307+
assert_eq!("foobar".to_base64(Config {line_length: Some(4), ..STANDARD}),
308+
~"Zm9v\r\nYmFy");
309+
}
305310
306-
#[test]
307-
fn test_to_base64_padding() {
308-
assert_eq!("f".to_base64(Config {pad: false, ..STANDARD}), ~"Zg");
309-
assert_eq!("fo".to_base64(Config {pad: false, ..STANDARD}), ~"Zm8");
310-
}
311+
#[test]
312+
fn test_to_base64_padding() {
313+
assert_eq!("f".to_base64(Config {pad: false, ..STANDARD}), ~"Zg");
314+
assert_eq!("fo".to_base64(Config {pad: false, ..STANDARD}), ~"Zm8");
315+
}
311316
312-
#[test]
313-
fn test_to_base64_url_safe() {
314-
assert_eq!([251, 255].to_base64(URL_SAFE), ~"-_8");
315-
assert_eq!([251, 255].to_base64(STANDARD), ~"+/8=");
316-
}
317+
#[test]
318+
fn test_to_base64_url_safe() {
319+
assert_eq!([251, 255].to_base64(URL_SAFE), ~"-_8");
320+
assert_eq!([251, 255].to_base64(STANDARD), ~"+/8=");
321+
}
317322
318-
#[test]
319-
fn test_from_base64_basic() {
320-
assert_eq!("".from_base64().get(), "".as_bytes().to_owned());
321-
assert_eq!("Zg==".from_base64().get(), "f".as_bytes().to_owned());
322-
assert_eq!("Zm8=".from_base64().get(), "fo".as_bytes().to_owned());
323-
assert_eq!("Zm9v".from_base64().get(), "foo".as_bytes().to_owned());
324-
assert_eq!("Zm9vYg==".from_base64().get(), "foob".as_bytes().to_owned());
325-
assert_eq!("Zm9vYmE=".from_base64().get(), "fooba".as_bytes().to_owned());
326-
assert_eq!("Zm9vYmFy".from_base64().get(), "foobar".as_bytes().to_owned());
327-
}
323+
#[test]
324+
fn test_from_base64_basic() {
325+
assert_eq!("".from_base64().get(), "".as_bytes().to_owned());
326+
assert_eq!("Zg==".from_base64().get(), "f".as_bytes().to_owned());
327+
assert_eq!("Zm8=".from_base64().get(), "fo".as_bytes().to_owned());
328+
assert_eq!("Zm9v".from_base64().get(), "foo".as_bytes().to_owned());
329+
assert_eq!("Zm9vYg==".from_base64().get(), "foob".as_bytes().to_owned());
330+
assert_eq!("Zm9vYmE=".from_base64().get(), "fooba".as_bytes().to_owned());
331+
assert_eq!("Zm9vYmFy".from_base64().get(), "foobar".as_bytes().to_owned());
332+
}
328333
329-
#[test]
330-
fn test_from_base64_newlines() {
331-
assert_eq!("Zm9v\r\nYmFy".from_base64().get(),
332-
"foobar".as_bytes().to_owned());
333-
}
334+
#[test]
335+
fn test_from_base64_newlines() {
336+
assert_eq!("Zm9v\r\nYmFy".from_base64().get(),
337+
"foobar".as_bytes().to_owned());
338+
}
334339
335-
#[test]
336-
fn test_from_base64_urlsafe() {
337-
assert_eq!("-_8".from_base64().get(), "+/8=".from_base64().get());
338-
}
340+
#[test]
341+
fn test_from_base64_urlsafe() {
342+
assert_eq!("-_8".from_base64().get(), "+/8=".from_base64().get());
343+
}
339344
340-
#[test]
341-
fn test_from_base64_invalid_char() {
342-
assert!("Zm$=".from_base64().is_err())
343-
assert!("Zg==$".from_base64().is_err());
344-
}
345+
#[test]
346+
fn test_from_base64_invalid_char() {
347+
assert!("Zm$=".from_base64().is_err())
348+
assert!("Zg==$".from_base64().is_err());
349+
}
345350
346-
#[test]
347-
fn test_from_base64_invalid_padding() {
348-
assert!("Z===".from_base64().is_err());
349-
}
351+
#[test]
352+
fn test_from_base64_invalid_padding() {
353+
assert!("Z===".from_base64().is_err());
354+
}
350355
351-
#[test]
352-
fn test_base64_random() {
353-
use std::rand::{task_rng, random, RngUtil};
354-
use std::vec;
356+
#[test]
357+
fn test_base64_random() {
358+
use std::rand::{task_rng, random, RngUtil};
359+
use std::vec;
355360
356-
for 1000.times {
357-
let v: ~[u8] = do vec::build |push| {
358-
for task_rng().gen_uint_range(1, 100).times {
359-
push(random());
360-
}
361-
};
362-
assert_eq!(v.to_base64(STANDARD).from_base64().get(), v);
361+
for 1000.times {
362+
let v: ~[u8] = do vec::build |push| {
363+
for task_rng().gen_uint_range(1, 100).times {
364+
push(random());
365+
}
366+
};
367+
assert_eq!(v.to_base64(STANDARD).from_base64().get(), v);
368+
}
363369
}
364-
}
370+
371+
#[bench]
372+
pub fn to_base64(bh: & mut BenchHarness) {
373+
let s = "イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム \
374+
ウヰノオクヤマ ケフコエテ アサキユメミシ ヱヒモセスン";
375+
do bh.iter {
376+
s.to_base64(STANDARD);
377+
}
378+
bh.bytes = s.len() as u64;
379+
}
380+
381+
#[bench]
382+
pub fn from_base64(bh: & mut BenchHarness) {
383+
let s = "イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム \
384+
ウヰノオクヤマ ケフコエテ アサキユメミシ ヱヒモセスン";
385+
let b = s.to_base64(STANDARD);
386+
do bh.iter {
387+
b.from_base64();
388+
}
389+
bh.bytes = b.len() as u64;
390+
}
391+
392+
}

src/libextra/container.rs

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,86 @@ pub trait Deque<T> : Mutable {
3838
/// Remove the first element and return it, or None if the sequence is empty
3939
fn pop_front(&mut self) -> Option<T>;
4040
}
41+
42+
#[cfg(test)]
43+
mod bench {
44+
45+
use std::container::MutableMap;
46+
use std::{vec,rand,uint};
47+
use std::rand::RngUtil;
48+
use test::BenchHarness;
49+
50+
pub fn insert_rand_n<M:MutableMap<uint,uint>>(n: uint,
51+
map: &mut M,
52+
bh: &mut BenchHarness) {
53+
// setup
54+
let mut rng = rand::XorShiftRng::new();
55+
56+
map.clear();
57+
for uint::range(0,n) |_i| {
58+
map.insert(rng.gen::<uint>() % n, 1);
59+
}
60+
61+
// measure
62+
do bh.iter {
63+
let k = rng.gen::<uint>() % n;
64+
map.insert(k, 1);
65+
map.remove(&k);
66+
}
67+
}
68+
69+
pub fn insert_seq_n<M:MutableMap<uint,uint>>(n: uint,
70+
map: &mut M,
71+
bh: &mut BenchHarness) {
72+
// setup
73+
map.clear();
74+
for uint::range(0, n) |i| {
75+
map.insert(i*2, 1);
76+
}
77+
78+
// measure
79+
let mut i = 1;
80+
do bh.iter {
81+
map.insert(i, 1);
82+
map.remove(&i);
83+
i = (i + 2) % n;
84+
}
85+
}
86+
87+
pub fn find_rand_n<M:MutableMap<uint,uint>>(n: uint,
88+
map: &mut M,
89+
bh: &mut BenchHarness) {
90+
// setup
91+
let mut rng = rand::XorShiftRng::new();
92+
let mut keys = vec::from_fn(n, |_| rng.gen::<uint>() % n);
93+
94+
for keys.iter().advance() |k| {
95+
map.insert(*k, 1);
96+
}
97+
98+
rng.shuffle_mut(keys);
99+
100+
// measure
101+
let mut i = 0;
102+
do bh.iter {
103+
map.find(&(keys[i]));
104+
i = (i + 1) % n;
105+
}
106+
}
107+
108+
pub fn find_seq_n<M:MutableMap<uint,uint>>(n: uint,
109+
map: &mut M,
110+
bh: &mut BenchHarness) {
111+
// setup
112+
for uint::range(0, n) |i| {
113+
map.insert(i, 1);
114+
}
115+
116+
// measure
117+
let mut i = 0;
118+
do bh.iter {
119+
map.find(&i);
120+
i = (i + 1) % n;
121+
}
122+
}
123+
}

src/libextra/crypto/sha1.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,3 +367,41 @@ mod tests {
367367
}
368368
}
369369
}
370+
371+
#[cfg(test)]
372+
mod bench {
373+
374+
use sha1::Sha1;
375+
use test::BenchHarness;
376+
377+
#[bench]
378+
pub fn sha1_10(bh: & mut BenchHarness) {
379+
let mut sh = Sha1::new();
380+
let bytes = [1u8, ..10];
381+
do bh.iter {
382+
sh.input(bytes);
383+
}
384+
bh.bytes = bytes.len() as u64;
385+
}
386+
387+
#[bench]
388+
pub fn sha1_1k(bh: & mut BenchHarness) {
389+
let mut sh = Sha1::new();
390+
let bytes = [1u8, ..1024];
391+
do bh.iter {
392+
sh.input(bytes);
393+
}
394+
bh.bytes = bytes.len() as u64;
395+
}
396+
397+
#[bench]
398+
pub fn sha1_64k(bh: & mut BenchHarness) {
399+
let mut sh = Sha1::new();
400+
let bytes = [1u8, ..65536];
401+
do bh.iter {
402+
sh.input(bytes);
403+
}
404+
bh.bytes = bytes.len() as u64;
405+
}
406+
407+
}

src/libextra/crypto/sha2.rs

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1121,3 +1121,75 @@ mod tests {
11211121
test_hash(sh, tests);
11221122
}
11231123
}
1124+
1125+
1126+
1127+
#[cfg(test)]
1128+
mod bench {
1129+
1130+
use sha2::{Sha256,Sha512};
1131+
use test::BenchHarness;
1132+
1133+
#[bench]
1134+
pub fn sha256_10(bh: & mut BenchHarness) {
1135+
let mut sh = Sha256::new();
1136+
let bytes = [1u8, ..10];
1137+
do bh.iter {
1138+
sh.input(bytes);
1139+
}
1140+
bh.bytes = bytes.len() as u64;
1141+
}
1142+
1143+
#[bench]
1144+
pub fn sha256_1k(bh: & mut BenchHarness) {
1145+
let mut sh = Sha256::new();
1146+
let bytes = [1u8, ..1024];
1147+
do bh.iter {
1148+
sh.input(bytes);
1149+
}
1150+
bh.bytes = bytes.len() as u64;
1151+
}
1152+
1153+
#[bench]
1154+
pub fn sha256_64k(bh: & mut BenchHarness) {
1155+
let mut sh = Sha256::new();
1156+
let bytes = [1u8, ..65536];
1157+
do bh.iter {
1158+
sh.input(bytes);
1159+
}
1160+
bh.bytes = bytes.len() as u64;
1161+
}
1162+
1163+
1164+
1165+
#[bench]
1166+
pub fn sha512_10(bh: & mut BenchHarness) {
1167+
let mut sh = Sha512::new();
1168+
let bytes = [1u8, ..10];
1169+
do bh.iter {
1170+
sh.input(bytes);
1171+
}
1172+
bh.bytes = bytes.len() as u64;
1173+
}
1174+
1175+
#[bench]
1176+
pub fn sha512_1k(bh: & mut BenchHarness) {
1177+
let mut sh = Sha512::new();
1178+
let bytes = [1u8, ..1024];
1179+
do bh.iter {
1180+
sh.input(bytes);
1181+
}
1182+
bh.bytes = bytes.len() as u64;
1183+
}
1184+
1185+
#[bench]
1186+
pub fn sha512_64k(bh: & mut BenchHarness) {
1187+
let mut sh = Sha512::new();
1188+
let bytes = [1u8, ..65536];
1189+
do bh.iter {
1190+
sh.input(bytes);
1191+
}
1192+
bh.bytes = bytes.len() as u64;
1193+
}
1194+
1195+
}

0 commit comments

Comments
 (0)