diff --git a/src/test/compile-fail/range-1.rs b/src/test/compile-fail/range-1.rs new file mode 100644 index 00000000000..f1751f36b39 --- /dev/null +++ b/src/test/compile-fail/range-1.rs @@ -0,0 +1,26 @@ +// Copyright 2014 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. + +// Test range syntax - type errors. + +pub fn main() { + // Mixed types. + let _ = 0u..10i; + //~^ ERROR mismatched types: expected `uint`, found `int` + + // Float => does not implement iterator. + for i in 0f32..42f32 {} + //~^ ERROR `for` loop expression has type `core::ops::Range` which does not implement + + // Unsized type. + let arr: &[_] = &[1u, 2, 3]; + let range = (*arr)..; + //~^ ERROR the trait `core::kinds::Sized` is not implemented +} diff --git a/src/test/compile-fail/range-2.rs b/src/test/compile-fail/range-2.rs new file mode 100644 index 00000000000..e9bb14835ae --- /dev/null +++ b/src/test/compile-fail/range-2.rs @@ -0,0 +1,26 @@ +// Copyright 2014 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. + +// Test range syntax - borrow errors. + +pub fn main() { + let x = &42i; + { + let y = 42i; + let r = x..&y; + //~^ ERROR `y` does not live long enough + } + + let r = { + (&42i)..&42 + //~^ ERROR borrowed value does not live long enough + //~^^ ERROR borrowed value does not live long enough + }; +} diff --git a/src/test/run-pass/range.rs b/src/test/run-pass/range.rs new file mode 100644 index 00000000000..64eabe19b44 --- /dev/null +++ b/src/test/run-pass/range.rs @@ -0,0 +1,41 @@ +// Copyright 2014 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. + +// Test range syntax. + +fn foo() -> int { 42 } + +pub fn main() { + let mut count = 0; + for i in 0u..10 { + assert!(i >= 0 && i < 10); + count += i; + } + assert!(count == 45); + + let mut count = 0; + let mut range = 0u..10; + for i in range { + assert!(i >= 0 && i < 10); + count += i; + } + assert!(count == 45); + + let mut count = 0; + let mut rf = 3u..; + for i in rf.take(10) { + assert!(i >= 3 && i < 13); + count += i; + } + assert!(count == 75); + + let _ = 0u..4+4-3; + let _ = 0..foo(); +}