Skip to content

Instantly share code, notes, and snippets.

@adam-hanna
Last active March 8, 2019 00:49
Show Gist options
  • Save adam-hanna/5e303bcfcb24606665da587b83af6bdd to your computer and use it in GitHub Desktop.
Save adam-hanna/5e303bcfcb24606665da587b83af6bdd to your computer and use it in GitHub Desktop.

Revisions

  1. adam-hanna revised this gist Mar 8, 2019. 1 changed file with 5 additions and 4 deletions.
    9 changes: 5 additions & 4 deletions lib.rs
    Original file line number Diff line number Diff line change
    @@ -4,11 +4,12 @@ YMMV
    Finished release [optimized] target(s) in 0.78s
    Running /home/adam/apps/rust-bench-test/target/release/deps/rust_bench_test-5e0b4fbe4a887c9a
    running 2 tests
    test bench_gather_borrowed_foos ... bench: 106 ns/iter (+/- 9)
    test bench_gather_owned_foos ... bench: 121 ns/iter (+/- 85)
    running 3 tests
    test bench_gather_borrowed_foos ... bench: 291 ns/iter (+/- 18)
    test bench_gather_owned_foos ... bench: 333 ns/iter (+/- 9)
    test bench_passed_borrowed_foos ... bench: 283 ns/iter (+/- 17)
    test result: ok. 0 passed; 0 failed; 0 ignored; 2 measured; 0 filtered out
    test result: ok. 0 passed; 0 failed; 0 ignored; 3 measured; 0 filtered out
    */

    #![feature(test)]
  2. adam-hanna revised this gist Mar 7, 2019. 1 changed file with 27 additions and 4 deletions.
    31 changes: 27 additions & 4 deletions lib.rs
    Original file line number Diff line number Diff line change
    @@ -33,18 +33,26 @@ pub fn gather_owned_foos<'a>(data: Vec<Vec<&'a Foo>>) -> Vec<Vec<&'a Foo>> {
    return ret
    }

    pub fn gather_borrowed_foos<'a>(data: &'a Vec<Vec<&'a Foo>>) -> Vec<&'a Vec<&'a Foo>> {
    pub fn gather_borrowed_foos<'a>(data: &'a Vec<&'a Vec<&'a Foo>>) -> Vec<&'a Vec<&'a Foo>> {
    let mut ret: Vec<&Vec<&Foo>> = Vec::new();

    for i in 0..data.len() {
    if meets_requirements(&data[i]) {
    ret.push(&data[i]);
    if meets_requirements(data[i]) {
    ret.push(data[i]);
    }
    }

    return ret
    }

    pub fn gather_passed_foos<'a>(data: &'a Vec<&'a Vec<&'a Foo>>, ret: &'a mut Vec<&'a Vec<&'a Foo>>) {
    for i in 0..data.len() {
    if meets_requirements(data[i]) {
    ret.push(data[i]);
    }
    }
    }

    fn meets_requirements<'a>(_data: &'a Vec<&'a Foo>) -> bool {
    true
    }
    @@ -71,8 +79,23 @@ fn bench_gather_borrowed_foos(b: &mut Bencher) {
    };
    let v1 = vec![&foo, &foo, &foo];
    let v2 = vec![&foo, &foo];
    let data = vec![v1, v2];
    let data = vec![&v1, &v2];

    gather_borrowed_foos(&data);
    });
    }

    #[bench]
    fn bench_passed_borrowed_foos(b: &mut Bencher) {
    b.iter(|| {
    let foo = Foo{
    bar: String::from("bar"),
    };
    let v1 = vec![&foo, &foo, &foo];
    let v2 = vec![&foo, &foo];
    let data = vec![&v1, &v2];
    let mut ret: Vec<&Vec<&Foo>> = Vec::new();

    gather_passed_foos(&data, &mut ret);
    });
    }
  3. adam-hanna revised this gist Mar 7, 2019. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions lib.rs
    Original file line number Diff line number Diff line change
    @@ -72,6 +72,7 @@ fn bench_gather_borrowed_foos(b: &mut Bencher) {
    let v1 = vec![&foo, &foo, &foo];
    let v2 = vec![&foo, &foo];
    let data = vec![v1, v2];

    gather_borrowed_foos(&data);
    });
    }
  4. adam-hanna revised this gist Mar 7, 2019. 1 changed file with 7 additions and 8 deletions.
    15 changes: 7 additions & 8 deletions lib.rs
    Original file line number Diff line number Diff line change
    @@ -5,7 +5,7 @@ YMMV
    Running /home/adam/apps/rust-bench-test/target/release/deps/rust_bench_test-5e0b4fbe4a887c9a
    running 2 tests
    test bench_gather_borrowed_foos ... bench: 32 ns/iter (+/- 2)
    test bench_gather_borrowed_foos ... bench: 106 ns/iter (+/- 9)
    test bench_gather_owned_foos ... bench: 121 ns/iter (+/- 85)
    test result: ok. 0 passed; 0 failed; 0 ignored; 2 measured; 0 filtered out
    @@ -65,14 +65,13 @@ fn bench_gather_owned_foos(b: &mut Bencher) {

    #[bench]
    fn bench_gather_borrowed_foos(b: &mut Bencher) {
    let foo = Foo{
    bar: String::from("bar"),
    };
    let v1 = vec![&foo, &foo, &foo];
    let v2 = vec![&foo, &foo];
    let data = vec![v1, v2];

    b.iter(|| {
    let foo = Foo{
    bar: String::from("bar"),
    };
    let v1 = vec![&foo, &foo, &foo];
    let v2 = vec![&foo, &foo];
    let data = vec![v1, v2];
    gather_borrowed_foos(&data);
    });
    }
  5. adam-hanna created this gist Mar 6, 2019.
    78 changes: 78 additions & 0 deletions lib.rs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,78 @@
    /*
    YMMV
    Compiling rust-bench-test v0.1.0 (/home/adam/apps/rust-bench-test)
    Finished release [optimized] target(s) in 0.78s
    Running /home/adam/apps/rust-bench-test/target/release/deps/rust_bench_test-5e0b4fbe4a887c9a
    running 2 tests
    test bench_gather_borrowed_foos ... bench: 32 ns/iter (+/- 2)
    test bench_gather_owned_foos ... bench: 121 ns/iter (+/- 85)
    test result: ok. 0 passed; 0 failed; 0 ignored; 2 measured; 0 filtered out
    */

    #![feature(test)]

    extern crate test;
    use test::Bencher;

    #[derive(Debug)]
    pub struct Foo {
    bar: String,
    }

    pub fn gather_owned_foos<'a>(data: Vec<Vec<&'a Foo>>) -> Vec<Vec<&'a Foo>> {
    let mut ret: Vec<Vec<&Foo>> = Vec::new();

    for v in data {
    if meets_requirements(&v) {
    ret.push(v);
    }
    }

    return ret
    }

    pub fn gather_borrowed_foos<'a>(data: &'a Vec<Vec<&'a Foo>>) -> Vec<&'a Vec<&'a Foo>> {
    let mut ret: Vec<&Vec<&Foo>> = Vec::new();

    for i in 0..data.len() {
    if meets_requirements(&data[i]) {
    ret.push(&data[i]);
    }
    }

    return ret
    }

    fn meets_requirements<'a>(_data: &'a Vec<&'a Foo>) -> bool {
    true
    }

    #[bench]
    fn bench_gather_owned_foos(b: &mut Bencher) {
    b.iter(|| {
    let foo = Foo{
    bar: String::from("bar"),
    };
    let v1 = vec![&foo, &foo, &foo];
    let v2 = vec![&foo, &foo];
    let data = vec![v1, v2];

    gather_owned_foos(data);
    });
    }

    #[bench]
    fn bench_gather_borrowed_foos(b: &mut Bencher) {
    let foo = Foo{
    bar: String::from("bar"),
    };
    let v1 = vec![&foo, &foo, &foo];
    let v2 = vec![&foo, &foo];
    let data = vec![v1, v2];

    b.iter(|| {
    gather_borrowed_foos(&data);
    });
    }