Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extern crate itertools;
- extern crate rand;
- use rand::Rng;
- use itertools::Itertools;
- use std::time::Instant;
- fn do_all_equal(v: &Vec<i32>) -> bool {
- v.iter().all_equal()
- }
- fn do_all_equal_for(v: &Vec<i32>) -> bool {
- for i in v {
- if i != &v[0] {
- return false;
- }
- }
- true
- }
- fn do_any_diff(v: &Vec<i32>) -> bool {
- v.iter().any(|x| x != &v[0])
- }
- fn main() {
- //let mut v = vec![0; 5_000_000];
- //v.extend(vec![1; 5_000_000]);
- let mut rng = rand::thread_rng();
- let mut v: Vec<i32> = (0..5_000_000).map(|_| rng.gen_range(1, 2)).collect();
- v.extend((0..5_000_000).map(|_| rng.gen_range(2, 3)) .collect::<Vec<i32>>());
- let mut start = Instant::now();
- do_all_equal(&v);
- let mut elapsed = start.elapsed();
- println!( "all_equal: {} msecs", elapsed.as_secs() * 1_000 + (elapsed.subsec_nanos() / 1_000_000) as u64);
- start = Instant::now();
- do_any_diff(&v);
- elapsed = start.elapsed();
- println!( "any_diff: {} msecs", elapsed.as_secs() * 1_000 + (elapsed.subsec_nanos() / 1_000_000) as u64);
- start = Instant::now();
- do_all_equal_for(&v);
- elapsed = start.elapsed();
- println!( "for loop: {} msecs", elapsed.as_secs() * 1_000 + (elapsed.subsec_nanos() / 1_000_000) as u64);
- }
Add Comment
Please, Sign In to add comment