core-vec-append.rs 1.8 KB
Newer Older
N
Niko Matsakis 已提交
1 2 3 4 5 6 7 8
// A raw test of vector appending performance.

use std;
import dvec::{dvec, extensions};
import io::writer_util;

fn collect_raw(num: uint) -> [uint] {
    let mut result = [];
9
    for uint::range(0u, num) { |i|
E
Eric Holk 已提交
10
        vec::push(result, i);
N
Niko Matsakis 已提交
11 12 13 14 15 16
    }
    ret result;
}

fn collect_dvec(num: uint) -> [mut uint] {
    let result = dvec();
17
    for uint::range(0u, num) { |i|
N
Niko Matsakis 已提交
18 19 20 21 22 23
        result.push(i);
    }
    ret dvec::unwrap(result);
}

fn main(args: [str]) {
24
    let args = if os::getenv("RUST_BENCH").is_some() {
25
        ["", "50000000"]
26 27 28 29 30
    } else if args.len() <= 1u {
        ["", "100000"]
    } else {
        args
    };
N
Niko Matsakis 已提交
31 32
    let max = uint::from_str(args[1]).get();
    let start = std::time::precise_time_s();
N
Niko Matsakis 已提交
33
    let raw_v = collect_raw(max);
N
Niko Matsakis 已提交
34
    let mid = std::time::precise_time_s();
N
Niko Matsakis 已提交
35
    let dvec_v = collect_dvec(max);
N
Niko Matsakis 已提交
36 37
    let end = std::time::precise_time_s();

N
Niko Matsakis 已提交
38 39 40 41 42 43
    // check each vector
    assert raw_v.len() == max;
    for raw_v.eachi { |i, v| assert i == v; }
    assert dvec_v.len() == max;
    for dvec_v.eachi { |i, v| assert i == v; }

N
Niko Matsakis 已提交
44 45
    let raw = mid - start;
    let dvec = end - mid;
46
    
N
Niko Matsakis 已提交
47 48 49
    let maxf = max as float;
    let rawf = raw as float;
    let dvecf = dvec as float;
50
    
N
Niko Matsakis 已提交
51 52 53 54 55 56
    io::stdout().write_str(#fmt("Raw     : %? seconds\n", raw));
    io::stdout().write_str(#fmt("        : %f op/sec\n", maxf/rawf));
    io::stdout().write_str(#fmt("\n"));
    io::stdout().write_str(#fmt("Dvec    : %? seconds\n", dvec));
    io::stdout().write_str(#fmt("        : %f op/sec\n", maxf/dvecf));
    io::stdout().write_str(#fmt("\n"));
57
    
N
Niko Matsakis 已提交
58 59 60 61 62 63 64 65
    if dvec < raw {
        io::stdout().write_str(#fmt("Dvec is %f%% faster than raw\n",
                                    (rawf - dvecf) / rawf * 100.0));
    } else {
        io::stdout().write_str(#fmt("Raw is %f%% faster than dvec\n",
                                    (dvecf - rawf) / dvecf * 100.0));
    }
}