]>
git.proxmox.com Git - rustc.git/blob - src/test/bench/core-std.rs
1 // Copyright 2012 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
11 // Microbenchmarks for various functions in std and extra
13 #![feature(rand, collections, std_misc, duration, duration_span)]
15 use std
::iter
::repeat
;
18 use std
::__rand
::{thread_rng, Rng}
;
20 use std
::time
::Duration
;
23 let argv
: Vec
<String
> = env
::args().collect();
27 (maybe_run_test(&argv
,
28 stringify
!($id
).to_string(),
36 bench
!(is_utf8_ascii
);
37 bench
!(is_utf8_multibyte
);
40 fn maybe_run_test
<F
>(argv
: &[String
], name
: String
, test
: F
) where F
: FnOnce() {
41 let mut run_test
= false;
43 if env
::var_os("RUST_BENCH").is_some() {
45 } else if !argv
.is_empty() {
46 run_test
= argv
.iter().any(|x
| x
== &"all".to_string()) || argv
.iter().any(|x
| x
== &name
)
53 let dur
= Duration
::span(test
);
55 println
!("{}:\t\t{}", name
, dur
);
59 let mut v1
= repeat(1).take(30000).collect
::<Vec
<_
>>();
60 let mut v2
= Vec
::new();
62 while !v1
.is_empty() {
63 v2
.push(v1
.remove(0));
68 let mut r
= thread_rng();
70 let mut v
= Vec
::new();
73 let rv
= repeat(i
).take(r
.gen_range(0, i
+ 1)).collect
::<Vec
<_
>>();
75 v
.extend(rv
.into_iter());
77 let mut rv
= rv
.clone();
86 let mut r
= thread_rng();
88 let mut v
= Vec
::new();
91 let rv
= repeat(i
).take(r
.gen_range(0, i
+ 1)).collect
::<Vec
<_
>>();
93 let mut t
= v
.clone();
98 let mut t
= rv
.clone();
107 let mut r
= thread_rng();
109 let mut v
= Vec
::new();
111 let mut rv
= repeat(i
).take(r
.gen_range(0, i
+ 1)).collect
::<Vec
<_
>>();
116 swap(&mut v
, &mut rv
);
123 let mut v
: Vec
<u8> = Vec
::new();
126 if str::from_utf8(&v
).is_err() {
127 panic
!("from_utf8 panicked");
132 fn is_utf8_multibyte() {
134 let mut v
: Vec
<u8> = Vec
::new();
136 v
.push_all(s
.as_bytes());
137 if str::from_utf8(&v
).is_err() {
138 panic
!("from_utf8 panicked");