xref: /aosp_15_r20/external/marisa-trie/bindings/perl/benchmark.pl (revision ab8db090fce404b23716c4c9194221ee27efe31c)
1*ab8db090SAndroid Build Coastguard Workeruse Time::HiRes;
2*ab8db090SAndroid Build Coastguard Workeruse marisa;
3*ab8db090SAndroid Build Coastguard Worker
4*ab8db090SAndroid Build Coastguard Workermy $time_begin = Time::HiRes::gettimeofday();
5*ab8db090SAndroid Build Coastguard Workermy @keys = <STDIN>;
6*ab8db090SAndroid Build Coastguard Workerforeach my $key (@keys) {
7*ab8db090SAndroid Build Coastguard Worker  chomp($key);
8*ab8db090SAndroid Build Coastguard Worker}
9*ab8db090SAndroid Build Coastguard Workermy $time_end = Time::HiRes::gettimeofday();
10*ab8db090SAndroid Build Coastguard Workerprint "input: ", $time_end - $time_begin, "\n";
11*ab8db090SAndroid Build Coastguard Worker
12*ab8db090SAndroid Build Coastguard Worker$time_begin = Time::HiRes::gettimeofday();
13*ab8db090SAndroid Build Coastguard Workermy %hash;
14*ab8db090SAndroid Build Coastguard Workerforeach my $key (@keys) {
15*ab8db090SAndroid Build Coastguard Worker  $hash{$key} = 0;
16*ab8db090SAndroid Build Coastguard Worker}
17*ab8db090SAndroid Build Coastguard Worker$time_end = Time::HiRes::gettimeofday();
18*ab8db090SAndroid Build Coastguard Workerprint "hash_build: ", $time_end - $time_begin, "\n";
19*ab8db090SAndroid Build Coastguard Worker
20*ab8db090SAndroid Build Coastguard Worker$time_begin = Time::HiRes::gettimeofday();
21*ab8db090SAndroid Build Coastguard Workerforeach my $key (@keys) {
22*ab8db090SAndroid Build Coastguard Worker  $hash{$key};
23*ab8db090SAndroid Build Coastguard Worker}
24*ab8db090SAndroid Build Coastguard Worker$time_end = Time::HiRes::gettimeofday();
25*ab8db090SAndroid Build Coastguard Workerprint "hash_lookup: ", $time_end - $time_begin, "\n";
26*ab8db090SAndroid Build Coastguard Worker
27*ab8db090SAndroid Build Coastguard Worker$time_begin = Time::HiRes::gettimeofday();
28*ab8db090SAndroid Build Coastguard Workermy $keyset = new marisa::Keyset;
29*ab8db090SAndroid Build Coastguard Workerforeach my $key (@keys) {
30*ab8db090SAndroid Build Coastguard Worker  $keyset->push_back($key)
31*ab8db090SAndroid Build Coastguard Worker}
32*ab8db090SAndroid Build Coastguard Worker$time_end = Time::HiRes::gettimeofday();
33*ab8db090SAndroid Build Coastguard Workerprint "keyset_build: ", $time_end - $time_begin, "\n";
34*ab8db090SAndroid Build Coastguard Worker
35*ab8db090SAndroid Build Coastguard Worker$time_begin = Time::HiRes::gettimeofday();
36*ab8db090SAndroid Build Coastguard Worker$trie = new marisa::Trie;
37*ab8db090SAndroid Build Coastguard Worker$trie->build($keyset);
38*ab8db090SAndroid Build Coastguard Worker$time_end = Time::HiRes::gettimeofday();
39*ab8db090SAndroid Build Coastguard Workerprint "trie_build: ", $time_end - $time_begin, "\n";
40*ab8db090SAndroid Build Coastguard Worker
41*ab8db090SAndroid Build Coastguard Worker$time_begin = Time::HiRes::gettimeofday();
42*ab8db090SAndroid Build Coastguard Workermy $agent = new marisa::Agent;
43*ab8db090SAndroid Build Coastguard Workerforeach my $key (@keys) {
44*ab8db090SAndroid Build Coastguard Worker  $agent->set_query($key);
45*ab8db090SAndroid Build Coastguard Worker  $trie->lookup($agent);
46*ab8db090SAndroid Build Coastguard Worker  $agent->key_id();
47*ab8db090SAndroid Build Coastguard Worker}
48*ab8db090SAndroid Build Coastguard Worker$time_end = Time::HiRes::gettimeofday();
49*ab8db090SAndroid Build Coastguard Workerprint "trie_agent_lookup: ", $time_end - $time_begin, "\n";
50*ab8db090SAndroid Build Coastguard Worker
51*ab8db090SAndroid Build Coastguard Worker$time_begin = Time::HiRes::gettimeofday();
52*ab8db090SAndroid Build Coastguard Workerforeach my $key (@keys) {
53*ab8db090SAndroid Build Coastguard Worker  $trie->lookup($key);
54*ab8db090SAndroid Build Coastguard Worker}
55*ab8db090SAndroid Build Coastguard Worker$time_end = Time::HiRes::gettimeofday();
56*ab8db090SAndroid Build Coastguard Workerprint "trie_lookup: ", $time_end - $time_begin, "\n";
57*ab8db090SAndroid Build Coastguard Worker
58*ab8db090SAndroid Build Coastguard Worker$time_begin = Time::HiRes::gettimeofday();
59*ab8db090SAndroid Build Coastguard Workermy $max_key_id = $trie->size() - 1;
60*ab8db090SAndroid Build Coastguard Workerfor (0..$max_key_id) {
61*ab8db090SAndroid Build Coastguard Worker  $agent->set_query($_);
62*ab8db090SAndroid Build Coastguard Worker  $trie->reverse_lookup($agent);
63*ab8db090SAndroid Build Coastguard Worker  $agent->key_str();
64*ab8db090SAndroid Build Coastguard Worker}
65*ab8db090SAndroid Build Coastguard Worker$time_end = Time::HiRes::gettimeofday();
66*ab8db090SAndroid Build Coastguard Workerprint "trie_agent_reverse_lookup: ", $time_end - $time_begin, "\n";
67*ab8db090SAndroid Build Coastguard Worker
68*ab8db090SAndroid Build Coastguard Worker$time_begin = Time::HiRes::gettimeofday();
69*ab8db090SAndroid Build Coastguard Workerfor (0..$max_key_id) {
70*ab8db090SAndroid Build Coastguard Worker  $trie->reverse_lookup($_);
71*ab8db090SAndroid Build Coastguard Worker}
72*ab8db090SAndroid Build Coastguard Worker$time_end = Time::HiRes::gettimeofday();
73*ab8db090SAndroid Build Coastguard Workerprint "trie_reverse_lookup: ", $time_end - $time_begin, "\n";
74*ab8db090SAndroid Build Coastguard Worker
75*ab8db090SAndroid Build Coastguard Worker$time_begin = Time::HiRes::gettimeofday();
76*ab8db090SAndroid Build Coastguard Workerforeach my $key (@keys) {
77*ab8db090SAndroid Build Coastguard Worker  $agent->set_query($key);
78*ab8db090SAndroid Build Coastguard Worker  while ($trie->common_prefix_search($agent)) {
79*ab8db090SAndroid Build Coastguard Worker    $agent->key_str();
80*ab8db090SAndroid Build Coastguard Worker  }
81*ab8db090SAndroid Build Coastguard Worker}
82*ab8db090SAndroid Build Coastguard Worker$time_end = Time::HiRes::gettimeofday();
83*ab8db090SAndroid Build Coastguard Workerprint "trie_agent_common_prefix_search: ", $time_end - $time_begin, "\n";
84*ab8db090SAndroid Build Coastguard Worker
85*ab8db090SAndroid Build Coastguard Worker$time_begin = Time::HiRes::gettimeofday();
86*ab8db090SAndroid Build Coastguard Workerforeach my $key (@keys) {
87*ab8db090SAndroid Build Coastguard Worker  $agent->set_query($key);
88*ab8db090SAndroid Build Coastguard Worker  while ($trie->predictive_search($agent)) {
89*ab8db090SAndroid Build Coastguard Worker    $agent->key_str();
90*ab8db090SAndroid Build Coastguard Worker  }
91*ab8db090SAndroid Build Coastguard Worker}
92*ab8db090SAndroid Build Coastguard Worker$time_end = Time::HiRes::gettimeofday();
93*ab8db090SAndroid Build Coastguard Workerprint "trie_agent_predictive_search: ", $time_end - $time_begin, "\n";
94