1 // Still want to test
2 // Non-numeric input
3 // Empty Input
4
5 use std::convert::{TryFrom, TryInto};
6
7 use intl_pluralrules::{operands::*, PluralRuleType, PluralRules};
8 use unic_langid::LanguageIdentifier;
9
10 #[test]
test_operands_from_str()11 fn test_operands_from_str() {
12 let tests = vec![
13 ((0_f64, 0, 0, 0, 0, 0), "0"),
14 ((2_f64, 2, 0, 0, 0, 0), "2"),
15 ((57_f64, 57, 0, 0, 0, 0), "57"),
16 ((987_f64, 987, 0, 0, 0, 0), "987"),
17 ((1234567_f64, 1234567, 0, 0, 0, 0), "1234567"),
18 ((10_f64, 10, 0, 0, 0, 0), "-10"),
19 ((1000000_f64, 1000000, 0, 0, 0, 0), "-1000000"),
20 ((0.23_f64, 0, 2, 2, 23, 23), "0.23"),
21 ((0.230_f64, 0, 3, 2, 230, 23), "0.230"),
22 ((23.00_f64, 23, 2, 0, 00, 0), "23.00"),
23 ((0.0203000_f64, 0, 7, 4, 203000, 203), "0.0203000"),
24 ((123.45_f64, 123, 2, 2, 45, 45), "123.45"),
25 ((1234.567_f64, 1234, 3, 3, 567, 567), "-1234.567"),
26 ];
27
28 for test in tests {
29 assert_eq!(
30 Ok(PluralOperands {
31 n: (test.0).0,
32 i: (test.0).1,
33 v: (test.0).2,
34 w: (test.0).3,
35 f: (test.0).4,
36 t: (test.0).5,
37 }),
38 PluralOperands::try_from(test.1)
39 );
40 }
41 }
42
43 #[test]
test_operands_from_int()44 fn test_operands_from_int() {
45 let tests = vec![
46 ((0_f64, 0, 0, 0, 0, 0), 0),
47 ((2_f64, 2, 0, 0, 0, 0), 2),
48 ((57_f64, 57, 0, 0, 0, 0), 57),
49 ((987_f64, 987, 0, 0, 0, 0), 987),
50 ((1234567_f64, 1234567, 0, 0, 0, 0), 1234567),
51 ((10_f64, 10, 0, 0, 0, 0), -10),
52 ((1000000_f64, 1000000, 0, 0, 0, 0), -1000000),
53 ];
54
55 for test in tests {
56 assert_eq!(
57 Ok(PluralOperands {
58 n: (test.0).0,
59 i: (test.0).1,
60 v: (test.0).2,
61 w: (test.0).3,
62 f: (test.0).4,
63 t: (test.0).5,
64 }),
65 PluralOperands::try_from(test.1)
66 );
67 }
68 }
69
70 #[test]
test_operands_from_float()71 fn test_operands_from_float() {
72 let tests = vec![
73 ((0.23_f64, 0, 2, 2, 23, 23), 0.23),
74 ((0.230_f64, 0, 2, 2, 23, 23), 0.230),
75 ((0.0203000_f64, 0, 4, 4, 203, 203), 0.0203000),
76 ((123.45_f64, 123, 2, 2, 45, 45), 123.45),
77 ((1234.567_f64, 1234, 3, 3, 567, 567), -1234.567),
78 ];
79
80 for test in tests {
81 assert_eq!(
82 Ok(PluralOperands {
83 n: (test.0).0,
84 i: (test.0).1,
85 v: (test.0).2,
86 w: (test.0).3,
87 f: (test.0).4,
88 t: (test.0).5,
89 }),
90 PluralOperands::try_from(test.1)
91 );
92 }
93 }
94
95 #[test]
test_incorrect_operand()96 fn test_incorrect_operand() {
97 assert_eq!(PluralOperands::try_from("foo").is_err(), true);
98 }
99
100 #[test]
test_get_locale()101 fn test_get_locale() {
102 let langid: LanguageIdentifier = "naq".parse().expect("Parsing failed.");
103 let pr_naq = PluralRules::create(langid.clone(), PluralRuleType::CARDINAL).unwrap();
104 assert_eq!(pr_naq.get_locale(), &langid);
105 }
106
107 #[test]
custom_type()108 fn custom_type() {
109 use intl_pluralrules::{PluralCategory, PluralRuleType, PluralRules};
110 struct MyType {
111 value: isize,
112 }
113
114 impl TryInto<PluralOperands> for MyType {
115 type Error = &'static str;
116 fn try_into(self) -> Result<PluralOperands, Self::Error> {
117 Ok(PluralOperands {
118 n: self.value as f64,
119 i: self.value as usize,
120 v: 0,
121 w: 0,
122 f: 0,
123 t: 0,
124 })
125 }
126 }
127
128 let langid: LanguageIdentifier = "en".parse().expect("Parsing failed.");
129 let pr = PluralRules::create(langid, PluralRuleType::CARDINAL).unwrap();
130 let v = MyType { value: 5 };
131
132 assert_eq!(pr.select(v), Ok(PluralCategory::OTHER));
133 }
134