diff options
| author | Matt Brubeck <mbrubeck@limpet.net> | 2011-10-31 07:34:58 -0700 |
|---|---|---|
| committer | Marijn Haverbeke <marijnh@gmail.com> | 2011-10-31 16:15:36 +0100 |
| commit | 80c926c5e253d6db299698cfd4932dbcb61cd1bd (patch) | |
| tree | c85104b6ec87062b4791cb49f3c603e8c639f277 | |
| parent | 4739942e7415d89425453d25427c51f96328c52b (diff) | |
| download | rust-80c926c5e253d6db299698cfd4932dbcb61cd1bd.tar.gz rust-80c926c5e253d6db299698cfd4932dbcb61cd1bd.zip | |
Add a char::to_digit function
| -rw-r--r-- | src/lib/char.rs | 9 | ||||
| -rw-r--r-- | src/lib/int.rs | 6 | ||||
| -rw-r--r-- | src/lib/uint.rs | 6 | ||||
| -rw-r--r-- | src/test/stdtest/char.rs | 28 | ||||
| -rw-r--r-- | src/test/stdtest/stdtest.rc | 1 |
5 files changed, 40 insertions, 10 deletions
diff --git a/src/lib/char.rs b/src/lib/char.rs index e91e8697dd8..28345fb19fe 100644 --- a/src/lib/char.rs +++ b/src/lib/char.rs @@ -93,3 +93,12 @@ pure fn is_whitespace(c: char) -> bool { true } else if c == ch_no_break_space { true } else { false } } + +pure fn to_digit(c: char) -> u8 { + alt c { + '0' to '9' { c as u8 - ('0' as u8) } + 'a' to 'z' { c as u8 + 10u8 - ('a' as u8) } + 'A' to 'Z' { c as u8 + 10u8 - ('A' as u8) } + _ { fail; } + } +} diff --git a/src/lib/int.rs b/src/lib/int.rs index 1dae4488b0b..62fb0a7cb63 100644 --- a/src/lib/int.rs +++ b/src/lib/int.rs @@ -112,11 +112,7 @@ fn parse_buf(buf: [u8], radix: uint) -> int { } let n = 0; while true { - let digit = alt buf[i] as char { - '0' to '9' { buf[i] - ('0' as u8) } - 'a' to 'z' { 10u8 + buf[i] - ('a' as u8) } - 'A' to 'Z' { 10u8 + buf[i] - ('A' as u8) } - }; + let digit = char::to_digit(buf[i] as char); if (digit as uint) >= radix { fail; } diff --git a/src/lib/uint.rs b/src/lib/uint.rs index 12e2f65b9e6..5de9bd974e4 100644 --- a/src/lib/uint.rs +++ b/src/lib/uint.rs @@ -100,11 +100,7 @@ fn parse_buf(buf: [u8], radix: uint) -> uint { let power = 1u; let n = 0u; while true { - let digit = alt buf[i] as char { - '0' to '9' { buf[i] - ('0' as u8) } - 'a' to 'z' { 10u8 + buf[i] - ('a' as u8) } - 'A' to 'Z' { 10u8 + buf[i] - ('A' as u8) } - }; + let digit = char::to_digit(buf[i] as char); if (digit as uint) >= radix { fail; } diff --git a/src/test/stdtest/char.rs b/src/test/stdtest/char.rs new file mode 100644 index 00000000000..b2724ca325d --- /dev/null +++ b/src/test/stdtest/char.rs @@ -0,0 +1,28 @@ +use std; +import std::char; + +#[test] +fn test_is_whitespace() { + assert char::is_whitespace(' '); + assert char::is_whitespace('\u2007'); + assert char::is_whitespace('\t'); + assert char::is_whitespace('\n'); + + assert !char::is_whitespace('a'); + assert !char::is_whitespace('_'); + assert !char::is_whitespace('\u0000'); +} + +#[test] +fn test_to_digit() { + assert (char::to_digit('0') == 0u8); + assert (char::to_digit('1') == 1u8); + assert (char::to_digit('2') == 2u8); + assert (char::to_digit('9') == 9u8); + assert (char::to_digit('a') == 10u8); + assert (char::to_digit('A') == 10u8); + assert (char::to_digit('b') == 11u8); + assert (char::to_digit('B') == 11u8); + assert (char::to_digit('z') == 35u8); + assert (char::to_digit('Z') == 35u8); +} diff --git a/src/test/stdtest/stdtest.rc b/src/test/stdtest/stdtest.rc index c47b85c65f8..501879c540f 100644 --- a/src/test/stdtest/stdtest.rc +++ b/src/test/stdtest/stdtest.rc @@ -2,6 +2,7 @@ use std; mod bitv; mod box; +mod char; mod comm; mod deque; mod either; |
