File: feature_format_tests.rs

package info (click to toggle)
rust-lexical-util 0.8.5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 664 kB
  • sloc: makefile: 2
file content (240 lines) | stat: -rw-r--r-- 10,758 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
#![cfg(feature = "format")]

use core::num;
use lexical_util::format;

#[test]
fn ignore_test() {
    let fmt = format::NumberFormat::<{ format::IGNORE }> {};
    assert_eq!(fmt.flags(), format::DIGIT_SEPARATOR_FLAG_MASK);
    assert_eq!(fmt.digit_separator(), b'_');
    assert_eq!(fmt.required_integer_digits(), false);
    assert_eq!(fmt.required_fraction_digits(), false);
    assert_eq!(fmt.required_exponent_digits(), false);
    assert_eq!(fmt.required_mantissa_digits(), false);
    assert_eq!(fmt.required_digits(), false);
    assert_eq!(fmt.no_positive_mantissa_sign(), false);
    assert_eq!(fmt.required_mantissa_sign(), false);
    assert_eq!(fmt.no_exponent_notation(), false);
    assert_eq!(fmt.no_positive_exponent_sign(), false);
    assert_eq!(fmt.required_exponent_sign(), false);
    assert_eq!(fmt.no_exponent_without_fraction(), false);
    assert_eq!(fmt.no_special(), false);
    assert_eq!(fmt.case_sensitive_special(), false);
    assert_eq!(fmt.no_integer_leading_zeros(), false);
    assert_eq!(fmt.no_float_leading_zeros(), false);
    assert_eq!(fmt.required_exponent_notation(), false);
    assert_eq!(fmt.case_sensitive_exponent(), false);
    #[cfg(feature = "power-of-two")]
    assert_eq!(fmt.case_sensitive_base_prefix(), false);
    #[cfg(feature = "power-of-two")]
    assert_eq!(fmt.case_sensitive_base_suffix(), false);
    assert_eq!(fmt.integer_internal_digit_separator(), true);
    assert_eq!(fmt.fraction_internal_digit_separator(), true);
    assert_eq!(fmt.exponent_internal_digit_separator(), true);
    assert_eq!(fmt.internal_digit_separator(), true);
    assert_eq!(fmt.integer_leading_digit_separator(), true);
    assert_eq!(fmt.fraction_leading_digit_separator(), true);
    assert_eq!(fmt.exponent_leading_digit_separator(), true);
    assert_eq!(fmt.leading_digit_separator(), true);
    assert_eq!(fmt.integer_trailing_digit_separator(), true);
    assert_eq!(fmt.fraction_trailing_digit_separator(), true);
    assert_eq!(fmt.exponent_trailing_digit_separator(), true);
    assert_eq!(fmt.trailing_digit_separator(), true);
    assert_eq!(fmt.integer_consecutive_digit_separator(), true);
    assert_eq!(fmt.fraction_consecutive_digit_separator(), true);
    assert_eq!(fmt.exponent_consecutive_digit_separator(), true);
    assert_eq!(fmt.consecutive_digit_separator(), true);
    assert_eq!(fmt.special_digit_separator(), true);
}

fn test_flag<const FORMAT: u128>() {
    let fmt = format::NumberFormat::<FORMAT> {};
    assert_eq!(fmt.flags(), FORMAT);
    assert_eq!(fmt.digit_separator(), 0);
}

macro_rules! test_flag {
    ($field:ident, $flag:ident) => {{
        test_flag::<{ format::$flag }>();

        if format::$flag & format::CONSECUTIVE_DIGIT_SEPARATOR == 0 {
            const FORMAT: u128 = format::NumberFormatBuilder::new()
                .digit_separator(num::NonZeroU8::new(b'_'))
                .$field(true)
                .build();
            let fmt = format::NumberFormat::<FORMAT> {};
            assert_eq!(fmt.is_valid(), true);
            assert_eq!(fmt.$field(), true);
        } else {
            const FORMAT: u128 = format::NumberFormatBuilder::new()
                .digit_separator(num::NonZeroU8::new(b'_'))
                .internal_digit_separator(true)
                .leading_digit_separator(true)
                .trailing_digit_separator(true)
                .$field(true)
                .build();
            let fmt = format::NumberFormat::<FORMAT> {};
            assert_eq!(fmt.is_valid(), true);
            assert_eq!(fmt.$field(), true);
        }
    }};
}

#[test]
fn flags_test() {
    test_flag!(required_integer_digits, REQUIRED_INTEGER_DIGITS);
    test_flag!(required_fraction_digits, REQUIRED_FRACTION_DIGITS);
    test_flag!(required_exponent_digits, REQUIRED_EXPONENT_DIGITS);
    test_flag!(required_mantissa_digits, REQUIRED_MANTISSA_DIGITS);
    test_flag!(no_positive_mantissa_sign, NO_POSITIVE_MANTISSA_SIGN);
    test_flag!(required_mantissa_sign, REQUIRED_MANTISSA_SIGN);
    test_flag!(no_exponent_notation, NO_EXPONENT_NOTATION);
    test_flag!(no_positive_exponent_sign, NO_POSITIVE_EXPONENT_SIGN);
    test_flag!(required_exponent_sign, REQUIRED_EXPONENT_SIGN);
    test_flag!(no_exponent_without_fraction, NO_EXPONENT_WITHOUT_FRACTION);
    test_flag!(no_special, NO_SPECIAL);
    test_flag!(case_sensitive_special, CASE_SENSITIVE_SPECIAL);
    test_flag!(no_integer_leading_zeros, NO_INTEGER_LEADING_ZEROS);
    test_flag!(no_float_leading_zeros, NO_FLOAT_LEADING_ZEROS);
    test_flag!(required_exponent_notation, REQUIRED_EXPONENT_NOTATION);
    test_flag!(case_sensitive_exponent, CASE_SENSITIVE_EXPONENT);
    #[cfg(feature = "power-of-two")]
    test_flag!(case_sensitive_base_prefix, CASE_SENSITIVE_BASE_PREFIX);
    #[cfg(feature = "power-of-two")]
    test_flag!(case_sensitive_base_suffix, CASE_SENSITIVE_BASE_SUFFIX);
    test_flag!(integer_internal_digit_separator, INTEGER_INTERNAL_DIGIT_SEPARATOR);
    test_flag!(fraction_internal_digit_separator, FRACTION_INTERNAL_DIGIT_SEPARATOR);
    test_flag!(exponent_internal_digit_separator, EXPONENT_INTERNAL_DIGIT_SEPARATOR);
    test_flag!(integer_leading_digit_separator, INTEGER_LEADING_DIGIT_SEPARATOR);
    test_flag!(fraction_leading_digit_separator, FRACTION_LEADING_DIGIT_SEPARATOR);
    test_flag!(exponent_leading_digit_separator, EXPONENT_LEADING_DIGIT_SEPARATOR);
    test_flag!(integer_trailing_digit_separator, INTEGER_TRAILING_DIGIT_SEPARATOR);
    test_flag!(fraction_trailing_digit_separator, FRACTION_TRAILING_DIGIT_SEPARATOR);
    test_flag!(exponent_trailing_digit_separator, EXPONENT_TRAILING_DIGIT_SEPARATOR);
    test_flag!(integer_consecutive_digit_separator, INTEGER_CONSECUTIVE_DIGIT_SEPARATOR);
    test_flag!(fraction_consecutive_digit_separator, FRACTION_CONSECUTIVE_DIGIT_SEPARATOR);
    test_flag!(exponent_consecutive_digit_separator, EXPONENT_CONSECUTIVE_DIGIT_SEPARATOR);
    test_flag!(special_digit_separator, SPECIAL_DIGIT_SEPARATOR);
}

#[test]
fn constants_test() {
    // Don't check the actual values: just check they're defined.
    let _: u128 = format::RUST_LITERAL;
    let _: u128 = format::RUST_STRING;
    let _: u128 = format::PYTHON_LITERAL;
    let _: u128 = format::PYTHON_STRING;
    let _: u128 = format::PYTHON3_LITERAL;
    let _: u128 = format::PYTHON3_STRING;
    let _: u128 = format::PYTHON36_LITERAL;
    let _: u128 = format::PYTHON35_LITERAL;
    let _: u128 = format::PYTHON2_LITERAL;
    let _: u128 = format::PYTHON2_STRING;
    let _: u128 = format::CXX17_LITERAL;
    let _: u128 = format::CXX17_STRING;
    let _: u128 = format::CXX14_LITERAL;
    let _: u128 = format::CXX14_STRING;
    let _: u128 = format::CXX11_LITERAL;
    let _: u128 = format::CXX11_STRING;
    let _: u128 = format::CXX03_LITERAL;
    let _: u128 = format::CXX03_STRING;
    let _: u128 = format::CXX98_LITERAL;
    let _: u128 = format::CXX98_STRING;
    let _: u128 = format::C18_LITERAL;
    let _: u128 = format::C18_STRING;
    let _: u128 = format::C11_LITERAL;
    let _: u128 = format::C11_STRING;
    let _: u128 = format::C99_LITERAL;
    let _: u128 = format::C99_STRING;
    let _: u128 = format::C90_LITERAL;
    let _: u128 = format::C90_STRING;
    let _: u128 = format::C89_LITERAL;
    let _: u128 = format::C89_STRING;
    let _: u128 = format::RUBY_LITERAL;
    let _: u128 = format::RUBY_STRING;
    let _: u128 = format::SWIFT_LITERAL;
    let _: u128 = format::SWIFT_STRING;
    let _: u128 = format::GO_LITERAL;
    let _: u128 = format::GO_STRING;
    let _: u128 = format::HASKELL_LITERAL;
    let _: u128 = format::HASKELL_STRING;
    let _: u128 = format::JAVASCRIPT_LITERAL;
    let _: u128 = format::JAVASCRIPT_STRING;
    let _: u128 = format::PERL_LITERAL;
    let _: u128 = format::PERL_STRING;
    let _: u128 = format::PHP_LITERAL;
    let _: u128 = format::PHP_STRING;
    let _: u128 = format::JAVA_LITERAL;
    let _: u128 = format::JAVA_STRING;
    let _: u128 = format::R_LITERAL;
    let _: u128 = format::R_STRING;
    let _: u128 = format::KOTLIN_LITERAL;
    let _: u128 = format::KOTLIN_STRING;
    let _: u128 = format::JULIA_LITERAL;
    let _: u128 = format::JULIA_STRING;
    let _: u128 = format::CSHARP7_LITERAL;
    let _: u128 = format::CSHARP7_STRING;
    let _: u128 = format::CSHARP6_LITERAL;
    let _: u128 = format::CSHARP6_STRING;
    let _: u128 = format::CSHARP5_LITERAL;
    let _: u128 = format::CSHARP5_STRING;
    let _: u128 = format::CSHARP4_LITERAL;
    let _: u128 = format::CSHARP4_STRING;
    let _: u128 = format::CSHARP3_LITERAL;
    let _: u128 = format::CSHARP3_STRING;
    let _: u128 = format::CSHARP2_LITERAL;
    let _: u128 = format::CSHARP2_STRING;
    let _: u128 = format::CSHARP1_LITERAL;
    let _: u128 = format::CSHARP1_STRING;
    let _: u128 = format::KAWA_LITERAL;
    let _: u128 = format::KAWA_STRING;
    let _: u128 = format::GAMBITC_LITERAL;
    let _: u128 = format::GAMBITC_STRING;
    let _: u128 = format::GUILE_LITERAL;
    let _: u128 = format::GUILE_STRING;
    let _: u128 = format::CLOJURE_LITERAL;
    let _: u128 = format::CLOJURE_STRING;
    let _: u128 = format::ERLANG_LITERAL;
    let _: u128 = format::ERLANG_STRING;
    let _: u128 = format::ELM_LITERAL;
    let _: u128 = format::ELM_STRING;
    let _: u128 = format::SCALA_LITERAL;
    let _: u128 = format::SCALA_STRING;
    let _: u128 = format::ELIXIR_LITERAL;
    let _: u128 = format::ELIXIR_STRING;
    let _: u128 = format::FORTRAN_LITERAL;
    let _: u128 = format::FORTRAN_STRING;
    let _: u128 = format::D_LITERAL;
    let _: u128 = format::D_STRING;
    let _: u128 = format::COFFEESCRIPT_LITERAL;
    let _: u128 = format::COFFEESCRIPT_STRING;
    let _: u128 = format::COBOL_LITERAL;
    let _: u128 = format::COBOL_STRING;
    let _: u128 = format::FSHARP_LITERAL;
    let _: u128 = format::FSHARP_STRING;
    let _: u128 = format::VB_LITERAL;
    let _: u128 = format::VB_STRING;
    let _: u128 = format::OCAML_LITERAL;
    let _: u128 = format::OCAML_STRING;
    let _: u128 = format::OBJECTIVEC_LITERAL;
    let _: u128 = format::OBJECTIVEC_STRING;
    let _: u128 = format::REASONML_LITERAL;
    let _: u128 = format::REASONML_STRING;
    let _: u128 = format::OCTAVE_LITERAL;
    let _: u128 = format::OCTAVE_STRING;
    let _: u128 = format::MATLAB_LITERAL;
    let _: u128 = format::MATLAB_STRING;
    let _: u128 = format::ZIG_LITERAL;
    let _: u128 = format::ZIG_STRING;
    let _: u128 = format::SAGE_LITERAL;
    let _: u128 = format::SAGE_STRING;
    let _: u128 = format::JSON;
    let _: u128 = format::TOML;
    let _: u128 = format::YAML;
    let _: u128 = format::XML;
    let _: u128 = format::SQLITE;
    let _: u128 = format::POSTGRESQL;
    let _: u128 = format::MYSQL;
    let _: u128 = format::MONGODB;
}