]> git.proxmox.com Git - rustc.git/blob - src/test/run-pass/range.rs
Imported Upstream version 1.9.0+dfsg1
[rustc.git] / src / test / run-pass / range.rs
1 // Copyright 2016 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 // Test range syntax.
12
13
14 fn foo() -> isize { 42 }
15
16 // Test that range syntax works in return statements
17 fn return_range_to() -> ::std::ops::RangeTo<i32> { return ..1; }
18 fn return_full_range() -> ::std::ops::RangeFull { return ..; }
19
20 pub fn main() {
21 let mut count = 0;
22 for i in 0_usize..10 {
23 assert!(i >= 0 && i < 10);
24 count += i;
25 }
26 assert_eq!(count, 45);
27
28 let mut count = 0;
29 let mut range = 0_usize..10;
30 for i in range {
31 assert!(i >= 0 && i < 10);
32 count += i;
33 }
34 assert_eq!(count, 45);
35
36 let mut count = 0;
37 let mut rf = 3_usize..;
38 for i in rf.take(10) {
39 assert!(i >= 3 && i < 13);
40 count += i;
41 }
42 assert_eq!(count, 75);
43
44 let _ = 0_usize..4+4-3;
45 let _ = 0..foo();
46
47 let _ = { &42..&100 }; // references to literals are OK
48 let _ = ..42_usize;
49
50 // Test we can use two different types with a common supertype.
51 let x = &42;
52 {
53 let y = 42;
54 let _ = x..&y;
55 }
56 }