about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCAD97 <cad97@cad97.com>2020-05-28 01:11:46 -0400
committerCAD97 <cad97@cad97.com>2020-05-28 01:33:28 -0400
commitcd6a8cae2aa07bd456a1816196e3c9aa2fcb72d6 (patch)
tree48fa1d6cd5aedb13ae015637c760689bdab1ed1e
parentb1d1f256ef1902312803d3d1bd0235bfdf864aec (diff)
downloadrust-cd6a8cae2aa07bd456a1816196e3c9aa2fcb72d6.tar.gz
rust-cd6a8cae2aa07bd456a1816196e3c9aa2fcb72d6.zip
FIx off-by-one in char::steps_between
-rw-r--r--src/libcore/iter/range.rs2
-rw-r--r--src/libcore/tests/iter.rs2
2 files changed, 3 insertions, 1 deletions
diff --git a/src/libcore/iter/range.rs b/src/libcore/iter/range.rs
index 5db790e491c..fc4454ede35 100644
--- a/src/libcore/iter/range.rs
+++ b/src/libcore/iter/range.rs
@@ -408,7 +408,7 @@ unsafe impl Step for char {
         let start = start as u32;
         let end = end as u32;
         if start <= end {
-            let count = end - start + 1;
+            let count = end - start;
             if start < 0xD800 && 0xE000 <= end {
                 usize::try_from(count - 0x800).ok()
             } else {
diff --git a/src/libcore/tests/iter.rs b/src/libcore/tests/iter.rs
index 6605249f180..c5d636ac8da 100644
--- a/src/libcore/tests/iter.rs
+++ b/src/libcore/tests/iter.rs
@@ -1939,7 +1939,9 @@ fn test_char_range() {
     assert!(('\0'..=char::MAX).rev().eq((0..=char::MAX as u32).filter_map(char::from_u32).rev()));
 
     assert_eq!(('\u{D7FF}'..='\u{E000}').count(), 2);
+    assert_eq!(('\u{D7FF}'..='\u{E000}').size_hint(), (2, Some(2)));
     assert_eq!(('\u{D7FF}'..'\u{E000}').count(), 1);
+    assert_eq!(('\u{D7FF}'..'\u{E000}').size_hint(), (1, Some(1)));
 }
 
 #[test]