Skip to content

Commit

Permalink
Merge pull request #1377 from Lenny222/icu
Browse files Browse the repository at this point in the history
std::unicode::icu: add "is*" functions + unit test
  • Loading branch information
graydon committed Dec 24, 2011
2 parents 47271ab + d812d06 commit 900bc12
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 0 deletions.
43 changes: 43 additions & 0 deletions src/libstd/unicode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,12 @@ mod icu {
#[abi = "cdecl"]
native mod libicu {
pure fn u_hasBinaryProperty(c: UChar32, which: UProperty) -> UBool;
pure fn u_isdigit(c: UChar32) -> UBool;
pure fn u_islower(c: UChar32) -> UBool;
pure fn u_isspace(c: UChar32) -> UBool;
pure fn u_isupper(c: UChar32) -> UBool;
pure fn u_tolower(c: UChar32) -> UChar32;
pure fn u_toupper(c: UChar32) -> UChar32;
}
}

Expand All @@ -164,3 +170,40 @@ pure fn is_XID_continue(c: char) -> bool {
ret icu::libicu::u_hasBinaryProperty(c, icu::UCHAR_XID_START)
== icu::TRUE;
}

/*
Function: is_digit
Returns true if a character is a digit.
*/
pure fn is_digit(c: char) -> bool {
ret icu::libicu::u_isdigit(c) == icu::TRUE;
}

/*
Function: is_lower
Returns true if a character is a lowercase letter.
*/
pure fn is_lower(c: char) -> bool {
ret icu::libicu::u_islower(c) == icu::TRUE;
}

/*
Function: is_space
Returns true if a character is space.
*/
pure fn is_space(c: char) -> bool {
ret icu::libicu::u_isspace(c) == icu::TRUE;
}

/*
Function: is_upper
Returns true if a character is an uppercase letter.
*/
pure fn is_upper(c: char) -> bool {
ret icu::libicu::u_isupper(c) == icu::TRUE;
}

4 changes: 4 additions & 0 deletions src/test/stdtest/stdtest.rc
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ mod test;
mod tri;
mod treemap;
mod uint;

#[cfg(unicode)]
mod unicode;

mod unsafe;
mod uv;
mod vec;
Expand Down
30 changes: 30 additions & 0 deletions src/test/stdtest/unicode.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import core::*;

use std;

import unicode;

#[test]
fn test_is_digit() {
assert (unicode::icu::is_digit('0'));
assert (!unicode::icu::is_digit('m'));
}

#[test]
fn test_is_lower() {
assert (unicode::icu::is_lower('m'));
assert (!unicode::icu::is_lower('M'));
}

#[test]
fn test_is_space() {
assert (unicode::icu::is_space(' '));
assert (!unicode::icu::is_space('m'));
}

#[test]
fn test_is_upper() {
assert (unicode::icu::is_upper('M'));
assert (!unicode::icu::is_upper('m'));
}

0 comments on commit 900bc12

Please sign in to comment.