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