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 // ignore-lexer-test FIXME #15679
12 // Microbenchmarks for various functions in std and extra
14 #![feature(macro_rules)]
15 #![feature(unboxed_closures)]
18 use std::iter::repeat;
24 use std::time::Duration;
28 let argv = os::args();
29 let _tests = argv.slice(1, argv.len());
33 (maybe_run_test(argv.as_slice(),
34 stringify!($id).to_string(),
42 bench!(is_utf8_ascii);
43 bench!(is_utf8_multibyte);
46 fn maybe_run_test<F>(argv: &[String], name: String, test: F) where F: FnOnce() {
47 let mut run_test = false;
49 if os::getenv("RUST_BENCH").is_some() {
51 } else if argv.len() > 0 {
52 run_test = argv.iter().any(|x| x == &"all".to_string()) || argv.iter().any(|x| x == &name)
59 let dur = Duration::span(test);
61 println!("{}:\t\t{} ms", name, dur.num_milliseconds());
65 let mut v1 = repeat(1i).take(30000).collect::<Vec<_>>();
66 let mut v2 = Vec::new();
69 v2.push(v1.remove(0));
74 use std::io::BufferedReader;
76 let mut path = Path::new(env!("CFG_SRC_DIR"));
77 path.push("src/test/bench/shootout-k-nucleotide.data");
79 for _ in range(0u, 3) {
80 let mut reader = BufferedReader::new(File::open(&path).unwrap());
81 for _line in reader.lines() {
87 let mut r = rand::thread_rng();
89 let mut v = Vec::new();
92 let rv = repeat(i).take(r.gen_range(0u, i + 1)).collect::<Vec<_>>();
94 v.extend(rv.into_iter());
96 let mut rv = rv.clone();
97 rv.push_all(v.as_slice());
105 let mut r = rand::thread_rng();
107 let mut v = Vec::new();
110 let rv = repeat(i).take(r.gen_range(0u, i + 1)).collect::<Vec<_>>();
112 let mut t = v.clone();
113 t.push_all(rv.as_slice());
117 let mut t = rv.clone();
118 t.push_all(v.as_slice());
126 let mut r = rand::thread_rng();
128 let mut v = Vec::new();
129 for i in range(0u, 1500) {
130 let mut rv = repeat(i).take(r.gen_range(0u, i + 1)).collect::<Vec<_>>();
132 v.push_all(rv.as_slice());
135 swap(&mut v, &mut rv);
136 v.push_all(rv.as_slice());
142 let mut v : Vec<u8> = Vec::new();
143 for _ in range(0u, 20000) {
145 if str::from_utf8(v.as_slice()).is_err() {
146 panic!("from_utf8 panicked");
151 fn is_utf8_multibyte() {
153 let mut v : Vec<u8> = Vec::new();
154 for _ in range(0u, 5000) {
155 v.push_all(s.as_bytes());
156 if str::from_utf8(v.as_slice()).is_err() {
157 panic!("from_utf8 panicked");