about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMark Simulacrum <mark.simulacrum@gmail.com>2017-05-31 10:52:48 -0600
committerGitHub <noreply@github.com>2017-05-31 10:52:48 -0600
commitb62eb7fed8b1ac73281b5b545ffa5137d9027d81 (patch)
tree366619db469fb6d6f9297711f9e3766c21f33015
parent0daa27f3c2ca0d19fbe41093f57375988791e5be (diff)
parent265dce66b6b1181f4b955032b742c702c753f6c8 (diff)
downloadrust-b62eb7fed8b1ac73281b5b545ffa5137d9027d81.tar.gz
rust-b62eb7fed8b1ac73281b5b545ffa5137d9027d81.zip
Rollup merge of #42315 - scottmcm:rangefrom-sizehint, r=alexcrichton
RangeFrom should have an infinite size_hint

Before,
```rust
(0..).take(4).size_hint() == (0, Some(4))
```

With this change,
```rust
(0..).take(4).size_hint() == (4, Some(4))
```
-rw-r--r--src/libcore/iter/iterator.rs3
-rw-r--r--src/libcore/iter/range.rs5
-rw-r--r--src/libcore/tests/iter.rs1
3 files changed, 8 insertions, 1 deletions
diff --git a/src/libcore/iter/iterator.rs b/src/libcore/iter/iterator.rs
index 77cbdb98c83..85149a0f570 100644
--- a/src/libcore/iter/iterator.rs
+++ b/src/libcore/iter/iterator.rs
@@ -130,9 +130,10 @@ pub trait Iterator {
     ///
     /// ```
     /// // an infinite iterator has no upper bound
+    /// // and the maximum possible lower bound
     /// let iter = 0..;
     ///
-    /// assert_eq!((0, None), iter.size_hint());
+    /// assert_eq!((usize::max_value(), None), iter.size_hint());
     /// ```
     #[inline]
     #[stable(feature = "rust1", since = "1.0.0")]
diff --git a/src/libcore/iter/range.rs b/src/libcore/iter/range.rs
index e02823fd812..c0313333ea9 100644
--- a/src/libcore/iter/range.rs
+++ b/src/libcore/iter/range.rs
@@ -543,6 +543,11 @@ impl<A: Step> Iterator for ops::RangeFrom<A> where
         mem::swap(&mut n, &mut self.start);
         Some(n)
     }
+
+    #[inline]
+    fn size_hint(&self) -> (usize, Option<usize>) {
+        (usize::MAX, None)
+    }
 }
 
 #[unstable(feature = "fused", issue = "35602")]
diff --git a/src/libcore/tests/iter.rs b/src/libcore/tests/iter.rs
index 4030eaf2b23..44d5936c63e 100644
--- a/src/libcore/tests/iter.rs
+++ b/src/libcore/tests/iter.rs
@@ -764,6 +764,7 @@ fn test_iterator_size_hint() {
     let v2 = &[10, 11, 12];
     let vi = v.iter();
 
+    assert_eq!((0..).size_hint(), (usize::MAX, None));
     assert_eq!(c.size_hint(), (usize::MAX, None));
     assert_eq!(vi.clone().size_hint(), (10, Some(10)));