unic_ucd_bidi/
bidi_mirrored.rs

1// Copyright 2015 The Servo Project Developers.
2// Copyright 2017 The UNIC Project Developers.
3//
4// See the COPYRIGHT file at the top-level directory of this distribution.
5//
6// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
8// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
9// option. This file may not be copied, modified, or distributed
10// except according to those terms.
11
12//! Unicode `Bidi_Mirrored` Character Property.
13
14char_property! {
15    /// Represents values of the Unicode character property
16    /// [`Bidi_Mirrored`](https://www.unicode.org/reports/tr44/#Bidi_Mirrored).
17    ///
18    /// The value is `true` if the character is a "mirrored" character in bidirectional context,
19    /// `false` otherwise.
20    pub struct BidiMirrored(bool) {
21        abbr => "Bidi_M";
22        long => "Bidi_Mirrored";
23        human => "Bidi Mirrored";
24
25        data_table_path => "../tables/bidi_mirrored.rsv";
26    }
27
28    /// Return `true` if the character is a "mirrored" character in bidirectional context, `false`
29    /// otherwise.
30    pub fn is_bidi_mirrored(char) -> bool;
31}
32
33#[cfg(test)]
34mod tests {
35    #[test]
36    fn test_values() {
37        use super::is_bidi_mirrored;
38
39        // ASCII
40        assert_eq!(is_bidi_mirrored('\u{0000}'), false);
41        assert_eq!(is_bidi_mirrored('\u{0021}'), false);
42
43        assert_eq!(is_bidi_mirrored('\u{0027}'), false);
44        assert_eq!(is_bidi_mirrored('\u{0028}'), true);
45        assert_eq!(is_bidi_mirrored('\u{0029}'), true);
46        assert_eq!(is_bidi_mirrored('\u{002a}'), false);
47
48        assert_eq!(is_bidi_mirrored('\u{003b}'), false);
49        assert_eq!(is_bidi_mirrored('\u{003c}'), true);
50        assert_eq!(is_bidi_mirrored('\u{003d}'), false);
51
52        assert_eq!(is_bidi_mirrored('\u{007a}'), false);
53        assert_eq!(is_bidi_mirrored('\u{007b}'), true);
54        assert_eq!(is_bidi_mirrored('\u{007c}'), false);
55        assert_eq!(is_bidi_mirrored('\u{007d}'), true);
56        assert_eq!(is_bidi_mirrored('\u{007e}'), false);
57
58        // Other BMP
59        assert_eq!(is_bidi_mirrored('\u{0f39}'), false);
60        assert_eq!(is_bidi_mirrored('\u{0f3a}'), true);
61        assert_eq!(is_bidi_mirrored('\u{0f3b}'), true);
62        assert_eq!(is_bidi_mirrored('\u{0f3c}'), true);
63        assert_eq!(is_bidi_mirrored('\u{0f3d}'), true);
64        assert_eq!(is_bidi_mirrored('\u{0f3e}'), false);
65        assert_eq!(is_bidi_mirrored('\u{0f3f}'), false);
66
67        assert_eq!(is_bidi_mirrored('\u{ff5c}'), false);
68        assert_eq!(is_bidi_mirrored('\u{ff5d}'), true);
69        assert_eq!(is_bidi_mirrored('\u{ff5e}'), false);
70        assert_eq!(is_bidi_mirrored('\u{ff5f}'), true);
71        assert_eq!(is_bidi_mirrored('\u{ff60}'), true);
72        assert_eq!(is_bidi_mirrored('\u{ff61}'), false);
73
74        assert_eq!(is_bidi_mirrored('\u{ff61}'), false);
75        assert_eq!(is_bidi_mirrored('\u{ff62}'), true);
76        assert_eq!(is_bidi_mirrored('\u{ff63}'), true);
77        assert_eq!(is_bidi_mirrored('\u{ff64}'), false);
78
79        // Other Planes
80        assert_eq!(is_bidi_mirrored('\u{10000}'), false);
81        assert_eq!(is_bidi_mirrored('\u{10001}'), false);
82
83        assert_eq!(is_bidi_mirrored('\u{20000}'), false);
84        assert_eq!(is_bidi_mirrored('\u{30000}'), false);
85        assert_eq!(is_bidi_mirrored('\u{40000}'), false);
86        assert_eq!(is_bidi_mirrored('\u{50000}'), false);
87        assert_eq!(is_bidi_mirrored('\u{60000}'), false);
88        assert_eq!(is_bidi_mirrored('\u{70000}'), false);
89        assert_eq!(is_bidi_mirrored('\u{80000}'), false);
90        assert_eq!(is_bidi_mirrored('\u{90000}'), false);
91        assert_eq!(is_bidi_mirrored('\u{a0000}'), false);
92        assert_eq!(is_bidi_mirrored('\u{b0000}'), false);
93        assert_eq!(is_bidi_mirrored('\u{c0000}'), false);
94        assert_eq!(is_bidi_mirrored('\u{d0000}'), false);
95        assert_eq!(is_bidi_mirrored('\u{e0000}'), false);
96
97        assert_eq!(is_bidi_mirrored('\u{efffe}'), false);
98        assert_eq!(is_bidi_mirrored('\u{effff}'), false);
99
100        // Priavte-Use Area
101        assert_eq!(is_bidi_mirrored('\u{f0000}'), false);
102        assert_eq!(is_bidi_mirrored('\u{f0001}'), false);
103        assert_eq!(is_bidi_mirrored('\u{ffffe}'), false);
104        assert_eq!(is_bidi_mirrored('\u{fffff}'), false);
105        assert_eq!(is_bidi_mirrored('\u{100000}'), false);
106        assert_eq!(is_bidi_mirrored('\u{100001}'), false);
107        assert_eq!(is_bidi_mirrored('\u{10fffe}'), false);
108        assert_eq!(is_bidi_mirrored('\u{10ffff}'), false);
109    }
110}