Rollup merge of #39501 - phungleson:libcorebench, r=alexcrichton
Extract libcore benchmarks to a separate folder Fix #39484 r? @alexcrichton since you seem to know about this :) Thanks!
This commit is contained in:
commit
ac329cd122
|
@ -13,7 +13,6 @@ bench = false
|
|||
name = "coretest"
|
||||
path = "../libcoretest/lib.rs"
|
||||
|
||||
# FIXME: need to extract benchmarks to a separate crate
|
||||
#[[bench]]
|
||||
#name = "coretest"
|
||||
#path = "../libcoretest/lib.rs"
|
||||
[[bench]]
|
||||
name = "corebench"
|
||||
path = "../libcore/bench/lib.rs"
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use core::any::*;
|
||||
use test::{Bencher, black_box};
|
||||
|
||||
#[bench]
|
||||
fn bench_downcast_ref(b: &mut Bencher) {
|
||||
b.iter(|| {
|
||||
let mut x = 0;
|
||||
let mut y = &mut x as &mut Any;
|
||||
black_box(&mut y);
|
||||
black_box(y.downcast_ref::<isize>() == Some(&0));
|
||||
});
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
mod sip;
|
|
@ -0,0 +1,151 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![allow(deprecated)]
|
||||
|
||||
use core::hash::*;
|
||||
use test::{Bencher, black_box};
|
||||
|
||||
fn hash_bytes<H: Hasher>(mut s: H, x: &[u8]) -> u64 {
|
||||
Hasher::write(&mut s, x);
|
||||
s.finish()
|
||||
}
|
||||
|
||||
fn hash_with<H: Hasher, T: Hash>(mut st: H, x: &T) -> u64 {
|
||||
x.hash(&mut st);
|
||||
st.finish()
|
||||
}
|
||||
|
||||
fn hash<T: Hash>(x: &T) -> u64 {
|
||||
hash_with(SipHasher::new(), x)
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_str_under_8_bytes(b: &mut Bencher) {
|
||||
let s = "foo";
|
||||
b.iter(|| {
|
||||
assert_eq!(hash(&s), 16262950014981195938);
|
||||
})
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_str_of_8_bytes(b: &mut Bencher) {
|
||||
let s = "foobar78";
|
||||
b.iter(|| {
|
||||
assert_eq!(hash(&s), 4898293253460910787);
|
||||
})
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_str_over_8_bytes(b: &mut Bencher) {
|
||||
let s = "foobarbaz0";
|
||||
b.iter(|| {
|
||||
assert_eq!(hash(&s), 10581415515220175264);
|
||||
})
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_long_str(b: &mut Bencher) {
|
||||
let s = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor \
|
||||
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud \
|
||||
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute \
|
||||
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla \
|
||||
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui \
|
||||
officia deserunt mollit anim id est laborum.";
|
||||
b.iter(|| {
|
||||
assert_eq!(hash(&s), 17717065544121360093);
|
||||
})
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_u32(b: &mut Bencher) {
|
||||
let u = 162629500u32;
|
||||
let u = black_box(u);
|
||||
b.iter(|| {
|
||||
hash(&u)
|
||||
});
|
||||
b.bytes = 8;
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_u32_keyed(b: &mut Bencher) {
|
||||
let u = 162629500u32;
|
||||
let u = black_box(u);
|
||||
let k1 = black_box(0x1);
|
||||
let k2 = black_box(0x2);
|
||||
b.iter(|| {
|
||||
hash_with(SipHasher::new_with_keys(k1, k2), &u)
|
||||
});
|
||||
b.bytes = 8;
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_u64(b: &mut Bencher) {
|
||||
let u = 16262950014981195938u64;
|
||||
let u = black_box(u);
|
||||
b.iter(|| {
|
||||
hash(&u)
|
||||
});
|
||||
b.bytes = 8;
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_bytes_4(b: &mut Bencher) {
|
||||
let data = black_box([b' '; 4]);
|
||||
b.iter(|| {
|
||||
hash_bytes(SipHasher::default(), &data)
|
||||
});
|
||||
b.bytes = 4;
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_bytes_7(b: &mut Bencher) {
|
||||
let data = black_box([b' '; 7]);
|
||||
b.iter(|| {
|
||||
hash_bytes(SipHasher::default(), &data)
|
||||
});
|
||||
b.bytes = 7;
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_bytes_8(b: &mut Bencher) {
|
||||
let data = black_box([b' '; 8]);
|
||||
b.iter(|| {
|
||||
hash_bytes(SipHasher::default(), &data)
|
||||
});
|
||||
b.bytes = 8;
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_bytes_a_16(b: &mut Bencher) {
|
||||
let data = black_box([b' '; 16]);
|
||||
b.iter(|| {
|
||||
hash_bytes(SipHasher::default(), &data)
|
||||
});
|
||||
b.bytes = 16;
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_bytes_b_32(b: &mut Bencher) {
|
||||
let data = black_box([b' '; 32]);
|
||||
b.iter(|| {
|
||||
hash_bytes(SipHasher::default(), &data)
|
||||
});
|
||||
b.bytes = 32;
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_bytes_c_128(b: &mut Bencher) {
|
||||
let data = black_box([b' '; 128]);
|
||||
b.iter(|| {
|
||||
hash_bytes(SipHasher::default(), &data)
|
||||
});
|
||||
b.bytes = 128;
|
||||
}
|
|
@ -0,0 +1,101 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use core::iter::*;
|
||||
use test::{Bencher, black_box};
|
||||
|
||||
#[bench]
|
||||
fn bench_rposition(b: &mut Bencher) {
|
||||
let it: Vec<usize> = (0..300).collect();
|
||||
b.iter(|| {
|
||||
it.iter().rposition(|&x| x <= 150);
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_skip_while(b: &mut Bencher) {
|
||||
b.iter(|| {
|
||||
let it = 0..100;
|
||||
let mut sum = 0;
|
||||
it.skip_while(|&x| { sum += x; sum < 4000 }).all(|_| true);
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_multiple_take(b: &mut Bencher) {
|
||||
let mut it = (0..42).cycle();
|
||||
b.iter(|| {
|
||||
let n = it.next().unwrap();
|
||||
for _ in 0..n {
|
||||
it.clone().take(it.next().unwrap()).all(|_| true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
fn scatter(x: i32) -> i32 { (x * 31) % 127 }
|
||||
|
||||
#[bench]
|
||||
fn bench_max_by_key(b: &mut Bencher) {
|
||||
b.iter(|| {
|
||||
let it = 0..100;
|
||||
it.max_by_key(|&x| scatter(x))
|
||||
})
|
||||
}
|
||||
|
||||
// http://www.reddit.com/r/rust/comments/31syce/using_iterators_to_find_the_index_of_the_min_or/
|
||||
#[bench]
|
||||
fn bench_max_by_key2(b: &mut Bencher) {
|
||||
fn max_index_iter(array: &[i32]) -> usize {
|
||||
array.iter().enumerate().max_by_key(|&(_, item)| item).unwrap().0
|
||||
}
|
||||
|
||||
let mut data = vec![0; 1638];
|
||||
data[514] = 9999;
|
||||
|
||||
b.iter(|| max_index_iter(&data));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_max(b: &mut Bencher) {
|
||||
b.iter(|| {
|
||||
let it = 0..100;
|
||||
it.map(scatter).max()
|
||||
})
|
||||
}
|
||||
|
||||
pub fn copy_zip(xs: &[u8], ys: &mut [u8]) {
|
||||
for (a, b) in ys.iter_mut().zip(xs) {
|
||||
*a = *b;
|
||||
}
|
||||
}
|
||||
|
||||
pub fn add_zip(xs: &[f32], ys: &mut [f32]) {
|
||||
for (a, b) in ys.iter_mut().zip(xs) {
|
||||
*a += *b;
|
||||
}
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_zip_copy(b: &mut Bencher) {
|
||||
let source = vec![0u8; 16 * 1024];
|
||||
let mut dst = black_box(vec![0u8; 16 * 1024]);
|
||||
b.iter(|| {
|
||||
copy_zip(&source, &mut dst)
|
||||
})
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_zip_add(b: &mut Bencher) {
|
||||
let source = vec![1.; 16 * 1024];
|
||||
let mut dst = vec![0.; 16 * 1024];
|
||||
b.iter(|| {
|
||||
add_zip(&source, &mut dst)
|
||||
});
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![deny(warnings)]
|
||||
|
||||
#![feature(flt2dec)]
|
||||
#![feature(slice_patterns)]
|
||||
#![feature(test)]
|
||||
|
||||
extern crate core;
|
||||
extern crate test;
|
||||
|
||||
mod any;
|
||||
mod hash;
|
||||
mod iter;
|
||||
mod mem;
|
||||
mod num;
|
||||
mod ops;
|
|
@ -0,0 +1,70 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use test::Bencher;
|
||||
|
||||
// FIXME #13642 (these benchmarks should be in another place)
|
||||
// Completely miscellaneous language-construct benchmarks.
|
||||
// Static/dynamic method dispatch
|
||||
|
||||
struct Struct {
|
||||
field: isize
|
||||
}
|
||||
|
||||
trait Trait {
|
||||
fn method(&self) -> isize;
|
||||
}
|
||||
|
||||
impl Trait for Struct {
|
||||
fn method(&self) -> isize {
|
||||
self.field
|
||||
}
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn trait_vtable_method_call(b: &mut Bencher) {
|
||||
let s = Struct { field: 10 };
|
||||
let t = &s as &Trait;
|
||||
b.iter(|| {
|
||||
t.method()
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn trait_static_method_call(b: &mut Bencher) {
|
||||
let s = Struct { field: 10 };
|
||||
b.iter(|| {
|
||||
s.method()
|
||||
});
|
||||
}
|
||||
|
||||
// Overhead of various match forms
|
||||
|
||||
#[bench]
|
||||
fn match_option_some(b: &mut Bencher) {
|
||||
let x = Some(10);
|
||||
b.iter(|| {
|
||||
match x {
|
||||
Some(y) => y,
|
||||
None => 11
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn match_vec_pattern(b: &mut Bencher) {
|
||||
let x = [1,2,3,4,5,6];
|
||||
b.iter(|| {
|
||||
match x {
|
||||
[1,2,3,..] => 10,
|
||||
_ => 11,
|
||||
}
|
||||
});
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use std::f64;
|
||||
use test::Bencher;
|
||||
|
||||
#[bench]
|
||||
fn bench_0(b: &mut Bencher) {
|
||||
b.iter(|| "0.0".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_42(b: &mut Bencher) {
|
||||
b.iter(|| "42".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_huge_int(b: &mut Bencher) {
|
||||
// 2^128 - 1
|
||||
b.iter(|| "170141183460469231731687303715884105727".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_short_decimal(b: &mut Bencher) {
|
||||
b.iter(|| "1234.5678".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_pi_long(b: &mut Bencher) {
|
||||
b.iter(|| "3.14159265358979323846264338327950288".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_pi_short(b: &mut Bencher) {
|
||||
b.iter(|| "3.141592653589793".parse::<f64>())
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_1e150(b: &mut Bencher) {
|
||||
b.iter(|| "1e150".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_long_decimal_and_exp(b: &mut Bencher) {
|
||||
b.iter(|| "727501488517303786137132964064381141071e-123".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_min_subnormal(b: &mut Bencher) {
|
||||
b.iter(|| "5e-324".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_min_normal(b: &mut Bencher) {
|
||||
b.iter(|| "2.2250738585072014e-308".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_max(b: &mut Bencher) {
|
||||
b.iter(|| "1.7976931348623157e308".parse::<f64>());
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
mod strategy {
|
||||
mod dragon;
|
||||
mod grisu;
|
||||
}
|
||||
|
||||
use core::num::flt2dec::{decode, DecodableFloat, FullDecoded, Decoded};
|
||||
use core::num::flt2dec::MAX_SIG_DIGITS;
|
||||
|
||||
pub fn decode_finite<T: DecodableFloat>(v: T) -> Decoded {
|
||||
match decode(v).1 {
|
||||
FullDecoded::Finite(decoded) => decoded,
|
||||
full_decoded => panic!("expected finite, got {:?} instead", full_decoded)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use std::{i16, f64};
|
||||
use super::super::*;
|
||||
use core::num::flt2dec::strategy::dragon::*;
|
||||
use test::Bencher;
|
||||
|
||||
#[bench]
|
||||
fn bench_small_shortest(b: &mut Bencher) {
|
||||
let decoded = decode_finite(3.141592f64);
|
||||
let mut buf = [0; MAX_SIG_DIGITS];
|
||||
b.iter(|| format_shortest(&decoded, &mut buf));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_big_shortest(b: &mut Bencher) {
|
||||
let decoded = decode_finite(f64::MAX);
|
||||
let mut buf = [0; MAX_SIG_DIGITS];
|
||||
b.iter(|| format_shortest(&decoded, &mut buf));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_small_exact_3(b: &mut Bencher) {
|
||||
let decoded = decode_finite(3.141592f64);
|
||||
let mut buf = [0; 3];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_big_exact_3(b: &mut Bencher) {
|
||||
let decoded = decode_finite(f64::MAX);
|
||||
let mut buf = [0; 3];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_small_exact_12(b: &mut Bencher) {
|
||||
let decoded = decode_finite(3.141592f64);
|
||||
let mut buf = [0; 12];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_big_exact_12(b: &mut Bencher) {
|
||||
let decoded = decode_finite(f64::MAX);
|
||||
let mut buf = [0; 12];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_small_exact_inf(b: &mut Bencher) {
|
||||
let decoded = decode_finite(3.141592f64);
|
||||
let mut buf = [0; 1024];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_big_exact_inf(b: &mut Bencher) {
|
||||
let decoded = decode_finite(f64::MAX);
|
||||
let mut buf = [0; 1024];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use std::{i16, f64};
|
||||
use super::super::*;
|
||||
use core::num::flt2dec::strategy::grisu::*;
|
||||
use test::Bencher;
|
||||
|
||||
pub fn decode_finite<T: DecodableFloat>(v: T) -> Decoded {
|
||||
match decode(v).1 {
|
||||
FullDecoded::Finite(decoded) => decoded,
|
||||
full_decoded => panic!("expected finite, got {:?} instead", full_decoded)
|
||||
}
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_small_shortest(b: &mut Bencher) {
|
||||
let decoded = decode_finite(3.141592f64);
|
||||
let mut buf = [0; MAX_SIG_DIGITS];
|
||||
b.iter(|| format_shortest(&decoded, &mut buf));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_big_shortest(b: &mut Bencher) {
|
||||
let decoded = decode_finite(f64::MAX);
|
||||
let mut buf = [0; MAX_SIG_DIGITS];
|
||||
b.iter(|| format_shortest(&decoded, &mut buf));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_small_exact_3(b: &mut Bencher) {
|
||||
let decoded = decode_finite(3.141592f64);
|
||||
let mut buf = [0; 3];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_big_exact_3(b: &mut Bencher) {
|
||||
let decoded = decode_finite(f64::MAX);
|
||||
let mut buf = [0; 3];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_small_exact_12(b: &mut Bencher) {
|
||||
let decoded = decode_finite(3.141592f64);
|
||||
let mut buf = [0; 12];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_big_exact_12(b: &mut Bencher) {
|
||||
let decoded = decode_finite(f64::MAX);
|
||||
let mut buf = [0; 12];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_small_exact_inf(b: &mut Bencher) {
|
||||
let decoded = decode_finite(3.141592f64);
|
||||
let mut buf = [0; 1024];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_big_exact_inf(b: &mut Bencher) {
|
||||
let decoded = decode_finite(f64::MAX);
|
||||
let mut buf = [0; 1024];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
mod flt2dec;
|
||||
mod dec2flt;
|
|
@ -0,0 +1,30 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use core::ops::*;
|
||||
use test::Bencher;
|
||||
|
||||
// Overhead of dtors
|
||||
|
||||
struct HasDtor {
|
||||
_x: isize
|
||||
}
|
||||
|
||||
impl Drop for HasDtor {
|
||||
fn drop(&mut self) {
|
||||
}
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn alloc_obj_with_dtor(b: &mut Bencher) {
|
||||
b.iter(|| {
|
||||
HasDtor { _x : 10 };
|
||||
})
|
||||
}
|
|
@ -7,9 +7,8 @@
|
|||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use core::any::*;
|
||||
use test::Bencher;
|
||||
use test;
|
||||
|
||||
#[derive(PartialEq, Debug)]
|
||||
struct Test;
|
||||
|
@ -124,13 +123,3 @@ fn any_unsized() {
|
|||
fn is_any<T: Any + ?Sized>() {}
|
||||
is_any::<[i32]>();
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_downcast_ref(b: &mut Bencher) {
|
||||
b.iter(|| {
|
||||
let mut x = 0;
|
||||
let mut y = &mut x as &mut Any;
|
||||
test::black_box(&mut y);
|
||||
test::black_box(y.downcast_ref::<isize>() == Some(&0));
|
||||
});
|
||||
}
|
||||
|
|
|
@ -10,8 +10,6 @@
|
|||
|
||||
#![allow(deprecated)]
|
||||
|
||||
use test::{Bencher, black_box};
|
||||
|
||||
use core::hash::{Hash, Hasher};
|
||||
use core::hash::{SipHasher, SipHasher13, SipHasher24};
|
||||
use core::{slice, mem};
|
||||
|
@ -58,11 +56,6 @@ fn hash<T: Hash>(x: &T) -> u64 {
|
|||
hash_with(SipHasher::new(), x)
|
||||
}
|
||||
|
||||
fn hash_bytes<H: Hasher>(mut s: H, x: &[u8]) -> u64 {
|
||||
Hasher::write(&mut s, x);
|
||||
s.finish()
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[allow(unused_must_use)]
|
||||
fn test_siphash_1_3() {
|
||||
|
@ -347,126 +340,3 @@ fn test_write_short_works() {
|
|||
h2.write(&[0xFFu8, 0x01u8]);
|
||||
assert_eq!(h1.finish(), h2.finish());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_str_under_8_bytes(b: &mut Bencher) {
|
||||
let s = "foo";
|
||||
b.iter(|| {
|
||||
assert_eq!(hash(&s), 16262950014981195938);
|
||||
})
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_str_of_8_bytes(b: &mut Bencher) {
|
||||
let s = "foobar78";
|
||||
b.iter(|| {
|
||||
assert_eq!(hash(&s), 4898293253460910787);
|
||||
})
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_str_over_8_bytes(b: &mut Bencher) {
|
||||
let s = "foobarbaz0";
|
||||
b.iter(|| {
|
||||
assert_eq!(hash(&s), 10581415515220175264);
|
||||
})
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_long_str(b: &mut Bencher) {
|
||||
let s = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor \
|
||||
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud \
|
||||
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute \
|
||||
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla \
|
||||
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui \
|
||||
officia deserunt mollit anim id est laborum.";
|
||||
b.iter(|| {
|
||||
assert_eq!(hash(&s), 17717065544121360093);
|
||||
})
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_u32(b: &mut Bencher) {
|
||||
let u = 162629500u32;
|
||||
let u = black_box(u);
|
||||
b.iter(|| {
|
||||
hash(&u)
|
||||
});
|
||||
b.bytes = 8;
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_u32_keyed(b: &mut Bencher) {
|
||||
let u = 162629500u32;
|
||||
let u = black_box(u);
|
||||
let k1 = black_box(0x1);
|
||||
let k2 = black_box(0x2);
|
||||
b.iter(|| {
|
||||
hash_with(SipHasher::new_with_keys(k1, k2), &u)
|
||||
});
|
||||
b.bytes = 8;
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_u64(b: &mut Bencher) {
|
||||
let u = 16262950014981195938u64;
|
||||
let u = black_box(u);
|
||||
b.iter(|| {
|
||||
hash(&u)
|
||||
});
|
||||
b.bytes = 8;
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_bytes_4(b: &mut Bencher) {
|
||||
let data = black_box([b' '; 4]);
|
||||
b.iter(|| {
|
||||
hash_bytes(SipHasher::default(), &data)
|
||||
});
|
||||
b.bytes = 4;
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_bytes_7(b: &mut Bencher) {
|
||||
let data = black_box([b' '; 7]);
|
||||
b.iter(|| {
|
||||
hash_bytes(SipHasher::default(), &data)
|
||||
});
|
||||
b.bytes = 7;
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_bytes_8(b: &mut Bencher) {
|
||||
let data = black_box([b' '; 8]);
|
||||
b.iter(|| {
|
||||
hash_bytes(SipHasher::default(), &data)
|
||||
});
|
||||
b.bytes = 8;
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_bytes_a_16(b: &mut Bencher) {
|
||||
let data = black_box([b' '; 16]);
|
||||
b.iter(|| {
|
||||
hash_bytes(SipHasher::default(), &data)
|
||||
});
|
||||
b.bytes = 16;
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_bytes_b_32(b: &mut Bencher) {
|
||||
let data = black_box([b' '; 32]);
|
||||
b.iter(|| {
|
||||
hash_bytes(SipHasher::default(), &data)
|
||||
});
|
||||
b.bytes = 32;
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_bytes_c_128(b: &mut Bencher) {
|
||||
let data = black_box([b' '; 128]);
|
||||
b.iter(|| {
|
||||
hash_bytes(SipHasher::default(), &data)
|
||||
});
|
||||
b.bytes = 128;
|
||||
}
|
||||
|
|
|
@ -12,9 +12,6 @@ use core::iter::*;
|
|||
use core::{i8, i16, isize};
|
||||
use core::usize;
|
||||
|
||||
use test::Bencher;
|
||||
use test::black_box;
|
||||
|
||||
#[test]
|
||||
fn test_lt() {
|
||||
let empty: [isize; 0] = [];
|
||||
|
@ -1085,91 +1082,3 @@ fn test_chain_fold() {
|
|||
assert_eq!(&[2, 3, 1, 2, 0], &result[..]);
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_rposition(b: &mut Bencher) {
|
||||
let it: Vec<usize> = (0..300).collect();
|
||||
b.iter(|| {
|
||||
it.iter().rposition(|&x| x <= 150);
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_skip_while(b: &mut Bencher) {
|
||||
b.iter(|| {
|
||||
let it = 0..100;
|
||||
let mut sum = 0;
|
||||
it.skip_while(|&x| { sum += x; sum < 4000 }).all(|_| true);
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_multiple_take(b: &mut Bencher) {
|
||||
let mut it = (0..42).cycle();
|
||||
b.iter(|| {
|
||||
let n = it.next().unwrap();
|
||||
for _ in 0..n {
|
||||
it.clone().take(it.next().unwrap()).all(|_| true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
fn scatter(x: i32) -> i32 { (x * 31) % 127 }
|
||||
|
||||
#[bench]
|
||||
fn bench_max_by_key(b: &mut Bencher) {
|
||||
b.iter(|| {
|
||||
let it = 0..100;
|
||||
it.max_by_key(|&x| scatter(x))
|
||||
})
|
||||
}
|
||||
|
||||
// http://www.reddit.com/r/rust/comments/31syce/using_iterators_to_find_the_index_of_the_min_or/
|
||||
#[bench]
|
||||
fn bench_max_by_key2(b: &mut Bencher) {
|
||||
fn max_index_iter(array: &[i32]) -> usize {
|
||||
array.iter().enumerate().max_by_key(|&(_, item)| item).unwrap().0
|
||||
}
|
||||
|
||||
let mut data = vec![0; 1638];
|
||||
data[514] = 9999;
|
||||
|
||||
b.iter(|| max_index_iter(&data));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_max(b: &mut Bencher) {
|
||||
b.iter(|| {
|
||||
let it = 0..100;
|
||||
it.map(scatter).max()
|
||||
})
|
||||
}
|
||||
|
||||
pub fn copy_zip(xs: &[u8], ys: &mut [u8]) {
|
||||
for (a, b) in ys.iter_mut().zip(xs) {
|
||||
*a = *b;
|
||||
}
|
||||
}
|
||||
|
||||
pub fn add_zip(xs: &[f32], ys: &mut [f32]) {
|
||||
for (a, b) in ys.iter_mut().zip(xs) {
|
||||
*a += *b;
|
||||
}
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_zip_copy(b: &mut Bencher) {
|
||||
let source = vec![0u8; 16 * 1024];
|
||||
let mut dst = black_box(vec![0u8; 16 * 1024]);
|
||||
b.iter(|| {
|
||||
copy_zip(&source, &mut dst)
|
||||
})
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_zip_add(b: &mut Bencher) {
|
||||
let source = vec![1.; 16 * 1024];
|
||||
let mut dst = vec![0.; 16 * 1024];
|
||||
b.iter(|| {
|
||||
add_zip(&source, &mut dst)
|
||||
});
|
||||
}
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use core::mem::*;
|
||||
use test::Bencher;
|
||||
|
||||
#[test]
|
||||
fn size_of_basic() {
|
||||
|
@ -121,61 +121,3 @@ fn test_transmute() {
|
|||
}
|
||||
}
|
||||
|
||||
// FIXME #13642 (these benchmarks should be in another place)
|
||||
/// Completely miscellaneous language-construct benchmarks.
|
||||
// Static/dynamic method dispatch
|
||||
|
||||
struct Struct {
|
||||
field: isize
|
||||
}
|
||||
|
||||
trait Trait {
|
||||
fn method(&self) -> isize;
|
||||
}
|
||||
|
||||
impl Trait for Struct {
|
||||
fn method(&self) -> isize {
|
||||
self.field
|
||||
}
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn trait_vtable_method_call(b: &mut Bencher) {
|
||||
let s = Struct { field: 10 };
|
||||
let t = &s as &Trait;
|
||||
b.iter(|| {
|
||||
t.method()
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn trait_static_method_call(b: &mut Bencher) {
|
||||
let s = Struct { field: 10 };
|
||||
b.iter(|| {
|
||||
s.method()
|
||||
});
|
||||
}
|
||||
|
||||
// Overhead of various match forms
|
||||
|
||||
#[bench]
|
||||
fn match_option_some(b: &mut Bencher) {
|
||||
let x = Some(10);
|
||||
b.iter(|| {
|
||||
match x {
|
||||
Some(y) => y,
|
||||
None => 11
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn match_vec_pattern(b: &mut Bencher) {
|
||||
let x = [1,2,3,4,5,6];
|
||||
b.iter(|| {
|
||||
match x {
|
||||
[1,2,3,..] => 10,
|
||||
_ => 11,
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
#![allow(overflowing_literals)]
|
||||
|
||||
use std::{i64, f32, f64};
|
||||
use test;
|
||||
|
||||
mod parse;
|
||||
mod rawfp;
|
||||
|
@ -144,59 +143,3 @@ fn borderline_overflow() {
|
|||
// It makes no sense to enshrine that in a test, the important part is that it doesn't panic.
|
||||
let _ = s.parse::<f64>();
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_0(b: &mut test::Bencher) {
|
||||
b.iter(|| "0.0".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_42(b: &mut test::Bencher) {
|
||||
b.iter(|| "42".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_huge_int(b: &mut test::Bencher) {
|
||||
// 2^128 - 1
|
||||
b.iter(|| "170141183460469231731687303715884105727".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_short_decimal(b: &mut test::Bencher) {
|
||||
b.iter(|| "1234.5678".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_pi_long(b: &mut test::Bencher) {
|
||||
b.iter(|| "3.14159265358979323846264338327950288".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_pi_short(b: &mut test::Bencher) {
|
||||
b.iter(|| "3.141592653589793".parse::<f64>())
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_1e150(b: &mut test::Bencher) {
|
||||
b.iter(|| "1e150".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_long_decimal_and_exp(b: &mut test::Bencher) {
|
||||
b.iter(|| "727501488517303786137132964064381141071e-123".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_min_subnormal(b: &mut test::Bencher) {
|
||||
b.iter(|| "5e-324".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_min_normal(b: &mut test::Bencher) {
|
||||
b.iter(|| "2.2250738585072014e-308".parse::<f64>());
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_max(b: &mut test::Bencher) {
|
||||
b.iter(|| "1.7976931348623157e308".parse::<f64>());
|
||||
}
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
// except according to those terms.
|
||||
|
||||
use std::prelude::v1::*;
|
||||
use std::{i16, f64};
|
||||
use super::super::*;
|
||||
use core::num::bignum::Big32x40 as Big;
|
||||
use core::num::flt2dec::strategy::dragon::*;
|
||||
|
@ -53,62 +52,6 @@ fn exact_sanity_test() {
|
|||
f32_exact_sanity_test(format_exact);
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_small_shortest(b: &mut Bencher) {
|
||||
let decoded = decode_finite(3.141592f64);
|
||||
let mut buf = [0; MAX_SIG_DIGITS];
|
||||
b.iter(|| format_shortest(&decoded, &mut buf));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_big_shortest(b: &mut Bencher) {
|
||||
let decoded = decode_finite(f64::MAX);
|
||||
let mut buf = [0; MAX_SIG_DIGITS];
|
||||
b.iter(|| format_shortest(&decoded, &mut buf));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_small_exact_3(b: &mut Bencher) {
|
||||
let decoded = decode_finite(3.141592f64);
|
||||
let mut buf = [0; 3];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_big_exact_3(b: &mut Bencher) {
|
||||
let decoded = decode_finite(f64::MAX);
|
||||
let mut buf = [0; 3];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_small_exact_12(b: &mut Bencher) {
|
||||
let decoded = decode_finite(3.141592f64);
|
||||
let mut buf = [0; 12];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_big_exact_12(b: &mut Bencher) {
|
||||
let decoded = decode_finite(f64::MAX);
|
||||
let mut buf = [0; 12];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_small_exact_inf(b: &mut Bencher) {
|
||||
let decoded = decode_finite(3.141592f64);
|
||||
let mut buf = [0; 1024];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_big_exact_inf(b: &mut Bencher) {
|
||||
let decoded = decode_finite(f64::MAX);
|
||||
let mut buf = [0; 1024];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_to_shortest_str() {
|
||||
to_shortest_str_test(format_shortest);
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use std::{i16, f64};
|
||||
use std::i16;
|
||||
use super::super::*;
|
||||
use core::num::flt2dec::strategy::grisu::*;
|
||||
|
||||
|
@ -102,62 +102,6 @@ fn exact_f64_random_equivalence_test() {
|
|||
}
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_small_shortest(b: &mut Bencher) {
|
||||
let decoded = decode_finite(3.141592f64);
|
||||
let mut buf = [0; MAX_SIG_DIGITS];
|
||||
b.iter(|| format_shortest(&decoded, &mut buf));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_big_shortest(b: &mut Bencher) {
|
||||
let decoded = decode_finite(f64::MAX);
|
||||
let mut buf = [0; MAX_SIG_DIGITS];
|
||||
b.iter(|| format_shortest(&decoded, &mut buf));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_small_exact_3(b: &mut Bencher) {
|
||||
let decoded = decode_finite(3.141592f64);
|
||||
let mut buf = [0; 3];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_big_exact_3(b: &mut Bencher) {
|
||||
let decoded = decode_finite(f64::MAX);
|
||||
let mut buf = [0; 3];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_small_exact_12(b: &mut Bencher) {
|
||||
let decoded = decode_finite(3.141592f64);
|
||||
let mut buf = [0; 12];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_big_exact_12(b: &mut Bencher) {
|
||||
let decoded = decode_finite(f64::MAX);
|
||||
let mut buf = [0; 12];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_small_exact_inf(b: &mut Bencher) {
|
||||
let decoded = decode_finite(3.141592f64);
|
||||
let mut buf = [0; 1024];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_big_exact_inf(b: &mut Bencher) {
|
||||
let decoded = decode_finite(f64::MAX);
|
||||
let mut buf = [0; 1024];
|
||||
b.iter(|| format_exact(&decoded, &mut buf, i16::MIN));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_to_shortest_str() {
|
||||
to_shortest_str_test(format_shortest);
|
||||
|
|
|
@ -8,27 +8,8 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use test::Bencher;
|
||||
use core::ops::{Range, RangeFull, RangeFrom, RangeTo};
|
||||
|
||||
// Overhead of dtors
|
||||
|
||||
struct HasDtor {
|
||||
_x: isize
|
||||
}
|
||||
|
||||
impl Drop for HasDtor {
|
||||
fn drop(&mut self) {
|
||||
}
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn alloc_obj_with_dtor(b: &mut Bencher) {
|
||||
b.iter(|| {
|
||||
HasDtor { _x : 10 };
|
||||
})
|
||||
}
|
||||
|
||||
// Test the Range structs without the syntactic sugar.
|
||||
|
||||
#[test]
|
||||
|
|
Loading…
Reference in New Issue