-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest-lookup.js
149 lines (117 loc) · 3.55 KB
/
test-lookup.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
var Benchmark = require( 'benchmark' );
function indexPayloadAsKeys( payload ) {
var index = {};
payload.forEach( function( item ) {
index[ item ] = 1;
});
return index;
}
function runTest( payload ) {
var suite = new Benchmark.Suite;
var urlCount = payload.length;
console.log( 'Url count ' + urlCount );
var objectIndex = indexPayloadAsKeys( payload );
suite.add( 'array.indexOf', function () {
payload.forEach( function( item ) {
payload.indexOf( item );
});
})
.add( 'object.keys', function () {
payload.forEach( function( item ) {
objectIndex[ item ];
});
})
.on( 'cycle', function ( event ) {
console.log( String( event.target ) );
} )
.on( 'complete', function () {
console.log( 'Fastest is ' + this.filter( 'fastest' ).map( 'name' ) );
} )
.run();
}
function shuffleArray(array) {
for (var i = array.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
(function testRegular() {
var fs = require( 'fs' );
var path = require( 'path' );
function walkSync( currentDirPath, callback ) {
fs.readdirSync( currentDirPath ).forEach( function ( name ) {
var filePath = path.join( currentDirPath, name );
var stat = fs.statSync( filePath );
if ( stat.isFile() ) {
callback( filePath, stat );
} else if ( stat.isDirectory() ) {
walkSync( filePath, callback );
}
} );
};
walkSync( __dirname + '/payloads/', function ( file ) {
console.log( "payload: " + file.split( "/" ).pop() );
var payload = JSON.parse( fs.readFileSync( file ).toString() );
payload = shuffleArray( payload );
runTest( payload );
console.log( "----------------" );
} )
})();
(function test_lots_of_dups() {
var fs = require( 'fs' );
// test with lots of duplicates
(function() {
var payload = JSON.parse( fs.readFileSync( './payloads/payload-04.json' ).toString() );
payload = payload.concat( payload, payload, payload, payload ); // x4 with duplicates
payload = payload.concat( payload ); // x2 with duplicates
payload = shuffleArray( payload ); // randomize order
console.log( "with lots of duplicates" );
runTest( payload );
console.log( "----------------" );
})();
(function() {
var payload = JSON.parse( fs.readFileSync( './payloads/payload-10.json' ).toString() );
payload = payload.concat( payload ); // double with duplicates
payload = shuffleArray( payload ); // shuffle
console.log( "with lots of duplicates" );
runTest( payload );
console.log( "----------------" );
})();
})();
(function test_short_keys() {
// payload generator
var generateShortKeysPayload = ( function() {
var sampleData = [];
for ( var si = 'a'.charCodeAt( 0 ), i = 0; i <= 25; i++ ) {
sampleData.push( String.fromCharCode( si + i ) );
}
return function( size ) {
// generate single char array starting from 'a'
var payload = [];
for ( var i = 0; i < size; i++ ) {
var sampleDataIdx = Math.floor( Math.random() * (sampleData.length + 1) );
var seed = (Math.random() * 10) | 0;
payload.push( sampleData[ sampleDataIdx ] + seed );
}
return payload;
}
})();
// test short keys
(function() {
console.log( "payload: short keys" );
var payload = generateShortKeysPayload( 128 );
payload = shuffleArray( payload );
runTest( payload );
console.log( "----------------" );
})();
(function() {
console.log( "payload: short keys" );
var payload = generateShortKeysPayload( 256 );
payload = shuffleArray( payload );
runTest( payload );
console.log( "----------------" );
})();
})();