Skip to content

Commit 634fbe4

Browse files
authored
chore: Improve test (#18)
1 parent 2cd574b commit 634fbe4

File tree

8 files changed

+256
-176
lines changed

8 files changed

+256
-176
lines changed

.travis.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ os:
1212
- osx
1313
- linux
1414
- windows
15-
dist: xenial
1615
after_script:
1716
- npm run benchmark
1817
before_deploy:
@@ -33,5 +32,3 @@ deploy:
3332
tags: true
3433
node: node
3534
api_key: $GITHUB_TOKEN
36-
after_deploy:
37-
- npm run benchmark

appveyor.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ platform:
1515

1616
install:
1717
- SET PATH=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\bin;%PATH%
18-
- ps: Install-Product node $env:nodejs_version x64
18+
- ps: Install-Product node $env:nodejs_version $env:platform
19+
- node --version
20+
- npm --version
1921
- npm install
2022

2123
test_script:
22-
- node --version
23-
- npm --version
2424
- npm test
2525

2626
after_test:

benchmark/benchmark-large.coffee

Lines changed: 0 additions & 90 deletions
This file was deleted.

benchmark/benchmark-large.js

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
require('coffeescript/register')
2+
const fs = require('fs')
3+
const path = require('path')
4+
const testutils = require('./testutils')
5+
6+
const FuzzaldrinPlusFast = require('../fuzzaldrin-dist')
7+
const legacy = require('fuzzaldrin-plus')
8+
9+
const lines = fs.readFileSync(path.join(__dirname, 'data-large.txt'), 'utf8').trim().split('\n')
10+
const dict = lines.map((item) => {
11+
return {
12+
key: item,
13+
val: item
14+
}
15+
})
16+
17+
const fuzzaldrinplusfast = FuzzaldrinPlusFast.New()
18+
fuzzaldrinplusfast.setCandidates(lines)
19+
20+
const two_letter_tests = [
21+
'dp', 'la', 'ow', 'rb', 'dg', 'by', 'pf', 'fk', 'qk', 'pu',
22+
'cl', 'cu', 'cj', 'dz', 'mh', 'sm', 'qk', 'cz', 'nf', 'rb'
23+
]
24+
const three_letter_tests = [
25+
'mxl', 'ipe', 'dvi', 'sxg', 'qiu', 'mvw', 'efa', 'utz', 'pxr', 'dsr',
26+
'inw', 'xck', 'bqk', 'ibv', 'zbh', 'ozj', 'wht', 'kny', 'ccj', 'dtv'
27+
]
28+
29+
30+
console.time('TwoLetter#legacy')
31+
for (const query of two_letter_tests)
32+
legacy.filter(lines, query, {
33+
maxResults: 10
34+
})
35+
console.timeEnd('TwoLetter#legacy')
36+
37+
console.time('TwoLetter#fuzzaldrin-plus-fast#DirectFilter')
38+
for (const query of two_letter_tests)
39+
FuzzaldrinPlusFast.filter(lines, query, {
40+
maxResults: 10
41+
})
42+
console.timeEnd('TwoLetter#fuzzaldrin-plus-fast#DirectFilter')
43+
44+
console.time('TwoLetter#fuzzaldrin-plus-fast#setCandidates#filter')
45+
for (const query of two_letter_tests)
46+
fuzzaldrinplusfast.filter(query, {
47+
maxResults: 10
48+
})
49+
console.timeEnd('TwoLetter#fuzzaldrin-plus-fast#setCandidates#filter')
50+
console.log("======")
51+
52+
53+
console.time('ThreeLetter#legacy')
54+
for (const query of three_letter_tests)
55+
legacy.filter(lines, query, {
56+
maxResults: 10
57+
})
58+
console.timeEnd('ThreeLetter#legacy')
59+
60+
console.time('ThreeLetter#fuzzaldrin-plus-fast#DirectFilter')
61+
for (const query of three_letter_tests)
62+
FuzzaldrinPlusFast.filter(lines, query, {
63+
maxResults: 10
64+
})
65+
console.timeEnd('ThreeLetter#fuzzaldrin-plus-fast#DirectFilter')
66+
67+
console.time('ThreeLetter#fuzzaldrin-plus-fast#setCandidates#filter')
68+
for (const query of three_letter_tests)
69+
fuzzaldrinplusfast.filter(query, {
70+
maxResults: 10
71+
})
72+
console.timeEnd('ThreeLetter#fuzzaldrin-plus-fast#setCandidates#filter')
73+
console.log("======")
74+
75+
console.time('TwoLetter#Keybased#Filter')
76+
for (const query of two_letter_tests)
77+
FuzzaldrinPlusFast.filter(dict, query, {
78+
maxResults: 10,
79+
key: 'key'
80+
})
81+
console.timeEnd('TwoLetter#Keybased#Filter')
82+
console.log("======")
83+
84+
85+
console.time('setCandidates')
86+
let obj = FuzzaldrinPlusFast.New()
87+
obj.setCandidates(lines)
88+
console.timeEnd('setCandidates')
89+
90+
console.time('TwoLetter#Filter')
91+
for (const query of two_letter_tests)
92+
obj.filter(query, {
93+
maxResults: 10
94+
})
95+
console.timeEnd('TwoLetter#Filter')
96+
97+
console.time('ThreeLetter#Filter')
98+
for (const query of three_letter_tests)
99+
obj.filter(query, {
100+
maxResults: 10
101+
})
102+
console.timeEnd('ThreeLetter#Filter')
103+
console.log("======")
104+
105+
106+
console.time('setCandidates#Keybased')
107+
obj = FuzzaldrinPlusFast.New()
108+
obj.setCandidates(dict, {
109+
key: 'key'
110+
})
111+
console.timeEnd('setCandidates#Keybased')
112+
113+
console.time('TwoLetter#Keybased#Filter')
114+
for (const query of two_letter_tests)
115+
obj.filter(query, {
116+
maxResults: 10,
117+
key: 'key'
118+
})
119+
console.timeEnd('TwoLetter#Keybased#Filter')
120+
121+
console.time('ThreeLetter#Keybased#Filter')
122+
for (const query of three_letter_tests)
123+
obj.filter(query, {
124+
maxResults: 10,
125+
key: 'key'
126+
})
127+
console.timeEnd('ThreeLetter#Keybased#Filter')
128+
129+
130+
// An exmaple run below
131+
// TwoLetter#legacy: 20466.854ms
132+
// TwoLetter#fuzzaldrin-plus-fast#DirectFilter: 3362.571ms
133+
// TwoLetter#fuzzaldrin-plus-fast#setCandidates#filter: 610.414ms
134+
// ======
135+
// ThreeLetter#legacy: 15753.575ms
136+
// ThreeLetter#fuzzaldrin-plus-fast#DirectFilter: 3422.584ms
137+
// ThreeLetter#fuzzaldrin-plus-fast#setCandidates#filter: 619.298ms
138+
// ======
139+
// TwoLetter#Keybased#Filter: 4620.753ms
140+
// ======
141+
// setCandidates: 127.881ms
142+
// TwoLetter#Filter: 611.596ms
143+
// ThreeLetter#Filter: 618.661ms
144+
// ======
145+
// setCandidates#Keybased: 176.712ms
146+
// TwoLetter#Keybased#Filter: 621.859ms
147+
// ThreeLetter#Keybased#Filter: 649.107ms

benchmark/benchmark-small.js

Lines changed: 12 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
require('coffeescript/register')
22
const fs = require('fs')
33
const path = require('path')
4-
5-
const performance = (require('perf_hooks')).performance
4+
const testutils = require('./testutils')
65

76
const fuzzaldrinPlus = require('../fuzzaldrin-dist')
87
const legacy = require('fuzzaldrin-plus')
@@ -19,36 +18,15 @@ const mitigation = {
1918
fuzzaldrinPlus.filter(lines, 'index', forceAllMatch)
2019
legacy.filter(lines, 'index')
2120

22-
function doFilterTest(query) {
23-
console.log(`====== Running test - query:${query} ======`)
24-
let startTime = performance.now()
25-
const res_actual = fuzzaldrinPlus.filter(lines, query)
26-
const elapsed = Math.round(performance.now() - startTime)
27-
28-
startTime = performance.now()
29-
const res_expected = legacy.filter(lines, query)
30-
const elapsed_legacy = Math.round(performance.now() - startTime)
31-
32-
if (res_actual.length != res_expected.length) {
33-
console.error("Results count changed! #{results.length} instead of #{results_legacy.length}")
34-
process.exit(1)
35-
}
36-
37-
console.log(`Elapsed time - fuzzaldrin-plus-fast: ${elapsed} ms vs. fuzzaldrin-plus: ${elapsed_legacy} ms`)
38-
if (elapsed > elapsed_legacy) {
39-
console.error(`====== fuzzaldrin-plus-fast is SLOWER`)
40-
}
41-
console.log('')
42-
}
4321

44-
doFilterTest('nm')
45-
doFilterTest('npm')
46-
doFilterTest('node')
47-
doFilterTest('grunt')
48-
doFilterTest('html')
49-
doFilterTest('doc')
50-
doFilterTest('cli')
51-
doFilterTest('js')
52-
doFilterTest('jas')
53-
doFilterTest('mine')
54-
doFilterTest('stream')
22+
testutils.doFilterTest(null, lines, 'nm')
23+
testutils.doFilterTest(null, lines, 'npm')
24+
testutils.doFilterTest(null, lines, 'node')
25+
testutils.doFilterTest(null, lines, 'grunt')
26+
testutils.doFilterTest(null, lines, 'html')
27+
testutils.doFilterTest(null, lines, 'doc')
28+
testutils.doFilterTest(null, lines, 'cli')
29+
testutils.doFilterTest(null, lines, 'js')
30+
testutils.doFilterTest(null, lines, 'jas')
31+
testutils.doFilterTest(null, lines, 'mine')
32+
testutils.doFilterTest(null, lines, 'stream')

0 commit comments

Comments
 (0)