• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // This file is part of ICU4X. For terms of use, please see the file
2 // called LICENSE at the top level of the ICU4X source tree
3 // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
4 
5 use icu_collections::codepointtrie::CodePointTrie;
6 
7 #[path = "tries/mod.rs"]
8 mod tries;
9 
10 // The string has 41 chars.
11 const SAMPLE_STRING_LATIN1: &str = "Declaration loremips umdolo loremipsompi";
12 const SAMPLE_STRING_MIXED: &str = "Dèclaråcion ЗАГАЛЬНА 世界人权宣言 ��������������������������";
13 
get_trie_small() -> CodePointTrie<'static, u8>14 fn get_trie_small() -> CodePointTrie<'static, u8> {
15     CodePointTrie::try_new(
16         tries::gc_small::HEADER,
17         tries::gc_small::INDEX,
18         tries::gc_small::DATA,
19     )
20     .unwrap()
21 }
22 
get_trie_fast() -> CodePointTrie<'static, u8>23 fn get_trie_fast() -> CodePointTrie<'static, u8> {
24     CodePointTrie::try_new(
25         tries::gc_fast::HEADER,
26         tries::gc_fast::INDEX,
27         tries::gc_fast::DATA,
28     )
29     .unwrap()
30 }
31 
bench_iai_cpt_overview(fast: bool, mixed: bool)32 fn bench_iai_cpt_overview(fast: bool, mixed: bool) {
33     // Tests the instructions required to get CPT for 100,000 chars.
34 
35     let cpt = if fast {
36         get_trie_fast()
37     } else {
38         get_trie_small()
39     };
40     let sample = if mixed {
41         SAMPLE_STRING_MIXED
42     } else {
43         SAMPLE_STRING_LATIN1
44     };
45 
46     let mut i: u8 = 0;
47     for c in sample.chars() {
48         i = i.wrapping_add(cpt.get32(c as u32))
49         //i = i.wrapping_add(1);
50     }
51 
52     // Ensure the loop is not DCEd
53     assert!(i < 255);
54 }
55 
bench_iai_cpt_latin_fast()56 fn bench_iai_cpt_latin_fast() {
57     bench_iai_cpt_overview(true, false);
58 }
59 
bench_iai_cpt_latin_small()60 fn bench_iai_cpt_latin_small() {
61     bench_iai_cpt_overview(false, false);
62 }
63 
bench_iai_cpt_mixed_fast()64 fn bench_iai_cpt_mixed_fast() {
65     bench_iai_cpt_overview(true, true);
66 }
67 
bench_iai_cpt_mixed_small()68 fn bench_iai_cpt_mixed_small() {
69     bench_iai_cpt_overview(false, true);
70 }
71 
72 iai::main!(
73     bench_iai_cpt_latin_fast,
74     bench_iai_cpt_latin_small,
75     bench_iai_cpt_mixed_fast,
76     bench_iai_cpt_mixed_small,
77 );
78