UNPKG

6.66 kBJavaScriptView Raw
1// Generated by CoffeeScript 2.4.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 // nanos = "000000000#{dt[ 1 ]}"
100 // nanos = nanos[ nanos.length - 9 .. nanos.length - 1 ]
101 // urge "#{dt[ 0 ]}.#{nanos} #{name}"
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 // @test_new_buffer probes
202 // @test_buffer_write probes
203 // @test_string_replace probes
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//# sourceMappingURL=benchmark.js.map