From cb55ef6e12f72f88ea9f05c84c290dfa95849f03 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Wed, 31 Aug 2011 16:10:22 -0700 Subject: [PATCH] Convert benchmarks to istrs. Issue #855 --- src/test/bench/99bob-iter.rs | 31 ++++++----- src/test/bench/99bob-simple.rs | 31 ++++++----- src/test/bench/shootout-fasta.rs | 52 ++++++++++--------- src/test/bench/shootout-pfib.rs | 7 ++- src/test/bench/task-perf-spawnalot.rs | 7 ++- .../bench/task-perf-word-count-generic.rs | 21 ++++---- src/test/bench/task-perf-word-count.rs | 51 +++++++++--------- 7 files changed, 97 insertions(+), 103 deletions(-) diff --git a/src/test/bench/99bob-iter.rs b/src/test/bench/99bob-iter.rs index 47263b6cf27b..3268d21078f3 100644 --- a/src/test/bench/99bob-iter.rs +++ b/src/test/bench/99bob-iter.rs @@ -6,34 +6,33 @@ */ use std; import std::int; -import std::str; import std::istr; -fn b1() -> str { ret "# of beer on the wall, # of beer."; } +fn b1() -> istr { ret ~"# of beer on the wall, # of beer."; } -fn b2() -> str { - ret "Take one down and pass it around, # of beer on the wall."; +fn b2() -> istr { + ret ~"Take one down and pass it around, # of beer on the wall."; } -fn b7() -> str { - ret "No more bottles of beer on the wall, no more bottles of beer."; +fn b7() -> istr { + ret ~"No more bottles of beer on the wall, no more bottles of beer."; } -fn b8() -> str { - ret "Go to the store and buy some more, # of beer on the wall."; +fn b8() -> istr { + ret ~"Go to the store and buy some more, # of beer on the wall."; } -fn sub(t: str, n: int) -> str { - let b: str = ""; +fn sub(t: &istr, n: int) -> istr { + let b: istr = ~""; let i: uint = 0u; - let ns: str; + let ns: istr; alt n { - 0 { ns = "no more bottles"; } - 1 { ns = "1 bottle"; } - _ { ns = istr::to_estr(int::to_str(n, 10u) + ~" bottles"); } + 0 { ns = ~"no more bottles"; } + 1 { ns = ~"1 bottle"; } + _ { ns = int::to_str(n, 10u) + ~" bottles"; } } - while i < str::byte_len(t) { - if t[i] == '#' as u8 { b += ns; } else { str::push_byte(b, t[i]); } + while i < istr::byte_len(t) { + if t[i] == '#' as u8 { b += ns; } else { istr::push_byte(b, t[i]); } i += 1u; } ret b; diff --git a/src/test/bench/99bob-simple.rs b/src/test/bench/99bob-simple.rs index af6f50a2901b..3b3b1e8278c8 100644 --- a/src/test/bench/99bob-simple.rs +++ b/src/test/bench/99bob-simple.rs @@ -6,34 +6,33 @@ */ use std; import std::int; -import std::str; import std::istr; -fn b1() -> str { ret "# of beer on the wall, # of beer."; } +fn b1() -> istr { ret ~"# of beer on the wall, # of beer."; } -fn b2() -> str { - ret "Take one down and pass it around, # of beer on the wall."; +fn b2() -> istr { + ret ~"Take one down and pass it around, # of beer on the wall."; } -fn b7() -> str { - ret "No more bottles of beer on the wall, no more bottles of beer."; +fn b7() -> istr { + ret ~"No more bottles of beer on the wall, no more bottles of beer."; } -fn b8() -> str { - ret "Go to the store and buy some more, # of beer on the wall."; +fn b8() -> istr { + ret ~"Go to the store and buy some more, # of beer on the wall."; } -fn sub(t: str, n: int) -> str { - let b: str = ""; +fn sub(t: &istr, n: int) -> istr { + let b: istr = ~""; let i: uint = 0u; - let ns: str; + let ns: istr; alt n { - 0 { ns = "no more bottles"; } - 1 { ns = "1 bottle"; } - _ { ns = istr::to_estr(int::to_str(n, 10u) + ~" bottles"); } + 0 { ns = ~"no more bottles"; } + 1 { ns = ~"1 bottle"; } + _ { ns = int::to_str(n, 10u) + ~" bottles"; } } - while i < str::byte_len(t) { - if t[i] == '#' as u8 { b += ns; } else { str::push_byte(b, t[i]); } + while i < istr::byte_len(t) { + if t[i] == '#' as u8 { b += ns; } else { istr::push_byte(b, t[i]); } i += 1u; } ret b; diff --git a/src/test/bench/shootout-fasta.rs b/src/test/bench/shootout-fasta.rs index 80e0108867dd..2c9447c1fe1d 100644 --- a/src/test/bench/shootout-fasta.rs +++ b/src/test/bench/shootout-fasta.rs @@ -7,9 +7,9 @@ */ use std; import std::vec; -import std::str; import std::uint; import std::int; +import std::istr; fn LINE_LENGTH() -> uint { ret 60u; } @@ -43,26 +43,27 @@ fn select_random(r: u32, genelist: &[aminoacids]) -> char { ret bisect(genelist, 0u, vec::len::(genelist) - 1u, r); } -fn make_random_fasta(id: str, desc: str, genelist: &[aminoacids], n: int) { - log ">" + id + " " + desc; +fn make_random_fasta(id: &istr, desc: &istr, + genelist: &[aminoacids], n: int) { + log ~">" + id + ~" " + desc; let rng = myrandom(std::rand::mk_rng().next()); - let op: str = ""; + let op: istr = ~""; for each i: uint in uint::range(0u, n as uint) { - str::push_byte(op, select_random(rng.next(100u32), genelist) as u8); - if str::byte_len(op) >= LINE_LENGTH() { log op; op = ""; } + istr::push_byte(op, select_random(rng.next(100u32), genelist) as u8); + if istr::byte_len(op) >= LINE_LENGTH() { log op; op = ~""; } } - if str::byte_len(op) > 0u { log op; } + if istr::byte_len(op) > 0u { log op; } } -fn make_repeat_fasta(id: str, desc: str, s: str, n: int) { - log ">" + id + " " + desc; - let op: str = ""; - let sl: uint = str::byte_len(s); +fn make_repeat_fasta(id: &istr, desc: &istr, s: &istr, n: int) { + log ~">" + id + ~" " + desc; + let op: istr = ~""; + let sl: uint = istr::byte_len(s); for each i: uint in uint::range(0u, n as uint) { - str::push_byte(op, s[i % sl]); - if str::byte_len(op) >= LINE_LENGTH() { log op; op = ""; } + istr::push_byte(op, s[i % sl]); + if istr::byte_len(op) >= LINE_LENGTH() { log op; op = ~""; } } - if str::byte_len(op) > 0u { log op; } + if istr::byte_len(op) > 0u { log op; } } fn acid(ch: char, prob: u32) -> aminoacids { ret {ch: ch, prob: prob}; } @@ -77,16 +78,17 @@ fn main(args: [str]) { let homosapiens: [aminoacids] = make_cumulative([acid('a', 30u32), acid('c', 20u32), acid('g', 20u32), acid('t', 30u32)]); - let alu: str = - "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG" + - "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA" + - "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT" + - "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA" + - "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG" + - "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC" + - "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"; + let alu: istr = + ~"GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG" + + ~"GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA" + + ~"CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT" + + ~"ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA" + + ~"GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG" + + ~"AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC" + + ~"AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"; let n: int = 512; - make_repeat_fasta("ONE", "Homo sapiens alu", alu, n * 2); - make_random_fasta("TWO", "IUB ambiguity codes", iub, n * 3); - make_random_fasta("THREE", "Homo sapiens frequency", homosapiens, n * 5); + make_repeat_fasta(~"ONE", ~"Homo sapiens alu", alu, n * 2); + make_random_fasta(~"TWO", ~"IUB ambiguity codes", iub, n * 3); + make_random_fasta(~"THREE", ~"Homo sapiens frequency", + homosapiens, n * 5); } diff --git a/src/test/bench/shootout-pfib.rs b/src/test/bench/shootout-pfib.rs index 08764bbf5cfd..fd9210169e35 100644 --- a/src/test/bench/shootout-pfib.rs +++ b/src/test/bench/shootout-pfib.rs @@ -14,7 +14,6 @@ use std; import std::vec; import std::uint; import std::time; -import std::str; import std::istr; import std::int::range; import std::io; @@ -50,8 +49,7 @@ fn fib(n: int) -> int { type config = {stress: bool}; -fn parse_opts(argv: [str]) -> config { - let argv = istr::from_estrs(argv); +fn parse_opts(argv: &[istr]) -> config { let opts = [getopts::optflag(~"stress")]; let opt_args = vec::slice(argv, 1u, vec::len(argv)); @@ -82,6 +80,7 @@ fn stress(num_tasks: int) { } fn main(argv: [str]) { + let argv = istr::from_estrs(argv); if vec::len(argv) == 1u { assert (fib(8) == 21); log fib(8); @@ -93,7 +92,7 @@ fn main(argv: [str]) { if opts.stress { stress(2); } else { - let max = uint::parse_buf(str::bytes(argv[1]), 10u) as int; + let max = uint::parse_buf(istr::bytes(argv[1]), 10u) as int; let num_trials = 10; diff --git a/src/test/bench/task-perf-spawnalot.rs b/src/test/bench/task-perf-spawnalot.rs index 6d0c90ab5dfb..dc186811153b 100644 --- a/src/test/bench/task-perf-spawnalot.rs +++ b/src/test/bench/task-perf-spawnalot.rs @@ -2,7 +2,7 @@ use std; import std::vec; import std::task; import std::uint; -import std::str; +import std::istr; fn f(n: uint) { let i = 0u; @@ -13,12 +13,11 @@ fn f(n: uint) { fn g() { } -fn main(args: [str]) { - +fn main(args: [istr]) { let n = if vec::len(args) < 2u { 10u - } else { uint::parse_buf(str::bytes(args[1]), 10u) }; + } else { uint::parse_buf(istr::bytes(args[1]), 10u) }; let i = 0u; while i < n { task::spawn(bind f(n)); i += 1u; } } diff --git a/src/test/bench/task-perf-word-count-generic.rs b/src/test/bench/task-perf-word-count-generic.rs index 9e67911fc879..6374cf8ab985 100644 --- a/src/test/bench/task-perf-word-count-generic.rs +++ b/src/test/bench/task-perf-word-count-generic.rs @@ -13,7 +13,6 @@ use std; import option = std::option::t; import std::option::some; import std::option::none; -import std::str; import std::istr; import std::treemap; import std::vec; @@ -35,7 +34,7 @@ fn map(filename: &[u8], emit: &map_reduce::putter<[u8], int>) { while true { alt read_word(f) { - some(w) { emit(str::bytes(w), 1); } + some(w) { emit(istr::bytes(w), 1); } none. { break; } } } @@ -198,12 +197,12 @@ mod map_reduce { } } -fn main(argv: [str]) { +fn main(argv: [istr]) { if vec::len(argv) < 2u { let out = io::stdout(); out.write_line( - #ifmt["Usage: %s ...", istr::from_estr(argv[0])]); + #ifmt["Usage: %s ...", argv[0]]); // TODO: run something just to make sure the code hasn't // broken yet. This is the unit test mode of this program. @@ -213,7 +212,7 @@ fn main(argv: [str]) { let iargs = []; for a in vec::slice(argv, 1u, vec::len(argv)) { - iargs += [str::bytes(a)]; + iargs += [istr::bytes(a)]; } // We can get by with 8k stacks, and we'll probably exhaust our @@ -228,20 +227,20 @@ fn main(argv: [str]) { let elapsed = stop - start; elapsed /= 1000000u64; - log_err "MapReduce completed in " + - istr::to_estr(u64::str(elapsed)) + "ms"; + log_err ~"MapReduce completed in " + + u64::str(elapsed) + ~"ms"; } -fn read_word(r: io::reader) -> option { - let w = ""; +fn read_word(r: io::reader) -> option { + let w = ~""; while !r.eof() { let c = r.read_char(); if is_word_char(c) { - w += str::from_char(c); - } else { if w != "" { ret some(w); } } + w += istr::from_char(c); + } else { if w != ~"" { ret some(w); } } } ret none; } diff --git a/src/test/bench/task-perf-word-count.rs b/src/test/bench/task-perf-word-count.rs index bb976d23e161..726a5f22fdd6 100644 --- a/src/test/bench/task-perf-word-count.rs +++ b/src/test/bench/task-perf-word-count.rs @@ -13,7 +13,6 @@ use std; import option = std::option::t; import std::option::some; import std::option::none; -import std::str; import std::istr; import std::map; import std::vec; @@ -30,8 +29,8 @@ import std::comm::port; import std::comm::recv; import std::comm::send; -fn map(filename: str, emit: map_reduce::putter) { - let f = io::file_reader(istr::from_estr(filename)); +fn map(filename: &istr, emit: map_reduce::putter) { + let f = io::file_reader(filename); while true { @@ -39,7 +38,7 @@ fn map(filename: str, emit: map_reduce::putter) { } } -fn reduce(word: str, get: map_reduce::getter) { +fn reduce(word: &istr, get: map_reduce::getter) { let count = 0; @@ -53,48 +52,47 @@ mod map_reduce { export reducer; export map_reduce; - type putter = fn(str, int); + type putter = fn(&istr, int); - type mapper = fn(str, putter); + type mapper = fn(&istr, putter); type getter = fn() -> option; - type reducer = fn(str, getter); + type reducer = fn(&istr, getter); tag ctrl_proto { - find_reducer([u8], chan>); + find_reducer(istr, chan>); mapper_done; } tag reduce_proto { emit_val(int); done; ref; release; } - fn start_mappers(ctrl: chan, inputs: &[str]) + fn start_mappers(ctrl: chan, inputs: &[istr]) -> [joinable_task] { let tasks = []; - for i: str in inputs { + for i: istr in inputs { tasks += [task::spawn_joinable(bind map_task(ctrl, i))]; } ret tasks; } - fn map_task(ctrl: chan, input: str) { + fn map_task(ctrl: chan, input: &istr) { // log_err "map_task " + input; let intermediates = map::new_str_hash(); fn emit(im: &map::hashmap>, - ctrl: chan, key: str, val: int) { + ctrl: chan, key: &istr, val: int) { let c; - alt im.find(istr::from_estr(key)) { + alt im.find(key) { some(_c) { c = _c } none. { let p = port(); - let keyi = str::bytes(key); - send(ctrl, find_reducer(keyi, chan(p))); + send(ctrl, find_reducer(key, chan(p))); c = recv(p); - im.insert(istr::from_estr(key), c); + im.insert(key, c); send(c, ref); } } @@ -111,7 +109,7 @@ mod map_reduce { send(ctrl, mapper_done); } - fn reduce_task(key: str, out: chan>) { + fn reduce_task(key: &istr, out: chan>) { let p = port(); send(out, chan(p)); @@ -141,7 +139,7 @@ mod map_reduce { reduce(key, bind get(p, ref_count, is_done)); } - fn map_reduce(inputs: &[str]) { + fn map_reduce(inputs: &[istr]) { let ctrl = port::(); // This task becomes the master control task. It task::_spawns @@ -161,9 +159,8 @@ mod map_reduce { // log_err "received mapper terminated."; num_mappers -= 1; } - find_reducer(ki, cc) { + find_reducer(k, cc) { let c; - let k = istr::unsafe_from_bytes(ki); // log_err "finding reducer for " + k; alt reducers.find(k) { some(_c) { @@ -175,7 +172,7 @@ mod map_reduce { let p = port(); tasks += [task::spawn_joinable( - bind reduce_task(istr::to_estr(k), chan(p)))]; + bind reduce_task(k, chan(p)))]; c = recv(p); reducers.insert(k, c); } @@ -194,12 +191,12 @@ mod map_reduce { } } -fn main(argv: [str]) { +fn main(argv: [istr]) { if vec::len(argv) < 2u { let out = io::stdout(); out.write_line( - #ifmt["Usage: %s ...", istr::from_estr(argv[0])]); + #ifmt["Usage: %s ...", argv[0]]); // TODO: run something just to make sure the code hasn't // broken yet. This is the unit test mode of this program. @@ -222,16 +219,16 @@ fn main(argv: [str]) { log_err ~"MapReduce completed in " + u64::str(elapsed) + ~"ms"; } -fn read_word(r: io::reader) -> option { - let w = ""; +fn read_word(r: io::reader) -> option { + let w = ~""; while !r.eof() { let c = r.read_char(); if is_word_char(c) { - w += str::from_char(c); - } else { if w != "" { ret some(w); } } + w += istr::from_char(c); + } else { if w != ~"" { ret some(w); } } } ret none; }