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