From a4a8a4ac277f686a4d771f1a8ce5a55b27eddf5c Mon Sep 17 00:00:00 2001 From: Matthijs Hofstra Date: Sun, 16 Jun 2013 17:08:34 +0200 Subject: [PATCH 1/7] Fixed os:: and int:: not being in scope, changed io::println to println --- src/test/bench/shootout-binarytrees.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/test/bench/shootout-binarytrees.rs b/src/test/bench/shootout-binarytrees.rs index e7aed911cb0a..391dd5136664 100644 --- a/src/test/bench/shootout-binarytrees.rs +++ b/src/test/bench/shootout-binarytrees.rs @@ -41,7 +41,9 @@ fn bottom_up_tree<'r>(arena: &'r mut arena::Arena, item: int, depth: int) } fn main() { - let args = os::args(); + use std::os; + use std::int; + let args = std::os::args(); let args = if os::getenv(~"RUST_BENCH").is_some() { ~[~"", ~"17"] } else if args.len() <= 1u { @@ -63,7 +65,7 @@ fn main() { let stretch_depth = max_depth + 1; let stretch_tree = bottom_up_tree(&mut stretch_arena, 0, stretch_depth); - io::println(fmt!("stretch tree of depth %d\t check: %d", + println(fmt!("stretch tree of depth %d\t check: %d", stretch_depth, item_check(stretch_tree))); @@ -81,12 +83,12 @@ fn main() { chk += item_check(temp_tree); i += 1; } - io::println(fmt!("%d\t trees of depth %d\t check: %d", + println(fmt!("%d\t trees of depth %d\t check: %d", iterations * 2, depth, chk)); depth += 2; } - io::println(fmt!("long lived trees of depth %d\t check: %d", + println(fmt!("long lived tree of depth %d\t check: %d", max_depth, item_check(long_lived_tree))); } From 3b1ace9f9b07d59804fab1abc02ddf20b1496666 Mon Sep 17 00:00:00 2001 From: Matthijs Hofstra Date: Sun, 16 Jun 2013 22:22:53 +0200 Subject: [PATCH 2/7] Updated copyright year on shootout-binarytrees.rs --- src/test/bench/shootout-binarytrees.rs | 38 ++++++++++++-------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/src/test/bench/shootout-binarytrees.rs b/src/test/bench/shootout-binarytrees.rs index 391dd5136664..76ef4c12380e 100644 --- a/src/test/bench/shootout-binarytrees.rs +++ b/src/test/bench/shootout-binarytrees.rs @@ -1,8 +1,4 @@ -// xfail-test - -// Broken due to arena API problems. - -// Copyright 2012 The Rust Project Developers. See the COPYRIGHT +// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // @@ -15,29 +11,29 @@ extern mod extra; use extra::arena; -enum tree<'self> { - nil, - node(&'self tree<'self>, &'self tree<'self>, int), +enum Tree<'self> { + Nil, + Node(&'self Tree<'self>, &'self Tree<'self>, int), } -fn item_check(t: &tree) -> int { +fn item_check(t: &Tree) -> int { match *t { - nil => { return 0; } - node(left, right, item) => { + Nil => { return 0; } + Node(left, right, item) => { return item + item_check(left) - item_check(right); } } } -fn bottom_up_tree<'r>(arena: &'r mut arena::Arena, item: int, depth: int) - -> &'r tree<'r> { +fn bottom_up_tree<'r>(arena: &'r arena::Arena, item: int, depth: int) + -> &'r Tree<'r> { if depth > 0 { return arena.alloc( - || node(bottom_up_tree(arena, 2 * item - 1, depth - 1), + || Node(bottom_up_tree(arena, 2 * item - 1, depth - 1), bottom_up_tree(arena, 2 * item, depth - 1), item)); } - return arena.alloc(|| nil); + return arena.alloc(|| Nil); } fn main() { @@ -61,25 +57,25 @@ fn main() { max_depth = n; } - let mut stretch_arena = arena::Arena(); + let stretch_arena = arena::Arena(); let stretch_depth = max_depth + 1; - let stretch_tree = bottom_up_tree(&mut stretch_arena, 0, stretch_depth); + let stretch_tree = bottom_up_tree(&stretch_arena, 0, stretch_depth); println(fmt!("stretch tree of depth %d\t check: %d", stretch_depth, item_check(stretch_tree))); - let mut long_lived_arena = arena::Arena(); - let long_lived_tree = bottom_up_tree(&mut long_lived_arena, 0, max_depth); + let long_lived_arena = arena::Arena(); + let long_lived_tree = bottom_up_tree(&long_lived_arena, 0, max_depth); let mut depth = min_depth; while depth <= max_depth { let iterations = int::pow(2, (max_depth - depth + min_depth) as uint); let mut chk = 0; let mut i = 1; while i <= iterations { - let mut temp_tree = bottom_up_tree(&mut long_lived_arena, i, depth); + let mut temp_tree = bottom_up_tree(&long_lived_arena, i, depth); chk += item_check(temp_tree); - temp_tree = bottom_up_tree(&mut long_lived_arena, -i, depth); + temp_tree = bottom_up_tree(&long_lived_arena, -i, depth); chk += item_check(temp_tree); i += 1; } From b306f9fa404cc8a23648c2d992071a27c88666f1 Mon Sep 17 00:00:00 2001 From: Matthijs Hofstra Date: Sun, 16 Jun 2013 22:23:45 +0200 Subject: [PATCH 3/7] Changed shootout-chameneos-redux output to conform to the 'official' output format. --- src/test/bench/shootout-chameneos-redux.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/bench/shootout-chameneos-redux.rs b/src/test/bench/shootout-chameneos-redux.rs index 2a9ea783c149..3ff123b027ab 100644 --- a/src/test/bench/shootout-chameneos-redux.rs +++ b/src/test/bench/shootout-chameneos-redux.rs @@ -85,7 +85,7 @@ fn show_number(nn: uint) -> ~str { out = show_digit(dig) + " " + out; } - return out; + return ~" " + out; } fn transform(aa: color, bb: color) -> color { From de64ff20ab5f8c961ffda10c3bf168b52a8e4196 Mon Sep 17 00:00:00 2001 From: Matthijs Hofstra Date: Sun, 16 Jun 2013 22:54:08 +0200 Subject: [PATCH 4/7] Added missing copyright notice to shootout-spectralnorm. --- src/test/bench/shootout-spectralnorm.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/test/bench/shootout-spectralnorm.rs b/src/test/bench/shootout-spectralnorm.rs index 534df512a481..35a37e553320 100644 --- a/src/test/bench/shootout-spectralnorm.rs +++ b/src/test/bench/shootout-spectralnorm.rs @@ -1,3 +1,13 @@ +// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + use std::f64; use std::from_str::FromStr; use std::os; From 66fd3c9e5dd8c9b44237b57f455ba60ef607958b Mon Sep 17 00:00:00 2001 From: Matthijs Hofstra Date: Sun, 16 Jun 2013 23:46:31 +0200 Subject: [PATCH 5/7] Fixed shootout-fasta.rs output --- src/test/bench/shootout-fasta.rs | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/test/bench/shootout-fasta.rs b/src/test/bench/shootout-fasta.rs index 38c8d1903e98..a69284611a27 100644 --- a/src/test/bench/shootout-fasta.rs +++ b/src/test/bench/shootout-fasta.rs @@ -28,7 +28,9 @@ use std::str; use std::uint; use std::vec; -fn LINE_LENGTH() -> uint { return 60u; } +static LINE_LENGTH: uint = 60u; + +//fn LINE_LENGTH() -> uint { return 60u; } struct MyRandom { last: u32 @@ -81,7 +83,7 @@ fn make_random_fasta(wr: @io::Writer, for uint::range(0u, n as uint) |_i| { op.push_char(select_random(myrandom_next(rng, 100u32), copy genelist)); - if op.len() >= LINE_LENGTH() { + if op.len() >= LINE_LENGTH { wr.write_line(op); op = ~""; } @@ -90,18 +92,20 @@ fn make_random_fasta(wr: @io::Writer, } fn make_repeat_fasta(wr: @io::Writer, id: ~str, desc: ~str, s: ~str, n: int) { + wr.write_line(~">" + id + " " + desc); + let mut op = str::with_capacity( LINE_LENGTH ); + let sl = s.len(); unsafe { - wr.write_line(~">" + id + " " + desc); - let mut op: ~str = ~""; - let sl: uint = s.len(); for uint::range(0u, n as uint) |i| { - str::raw::push_byte(&mut op, s[i % sl]); - if op.len() >= LINE_LENGTH() { - wr.write_line(op); - op = ~""; + if (op.len() >= LINE_LENGTH) { + wr.write_line( op ); + op = str::with_capacity( LINE_LENGTH ); } + op.push_char( s[i % sl] as char ); + } + if op.len() > 0 { + wr.write_line(op) } - if op.len() > 0u { wr.write_line(op); } } } From 6762754d5b718d2d3f938963d2a4d82eb20eb9fd Mon Sep 17 00:00:00 2001 From: Matthijs Hofstra Date: Sun, 16 Jun 2013 23:48:46 +0200 Subject: [PATCH 6/7] Updated shootout-fasta.rs copyright years, removed stuff that caused lint to complain. --- src/test/bench/shootout-fasta.rs | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/src/test/bench/shootout-fasta.rs b/src/test/bench/shootout-fasta.rs index a69284611a27..f3efcc21ea9b 100644 --- a/src/test/bench/shootout-fasta.rs +++ b/src/test/bench/shootout-fasta.rs @@ -1,4 +1,4 @@ -// Copyright 2012 The Rust Project Developers. See the COPYRIGHT +// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // @@ -19,19 +19,15 @@ extern mod extra; use std::int; use std::io; -use std::option; use std::os; use std::rand::Rng; use std::rand; use std::result; use std::str; use std::uint; -use std::vec; static LINE_LENGTH: uint = 60u; -//fn LINE_LENGTH() -> uint { return 60u; } - struct MyRandom { last: u32 } @@ -95,17 +91,15 @@ fn make_repeat_fasta(wr: @io::Writer, id: ~str, desc: ~str, s: ~str, n: int) { wr.write_line(~">" + id + " " + desc); let mut op = str::with_capacity( LINE_LENGTH ); let sl = s.len(); - unsafe { - for uint::range(0u, n as uint) |i| { - if (op.len() >= LINE_LENGTH) { - wr.write_line( op ); - op = str::with_capacity( LINE_LENGTH ); - } - op.push_char( s[i % sl] as char ); - } - if op.len() > 0 { - wr.write_line(op) + for uint::range(0u, n as uint) |i| { + if (op.len() >= LINE_LENGTH) { + wr.write_line( op ); + op = str::with_capacity( LINE_LENGTH ); } + op.push_char( s[i % sl] as char ); + } + if op.len() > 0 { + wr.write_line(op) } } @@ -115,7 +109,7 @@ fn acid(ch: char, prob: u32) -> AminoAcids { fn main() { let args = os::args(); - let args = if os::getenv(~"RUST_BENCH").is_some() { + let args = if os::getenv("RUST_BENCH").is_some() { // alioth tests k-nucleotide with this data at 25,000,000 ~[~"", ~"5000000"] } else if args.len() <= 1u { @@ -124,9 +118,9 @@ fn main() { args }; - let writer = if os::getenv(~"RUST_BENCH").is_some() { + let writer = if os::getenv("RUST_BENCH").is_some() { result::get(&io::file_writer(&Path("./shootout-fasta.data"), - ~[io::Truncate, io::Create])) + [io::Truncate, io::Create])) } else { io::stdout() }; From 7ba1a239a4fc54f101434128e76b370b926cb8ef Mon Sep 17 00:00:00 2001 From: Matthijs Hofstra Date: Sun, 16 Jun 2013 17:50:16 +0200 Subject: [PATCH 7/7] Changed Arena API to make it usable once more. --- src/libextra/arena.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/libextra/arena.rs b/src/libextra/arena.rs index db4cf564babc..302f1fbeb04a 100644 --- a/src/libextra/arena.rs +++ b/src/libextra/arena.rs @@ -1,4 +1,4 @@ -// Copyright 2012 The Rust Project Developers. See the COPYRIGHT +// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // @@ -39,7 +39,7 @@ use core::prelude::*; use list::{MutList, MutCons, MutNil}; use core::at_vec; -use core::cast::{transmute, transmute_mut_region}; +use core::cast::{transmute, transmute_mut, transmute_mut_region}; use core::cast; use core::libc::size_t; use core::ptr; @@ -74,6 +74,7 @@ struct Chunk { is_pod: bool, } +#[mutable] pub struct Arena { // The head is separated out from the list as a unbenchmarked // microoptimization, to avoid needing to case on the list to @@ -269,23 +270,22 @@ impl Arena { // The external interface #[inline] - pub fn alloc<'a, T>(&'a mut self, op: &fn() -> T) -> &'a T { + pub fn alloc<'a, T>(&'a self, op: &fn() -> T) -> &'a T { unsafe { // XXX: Borrow check - let this = transmute_mut_region(self); - if !intrinsics::needs_drop::() { - return this.alloc_pod(op); + let this = transmute_mut(self); + if intrinsics::needs_drop::() { + this.alloc_nonpod(op) + } else { + this.alloc_pod(op) } - // XXX: Borrow check - let this = transmute_mut_region(self); - this.alloc_nonpod(op) } } } #[test] fn test_arena_destructors() { - let mut arena = Arena(); + let arena = Arena(); for uint::range(0, 10) |i| { // Arena allocate something with drop glue to make sure it // doesn't leak. @@ -300,7 +300,7 @@ fn test_arena_destructors() { #[should_fail] #[ignore(cfg(windows))] fn test_arena_destructors_fail() { - let mut arena = Arena(); + let arena = Arena(); // Put some stuff in the arena. for uint::range(0, 10) |i| { // Arena allocate something with drop glue to make sure it