UNPKG

5.33 kBtext/coffeescriptView Raw
1
2
3
4
5
6
7
8
9############################################################################################################
10# njs_path = require 'path'
11# njs_fs = require 'fs'
12# join = njs_path.join
13#...........................................................................................................
14CND = require 'cnd'
15rpr = CND.rpr
16badge = 'HOLLERITH-CODEC/benchmarks'
17log = CND.get_logger 'plain', badge
18info = CND.get_logger 'info', badge
19whisper = CND.get_logger 'whisper', badge
20alert = CND.get_logger 'alert', badge
21debug = CND.get_logger 'debug', badge
22warn = CND.get_logger 'warn', badge
23help = CND.get_logger 'help', badge
24urge = CND.get_logger 'urge', badge
25echo = CND.echo.bind CND
26#...........................................................................................................
27BYTEWISE = require 'bytewise'
28CODEC = require './main'
29CHANCE = new ( require 'chance' )()
30ƒ = CND.format_number.bind CND
31
32#-----------------------------------------------------------------------------------------------------------
33times = {}
34
35#-----------------------------------------------------------------------------------------------------------
36start = ( name ) ->
37 whisper "start #{name}"
38 times[ name ] = process.hrtime()
39 return null
40
41#-----------------------------------------------------------------------------------------------------------
42stop = ( name ) ->
43 dt = process.hrtime times[ name ]
44 times[ name ] = dt[ 0 ] + dt[ 1 ] / 1e9
45 return null
46
47#-----------------------------------------------------------------------------------------------------------
48report = ( n, min_name ) ->
49 columnify_settings =
50 config:
51 dt: { align: 'right' }
52 rel: { align: 'right' }
53 max: { align: 'right' }
54 if min_name?
55 min = times[ min_name ]
56 else
57 min = Math.min ( dt for _, dt of times )...
58 max = Math.max ( dt for _, dt of times )...
59 debug '©q6yuS', min, max
60 data = []
61 for name, dt of times
62 # nanos = "000000000#{dt[ 1 ]}"
63 # nanos = nanos[ nanos.length - 9 .. nanos.length - 1 ]
64 # urge "#{dt[ 0 ]}.#{nanos} #{name}"
65 entry =
66 name: name
67 dt: ( dt.toFixed 9 )
68 rel: "#{( dt / min ).toFixed 2}"
69 max: "#{( dt / max ).toFixed 2}"
70 data.push entry
71 urge "time needed to process #{ƒ n} probes (lower is better):"
72 help '\n' + CND.columnify data, columnify_settings
73
74#-----------------------------------------------------------------------------------------------------------
75@test_h2c = ( probes ) ->
76 start 'H2C.encode'
77 CODEC.encode probe for probe in probes
78 stop 'H2C.encode'
79
80#-----------------------------------------------------------------------------------------------------------
81@test_bytewise = ( probes ) ->
82 start 'bytewise.encode'
83 BYTEWISE.encode probe for probe in probes
84 stop 'bytewise.encode'
85
86#-----------------------------------------------------------------------------------------------------------
87@test_json = ( probes ) ->
88 start 'new Buffer JSON.stringify'
89 new Buffer JSON.stringify probe for probe in probes
90 stop 'new Buffer JSON.stringify'
91
92#-----------------------------------------------------------------------------------------------------------
93@test_new_buffer = ( probes ) ->
94 start 'new_buffer'
95 for probe in probes
96 b = new Buffer probe
97 stop 'new_buffer'
98
99#-----------------------------------------------------------------------------------------------------------
100@test_buffer_write = ( probes ) ->
101 b = new Buffer 1024
102 start 'buffer_write'
103 for probe in probes
104 b.write probe[ 0 ]
105 stop 'buffer_write'
106
107#-----------------------------------------------------------------------------------------------------------
108@test_string_replace = ( probes ) ->
109 start 'string_replace'
110 for probe in probes
111 x = probe[ 0 ].replace /a/g, '#'
112 stop 'string_replace'
113
114#-----------------------------------------------------------------------------------------------------------
115@main = ->
116 n = 100000
117 whisper "generating #{ƒ n} probes"
118 method_names = [ 'bool', 'word', 'floating', 'string', ]
119 probes = []
120 for probe_idx in [ 1 .. n ]
121 probe = []
122 for _ in [ 0 .. 3 ]
123 method_name = method_names[ CND.random_integer 0, method_names.length - 1 ]
124 probe.push CHANCE[ method_name ]()
125 probes.push probe
126 #.........................................................................................................
127 help "generated #{ƒ probes.length} probes; now performing benchmarks"
128 @test_bytewise probes
129 @test_json probes
130 @test_h2c probes
131 # @test_new_buffer probes
132 # @test_buffer_write probes
133 # @test_string_replace probes
134 report n, 'new Buffer JSON.stringify'
135
136
137############################################################################################################
138unless module.parent?
139 @main()
140
141
142
143
144
145
146
147
148
149
150