Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #![feature(test)]
- extern crate test;
- use test::Bencher;
- pub fn bounds() {
- let mut pos = 0;
- let data = vec![1,2,3,4,5,6,7,8,9,10];
- loop {
- let stuff = data[pos];
- if stuff == 10 { break }
- pos += 3;
- while pos >= data.len() { pos -= data.len() }
- }
- }
- pub fn nobounds() {
- let mut pos = 0;
- let data = vec![1,2,3,4,5,6,7,8,9,10];
- loop {
- while pos >= data.len() { pos -= data.len() }
- let stuff = data[pos];
- if stuff == 10 { break }
- pos += 3;
- }
- }
- pub fn noboundsunsafe() {
- let mut pos = 0;
- let data = vec![1,2,3,4,5,6,7,8,9,10];
- loop {
- while pos >= data.len() { pos -= data.len() }
- let stuff = unsafe { *data.get_unchecked(pos) };
- if stuff == 10 { break }
- pos += 3;
- }
- }
- fn main() {
- println!("Hello, world!");
- }
- #[bench]
- fn bench_bounds(b: &mut Bencher) {
- b.iter(|| {
- bounds()
- });
- }
- #[bench]
- fn bench_nobounds(b: &mut Bencher) {
- b.iter(|| {
- nobounds()
- });
- }
- #[bench]
- fn bench_noboundsunsafe(b: &mut Bencher) {
- b.iter(|| {
- noboundsunsafe()
- });
- }
- /*
- running 3 tests
- test bench_bounds ... bench: 85 ns/iter (+/- 4)
- test bench_nobounds ... bench: 76 ns/iter (+/- 6)
- test bench_noboundsunsafe ... bench: 77 ns/iter (+/- 11)
- test result: ok. 0 passed; 0 failed; 0 ignored; 3 measured; 0 filtered out
- */
Add Comment
Please, Sign In to add comment