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, vec_push_all, duration, duration_span)]
17 use std::__rand::{thread_rng, Rng};
19 use std::time::Duration;
22 let argv: Vec<String> = env::args().collect();
26 (maybe_run_test(&argv,
27 stringify!($id).to_string(),
35 bench!(is_utf8_ascii);
36 bench!(is_utf8_multibyte);
39 fn maybe_run_test<F>(argv: &[String], name: String, test: F) where F: FnOnce() {
40 let mut run_test = false;
42 if env::var_os("RUST_BENCH").is_some() {
44 } else if !argv.is_empty() {
45 run_test = argv.iter().any(|x| x == &"all".to_string()) || argv.iter().any(|x| x == &name)
52 let dur = Duration::span(test);
54 println!("{}:\t\t{:?}", name, dur);
58 let mut v1 = vec![1; 30000];
59 let mut v2 = Vec::new();
61 while !v1.is_empty() {
62 v2.push(v1.remove(0));
67 let mut r = thread_rng();
69 let mut v = Vec::new();
72 let rv = vec![i; r.gen_range(0, i + 1)];
76 let mut rv = rv.clone();
85 let mut r = thread_rng();
87 let mut v = Vec::new();
90 let rv = vec![i; r.gen_range(0, i + 1)];
92 let mut t = v.clone();
97 let mut t = rv.clone();
106 let mut r = thread_rng();
108 let mut v = Vec::new();
110 let mut rv = vec![i; r.gen_range(0, i + 1)];
115 swap(&mut v, &mut rv);
122 let mut v : Vec<u8> = Vec::new();
125 if str::from_utf8(&v).is_err() {
126 panic!("from_utf8 panicked");
131 fn is_utf8_multibyte() {
133 let mut v : Vec<u8> = Vec::new();
135 v.push_all(s.as_bytes());
136 if str::from_utf8(&v).is_err() {
137 panic!("from_utf8 panicked");