unic_ucd_common/
numeric.rs

1// Copyright 2017 The UNIC Project Developers.
2//
3// See the COPYRIGHT file at the top-level directory of this distribution.
4//
5// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8// option. This file may not be copied, modified, or distributed
9// except according to those terms.
10
11//! *Numeric* Character Property, equal to `General_Category = Nd | Nl | No`.
12//!
13//! NOTE: This property is not defined by UCD, but is used commonly enough in Unicode algorithms and
14//! applications to provide an optimized implementation.
15
16char_property! {
17    /// Represents Unicode characters with `General_Category = Nd | Nl | No`.
18    ///
19    /// The value is `true` for characters that have a numeric *General_Category*, `false`
20    /// otherwise.
21    pub struct Numeric(bool) {
22        abbr => "Numeric";
23        long => "Numeric";
24        human => "Numeric";
25
26        data_table_path => "../tables/numeric.rsv";
27    }
28
29    /// Return `true` for numeric characters, `false` otherwise.
30    pub fn is_numeric(char) -> bool;
31}
32
33#[cfg(test)]
34mod tests {
35    #[test]
36    fn test_values() {
37        use super::is_numeric;
38
39        // ASCII
40        assert_eq!(is_numeric('\u{0020}'), false);
41        assert_eq!(is_numeric('\u{0021}'), false);
42        assert_eq!(is_numeric('\u{0022}'), false);
43
44        assert_eq!(is_numeric('\u{0030}'), true);
45        assert_eq!(is_numeric('\u{0031}'), true);
46        assert_eq!(is_numeric('\u{0032}'), true);
47
48        assert_eq!(is_numeric('\u{0040}'), false);
49        assert_eq!(is_numeric('\u{0041}'), false);
50        assert_eq!(is_numeric('\u{0042}'), false);
51
52        assert_eq!(is_numeric('\u{0060}'), false);
53        assert_eq!(is_numeric('\u{0061}'), false);
54        assert_eq!(is_numeric('\u{0062}'), false);
55
56        assert_eq!(is_numeric('\u{007e}'), false);
57        assert_eq!(is_numeric('\u{007f}'), false);
58
59        // Other BMP
60        assert_eq!(is_numeric('\u{061b}'), false);
61        assert_eq!(is_numeric('\u{061c}'), false);
62        assert_eq!(is_numeric('\u{061d}'), false);
63
64        assert_eq!(is_numeric('\u{200d}'), false);
65        assert_eq!(is_numeric('\u{200e}'), false);
66        assert_eq!(is_numeric('\u{200f}'), false);
67        assert_eq!(is_numeric('\u{2010}'), false);
68
69        assert_eq!(is_numeric('\u{2029}'), false);
70        assert_eq!(is_numeric('\u{202a}'), false);
71        assert_eq!(is_numeric('\u{202e}'), false);
72        assert_eq!(is_numeric('\u{202f}'), false);
73
74        // Other Planes
75        assert_eq!(is_numeric('\u{10000}'), false);
76        assert_eq!(is_numeric('\u{10001}'), false);
77
78        assert_eq!(is_numeric('\u{20000}'), false);
79        assert_eq!(is_numeric('\u{30000}'), false);
80        assert_eq!(is_numeric('\u{40000}'), false);
81        assert_eq!(is_numeric('\u{50000}'), false);
82        assert_eq!(is_numeric('\u{60000}'), false);
83        assert_eq!(is_numeric('\u{70000}'), false);
84        assert_eq!(is_numeric('\u{80000}'), false);
85        assert_eq!(is_numeric('\u{90000}'), false);
86        assert_eq!(is_numeric('\u{a0000}'), false);
87        assert_eq!(is_numeric('\u{b0000}'), false);
88        assert_eq!(is_numeric('\u{c0000}'), false);
89        assert_eq!(is_numeric('\u{d0000}'), false);
90        assert_eq!(is_numeric('\u{e0000}'), false);
91
92        assert_eq!(is_numeric('\u{efffe}'), false);
93        assert_eq!(is_numeric('\u{effff}'), false);
94
95        // Priavte-Use Area
96        assert_eq!(is_numeric('\u{f0000}'), false);
97        assert_eq!(is_numeric('\u{f0001}'), false);
98        assert_eq!(is_numeric('\u{ffffe}'), false);
99        assert_eq!(is_numeric('\u{fffff}'), false);
100        assert_eq!(is_numeric('\u{100000}'), false);
101        assert_eq!(is_numeric('\u{100001}'), false);
102        assert_eq!(is_numeric('\u{10fffe}'), false);
103        assert_eq!(is_numeric('\u{10ffff}'), false);
104    }
105}