Skip to content

Commit 9e59c76

Browse files
author
root
committed
Add more tests for str Chars iterator
Test iterating (decoding) every codepoint.
1 parent 42357d7 commit 9e59c76

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

src/libcollections/str.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -808,6 +808,7 @@ impl OwnedStr for String {
808808
#[cfg(test)]
809809
mod tests {
810810
use std::iter::AdditiveIterator;
811+
use std::iter::range;
811812
use std::default::Default;
812813
use std::char::Char;
813814
use std::clone::Clone;
@@ -1610,6 +1611,30 @@ mod tests {
16101611
assert_eq!(pos, v.len());
16111612
}
16121613

1614+
#[test]
1615+
fn test_chars_decoding() {
1616+
let mut bytes = [0u8, ..4];
1617+
for c in range(0u32, 0x110000).filter_map(|c| ::core::char::from_u32(c)) {
1618+
let len = c.encode_utf8(bytes);
1619+
let s = ::core::str::from_utf8(bytes.slice_to(len)).unwrap();
1620+
if Some(c) != s.chars().next() {
1621+
fail!("character {:x}={} does not decode correctly", c as u32, c);
1622+
}
1623+
}
1624+
}
1625+
1626+
#[test]
1627+
fn test_chars_rev_decoding() {
1628+
let mut bytes = [0u8, ..4];
1629+
for c in range(0u32, 0x110000).filter_map(|c| ::core::char::from_u32(c)) {
1630+
let len = c.encode_utf8(bytes);
1631+
let s = ::core::str::from_utf8(bytes.slice_to(len)).unwrap();
1632+
if Some(c) != s.chars().rev().next() {
1633+
fail!("character {:x}={} does not decode correctly", c as u32, c);
1634+
}
1635+
}
1636+
}
1637+
16131638
#[test]
16141639
fn test_iterator_clone() {
16151640
let s = "ศไทย中华Việt Nam";

0 commit comments

Comments
 (0)