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