Skip to content

Commit c81158d

Browse files
committed
glayzzle#95 add a generic performance test
1 parent 2d8f68b commit c81158d

File tree

1 file changed

+121
-0
lines changed

1 file changed

+121
-0
lines changed

test/perfTests.js

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
var should = require("should");
2+
var parser = require('./main');
3+
4+
describe('Performance tests', function() {
5+
6+
var code = [
7+
'<?php',
8+
'class foo extends bar {',
9+
' const A = 1, B = 2, C = 3;',
10+
' protected $foo = null;',
11+
' public function __construct($a, $b, $c, array $d = []) {',
12+
' echo $a . $b . $c . implode(";", $d);',
13+
' }',
14+
' static public function bar(): foo {',
15+
' return new self(1, 2, 3);',
16+
' }',
17+
'}'
18+
].join('\n');
19+
20+
it('tokenizer', function() {
21+
var reader = new parser();
22+
var tokSize = reader.tokenGetAll(code).length;
23+
var hrTime = process.hrtime();
24+
var iter = 1000;
25+
var start = hrTime[0] * 1000000 + hrTime[1] / 1000;
26+
for(var i = 0; i < iter; i++) {
27+
reader.tokenGetAll(code);
28+
}
29+
hrTime = process.hrtime();
30+
var end = hrTime[0] * 1000000 + hrTime[1] / 1000;
31+
var duration = (end - start) / 1000; // in MS
32+
var speed = 1000 / duration * (tokSize * iter);
33+
speed.should.be.greaterThan(10e5 * 0.8);
34+
35+
if (speed > 1000) {
36+
speed = speed / 1000;
37+
if (speed > 1000) {
38+
speed = speed / 1000;
39+
speed = (Math.round(speed * 100) / 100) + 'M';
40+
} else {
41+
speed = (Math.round(speed * 100) / 100) + 'K';
42+
}
43+
}
44+
console.log(' + Tokens speed => ' + speed + '/sec');
45+
46+
speed = 1000 / duration * (code.length * iter);
47+
speed.should.be.greaterThan(10e5 * 2 * 0.8);
48+
49+
if (speed > 1024) {
50+
speed = speed / 1024;
51+
if (speed > 1024) {
52+
speed = speed / 1024;
53+
speed = (Math.round(speed * 100) / 100) + 'M';
54+
} else {
55+
speed = (Math.round(speed * 100) / 100) + 'K';
56+
}
57+
}
58+
console.log(' + Reading speed => ' + speed + '/sec');
59+
});
60+
61+
it('parser', function() {
62+
var reader = new parser();
63+
var nodeSize = 0;
64+
var countNode = function(node) {
65+
nodeSize ++;
66+
for(var k in node) {
67+
if (node[k]) {
68+
if (node[k].kind) {
69+
countNode(node[k]);
70+
} else if (Array.isArray(node[k])) {
71+
for(var i = 0; i < node[k].length; i++) {
72+
if (node[k][i].kind) {
73+
countNode(node[k][i]);
74+
}
75+
}
76+
}
77+
}
78+
}
79+
};
80+
countNode(reader.parseCode(code));
81+
82+
var hrTime = process.hrtime();
83+
var iter = 1000;
84+
var start = hrTime[0] * 1000000 + hrTime[1] / 1000;
85+
for(var i = 0; i < iter; i++) {
86+
reader.parseCode(code);
87+
}
88+
hrTime = process.hrtime();
89+
var end = hrTime[0] * 1000000 + hrTime[1] / 1000;
90+
var duration = (end - start) / 1000; // in MS
91+
var speed = 1000 / duration * (nodeSize * iter);
92+
speed.should.be.greaterThan(10e4);
93+
94+
if (speed > 1000) {
95+
speed = speed / 1000;
96+
if (speed > 1000) {
97+
speed = speed / 1000;
98+
speed = (Math.round(speed * 100) / 100) + 'M';
99+
} else {
100+
speed = (Math.round(speed * 100) / 100) + 'K';
101+
}
102+
}
103+
console.log(' + Nodes speed => ' + speed + '/sec');
104+
105+
speed = 1000 / duration * (code.length * iter);
106+
speed.should.be.greaterThan(10e5 * 1 * 0.8);
107+
108+
if (speed > 1024) {
109+
speed = speed / 1024;
110+
if (speed > 1024) {
111+
speed = speed / 1024;
112+
speed = (Math.round(speed * 100) / 100) + 'M';
113+
} else {
114+
speed = (Math.round(speed * 100) / 100) + 'K';
115+
}
116+
}
117+
console.log(' + Overall speed => ' + speed + '/sec');
118+
119+
});
120+
121+
});

0 commit comments

Comments
 (0)