UNPKG

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