about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatt Brubeck <mbrubeck@limpet.net>2011-10-31 07:34:58 -0700
committerMarijn Haverbeke <marijnh@gmail.com>2011-10-31 16:15:36 +0100
commit80c926c5e253d6db299698cfd4932dbcb61cd1bd (patch)
treec85104b6ec87062b4791cb49f3c603e8c639f277
parent4739942e7415d89425453d25427c51f96328c52b (diff)
downloadrust-80c926c5e253d6db299698cfd4932dbcb61cd1bd.tar.gz
rust-80c926c5e253d6db299698cfd4932dbcb61cd1bd.zip
Add a char::to_digit function
-rw-r--r--src/lib/char.rs9
-rw-r--r--src/lib/int.rs6
-rw-r--r--src/lib/uint.rs6
-rw-r--r--src/test/stdtest/char.rs28
-rw-r--r--src/test/stdtest/stdtest.rc1
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;