UNPKG

4.72 kBJavaScriptView Raw
1(function() {
2 var BYTEWISE, CHANCE, CND, CODEC, alert, badge, debug, echo, help, info, log, report, rpr, start, stop, times, urge, warn, whisper, ƒ;
3
4 CND = require('cnd');
5
6 rpr = CND.rpr;
7
8 badge = 'HOLLERITH-CODEC/benchmarks';
9
10 log = CND.get_logger('plain', badge);
11
12 info = CND.get_logger('info', badge);
13
14 whisper = CND.get_logger('whisper', badge);
15
16 alert = CND.get_logger('alert', badge);
17
18 debug = CND.get_logger('debug', badge);
19
20 warn = CND.get_logger('warn', badge);
21
22 help = CND.get_logger('help', badge);
23
24 urge = CND.get_logger('urge', badge);
25
26 echo = CND.echo.bind(CND);
27
28 BYTEWISE = require('bytewise');
29
30 CODEC = require('./main');
31
32 CHANCE = new (require('chance'))();
33
34 ƒ = CND.format_number.bind(CND);
35
36 times = {};
37
38 start = function(name) {
39 whisper("start " + name);
40 times[name] = process.hrtime();
41 return null;
42 };
43
44 stop = function(name) {
45 var dt;
46 dt = process.hrtime(times[name]);
47 times[name] = dt[0] + dt[1] / 1e9;
48 return null;
49 };
50
51 report = function(n, min_name) {
52 var _, columnify_settings, data, dt, entry, max, min, name;
53 columnify_settings = {
54 config: {
55 dt: {
56 align: 'right'
57 },
58 rel: {
59 align: 'right'
60 },
61 max: {
62 align: 'right'
63 }
64 }
65 };
66 if (min_name != null) {
67 min = times[min_name];
68 } else {
69 min = Math.min.apply(Math, (function() {
70 var results;
71 results = [];
72 for (_ in times) {
73 dt = times[_];
74 results.push(dt);
75 }
76 return results;
77 })());
78 }
79 max = Math.max.apply(Math, (function() {
80 var results;
81 results = [];
82 for (_ in times) {
83 dt = times[_];
84 results.push(dt);
85 }
86 return results;
87 })());
88 debug('©q6yuS', min, max);
89 data = [];
90 for (name in times) {
91 dt = times[name];
92 entry = {
93 name: name,
94 dt: dt.toFixed(9),
95 rel: "" + ((dt / min).toFixed(2)),
96 max: "" + ((dt / max).toFixed(2))
97 };
98 data.push(entry);
99 }
100 urge("time needed to process " + (ƒ(n)) + " probes (lower is better):");
101 return help('\n' + CND.columnify(data, columnify_settings));
102 };
103
104 this.test_h2c = function(probes) {
105 var i, len, probe;
106 start('H2C.encode');
107 for (i = 0, len = probes.length; i < len; i++) {
108 probe = probes[i];
109 CODEC.encode(probe);
110 }
111 return stop('H2C.encode');
112 };
113
114 this.test_bytewise = function(probes) {
115 var i, len, probe;
116 start('bytewise.encode');
117 for (i = 0, len = probes.length; i < len; i++) {
118 probe = probes[i];
119 BYTEWISE.encode(probe);
120 }
121 return stop('bytewise.encode');
122 };
123
124 this.test_json = function(probes) {
125 var i, len, probe;
126 start('new Buffer JSON.stringify');
127 for (i = 0, len = probes.length; i < len; i++) {
128 probe = probes[i];
129 new Buffer(JSON.stringify(probe));
130 }
131 return stop('new Buffer JSON.stringify');
132 };
133
134 this.test_new_buffer = function(probes) {
135 var b, i, len, probe;
136 start('new_buffer');
137 for (i = 0, len = probes.length; i < len; i++) {
138 probe = probes[i];
139 b = new Buffer(probe);
140 }
141 return stop('new_buffer');
142 };
143
144 this.test_buffer_write = function(probes) {
145 var b, i, len, probe;
146 b = new Buffer(1024);
147 start('buffer_write');
148 for (i = 0, len = probes.length; i < len; i++) {
149 probe = probes[i];
150 b.write(probe[0]);
151 }
152 return stop('buffer_write');
153 };
154
155 this.test_string_replace = function(probes) {
156 var i, len, probe, x;
157 start('string_replace');
158 for (i = 0, len = probes.length; i < len; i++) {
159 probe = probes[i];
160 x = probe[0].replace(/a/g, '#');
161 }
162 return stop('string_replace');
163 };
164
165 this.main = function() {
166 var _, i, j, method_name, method_names, n, probe, probe_idx, probes, ref;
167 n = 100000;
168 whisper("generating " + (ƒ(n)) + " probes");
169 method_names = ['bool', 'word', 'floating', 'string'];
170 probes = [];
171 for (probe_idx = i = 1, ref = n; 1 <= ref ? i <= ref : i >= ref; probe_idx = 1 <= ref ? ++i : --i) {
172 probe = [];
173 for (_ = j = 0; j <= 3; _ = ++j) {
174 method_name = method_names[CND.random_integer(0, method_names.length - 1)];
175 probe.push(CHANCE[method_name]());
176 }
177 probes.push(probe);
178 }
179 help("generated " + (ƒ(probes.length)) + " probes; now performing benchmarks");
180 this.test_bytewise(probes);
181 this.test_json(probes);
182 this.test_h2c(probes);
183 return report(n, 'new Buffer JSON.stringify');
184 };
185
186 if (module.parent == null) {
187 this.main();
188 }
189
190}).call(this);
191
192//# sourceMappingURL=../sourcemaps/benchmark.js.map
\No newline at end of file