diff options
| author | bors <bors@rust-lang.org> | 2015-04-29 00:15:22 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-04-29 00:15:22 +0000 |
| commit | c4b23aec4c5ddf32df1e0ba3cc23212327cd8b1f (patch) | |
| tree | 45cf093827a54610239c2fddd3760b8addf4444d /src/libcoretest | |
| parent | 8871c17b76a1e0ab36ce2bb51008b53f596e5b3c (diff) | |
| parent | 95be21df477655131627def1943de73922b1f6a4 (diff) | |
| download | rust-c4b23aec4c5ddf32df1e0ba3cc23212327cd8b1f.tar.gz rust-c4b23aec4c5ddf32df1e0ba3cc23212327cd8b1f.zip | |
Auto merge of #24865 - bluss:range-size, r=alexcrichton
core: Fix size_hint for signed integer `Range<T>` iterators There was an overflow bug in .size_hint() for signed iterators, which produced an hilariously incorrect size or an overflow panic. Incorrect size is a serious bug since the iterators are marked ExactSizeIterator. (And leads to abort() on (-1i8..127).collect() when the collection tries to preallocate too much). > (-1i8..127).size_hint() (18446744073709551488, Some(18446744073709551488)) Bug found using quickcheck. Fixes #24851
Diffstat (limited to 'src/libcoretest')
| -rw-r--r-- | src/libcoretest/iter.rs | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/libcoretest/iter.rs b/src/libcoretest/iter.rs index 2866c193c3b..bb36630f168 100644 --- a/src/libcoretest/iter.rs +++ b/src/libcoretest/iter.rs @@ -11,6 +11,7 @@ use core::iter::*; use core::iter::order::*; use core::iter::MinMaxResult::*; +use core::isize; use core::usize; use core::cmp; @@ -758,6 +759,11 @@ fn test_range() { assert_eq!((usize::MAX - 1..usize::MAX).size_hint(), (1, Some(1))); assert_eq!((-10..-1).size_hint(), (9, Some(9))); assert_eq!((-1..-10).size_hint(), (0, Some(0))); + + assert_eq!((-70..58i8).size_hint(), (128, Some(128))); + assert_eq!((-128..127i8).size_hint(), (255, Some(255))); + assert_eq!((-2..isize::MAX).size_hint(), + (isize::MAX as usize + 2, Some(isize::MAX as usize + 2))); } #[test] |
