]> git.proxmox.com Git - rustc.git/blame - src/test/bench/core-std.rs
Imported Upstream version 1.0.0~beta
[rustc.git] / src / test / bench / core-std.rs
CommitLineData
223e47cc
LB
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.
4//
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.
10
1a4d82fc 11// ignore-lexer-test FIXME #15679
970d7e83 12// Microbenchmarks for various functions in std and extra
223e47cc 13
c34b1796 14#![feature(unboxed_closures, rand, old_io, old_path, std_misc, collections)]
223e47cc 15
c34b1796
AL
16use std::old_io::*;
17use std::old_path::{Path, GenericPath};
1a4d82fc
JJ
18use std::iter::repeat;
19use std::mem::swap;
85aaf69f 20use std::env;
1a4d82fc 21use std::rand::Rng;
970d7e83 22use std::rand;
1a4d82fc
JJ
23use std::str;
24use std::time::Duration;
970d7e83 25use std::vec;
223e47cc 26
223e47cc 27fn main() {
85aaf69f 28 let argv: Vec<String> = env::args().collect();
1a4d82fc
JJ
29
30 macro_rules! bench {
31 ($id:ident) =>
85aaf69f 32 (maybe_run_test(&argv,
1a4d82fc
JJ
33 stringify!($id).to_string(),
34 $id))
35 }
223e47cc
LB
36
37 bench!(shift_push);
38 bench!(read_line);
39 bench!(vec_plus);
40 bench!(vec_append);
41 bench!(vec_push_all);
1a4d82fc
JJ
42 bench!(is_utf8_ascii);
43 bench!(is_utf8_multibyte);
223e47cc
LB
44}
45
1a4d82fc 46fn maybe_run_test<F>(argv: &[String], name: String, test: F) where F: FnOnce() {
223e47cc
LB
47 let mut run_test = false;
48
85aaf69f 49 if env::var_os("RUST_BENCH").is_some() {
970d7e83
LB
50 run_test = true
51 } else if argv.len() > 0 {
1a4d82fc 52 run_test = argv.iter().any(|x| x == &"all".to_string()) || argv.iter().any(|x| x == &name)
223e47cc
LB
53 }
54
970d7e83
LB
55 if !run_test {
56 return
57 }
223e47cc 58
1a4d82fc 59 let dur = Duration::span(test);
223e47cc 60
1a4d82fc 61 println!("{}:\t\t{} ms", name, dur.num_milliseconds());
223e47cc
LB
62}
63
64fn shift_push() {
85aaf69f 65 let mut v1 = repeat(1).take(30000).collect::<Vec<_>>();
1a4d82fc 66 let mut v2 = Vec::new();
223e47cc
LB
67
68 while v1.len() > 0 {
1a4d82fc 69 v2.push(v1.remove(0));
223e47cc
LB
70 }
71}
72
73fn read_line() {
85aaf69f 74 use std::old_io::BufferedReader;
223e47cc 75
1a4d82fc
JJ
76 let mut path = Path::new(env!("CFG_SRC_DIR"));
77 path.push("src/test/bench/shootout-k-nucleotide.data");
78
85aaf69f 79 for _ in 0..3 {
1a4d82fc
JJ
80 let mut reader = BufferedReader::new(File::open(&path).unwrap());
81 for _line in reader.lines() {
223e47cc
LB
82 }
83 }
84}
85
86fn vec_plus() {
1a4d82fc 87 let mut r = rand::thread_rng();
223e47cc 88
1a4d82fc 89 let mut v = Vec::new();
223e47cc
LB
90 let mut i = 0;
91 while i < 1500 {
85aaf69f 92 let rv = repeat(i).take(r.gen_range(0, i + 1)).collect::<Vec<_>>();
970d7e83 93 if r.gen() {
1a4d82fc 94 v.extend(rv.into_iter());
970d7e83 95 } else {
1a4d82fc 96 let mut rv = rv.clone();
85aaf69f 97 rv.push_all(&v);
1a4d82fc 98 v = rv;
223e47cc
LB
99 }
100 i += 1;
101 }
102}
103
104fn vec_append() {
1a4d82fc 105 let mut r = rand::thread_rng();
223e47cc 106
1a4d82fc 107 let mut v = Vec::new();
223e47cc
LB
108 let mut i = 0;
109 while i < 1500 {
85aaf69f 110 let rv = repeat(i).take(r.gen_range(0, i + 1)).collect::<Vec<_>>();
970d7e83 111 if r.gen() {
1a4d82fc 112 let mut t = v.clone();
85aaf69f 113 t.push_all(&rv);
1a4d82fc 114 v = t;
223e47cc
LB
115 }
116 else {
1a4d82fc 117 let mut t = rv.clone();
85aaf69f 118 t.push_all(&v);
1a4d82fc 119 v = t;
223e47cc
LB
120 }
121 i += 1;
122 }
123}
124
125fn vec_push_all() {
1a4d82fc 126 let mut r = rand::thread_rng();
223e47cc 127
1a4d82fc 128 let mut v = Vec::new();
85aaf69f
SL
129 for i in 0..1500 {
130 let mut rv = repeat(i).take(r.gen_range(0, i + 1)).collect::<Vec<_>>();
970d7e83 131 if r.gen() {
85aaf69f 132 v.push_all(&rv);
223e47cc
LB
133 }
134 else {
1a4d82fc 135 swap(&mut v, &mut rv);
85aaf69f 136 v.push_all(&rv);
1a4d82fc
JJ
137 }
138 }
139}
140
141fn is_utf8_ascii() {
142 let mut v : Vec<u8> = Vec::new();
85aaf69f 143 for _ in 0..20000 {
1a4d82fc 144 v.push('b' as u8);
85aaf69f 145 if str::from_utf8(&v).is_err() {
1a4d82fc
JJ
146 panic!("from_utf8 panicked");
147 }
148 }
149}
150
151fn is_utf8_multibyte() {
152 let s = "b¢€𤭢";
153 let mut v : Vec<u8> = Vec::new();
85aaf69f 154 for _ in 0..5000 {
1a4d82fc 155 v.push_all(s.as_bytes());
85aaf69f 156 if str::from_utf8(&v).is_err() {
1a4d82fc 157 panic!("from_utf8 panicked");
223e47cc
LB
158 }
159 }
160}