Advertisement
Guest User

Untitled

a guest
May 21st, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.76 KB | None | 0 0
  1. #[macro_use]
  2. extern crate criterion;
  3. extern crate linked_list;
  4. extern crate rand;
  5.  
  6. use criterion::Criterion;
  7. use linked_list::LinkedList;
  8. use rand::Rng;
  9.  
  10. fn insert_vect(input: &Vec<i32>) -> Vec<&i32> {
  11.     let mut output = Vec::new();
  12.  
  13.     for n in input {
  14.         let mut pos = None;
  15.         for (i, item) in output.iter_mut().enumerate() {
  16.             if *item > n {
  17.                 pos = Some(i);
  18.                 break;
  19.             }
  20.         }
  21.  
  22.         match pos {
  23.             Some(position) => output.insert(position, n),
  24.             None => output.push(n),
  25.         }
  26.     }
  27.  
  28.     return output;
  29. }
  30.  
  31. fn insert_list(input: &Vec<i32>) -> LinkedList<&i32> {
  32.     let mut output: LinkedList<&i32> = LinkedList::new();
  33.  
  34.     for n in input {
  35.         let mut cursor = output.cursor();
  36.  
  37.         loop {
  38.             match cursor.peek_next() {
  39.                 Some(value) => if *value > n {
  40.                     break;
  41.                 },
  42.                 None => break,
  43.             }
  44.             cursor.next();
  45.         }
  46.         cursor.insert(n);
  47.     }
  48.  
  49.     return output;
  50. }
  51.  
  52. fn random(size: i32) -> Vec<i32> {
  53.     let mut rng = rand::thread_rng();
  54.     let numbers = (0..size).map(|_| rng.gen::<i32>()).collect();
  55.     return numbers;
  56. }
  57.  
  58. fn bench(c: &mut Criterion, size: i32) {
  59.     let vec1 = random(size);
  60.     let vec2 = vec1.to_vec();
  61.     let vstr = format!("vect {}", size);
  62.     let lstr = format!("list {}", size);
  63.  
  64.     c.bench_function(&vstr, move |b| b.iter(|| insert_vect(&vec1)));
  65.     c.bench_function(&lstr, move |b| b.iter(|| insert_list(&vec2)));
  66. }
  67.  
  68. fn criterion_benchmark(c: &mut Criterion) {
  69.     for n in vec!(10, 100, 1000) {
  70.         bench(c, n);
  71.     }
  72. }
  73.  
  74. criterion_group!(benches, criterion_benchmark);
  75. criterion_main!(benches);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement