// Copyright 2012 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. extern mod std; fn test_heap_to_heap() { // a spills onto the heap let mut a = ~[0, 1, 2, 3, 4]; a = a + a; // FIXME(#3387)---can't write a += a assert!((vec::len(a) == 10u)); assert!((a[0] == 0)); assert!((a[1] == 1)); assert!((a[2] == 2)); assert!((a[3] == 3)); assert!((a[4] == 4)); assert!((a[5] == 0)); assert!((a[6] == 1)); assert!((a[7] == 2)); assert!((a[8] == 3)); assert!((a[9] == 4)); } fn test_stack_to_heap() { // a is entirely on the stack let mut a = ~[0, 1, 2]; // a spills to the heap a = a + a; // FIXME(#3387)---can't write a += a assert!((vec::len(a) == 6u)); assert!((a[0] == 0)); assert!((a[1] == 1)); assert!((a[2] == 2)); assert!((a[3] == 0)); assert!((a[4] == 1)); assert!((a[5] == 2)); } fn test_loop() { // Make sure we properly handle repeated self-appends. let mut a: ~[int] = ~[0]; let mut i = 20; let mut expected_len = 1u; while i > 0 { error!(vec::len(a)); assert!((vec::len(a) == expected_len)); a = a + a; // FIXME(#3387)---can't write a += a i -= 1; expected_len *= 2u; } } pub fn main() { test_heap_to_heap(); test_stack_to_heap(); test_loop(); }