2564430a4f735b0fd7583609849939458480480b
[platform/framework/web/crosswalk-tizen.git] /
1 var fastLevenshtein = require('../levenshtein.min').get,
2   levenshtein = require('levenshtein'),
3   levenshteinEditDistance = require('levenshtein-edit-distance'),
4   levenshteinComponent = require('levenshtein-component'),
5   levenshteinDeltas = require('levenshtein-deltas'),
6   natural = require('natural').LevenshteinDistance;
7
8
9
10 /* The first 100 words from Letterpress: https://github.com/atebits/Words */
11 source = Array(11).join([
12     'aa',
13     'aah',
14     'aahed',
15     'aahing',
16     'aahs',
17     'aal',
18     'aalii',
19     'aaliis',
20     'aals',
21     'aardvark',
22     'aardvarks',
23     'aardwolf',
24     'aardwolves',
25     'aargh',
26     'aarrgh',
27     'aarrghh',
28     'aarti',
29     'aartis',
30     'aas',
31     'aasvogel',
32     'aasvogels',
33     'ab',
34     'aba',
35     'abac',
36     'abaca',
37     'abacas',
38     'abaci',
39     'aback',
40     'abacs',
41     'abacterial',
42     'abactinal',
43     'abactinally',
44     'abactor',
45     'abactors',
46     'abacus',
47     'abacuses',
48     'abaft',
49     'abaka',
50     'abakas',
51     'abalone',
52     'abalones',
53     'abamp',
54     'abampere',
55     'abamperes',
56     'abamps',
57     'aband',
58     'abanded',
59     'abanding',
60     'abandon',
61     'abandoned',
62     'abandonedly',
63     'abandonee',
64     'abandonees',
65     'abandoner',
66     'abandoners',
67     'abandoning',
68     'abandonment',
69     'abandonments',
70     'abandons',
71     'abandonware',
72     'abandonwares',
73     'abands',
74     'abapical',
75     'abas',
76     'abase',
77     'abased',
78     'abasedly',
79     'abasement',
80     'abasements',
81     'abaser',
82     'abasers',
83     'abases',
84     'abash',
85     'abashed',
86     'abashedly',
87     'abashes',
88     'abashing',
89     'abashless',
90     'abashment',
91     'abashments',
92     'abasia',
93     'abasias',
94     'abasing',
95     'abask',
96     'abatable',
97     'abate',
98     'abated',
99     'abatement',
100     'abatements',
101     'abater',
102     'abaters',
103     'abates',
104     'abating',
105     'abatis',
106     'abatises',
107     'abator',
108     'abators',
109     'abattis',
110     'abattises',
111     'abattoir',
112     'abattoirs'
113 ].join('|')).split('|');
114
115
116
117 /**
118  * The actual test loop.
119  * @param  {Function} fn Levenshtein distance function.
120  */
121 var loop = function(fn) {
122   var iterator = -1,
123     previousValue = '',
124     value,
125     dist;
126
127   while (value = source[++iterator]) {
128     dist = fn(previousValue, value);
129     previousValue = value;
130   }
131 };
132
133
134 /** @type {Object} Test config */
135 module.exports = {
136   name: 'Implementation comparison',
137   onComplete: function() {
138     console.log('Benchmark done.');
139   },
140   tests: [
141     {
142       name: 'levenshtein-edit-distance',
143       fn: function() {
144         loop(levenshteinEditDistance);
145       }
146     },
147     {
148       name: 'levenshtein-component',
149       fn: function() {
150         loop(levenshteinComponent);
151       }
152     },
153     {
154       name: 'levenshtein-deltas',
155       fn: function() {
156         loop(function(v1,v2) {
157             return new levenshteinDeltas.Lev(v1,v2).distance();
158         });
159       }
160     },
161     {
162       name: 'natural',
163       fn: function() {
164         loop(natural);
165       }
166     },
167     {
168       name: 'levenshtein',
169       fn: function() {
170         loop(levenshtein);
171       }
172     },
173     {
174       name: 'fast-levenshtein',
175       fn: function() {
176         loop(fastLevenshtein);
177       }
178     },
179   ]
180 };
181
182