| // A raw test of vector appending performance. |
| |
| extern mod std; |
| use dvec::DVec; |
| use io::WriterUtil; |
| |
| fn collect_raw(num: uint) -> ~[uint] { |
| let mut result = ~[]; |
| for uint::range(0u, num) |i| { |
| result.push(i); |
| } |
| return result; |
| } |
| |
| fn collect_dvec(num: uint) -> ~[uint] { |
| let result = DVec(); |
| for uint::range(0u, num) |i| { |
| result.push(i); |
| } |
| return dvec::unwrap(move result); |
| } |
| |
| fn main() { |
| let args = os::args(); |
| let args = if os::getenv(~"RUST_BENCH").is_some() { |
| ~[~"", ~"50000000"] |
| } else if args.len() <= 1u { |
| ~[~"", ~"100000"] |
| } else { |
| args |
| }; |
| let max = uint::from_str(args[1]).get(); |
| let start = std::time::precise_time_s(); |
| let raw_v = collect_raw(max); |
| let mid = std::time::precise_time_s(); |
| let dvec_v = collect_dvec(max); |
| let end = std::time::precise_time_s(); |
| |
| // 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; } |
| |
| let raw = mid - start; |
| let dvec = end - mid; |
| |
| let maxf = max as float; |
| let rawf = raw as float; |
| let dvecf = dvec as float; |
| |
| 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")); |
| |
| 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)); |
| } |
| } |