Fix underflow in char_range_at_reverse
Added char_range_at_reverse underflow test
This commit is contained in:
parent
75d615d6f6
commit
df66e8d4a1
1 changed files with 15 additions and 2 deletions
|
@ -1865,8 +1865,10 @@ pub struct CharRange {
|
||||||
* Given a byte position and a str, return the previous char and its position
|
* Given a byte position and a str, return the previous char and its position
|
||||||
*
|
*
|
||||||
* This function can be used to iterate over a unicode string in reverse.
|
* This function can be used to iterate over a unicode string in reverse.
|
||||||
|
*
|
||||||
|
* returns 0 for next index if called on start index 0
|
||||||
*/
|
*/
|
||||||
fn char_range_at_reverse(ss: &str, start: uint) -> CharRange {
|
pub fn char_range_at_reverse(ss: &str, start: uint) -> CharRange {
|
||||||
let mut prev = start;
|
let mut prev = start;
|
||||||
|
|
||||||
// while there is a previous byte == 10......
|
// while there is a previous byte == 10......
|
||||||
|
@ -1875,7 +1877,12 @@ fn char_range_at_reverse(ss: &str, start: uint) -> CharRange {
|
||||||
}
|
}
|
||||||
|
|
||||||
// now refer to the initial byte of previous char
|
// now refer to the initial byte of previous char
|
||||||
|
if prev > 0u {
|
||||||
prev -= 1u;
|
prev -= 1u;
|
||||||
|
} else {
|
||||||
|
prev = 0u;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
let ch = char_at(ss, prev);
|
let ch = char_at(ss, prev);
|
||||||
return CharRange {ch:ch, next:prev};
|
return CharRange {ch:ch, next:prev};
|
||||||
|
@ -3761,4 +3768,10 @@ mod tests {
|
||||||
"12345555".cmp(& &"123456") == Less;
|
"12345555".cmp(& &"123456") == Less;
|
||||||
"22".cmp(& &"1234") == Greater;
|
"22".cmp(& &"1234") == Greater;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_char_range_at_reverse_underflow() {
|
||||||
|
assert!(char_range_at_reverse("abc", 0).next == 0);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue