/src/test/run-pass/vec-self-append.rs

http://github.com/jruderman/rust · Rust · 49 lines · 41 code · 4 blank · 4 comment · 20 complexity · 47c25c0aef532b5c10db29db9d1b233e MD5 · raw file

  1. use std;
  2. import vec;
  3. fn test_heap_to_heap() {
  4. // a spills onto the heap
  5. let mut a = ~[0, 1, 2, 3, 4];
  6. a += a;
  7. assert (vec::len(a) == 10u);
  8. assert (a[0] == 0);
  9. assert (a[1] == 1);
  10. assert (a[2] == 2);
  11. assert (a[3] == 3);
  12. assert (a[4] == 4);
  13. assert (a[5] == 0);
  14. assert (a[6] == 1);
  15. assert (a[7] == 2);
  16. assert (a[8] == 3);
  17. assert (a[9] == 4);
  18. }
  19. fn test_stack_to_heap() {
  20. // a is entirely on the stack
  21. let mut a = ~[0, 1, 2];
  22. // a spills to the heap
  23. a += a;
  24. assert (vec::len(a) == 6u);
  25. assert (a[0] == 0);
  26. assert (a[1] == 1);
  27. assert (a[2] == 2);
  28. assert (a[3] == 0);
  29. assert (a[4] == 1);
  30. assert (a[5] == 2);
  31. }
  32. fn test_loop() {
  33. // Make sure we properly handle repeated self-appends.
  34. let mut a: ~[int] = ~[0];
  35. let mut i = 20;
  36. let mut expected_len = 1u;
  37. while i > 0 {
  38. log(error, vec::len(a));
  39. assert (vec::len(a) == expected_len);
  40. a += a;
  41. i -= 1;
  42. expected_len *= 2u;
  43. }
  44. }
  45. fn main() { test_heap_to_heap(); test_stack_to_heap(); test_loop(); }