1 use criterion::criterion_group;
2 use criterion::criterion_main;
3 use criterion::BenchmarkId;
4 use criterion::Criterion;
5 
6 use intl_pluralrules::{PluralRuleType, PluralRules};
7 use unic_langid::{langid, LanguageIdentifier};
8 
plural_rules(c: &mut Criterion)9 fn plural_rules(c: &mut Criterion) {
10     let langs = &["uk", "de", "sk", "ar", "fr", "it", "en", "cs", "es", "zh"];
11     let langs: Vec<LanguageIdentifier> = langs
12         .iter()
13         .map(|l| l.parse().expect("Parsing failed"))
14         .collect();
15 
16     c.bench_with_input(
17         BenchmarkId::new("construct", langs.len()),
18         &langs,
19         |b, langs| {
20             b.iter(|| {
21                 for lang in langs {
22                     PluralRules::create(lang.clone(), PluralRuleType::ORDINAL).unwrap();
23                     PluralRules::create(lang.clone(), PluralRuleType::CARDINAL).unwrap();
24                 }
25             });
26         },
27     );
28 
29     let samples = &[
30         1, 2, 3, 4, 5, 25, 134, 910293019, 12, 1412, -12, 15, 2931, 31231, 3123, 13231, 91, 0, 231,
31         -2, -45, 33, 728, 2, 291, 24, 479, 291, 778, 919, 93,
32     ];
33 
34     let langid_pl = langid!("pl");
35     let ipr = PluralRules::create(langid_pl.clone(), PluralRuleType::CARDINAL).unwrap();
36 
37     c.bench_with_input(
38         BenchmarkId::new("select", samples.len()),
39         samples,
40         |b, samples| {
41             b.iter(|| {
42                 for value in samples {
43                     ipr.select(*value).unwrap();
44                 }
45             });
46         },
47     );
48 
49     c.bench_function("total", |b| {
50         b.iter(|| {
51             let ipr = PluralRules::create(langid_pl.clone(), PluralRuleType::CARDINAL).unwrap();
52             ipr.select(1).unwrap();
53             ipr.select(2).unwrap();
54             ipr.select(3).unwrap();
55             ipr.select(4).unwrap();
56             ipr.select(5).unwrap();
57             ipr.select(25).unwrap();
58             ipr.select(134).unwrap();
59             ipr.select(5090).unwrap();
60             ipr.select(910293019).unwrap();
61             ipr.select(5.2).unwrap();
62             ipr.select(-0.2).unwrap();
63             ipr.select("12.06").unwrap();
64         })
65     });
66 }
67 
68 criterion_group!(benches, plural_rules,);
69 criterion_main!(benches);
70