| // 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::iter::repeat; |
| use test::Bencher; |
| |
| #[bench] |
| fn bench_with_capacity(b: &mut Bencher) { |
| b.iter(|| String::with_capacity(100)); |
| } |
| |
| #[bench] |
| fn bench_push_str(b: &mut Bencher) { |
| let s = "ศไทย中华Việt Nam; Mary had a little lamb, Little lamb"; |
| b.iter(|| { |
| let mut r = String::new(); |
| r.push_str(s); |
| }); |
| } |
| |
| const REPETITIONS: u64 = 10_000; |
| |
| #[bench] |
| fn bench_push_str_one_byte(b: &mut Bencher) { |
| b.bytes = REPETITIONS; |
| b.iter(|| { |
| let mut r = String::new(); |
| for _ in 0..REPETITIONS { |
| r.push_str("a") |
| } |
| }); |
| } |
| |
| #[bench] |
| fn bench_push_char_one_byte(b: &mut Bencher) { |
| b.bytes = REPETITIONS; |
| b.iter(|| { |
| let mut r = String::new(); |
| for _ in 0..REPETITIONS { |
| r.push('a') |
| } |
| }); |
| } |
| |
| #[bench] |
| fn bench_push_char_two_bytes(b: &mut Bencher) { |
| b.bytes = REPETITIONS * 2; |
| b.iter(|| { |
| let mut r = String::new(); |
| for _ in 0..REPETITIONS { |
| r.push('â') |
| } |
| }); |
| } |
| |
| #[bench] |
| fn from_utf8_lossy_100_ascii(b: &mut Bencher) { |
| let s = b"Hello there, the quick brown fox jumped over the lazy dog! \ |
| Lorem ipsum dolor sit amet, consectetur. "; |
| |
| assert_eq!(100, s.len()); |
| b.iter(|| { |
| let _ = String::from_utf8_lossy(s); |
| }); |
| } |
| |
| #[bench] |
| fn from_utf8_lossy_100_multibyte(b: &mut Bencher) { |
| let s = "𐌀𐌖𐌋𐌄𐌑𐌉ปรدولة الكويتทศไทย中华𐍅𐌿𐌻𐍆𐌹𐌻𐌰".as_bytes(); |
| assert_eq!(100, s.len()); |
| b.iter(|| { |
| let _ = String::from_utf8_lossy(s); |
| }); |
| } |
| |
| #[bench] |
| fn from_utf8_lossy_invalid(b: &mut Bencher) { |
| let s = b"Hello\xC0\x80 There\xE6\x83 Goodbye"; |
| b.iter(|| { |
| let _ = String::from_utf8_lossy(s); |
| }); |
| } |
| |
| #[bench] |
| fn from_utf8_lossy_100_invalid(b: &mut Bencher) { |
| let s = repeat(0xf5).take(100).collect::<Vec<_>>(); |
| b.iter(|| { |
| let _ = String::from_utf8_lossy(&s); |
| }); |
| } |
| |
| #[bench] |
| fn bench_exact_size_shrink_to_fit(b: &mut Bencher) { |
| let s = "Hello there, the quick brown fox jumped over the lazy dog! \ |
| Lorem ipsum dolor sit amet, consectetur. "; |
| // ensure our operation produces an exact-size string before we benchmark it |
| let mut r = String::with_capacity(s.len()); |
| r.push_str(s); |
| assert_eq!(r.len(), r.capacity()); |
| b.iter(|| { |
| let mut r = String::with_capacity(s.len()); |
| r.push_str(s); |
| r.shrink_to_fit(); |
| r |
| }); |
| } |
| |
| #[bench] |
| fn bench_from_str(b: &mut Bencher) { |
| let s = "Hello there, the quick brown fox jumped over the lazy dog! \ |
| Lorem ipsum dolor sit amet, consectetur. "; |
| b.iter(|| String::from(s)) |
| } |
| |
| #[bench] |
| fn bench_from(b: &mut Bencher) { |
| let s = "Hello there, the quick brown fox jumped over the lazy dog! \ |
| Lorem ipsum dolor sit amet, consectetur. "; |
| b.iter(|| String::from(s)) |
| } |
| |
| #[bench] |
| fn bench_to_string(b: &mut Bencher) { |
| let s = "Hello there, the quick brown fox jumped over the lazy dog! \ |
| Lorem ipsum dolor sit amet, consectetur. "; |
| b.iter(|| s.to_string()) |
| } |