14563cee0d7754d4febd5e269a512ff60d53a936
[platform/upstream/nodejs.git] / benchmark / misc / string-decoder.js
1 var common = require('../common.js');
2 var StringDecoder = require('string_decoder').StringDecoder;
3
4 var bench = common.createBenchmark(main, {
5   encoding: ['ascii', 'utf8', 'base64-utf8', 'base64-ascii'],
6   inlen: [32, 128, 1024],
7   chunk: [16, 64, 256, 1024],
8   n: [25e4]
9 });
10
11 var UTF_ALPHA = 'Blåbærsyltetøy';
12 var ASC_ALPHA = 'Blueberry jam';
13
14 function main(conf) {
15   var encoding = conf.encoding;
16   var inLen = conf.inlen | 0;
17   var chunkLen = conf.chunk | 0;
18   var n = conf.n | 0;
19
20   var alpha;
21   var chunks = [];
22   var str = '';
23   var isBase64 = (encoding === 'base64-ascii' || encoding === 'base64-utf8');
24
25   if (encoding === 'ascii' || encoding === 'base64-ascii')
26     alpha = ASC_ALPHA;
27   else if (encoding === 'utf8' || encoding === 'base64-utf8')
28     alpha = UTF_ALPHA;
29   else
30     throw new Error('Bad encoding');
31
32   var sd = new StringDecoder(isBase64 ? 'base64' : encoding);
33
34   for (var i = 0; i < inLen; ++i) {
35     if (i > 0 && (i % chunkLen) === 0 && !isBase64) {
36       chunks.push(new Buffer(str, encoding));
37       str = '';
38     }
39     str += alpha[i % alpha.length];
40   }
41   if (str.length > 0 && !isBase64)
42     chunks.push(new Buffer(str, encoding));
43   if (isBase64) {
44     str = new Buffer(str, 'utf8').toString('base64');
45     while (str.length > 0) {
46       var len = Math.min(chunkLen, str.length);
47       chunks.push(new Buffer(str.substring(0, len), 'utf8'));
48       str = str.substring(len);
49     }
50   }
51
52   var nChunks = chunks.length;
53
54   bench.start();
55   for (var i = 0; i < n; ++i) {
56     for (var j = 0; j < nChunks; ++j)
57       sd.write(chunks[j]);
58   }
59   bench.end(n);
60 }