Skip to content

Commit 3d96b28

Browse files
committed
---
yaml --- r: 233799 b: refs/heads/beta c: 6f28232 h: refs/heads/master i: 233797: 254a86d 233795: 87c2128 233791: ccde268 v: v3
1 parent 87f82ea commit 3d96b28

File tree

25 files changed

+463
-157
lines changed

25 files changed

+463
-157
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ refs/tags/0.9: 36870b185fc5f5486636d4515f0e22677493f225
2323
refs/tags/0.10: ac33f2b15782272ae348dbd7b14b8257b2148b5a
2424
refs/tags/0.11.0: e1247cb1d0d681be034adb4b558b5a0c0d5720f9
2525
refs/tags/0.12.0: f0c419429ef30723ceaf6b42f9b5a2aeb5d2e2d1
26-
refs/heads/beta: c5ab1166e7869dd8188beba435c8557b221db93b
26+
refs/heads/beta: 6f28232756a6842acb1d2da6defdea43cfe95dde
2727
refs/tags/1.0.0-alpha: e42bd6d93a1d3433c486200587f8f9e12590a4d7
2828
refs/heads/tmp: 370fe2786109360f7c35b8ba552b83b773dd71d6
2929
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f

branches/beta/src/doc/trpl/testing.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,13 +120,26 @@ And that's reflected in the summary line:
120120
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured
121121
```
122122

123-
We also get a non-zero status code:
123+
We also get a non-zero status code. We can use `$?` on OS X and Linux:
124124

125125
```bash
126126
$ echo $?
127127
101
128128
```
129129

130+
On Windows, if you’re using `cmd`:
131+
132+
```bash
133+
> echo %ERRORLEVEL%
134+
```
135+
136+
And if you’re using PowerShell:
137+
138+
```bash
139+
> echo $LASTEXITCODE # the code itself
140+
> echo $? # a boolean, fail or succeed
141+
```
142+
130143
This is useful if you want to integrate `cargo test` into other tooling.
131144

132145
We can invert our test's failure with another attribute: `should_panic`:

branches/beta/src/libcollections/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ mod std {
113113
}
114114

115115
/// An endpoint of a range of keys.
116-
#[unstable(feature = "collections_bound", issue = "27711")]
116+
#[unstable(feature = "collections_bound", issue = "27787")]
117117
#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)]
118118
pub enum Bound<T> {
119119
/// An inclusive bound.

branches/beta/src/libcollections/string.rs

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -734,7 +734,8 @@ impl String {
734734
///
735735
/// Note that this will drop any excess capacity.
736736
#[unstable(feature = "box_str",
737-
reason = "recently added, matches RFC")]
737+
reason = "recently added, matches RFC",
738+
issue = "27785")]
738739
#[deprecated(since = "1.4.0", reason = "renamed to `into_boxed_str`")]
739740
pub fn into_boxed_slice(self) -> Box<str> {
740741
self.into_boxed_str()
@@ -768,18 +769,27 @@ impl fmt::Display for FromUtf16Error {
768769

769770
#[stable(feature = "rust1", since = "1.0.0")]
770771
impl FromIterator<char> for String {
771-
fn from_iter<I: IntoIterator<Item=char>>(iter: I) -> String {
772+
fn from_iter<I: IntoIterator<Item=char>>(iterable: I) -> String {
772773
let mut buf = String::new();
773-
buf.extend(iter);
774+
buf.extend(iterable);
774775
buf
775776
}
776777
}
777778

778779
#[stable(feature = "rust1", since = "1.0.0")]
779780
impl<'a> FromIterator<&'a str> for String {
780-
fn from_iter<I: IntoIterator<Item=&'a str>>(iter: I) -> String {
781+
fn from_iter<I: IntoIterator<Item=&'a str>>(iterable: I) -> String {
782+
let mut buf = String::new();
783+
buf.extend(iterable);
784+
buf
785+
}
786+
}
787+
788+
#[stable(feature = "extend_string", since = "1.4.0")]
789+
impl FromIterator<String> for String {
790+
fn from_iter<I: IntoIterator<Item=String>>(iterable: I) -> String {
781791
let mut buf = String::new();
782-
buf.extend(iter);
792+
buf.extend(iterable);
783793
buf
784794
}
785795
}
@@ -798,8 +808,8 @@ impl Extend<char> for String {
798808

799809
#[stable(feature = "extend_ref", since = "1.2.0")]
800810
impl<'a> Extend<&'a char> for String {
801-
fn extend<I: IntoIterator<Item=&'a char>>(&mut self, iter: I) {
802-
self.extend(iter.into_iter().cloned());
811+
fn extend<I: IntoIterator<Item=&'a char>>(&mut self, iterable: I) {
812+
self.extend(iterable.into_iter().cloned());
803813
}
804814
}
805815

@@ -812,6 +822,15 @@ impl<'a> Extend<&'a str> for String {
812822
}
813823
}
814824

825+
#[stable(feature = "extend_string", since = "1.4.0")]
826+
impl Extend<String> for String {
827+
fn extend<I: IntoIterator<Item=String>>(&mut self, iterable: I) {
828+
for s in iterable {
829+
self.push_str(&s)
830+
}
831+
}
832+
}
833+
815834
/// A convenience impl that delegates to the impl for `&str`
816835
impl<'a, 'b> Pattern<'a> for &'b String {
817836
type Searcher = <&'b str as Pattern<'a>>::Searcher;

branches/beta/src/libcore/macros.rs

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,8 @@ macro_rules! writeln {
239239
/// ```
240240
#[macro_export]
241241
#[unstable(feature = "core",
242-
reason = "relationship with panic is unclear")]
242+
reason = "relationship with panic is unclear",
243+
issue = "27701")]
243244
macro_rules! unreachable {
244245
() => ({
245246
panic!("internal error: entered unreachable code")
@@ -254,9 +255,55 @@ macro_rules! unreachable {
254255

255256
/// A standardised placeholder for marking unfinished code. It panics with the
256257
/// message `"not yet implemented"` when executed.
258+
///
259+
/// This can be useful if you are prototyping and are just looking to have your
260+
/// code typecheck, or if you're implementing a trait that requires multiple
261+
/// methods, and you're only planning on using one of them.
262+
///
263+
/// # Examples
264+
///
265+
/// Here's an example of some in-progress code. We have a trait `Foo`:
266+
///
267+
/// ```
268+
/// trait Foo {
269+
/// fn bar(&self);
270+
/// fn baz(&self);
271+
/// }
272+
/// ```
273+
///
274+
/// We want to implement `Foo` on one of our types, but we also want to work on
275+
/// just `bar()` first. In order for our code to compile, we need to implement
276+
/// `baz()`, so we can use `unimplemented!`:
277+
///
278+
/// ```
279+
/// # trait Foo {
280+
/// # fn foo(&self);
281+
/// # fn bar(&self);
282+
/// # }
283+
/// struct MyStruct;
284+
///
285+
/// impl Foo for MyStruct {
286+
/// fn foo(&self) {
287+
/// // implementation goes here
288+
/// }
289+
///
290+
/// fn bar(&self) {
291+
/// // let's not worry about implementing bar() for now
292+
/// unimplemented!();
293+
/// }
294+
/// }
295+
///
296+
/// fn main() {
297+
/// let s = MyStruct;
298+
/// s.foo();
299+
///
300+
/// // we aren't even using bar() yet, so this is fine.
301+
/// }
302+
/// ```
257303
#[macro_export]
258304
#[unstable(feature = "core",
259-
reason = "relationship with panic is unclear")]
305+
reason = "relationship with panic is unclear",
306+
issue = "27701")]
260307
macro_rules! unimplemented {
261308
() => (panic!("not yet implemented"))
262309
}

branches/beta/src/libcore/option.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -779,6 +779,26 @@ impl<T> IntoIterator for Option<T> {
779779
}
780780
}
781781

782+
#[stable(since = "1.4.0", feature = "option_iter")]
783+
impl<'a, T> IntoIterator for &'a Option<T> {
784+
type Item = &'a T;
785+
type IntoIter = Iter<'a, T>;
786+
787+
fn into_iter(self) -> Iter<'a, T> {
788+
self.iter()
789+
}
790+
}
791+
792+
#[stable(since = "1.4.0", feature = "option_iter")]
793+
impl<'a, T> IntoIterator for &'a mut Option<T> {
794+
type Item = &'a mut T;
795+
type IntoIter = IterMut<'a, T>;
796+
797+
fn into_iter(mut self) -> IterMut<'a, T> {
798+
self.iter_mut()
799+
}
800+
}
801+
782802
/////////////////////////////////////////////////////////////////////////////
783803
// The Option Iterators
784804
/////////////////////////////////////////////////////////////////////////////

branches/beta/src/libcore/result.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -815,6 +815,26 @@ impl<T, E> IntoIterator for Result<T, E> {
815815
}
816816
}
817817

818+
#[stable(since = "1.4.0", feature = "result_iter")]
819+
impl<'a, T, E> IntoIterator for &'a Result<T, E> {
820+
type Item = &'a T;
821+
type IntoIter = Iter<'a, T>;
822+
823+
fn into_iter(self) -> Iter<'a, T> {
824+
self.iter()
825+
}
826+
}
827+
828+
#[stable(since = "1.4.0", feature = "result_iter")]
829+
impl<'a, T, E> IntoIterator for &'a mut Result<T, E> {
830+
type Item = &'a mut T;
831+
type IntoIter = IterMut<'a, T>;
832+
833+
fn into_iter(mut self) -> IterMut<'a, T> {
834+
self.iter_mut()
835+
}
836+
}
837+
818838
/////////////////////////////////////////////////////////////////////////////
819839
// The Result Iterators
820840
/////////////////////////////////////////////////////////////////////////////

branches/beta/src/libcoretest/iter.rs

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
// except according to those terms.
1010

1111
use core::iter::*;
12-
use core::iter::order::*;
1312
use core::{i8, i16, isize};
1413
use core::usize;
1514

@@ -21,51 +20,51 @@ fn test_lt() {
2120
let xs = [1,2,3];
2221
let ys = [1,2,0];
2322

24-
assert!(!lt(xs.iter(), ys.iter()));
25-
assert!(!le(xs.iter(), ys.iter()));
26-
assert!( gt(xs.iter(), ys.iter()));
27-
assert!( ge(xs.iter(), ys.iter()));
23+
assert!(!xs.iter().lt(ys.iter()));
24+
assert!(!xs.iter().le(ys.iter()));
25+
assert!( xs.iter().gt(ys.iter()));
26+
assert!( xs.iter().ge(ys.iter()));
2827

29-
assert!( lt(ys.iter(), xs.iter()));
30-
assert!( le(ys.iter(), xs.iter()));
31-
assert!(!gt(ys.iter(), xs.iter()));
32-
assert!(!ge(ys.iter(), xs.iter()));
28+
assert!( ys.iter().lt(xs.iter()));
29+
assert!( ys.iter().le(xs.iter()));
30+
assert!(!ys.iter().gt(xs.iter()));
31+
assert!(!ys.iter().ge(xs.iter()));
3332

34-
assert!( lt(empty.iter(), xs.iter()));
35-
assert!( le(empty.iter(), xs.iter()));
36-
assert!(!gt(empty.iter(), xs.iter()));
37-
assert!(!ge(empty.iter(), xs.iter()));
33+
assert!( empty.iter().lt(xs.iter()));
34+
assert!( empty.iter().le(xs.iter()));
35+
assert!(!empty.iter().gt(xs.iter()));
36+
assert!(!empty.iter().ge(xs.iter()));
3837

3938
// Sequence with NaN
4039
let u = [1.0f64, 2.0];
4140
let v = [0.0f64/0.0, 3.0];
4241

43-
assert!(!lt(u.iter(), v.iter()));
44-
assert!(!le(u.iter(), v.iter()));
45-
assert!(!gt(u.iter(), v.iter()));
46-
assert!(!ge(u.iter(), v.iter()));
42+
assert!(!u.iter().lt(v.iter()));
43+
assert!(!u.iter().le(v.iter()));
44+
assert!(!u.iter().gt(v.iter()));
45+
assert!(!u.iter().ge(v.iter()));
4746

4847
let a = [0.0f64/0.0];
4948
let b = [1.0f64];
5049
let c = [2.0f64];
5150

52-
assert!(lt(a.iter(), b.iter()) == (a[0] < b[0]));
53-
assert!(le(a.iter(), b.iter()) == (a[0] <= b[0]));
54-
assert!(gt(a.iter(), b.iter()) == (a[0] > b[0]));
55-
assert!(ge(a.iter(), b.iter()) == (a[0] >= b[0]));
51+
assert!(a.iter().lt(b.iter()) == (a[0] < b[0]));
52+
assert!(a.iter().le(b.iter()) == (a[0] <= b[0]));
53+
assert!(a.iter().gt(b.iter()) == (a[0] > b[0]));
54+
assert!(a.iter().ge(b.iter()) == (a[0] >= b[0]));
5655

57-
assert!(lt(c.iter(), b.iter()) == (c[0] < b[0]));
58-
assert!(le(c.iter(), b.iter()) == (c[0] <= b[0]));
59-
assert!(gt(c.iter(), b.iter()) == (c[0] > b[0]));
60-
assert!(ge(c.iter(), b.iter()) == (c[0] >= b[0]));
56+
assert!(c.iter().lt(b.iter()) == (c[0] < b[0]));
57+
assert!(c.iter().le(b.iter()) == (c[0] <= b[0]));
58+
assert!(c.iter().gt(b.iter()) == (c[0] > b[0]));
59+
assert!(c.iter().ge(b.iter()) == (c[0] >= b[0]));
6160
}
6261

6362
#[test]
6463
fn test_multi_iter() {
6564
let xs = [1,2,3,4];
6665
let ys = [4,3,2,1];
67-
assert!(eq(xs.iter(), ys.iter().rev()));
68-
assert!(lt(xs.iter(), xs.iter().skip(2)));
66+
assert!(xs.iter().eq(ys.iter().rev()));
67+
assert!(xs.iter().lt(xs.iter().skip(2)));
6968
}
7069

7170
#[test]

branches/beta/src/libcoretest/option.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,11 +180,14 @@ fn test_iter() {
180180
assert_eq!(it.next(), Some(&val));
181181
assert_eq!(it.size_hint(), (0, Some(0)));
182182
assert!(it.next().is_none());
183+
184+
let mut it = (&x).into_iter();
185+
assert_eq!(it.next(), Some(&val));
183186
}
184187

185188
#[test]
186189
fn test_mut_iter() {
187-
let val = 5;
190+
let mut val = 5;
188191
let new_val = 11;
189192

190193
let mut x = Some(val);
@@ -205,6 +208,10 @@ fn test_mut_iter() {
205208
assert!(it.next().is_none());
206209
}
207210
assert_eq!(x, Some(new_val));
211+
212+
let mut y = Some(val);
213+
let mut it = (&mut y).into_iter();
214+
assert_eq!(it.next(), Some(&mut val));
208215
}
209216

210217
#[test]

branches/beta/src/libcoretest/result.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,3 +150,36 @@ pub fn test_expect_err() {
150150
let err: Result<isize, &'static str> = Err("All good");
151151
err.expect("Got expected error");
152152
}
153+
154+
#[test]
155+
pub fn test_iter() {
156+
let ok: Result<isize, &'static str> = Ok(100);
157+
let mut it = ok.iter();
158+
assert_eq!(it.size_hint(), (1, Some(1)));
159+
assert_eq!(it.next(), Some(&100));
160+
assert_eq!(it.size_hint(), (0, Some(0)));
161+
assert!(it.next().is_none());
162+
assert_eq!((&ok).into_iter().next(), Some(&100));
163+
164+
let err: Result<isize, &'static str> = Err("error");
165+
assert_eq!(err.iter().next(), None);
166+
}
167+
168+
#[test]
169+
pub fn test_iter_mut() {
170+
let mut ok: Result<isize, &'static str> = Ok(100);
171+
for loc in ok.iter_mut() {
172+
*loc = 200;
173+
}
174+
assert_eq!(ok, Ok(200));
175+
for loc in &mut ok {
176+
*loc = 300;
177+
}
178+
assert_eq!(ok, Ok(300));
179+
180+
let mut err: Result<isize, &'static str> = Err("error");
181+
for loc in err.iter_mut() {
182+
*loc = 200;
183+
}
184+
assert_eq!(err, Err("error"));
185+
}

0 commit comments

Comments
 (0)