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