radius-spec 0.4.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +28 -0
- data/.github/workflows/reviewdog.yml +21 -0
- data/.rubocop.yml +9 -5
- data/.yardopts +1 -0
- data/CHANGELOG.md +111 -1
- data/Gemfile +3 -4
- data/README.md +335 -37
- data/benchmarks/bm_setup.rb +1 -0
- data/benchmarks/call_vs_yield.rb +33 -2
- data/benchmarks/casecmp_vs_downcase.rb +488 -0
- data/benchmarks/cover_vs_include.rb +2 -2
- data/benchmarks/format_string.rb +3 -3
- data/benchmarks/hash_each.rb +305 -0
- data/benchmarks/hash_merge.rb +1 -1
- data/benchmarks/hash_transform.rb +455 -0
- data/benchmarks/unfreeze_string.rb +0 -2
- data/bin/ci +1 -1
- data/common_rubocop.yml +168 -41
- data/common_rubocop_rails.yml +107 -21
- data/lib/radius/spec/model_factory.rb +35 -24
- data/lib/radius/spec/rails.rb +1 -1
- data/lib/radius/spec/rspec/negated_matchers.rb +19 -0
- data/lib/radius/spec/rspec.rb +20 -0
- data/lib/radius/spec/tempfile.rb +162 -0
- data/lib/radius/spec/vcr.rb +98 -0
- data/lib/radius/spec/version.rb +1 -1
- data/radius-spec.gemspec +8 -7
- metadata +44 -20
- data/.travis.yml +0 -17
- data/bin/ci-code-review +0 -28
- data/bin/travis +0 -29
@@ -5,7 +5,7 @@ require_relative 'bm_setup'
|
|
5
5
|
|
6
6
|
display_benchmark_header
|
7
7
|
|
8
|
-
INT_RANGE = (0..15)
|
8
|
+
INT_RANGE = (0..15).freeze
|
9
9
|
INT_VAR = 10
|
10
10
|
|
11
11
|
section "Integer ranges" do |bench|
|
@@ -30,7 +30,7 @@ BEGIN_OF_JULY = Time.utc(2015, 7, 1)
|
|
30
30
|
END_OF_JULY = Time.utc(2015, 7, 31)
|
31
31
|
DAY_IN_JULY = Time.utc(2015, 7, 15)
|
32
32
|
|
33
|
-
TIME_RANGE = (BEGIN_OF_JULY..END_OF_JULY)
|
33
|
+
TIME_RANGE = (BEGIN_OF_JULY..END_OF_JULY).freeze
|
34
34
|
|
35
35
|
section "Time ranges" do |bench|
|
36
36
|
bench.report('range#cover?') do
|
data/benchmarks/format_string.rb
CHANGED
@@ -15,15 +15,15 @@ MULTI_TOKEN_HASH = {
|
|
15
15
|
# rubocop:disable Style/FormatString
|
16
16
|
section "Format String" do |bench|
|
17
17
|
bench.report("String#%") do
|
18
|
-
'%10s' % 'hoge'
|
18
|
+
'%10s' % 'hoge' # rubocop:disable Style/FormatStringToken
|
19
19
|
end
|
20
20
|
|
21
21
|
bench.report("format") do
|
22
|
-
format '%10s', 'hoge'
|
22
|
+
format '%10s', 'hoge' # rubocop:disable Style/FormatStringToken
|
23
23
|
end
|
24
24
|
|
25
25
|
bench.report("sprintf") do
|
26
|
-
sprintf '%10s', 'hoge'
|
26
|
+
sprintf '%10s', 'hoge' # rubocop:disable Style/FormatStringToken
|
27
27
|
end
|
28
28
|
end
|
29
29
|
# rubocop:enable Style/FormatString
|
@@ -0,0 +1,305 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Run from the command line: bundle exec ruby benchmarks/hash_merge.rb
|
4
|
+
require_relative 'bm_setup'
|
5
|
+
|
6
|
+
# rubocop:disable Style/HashEachMethods
|
7
|
+
|
8
|
+
display_benchmark_header
|
9
|
+
|
10
|
+
# Bad per Rubocop
|
11
|
+
def hash_keys_each(hash)
|
12
|
+
hash.keys.each { |k| k + 1 }
|
13
|
+
|
14
|
+
# Return nil to avoid array creation penalty which may skew benchmark
|
15
|
+
nil
|
16
|
+
end
|
17
|
+
|
18
|
+
# Good per Rubocop
|
19
|
+
def hash_each_key(hash)
|
20
|
+
hash.each_key { |k| k + 1 }
|
21
|
+
|
22
|
+
# Return nil to avoid array creation penalty which may skew benchmark
|
23
|
+
nil
|
24
|
+
end
|
25
|
+
|
26
|
+
[
|
27
|
+
[],
|
28
|
+
(1..5),
|
29
|
+
(1..10),
|
30
|
+
(1..20),
|
31
|
+
(1..100),
|
32
|
+
(1..500),
|
33
|
+
].each do |data|
|
34
|
+
test_hash = data.zip(data).to_h
|
35
|
+
|
36
|
+
section "Hash key enumeration (size=#{data.size})" do |bench|
|
37
|
+
bench.report("Hash.keys.each") do
|
38
|
+
hash_keys_each(test_hash)
|
39
|
+
end
|
40
|
+
|
41
|
+
bench.report("Hash.each_key") do
|
42
|
+
hash_each_key(test_hash)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# Bad per Rubocop
|
48
|
+
def hash_values_each(hash)
|
49
|
+
hash.values.each { |v| v + 1 }
|
50
|
+
|
51
|
+
# Return nil to avoid array creation penalty which may skew benchmark
|
52
|
+
nil
|
53
|
+
end
|
54
|
+
|
55
|
+
# Good per Rubocop
|
56
|
+
def hash_each_value(hash)
|
57
|
+
hash.each_value { |v| v + 1 }
|
58
|
+
|
59
|
+
# Return nil to avoid array creation penalty which may skew benchmark
|
60
|
+
nil
|
61
|
+
end
|
62
|
+
|
63
|
+
[
|
64
|
+
[],
|
65
|
+
(1..5),
|
66
|
+
(1..10),
|
67
|
+
(1..20),
|
68
|
+
(1..100),
|
69
|
+
(1..500),
|
70
|
+
].each do |data|
|
71
|
+
test_hash = data.zip(data).to_h
|
72
|
+
|
73
|
+
section "Hash value enumeration (size=#{data.size})" do |bench|
|
74
|
+
bench.report("Hash.values.each") do
|
75
|
+
hash_values_each(test_hash)
|
76
|
+
end
|
77
|
+
|
78
|
+
bench.report("Hash.each_value") do
|
79
|
+
hash_each_value(test_hash)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# rubocop:enable Style/HashEachMethods
|
85
|
+
|
86
|
+
__END__
|
87
|
+
|
88
|
+
### Environment
|
89
|
+
|
90
|
+
Heroku Performance-L Dyno
|
91
|
+
|
92
|
+
ruby 2.7.3p183 (2021-04-05 revision 6847ee089d) [x86_64-linux]
|
93
|
+
GC Disabled: false
|
94
|
+
|
95
|
+
### Test Cases
|
96
|
+
|
97
|
+
Behavior for the keys and value enumerations is roughly equivalent. As
|
98
|
+
hypothesized the `each_xyz` versions are faster. What is surprising is that the
|
99
|
+
performance difference drops off drastically the larger the hash, even for
|
100
|
+
small hash sizes. Basically, once the hash reaches 10 times, the performance
|
101
|
+
gains are constant after that point (around 1 - 4%).
|
102
|
+
|
103
|
+
#### Hash key enumeration (size=0)
|
104
|
+
|
105
|
+
```
|
106
|
+
Warming up --------------------------------------
|
107
|
+
Hash.keys.each 913.942k i/100ms
|
108
|
+
Hash.each_key 1.376M i/100ms
|
109
|
+
Calculating -------------------------------------
|
110
|
+
Hash.keys.each 9.167M (± 0.0%) i/s - 46.611M in 5.084564s
|
111
|
+
Hash.each_key 13.734M (± 0.2%) i/s - 68.779M in 5.008581s
|
112
|
+
with 95.0% confidence
|
113
|
+
|
114
|
+
Comparison:
|
115
|
+
Hash.each_key: 13734476.7 i/s
|
116
|
+
Hash.keys.each: 9167168.9 i/s - 1.50x (± 0.00) slower
|
117
|
+
with 95.0% confidence
|
118
|
+
```
|
119
|
+
|
120
|
+
#### Hash key enumeration (size=5)
|
121
|
+
|
122
|
+
```
|
123
|
+
Warming up --------------------------------------
|
124
|
+
Hash.keys.each 319.678k i/100ms
|
125
|
+
Hash.each_key 360.081k i/100ms
|
126
|
+
Calculating -------------------------------------
|
127
|
+
Hash.keys.each 3.190M (± 0.4%) i/s - 15.984M in 5.012434s
|
128
|
+
Hash.each_key 3.596M (± 0.0%) i/s - 18.004M in 5.006636s
|
129
|
+
with 95.0% confidence
|
130
|
+
|
131
|
+
Comparison:
|
132
|
+
Hash.each_key: 3596043.0 i/s
|
133
|
+
Hash.keys.each: 3189893.5 i/s - 1.13x (± 0.00) slower
|
134
|
+
with 95.0% confidence
|
135
|
+
```
|
136
|
+
|
137
|
+
#### Hash key enumeration (size=10)
|
138
|
+
|
139
|
+
```
|
140
|
+
Warming up --------------------------------------
|
141
|
+
Hash.keys.each 201.546k i/100ms
|
142
|
+
Hash.each_key 209.461k i/100ms
|
143
|
+
Calculating -------------------------------------
|
144
|
+
Hash.keys.each 2.019M (± 0.3%) i/s - 10.279M in 5.092727s
|
145
|
+
Hash.each_key 2.095M (± 0.0%) i/s - 10.683M in 5.099576s
|
146
|
+
with 95.0% confidence
|
147
|
+
|
148
|
+
Comparison:
|
149
|
+
Hash.each_key: 2094785.3 i/s
|
150
|
+
Hash.keys.each: 2018768.6 i/s - 1.04x (± 0.00) slower
|
151
|
+
with 95.0% confidence
|
152
|
+
```
|
153
|
+
|
154
|
+
#### Hash key enumeration (size=20)
|
155
|
+
|
156
|
+
```
|
157
|
+
Warming up --------------------------------------
|
158
|
+
Hash.keys.each 118.004k i/100ms
|
159
|
+
Hash.each_key 118.320k i/100ms
|
160
|
+
Calculating -------------------------------------
|
161
|
+
Hash.keys.each 1.176M (± 0.4%) i/s - 5.900M in 5.021554s
|
162
|
+
Hash.each_key 1.182M (± 0.2%) i/s - 5.916M in 5.006809s
|
163
|
+
with 95.0% confidence
|
164
|
+
|
165
|
+
Comparison:
|
166
|
+
Hash.each_key: 1181738.4 i/s
|
167
|
+
Hash.keys.each: 1175522.6 i/s - same-ish: difference falls within error
|
168
|
+
with 95.0% confidence
|
169
|
+
```
|
170
|
+
|
171
|
+
#### Hash key enumeration (size=100)
|
172
|
+
|
173
|
+
```
|
174
|
+
Warming up --------------------------------------
|
175
|
+
Hash.keys.each 27.217k i/100ms
|
176
|
+
Hash.each_key 26.138k i/100ms
|
177
|
+
Calculating -------------------------------------
|
178
|
+
Hash.keys.each 272.497k (± 0.0%) i/s - 1.388M in 5.093882s
|
179
|
+
Hash.each_key 260.563k (± 0.4%) i/s - 1.307M in 5.017483s
|
180
|
+
with 95.0% confidence
|
181
|
+
|
182
|
+
Comparison:
|
183
|
+
Hash.keys.each: 272497.2 i/s
|
184
|
+
Hash.each_key: 260563.2 i/s - 1.05x (± 0.00) slower
|
185
|
+
with 95.0% confidence
|
186
|
+
```
|
187
|
+
|
188
|
+
#### Hash key enumeration (size=500)
|
189
|
+
|
190
|
+
```
|
191
|
+
Warming up --------------------------------------
|
192
|
+
Hash.keys.each 5.592k i/100ms
|
193
|
+
Hash.each_key 5.404k i/100ms
|
194
|
+
Calculating -------------------------------------
|
195
|
+
Hash.keys.each 55.763k (± 0.2%) i/s - 279.600k in 5.014897s
|
196
|
+
Hash.each_key 54.060k (± 0.1%) i/s - 275.604k in 5.098253s
|
197
|
+
with 95.0% confidence
|
198
|
+
|
199
|
+
Comparison:
|
200
|
+
Hash.keys.each: 55763.3 i/s
|
201
|
+
Hash.each_key: 54060.3 i/s - 1.03x (± 0.00) slower
|
202
|
+
with 95.0% confidence
|
203
|
+
```
|
204
|
+
|
205
|
+
#### Hash value enumeration (size=0)
|
206
|
+
|
207
|
+
```
|
208
|
+
Warming up --------------------------------------
|
209
|
+
Hash.values.each 922.361k i/100ms
|
210
|
+
Hash.each_value 1.372M i/100ms
|
211
|
+
Calculating -------------------------------------
|
212
|
+
Hash.values.each 9.229M (± 0.0%) i/s - 47.040M in 5.096857s
|
213
|
+
Hash.each_value 13.736M (± 0.0%) i/s - 69.983M in 5.094986s
|
214
|
+
with 95.0% confidence
|
215
|
+
|
216
|
+
Comparison:
|
217
|
+
Hash.each_value: 13735592.7 i/s
|
218
|
+
Hash.values.each: 9229287.5 i/s - 1.49x (± 0.00) slower
|
219
|
+
with 95.0% confidence
|
220
|
+
```
|
221
|
+
|
222
|
+
#### Hash value enumeration (size=5)
|
223
|
+
|
224
|
+
```
|
225
|
+
Warming up --------------------------------------
|
226
|
+
Hash.values.each 317.174k i/100ms
|
227
|
+
Hash.each_value 358.507k i/100ms
|
228
|
+
Calculating -------------------------------------
|
229
|
+
Hash.values.each 3.190M (± 0.0%) i/s - 16.176M in 5.071511s
|
230
|
+
Hash.each_value 3.582M (± 0.0%) i/s - 17.925M in 5.004607s
|
231
|
+
with 95.0% confidence
|
232
|
+
|
233
|
+
Comparison:
|
234
|
+
Hash.each_value: 3581759.4 i/s
|
235
|
+
Hash.values.each: 3189555.5 i/s - 1.12x (± 0.00) slower
|
236
|
+
with 95.0% confidence
|
237
|
+
```
|
238
|
+
|
239
|
+
#### Hash value enumeration (size=10)
|
240
|
+
|
241
|
+
```
|
242
|
+
Warming up --------------------------------------
|
243
|
+
Hash.values.each 201.766k i/100ms
|
244
|
+
Hash.each_value 209.128k i/100ms
|
245
|
+
Calculating -------------------------------------
|
246
|
+
Hash.values.each 2.032M (± 0.0%) i/s - 10.290M in 5.065224s
|
247
|
+
Hash.each_value 2.093M (± 0.0%) i/s - 10.666M in 5.096053s
|
248
|
+
with 95.0% confidence
|
249
|
+
|
250
|
+
Comparison:
|
251
|
+
Hash.each_value: 2092905.3 i/s
|
252
|
+
Hash.values.each: 2031517.4 i/s - 1.03x (± 0.00) slower
|
253
|
+
with 95.0% confidence
|
254
|
+
```
|
255
|
+
|
256
|
+
#### Hash value enumeration (size=20)
|
257
|
+
|
258
|
+
```
|
259
|
+
Warming up --------------------------------------
|
260
|
+
Hash.values.each 117.255k i/100ms
|
261
|
+
Hash.each_value 117.577k i/100ms
|
262
|
+
Calculating -------------------------------------
|
263
|
+
Hash.values.each 1.182M (± 0.1%) i/s - 5.980M in 5.058729s
|
264
|
+
Hash.each_value 1.176M (± 0.0%) i/s - 5.996M in 5.098809s
|
265
|
+
with 95.0% confidence
|
266
|
+
|
267
|
+
Comparison:
|
268
|
+
Hash.values.each: 1182126.7 i/s
|
269
|
+
Hash.each_value: 1176047.5 i/s - 1.01x (± 0.00) slower
|
270
|
+
with 95.0% confidence
|
271
|
+
```
|
272
|
+
|
273
|
+
#### Hash value enumeration (size=100)
|
274
|
+
|
275
|
+
```
|
276
|
+
Warming up --------------------------------------
|
277
|
+
Hash.values.each 27.263k i/100ms
|
278
|
+
Hash.each_value 26.208k i/100ms
|
279
|
+
Calculating -------------------------------------
|
280
|
+
Hash.values.each 275.209k (± 0.0%) i/s - 1.390M in 5.052242s
|
281
|
+
Hash.each_value 261.696k (± 0.0%) i/s - 1.310M in 5.007358s
|
282
|
+
with 95.0% confidence
|
283
|
+
|
284
|
+
Comparison:
|
285
|
+
Hash.values.each: 275209.0 i/s
|
286
|
+
Hash.each_value: 261696.2 i/s - 1.05x (± 0.00) slower
|
287
|
+
with 95.0% confidence
|
288
|
+
```
|
289
|
+
|
290
|
+
#### Hash value enumeration (size=500)
|
291
|
+
|
292
|
+
```
|
293
|
+
Warming up --------------------------------------
|
294
|
+
Hash.values.each 5.586k i/100ms
|
295
|
+
Hash.each_value 5.408k i/100ms
|
296
|
+
Calculating -------------------------------------
|
297
|
+
Hash.values.each 56.245k (± 0.2%) i/s - 284.886k in 5.066190s
|
298
|
+
Hash.each_value 54.104k (± 0.0%) i/s - 275.808k in 5.097780s
|
299
|
+
with 95.0% confidence
|
300
|
+
|
301
|
+
Comparison:
|
302
|
+
Hash.values.each: 56244.5 i/s
|
303
|
+
Hash.each_value: 54104.0 i/s - 1.04x (± 0.00) slower
|
304
|
+
with 95.0% confidence
|
305
|
+
```
|
data/benchmarks/hash_merge.rb
CHANGED
@@ -0,0 +1,455 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Run from the command line: bundle exec ruby benchmarks/hash_merge.rb
|
4
|
+
require_relative 'bm_setup'
|
5
|
+
|
6
|
+
display_benchmark_header
|
7
|
+
|
8
|
+
# rubocop:disable Style/HashTransformKeys
|
9
|
+
# Bad per Rubocop
|
10
|
+
def hash_transform_key_each_with_object(hash)
|
11
|
+
hash.each_with_object({}) { |(k, v), h| h[k + 100] = v }
|
12
|
+
end
|
13
|
+
|
14
|
+
# Bad per Rubocop
|
15
|
+
def hash_transform_key_hash_collect(hash)
|
16
|
+
Hash[hash.collect { |k, v| [k + 100, v] }]
|
17
|
+
end
|
18
|
+
|
19
|
+
# Bad per Rubocop
|
20
|
+
def hash_transform_key_map_to_h(hash)
|
21
|
+
hash.map { |k, v| [k + 100, v] }.to_h
|
22
|
+
end
|
23
|
+
|
24
|
+
# Bad per Rubocop
|
25
|
+
def hash_transform_key_to_h_block(hash)
|
26
|
+
hash.to_h { |k, v| [k + 100, v] }
|
27
|
+
end
|
28
|
+
|
29
|
+
# Good per Rubocop
|
30
|
+
def hash_transform_keys(hash)
|
31
|
+
hash.transform_keys { |k| k + 100 }
|
32
|
+
end
|
33
|
+
# rubocop:enable Style/HashTransformKeys
|
34
|
+
|
35
|
+
[
|
36
|
+
[],
|
37
|
+
(1..5),
|
38
|
+
(1..10),
|
39
|
+
(1..20),
|
40
|
+
(1..100),
|
41
|
+
(1..500),
|
42
|
+
].each do |data|
|
43
|
+
test_hash = data.zip(data).to_h
|
44
|
+
|
45
|
+
section "Hash transform keys (size=#{data.size})" do |bench|
|
46
|
+
bench.report("each_with_object") do
|
47
|
+
hash_transform_key_each_with_object(test_hash)
|
48
|
+
end
|
49
|
+
|
50
|
+
bench.report("collect.Hash") do
|
51
|
+
hash_transform_key_hash_collect(test_hash)
|
52
|
+
end
|
53
|
+
|
54
|
+
bench.report("map.to_h") do
|
55
|
+
hash_transform_key_map_to_h(test_hash)
|
56
|
+
end
|
57
|
+
|
58
|
+
bench.report("to_h block") do
|
59
|
+
hash_transform_key_to_h_block(test_hash)
|
60
|
+
end
|
61
|
+
|
62
|
+
bench.report("transform_keys") do
|
63
|
+
hash_transform_keys(test_hash)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# rubocop:disable Style/HashTransformValues
|
69
|
+
# Bad per Rubocop
|
70
|
+
def hash_transform_value_each_with_object(hash)
|
71
|
+
hash.each_with_object({}) { |(k, v), h| h[k] = v + 100 }
|
72
|
+
end
|
73
|
+
|
74
|
+
# Bad per Rubocop
|
75
|
+
def hash_transform_value_hash_collect(hash)
|
76
|
+
Hash[hash.collect { |k, v| [k, v + 100] }]
|
77
|
+
end
|
78
|
+
|
79
|
+
# Bad per Rubocop
|
80
|
+
def hash_transform_value_map_to_h(hash)
|
81
|
+
hash.map { |k, v| [k, v + 100] }.to_h
|
82
|
+
end
|
83
|
+
|
84
|
+
# Bad per Rubocop
|
85
|
+
def hash_transform_value_to_h_block(hash)
|
86
|
+
hash.to_h { |k, v| [k, v + 100] }
|
87
|
+
end
|
88
|
+
|
89
|
+
# Good per Rubocop
|
90
|
+
def hash_transform_values(hash)
|
91
|
+
hash.transform_values { |v| v + 100 }
|
92
|
+
end
|
93
|
+
# rubocop:enable Style/HashTransformValues
|
94
|
+
|
95
|
+
[
|
96
|
+
[],
|
97
|
+
(1..5),
|
98
|
+
(1..10),
|
99
|
+
(1..20),
|
100
|
+
(1..100),
|
101
|
+
(1..500),
|
102
|
+
].each do |data|
|
103
|
+
test_hash = data.zip(data).to_h
|
104
|
+
|
105
|
+
section "Hash value enumeration (size=#{data.size})" do |bench|
|
106
|
+
bench.report("each_with_object") do
|
107
|
+
hash_transform_value_each_with_object(test_hash)
|
108
|
+
end
|
109
|
+
|
110
|
+
bench.report("collect.Hash") do
|
111
|
+
hash_transform_value_hash_collect(test_hash)
|
112
|
+
end
|
113
|
+
|
114
|
+
bench.report("map.to_h") do
|
115
|
+
hash_transform_value_map_to_h(test_hash)
|
116
|
+
end
|
117
|
+
|
118
|
+
bench.report("to_h block") do
|
119
|
+
hash_transform_value_to_h_block(test_hash)
|
120
|
+
end
|
121
|
+
|
122
|
+
bench.report("transform_values") do
|
123
|
+
hash_transform_values(test_hash)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
__END__
|
129
|
+
|
130
|
+
### Environment
|
131
|
+
|
132
|
+
Heroku Performance-L Dyno
|
133
|
+
|
134
|
+
ruby 2.7.3p183 (2021-04-05 revision 6847ee089d) [x86_64-linux]
|
135
|
+
GC Disabled: false
|
136
|
+
|
137
|
+
### Test Cases
|
138
|
+
|
139
|
+
These benchmarks confirm that regardless of the size of the hash, the
|
140
|
+
`transform_xyz` variants are much faster than the alternatives. It's
|
141
|
+
interesting to note that the performance difference for some of the variants
|
142
|
+
decreases as the hash size increases. However, even with the largest hash the
|
143
|
+
`transform_xyz` version is significantly faster.
|
144
|
+
|
145
|
+
#### Hash transform keys (size=0)
|
146
|
+
|
147
|
+
```
|
148
|
+
Warming up --------------------------------------
|
149
|
+
each_with_object 538.673k i/100ms
|
150
|
+
collect.Hash 342.897k i/100ms
|
151
|
+
map.to_h 426.927k i/100ms
|
152
|
+
to_h block 1.043M i/100ms
|
153
|
+
transform_keys 1.083M i/100ms
|
154
|
+
Calculating -------------------------------------
|
155
|
+
each_with_object 5.396M (± 0.0%) i/s - 27.472M in 5.091587s
|
156
|
+
collect.Hash 3.434M (± 0.0%) i/s - 17.488M in 5.093257s
|
157
|
+
map.to_h 4.263M (± 0.0%) i/s - 21.346M in 5.007195s
|
158
|
+
to_h block 10.431M (± 0.0%) i/s - 52.164M in 5.000982s
|
159
|
+
transform_keys 10.821M (± 0.0%) i/s - 54.133M in 5.002821s
|
160
|
+
with 95.0% confidence
|
161
|
+
|
162
|
+
Comparison:
|
163
|
+
transform_keys: 10820597.2 i/s
|
164
|
+
to_h block: 10430816.6 i/s - 1.04x (± 0.00) slower
|
165
|
+
each_with_object: 5395639.2 i/s - 2.01x (± 0.00) slower
|
166
|
+
map.to_h: 4263178.7 i/s - 2.54x (± 0.00) slower
|
167
|
+
collect.Hash: 3433510.5 i/s - 3.15x (± 0.00) slower
|
168
|
+
with 95.0% confidence
|
169
|
+
```
|
170
|
+
|
171
|
+
#### Hash transform keys (size=5)
|
172
|
+
|
173
|
+
```
|
174
|
+
Warming up --------------------------------------
|
175
|
+
each_with_object 101.033k i/100ms
|
176
|
+
collect.Hash 91.559k i/100ms
|
177
|
+
map.to_h 97.138k i/100ms
|
178
|
+
to_h block 144.964k i/100ms
|
179
|
+
transform_keys 236.915k i/100ms
|
180
|
+
Calculating -------------------------------------
|
181
|
+
each_with_object 1.009M (± 0.0%) i/s - 5.052M in 5.008941s
|
182
|
+
collect.Hash 914.359k (± 0.2%) i/s - 4.578M in 5.007666s
|
183
|
+
map.to_h 968.789k (± 0.0%) i/s - 4.857M in 5.013387s
|
184
|
+
to_h block 1.452M (± 0.0%) i/s - 7.393M in 5.091421s
|
185
|
+
transform_keys 2.371M (± 0.1%) i/s - 12.083M in 5.096820s
|
186
|
+
with 95.0% confidence
|
187
|
+
|
188
|
+
Comparison:
|
189
|
+
transform_keys: 2370806.9 i/s
|
190
|
+
to_h block: 1452082.9 i/s - 1.63x (± 0.00) slower
|
191
|
+
each_with_object: 1008530.1 i/s - 2.35x (± 0.00) slower
|
192
|
+
map.to_h: 968788.7 i/s - 2.45x (± 0.00) slower
|
193
|
+
collect.Hash: 914358.6 i/s - 2.59x (± 0.01) slower
|
194
|
+
with 95.0% confidence
|
195
|
+
```
|
196
|
+
|
197
|
+
#### Hash transform keys (size=10)
|
198
|
+
|
199
|
+
```
|
200
|
+
Warming up --------------------------------------
|
201
|
+
each_with_object 48.415k i/100ms
|
202
|
+
collect.Hash 49.273k i/100ms
|
203
|
+
map.to_h 54.155k i/100ms
|
204
|
+
to_h block 72.567k i/100ms
|
205
|
+
transform_keys 99.649k i/100ms
|
206
|
+
Calculating -------------------------------------
|
207
|
+
each_with_object 438.801k (± 0.2%) i/s - 2.227M in 5.075718s
|
208
|
+
collect.Hash 493.563k (± 0.1%) i/s - 2.513M in 5.091711s
|
209
|
+
map.to_h 550.742k (± 0.0%) i/s - 2.762M in 5.014922s
|
210
|
+
to_h block 725.526k (± 0.0%) i/s - 3.628M in 5.001047s
|
211
|
+
transform_keys 997.743k (± 0.4%) i/s - 5.082M in 5.094699s
|
212
|
+
with 95.0% confidence
|
213
|
+
|
214
|
+
Comparison:
|
215
|
+
transform_keys: 997742.9 i/s
|
216
|
+
to_h block: 725525.6 i/s - 1.38x (± 0.00) slower
|
217
|
+
map.to_h: 550741.9 i/s - 1.81x (± 0.01) slower
|
218
|
+
collect.Hash: 493562.5 i/s - 2.02x (± 0.01) slower
|
219
|
+
each_with_object: 438801.5 i/s - 2.27x (± 0.01) slower
|
220
|
+
with 95.0% confidence
|
221
|
+
```
|
222
|
+
|
223
|
+
#### Hash transform keys (size=20)
|
224
|
+
|
225
|
+
```
|
226
|
+
Warming up --------------------------------------
|
227
|
+
each_with_object 27.891k i/100ms
|
228
|
+
collect.Hash 30.118k i/100ms
|
229
|
+
map.to_h 31.586k i/100ms
|
230
|
+
to_h block 41.472k i/100ms
|
231
|
+
transform_keys 56.874k i/100ms
|
232
|
+
Calculating -------------------------------------
|
233
|
+
each_with_object 259.309k (± 0.2%) i/s - 1.311M in 5.055247s
|
234
|
+
collect.Hash 301.677k (± 0.0%) i/s - 1.536M in 5.091598s
|
235
|
+
map.to_h 316.764k (± 0.0%) i/s - 1.611M in 5.085459s
|
236
|
+
to_h block 416.878k (± 0.0%) i/s - 2.115M in 5.073771s
|
237
|
+
transform_keys 566.454k (± 0.4%) i/s - 2.844M in 5.021314s
|
238
|
+
with 95.0% confidence
|
239
|
+
|
240
|
+
Comparison:
|
241
|
+
transform_keys: 566453.6 i/s
|
242
|
+
to_h block: 416877.9 i/s - 1.36x (± 0.01) slower
|
243
|
+
map.to_h: 316763.9 i/s - 1.79x (± 0.01) slower
|
244
|
+
collect.Hash: 301677.3 i/s - 1.88x (± 0.01) slower
|
245
|
+
each_with_object: 259308.7 i/s - 2.18x (± 0.01) slower
|
246
|
+
with 95.0% confidence
|
247
|
+
```
|
248
|
+
|
249
|
+
#### Hash transform keys (size=100)
|
250
|
+
|
251
|
+
```
|
252
|
+
Warming up --------------------------------------
|
253
|
+
each_with_object 6.252k i/100ms
|
254
|
+
collect.Hash 6.684k i/100ms
|
255
|
+
map.to_h 7.193k i/100ms
|
256
|
+
to_h block 9.181k i/100ms
|
257
|
+
transform_keys 12.110k i/100ms
|
258
|
+
Calculating -------------------------------------
|
259
|
+
each_with_object 62.523k (± 0.0%) i/s - 318.852k in 5.099821s
|
260
|
+
collect.Hash 66.729k (± 0.0%) i/s - 334.200k in 5.008308s
|
261
|
+
map.to_h 71.711k (± 0.0%) i/s - 359.650k in 5.015342s
|
262
|
+
to_h block 91.347k (± 0.0%) i/s - 459.050k in 5.025450s
|
263
|
+
transform_keys 122.210k (± 0.1%) i/s - 617.610k in 5.053842s
|
264
|
+
with 95.0% confidence
|
265
|
+
|
266
|
+
Comparison:
|
267
|
+
transform_keys: 122210.0 i/s
|
268
|
+
to_h block: 91347.2 i/s - 1.34x (± 0.00) slower
|
269
|
+
map.to_h: 71710.5 i/s - 1.70x (± 0.00) slower
|
270
|
+
collect.Hash: 66729.5 i/s - 1.83x (± 0.00) slower
|
271
|
+
each_with_object: 62522.6 i/s - 1.95x (± 0.00) slower
|
272
|
+
with 95.0% confidence
|
273
|
+
```
|
274
|
+
|
275
|
+
#### Hash transform keys (size=500)
|
276
|
+
|
277
|
+
```
|
278
|
+
Warming up --------------------------------------
|
279
|
+
each_with_object 1.309k i/100ms
|
280
|
+
collect.Hash 1.397k i/100ms
|
281
|
+
map.to_h 1.501k i/100ms
|
282
|
+
to_h block 1.881k i/100ms
|
283
|
+
transform_keys 2.564k i/100ms
|
284
|
+
Calculating -------------------------------------
|
285
|
+
each_with_object 13.113k (± 0.1%) i/s - 66.759k in 5.090832s
|
286
|
+
collect.Hash 13.971k (± 0.1%) i/s - 69.850k in 5.000147s
|
287
|
+
map.to_h 14.983k (± 0.0%) i/s - 75.050k in 5.009121s
|
288
|
+
to_h block 18.827k (± 0.0%) i/s - 95.931k in 5.095314s
|
289
|
+
transform_keys 26.712k (± 0.8%) i/s - 135.892k in 5.092990s
|
290
|
+
with 95.0% confidence
|
291
|
+
|
292
|
+
Comparison:
|
293
|
+
transform_keys: 26711.7 i/s
|
294
|
+
to_h block: 18827.4 i/s - 1.42x (± 0.01) slower
|
295
|
+
map.to_h: 14982.9 i/s - 1.78x (± 0.01) slower
|
296
|
+
collect.Hash: 13970.7 i/s - 1.91x (± 0.02) slower
|
297
|
+
each_with_object: 13113.5 i/s - 2.04x (± 0.02) slower
|
298
|
+
with 95.0% confidence
|
299
|
+
```
|
300
|
+
|
301
|
+
#### Hash value enumeration (size=0)
|
302
|
+
|
303
|
+
```
|
304
|
+
Warming up --------------------------------------
|
305
|
+
each_with_object 536.283k i/100ms
|
306
|
+
collect.Hash 343.935k i/100ms
|
307
|
+
map.to_h 412.861k i/100ms
|
308
|
+
to_h block 1.006M i/100ms
|
309
|
+
transform_values 1.034M i/100ms
|
310
|
+
Calculating -------------------------------------
|
311
|
+
each_with_object 5.354M (± 0.3%) i/s - 26.814M in 5.009608s
|
312
|
+
collect.Hash 3.438M (± 0.0%) i/s - 17.197M in 5.001856s
|
313
|
+
map.to_h 4.129M (± 0.0%) i/s - 20.643M in 4.999982s
|
314
|
+
to_h block 9.850M (± 0.0%) i/s - 49.315M in 5.006595s
|
315
|
+
transform_values 10.253M (± 0.0%) i/s - 51.721M in 5.044573s
|
316
|
+
with 95.0% confidence
|
317
|
+
|
318
|
+
Comparison:
|
319
|
+
transform_values: 10252746.8 i/s
|
320
|
+
to_h block: 9850031.5 i/s - 1.04x (± 0.00) slower
|
321
|
+
each_with_object: 5353850.7 i/s - 1.92x (± 0.01) slower
|
322
|
+
map.to_h: 4128725.3 i/s - 2.48x (± 0.00) slower
|
323
|
+
collect.Hash: 3438102.9 i/s - 2.98x (± 0.00) slower
|
324
|
+
with 95.0% confidence
|
325
|
+
```
|
326
|
+
|
327
|
+
#### Hash value enumeration (size=5)
|
328
|
+
|
329
|
+
```
|
330
|
+
Warming up --------------------------------------
|
331
|
+
each_with_object 101.174k i/100ms
|
332
|
+
collect.Hash 91.846k i/100ms
|
333
|
+
map.to_h 96.742k i/100ms
|
334
|
+
to_h block 144.714k i/100ms
|
335
|
+
transform_values 334.829k i/100ms
|
336
|
+
Calculating -------------------------------------
|
337
|
+
each_with_object 1.011M (± 0.0%) i/s - 5.059M in 5.002511s
|
338
|
+
collect.Hash 916.962k (± 0.0%) i/s - 4.592M in 5.008221s
|
339
|
+
map.to_h 969.007k (± 0.0%) i/s - 4.934M in 5.091657s
|
340
|
+
to_h block 1.447M (± 0.0%) i/s - 7.236M in 5.000091s
|
341
|
+
transform_values 3.356M (± 0.1%) i/s - 17.076M in 5.089207s
|
342
|
+
with 95.0% confidence
|
343
|
+
|
344
|
+
Comparison:
|
345
|
+
transform_values: 3355662.6 i/s
|
346
|
+
to_h block: 1447114.5 i/s - 2.32x (± 0.00) slower
|
347
|
+
each_with_object: 1011242.1 i/s - 3.32x (± 0.00) slower
|
348
|
+
map.to_h: 969007.2 i/s - 3.46x (± 0.00) slower
|
349
|
+
collect.Hash: 916962.3 i/s - 3.66x (± 0.00) slower
|
350
|
+
with 95.0% confidence
|
351
|
+
```
|
352
|
+
|
353
|
+
#### Hash value enumeration (size=10)
|
354
|
+
|
355
|
+
```
|
356
|
+
Warming up --------------------------------------
|
357
|
+
each_with_object 48.473k i/100ms
|
358
|
+
collect.Hash 49.061k i/100ms
|
359
|
+
map.to_h 53.340k i/100ms
|
360
|
+
to_h block 72.241k i/100ms
|
361
|
+
transform_values 146.939k i/100ms
|
362
|
+
Calculating -------------------------------------
|
363
|
+
each_with_object 480.559k (± 0.1%) i/s - 2.424M in 5.043419s
|
364
|
+
collect.Hash 492.989k (± 0.0%) i/s - 2.502M in 5.075419s
|
365
|
+
map.to_h 546.714k (± 0.0%) i/s - 2.774M in 5.073369s
|
366
|
+
to_h block 725.482k (± 0.0%) i/s - 3.684M in 5.078410s
|
367
|
+
transform_values 1.575M (± 0.2%) i/s - 7.935M in 5.036956s
|
368
|
+
with 95.0% confidence
|
369
|
+
|
370
|
+
Comparison:
|
371
|
+
transform_values: 1575397.1 i/s
|
372
|
+
to_h block: 725482.0 i/s - 2.17x (± 0.00) slower
|
373
|
+
map.to_h: 546714.4 i/s - 2.88x (± 0.00) slower
|
374
|
+
collect.Hash: 492988.8 i/s - 3.20x (± 0.01) slower
|
375
|
+
each_with_object: 480559.2 i/s - 3.28x (± 0.01) slower
|
376
|
+
with 95.0% confidence
|
377
|
+
```
|
378
|
+
|
379
|
+
#### Hash value enumeration (size=20)
|
380
|
+
|
381
|
+
```
|
382
|
+
Warming up --------------------------------------
|
383
|
+
each_with_object 28.320k i/100ms
|
384
|
+
collect.Hash 30.250k i/100ms
|
385
|
+
map.to_h 31.925k i/100ms
|
386
|
+
to_h block 42.127k i/100ms
|
387
|
+
transform_values 87.393k i/100ms
|
388
|
+
Calculating -------------------------------------
|
389
|
+
each_with_object 269.839k (± 0.2%) i/s - 1.359M in 5.037950s
|
390
|
+
collect.Hash 303.464k (± 0.2%) i/s - 1.543M in 5.084567s
|
391
|
+
map.to_h 318.494k (± 0.0%) i/s - 1.596M in 5.011840s
|
392
|
+
to_h block 419.913k (± 0.0%) i/s - 2.106M in 5.016300s
|
393
|
+
transform_values 801.802k (± 0.6%) i/s - 4.020M in 5.015563s
|
394
|
+
with 95.0% confidence
|
395
|
+
|
396
|
+
Comparison:
|
397
|
+
transform_values: 801801.6 i/s
|
398
|
+
to_h block: 419913.0 i/s - 1.91x (± 0.01) slower
|
399
|
+
map.to_h: 318494.2 i/s - 2.52x (± 0.01) slower
|
400
|
+
collect.Hash: 303464.4 i/s - 2.64x (± 0.02) slower
|
401
|
+
each_with_object: 269839.2 i/s - 2.97x (± 0.02) slower
|
402
|
+
with 95.0% confidence
|
403
|
+
```
|
404
|
+
|
405
|
+
#### Hash value enumeration (size=100)
|
406
|
+
|
407
|
+
```
|
408
|
+
Warming up --------------------------------------
|
409
|
+
each_with_object 6.319k i/100ms
|
410
|
+
collect.Hash 6.686k i/100ms
|
411
|
+
map.to_h 7.245k i/100ms
|
412
|
+
to_h block 9.317k i/100ms
|
413
|
+
transform_values 20.555k i/100ms
|
414
|
+
Calculating -------------------------------------
|
415
|
+
each_with_object 63.102k (± 0.3%) i/s - 315.950k in 5.008225s
|
416
|
+
collect.Hash 66.782k (± 0.0%) i/s - 334.300k in 5.005839s
|
417
|
+
map.to_h 72.403k (± 0.0%) i/s - 362.250k in 5.003248s
|
418
|
+
to_h block 93.020k (± 0.0%) i/s - 465.850k in 5.008075s
|
419
|
+
transform_values 207.295k (± 0.1%) i/s - 1.048M in 5.057171s
|
420
|
+
with 95.0% confidence
|
421
|
+
|
422
|
+
Comparison:
|
423
|
+
transform_values: 207294.9 i/s
|
424
|
+
to_h block: 93020.0 i/s - 2.23x (± 0.00) slower
|
425
|
+
map.to_h: 72403.1 i/s - 2.86x (± 0.00) slower
|
426
|
+
collect.Hash: 66782.1 i/s - 3.10x (± 0.00) slower
|
427
|
+
each_with_object: 63102.3 i/s - 3.28x (± 0.01) slower
|
428
|
+
with 95.0% confidence
|
429
|
+
```
|
430
|
+
|
431
|
+
#### Hash value enumeration (size=500)
|
432
|
+
|
433
|
+
```
|
434
|
+
Warming up --------------------------------------
|
435
|
+
each_with_object 1.316k i/100ms
|
436
|
+
collect.Hash 1.398k i/100ms
|
437
|
+
map.to_h 1.496k i/100ms
|
438
|
+
to_h block 1.876k i/100ms
|
439
|
+
transform_values 4.471k i/100ms
|
440
|
+
Calculating -------------------------------------
|
441
|
+
each_with_object 13.154k (± 0.1%) i/s - 65.800k in 5.002444s
|
442
|
+
collect.Hash 13.983k (± 0.0%) i/s - 71.298k in 5.099149s
|
443
|
+
map.to_h 14.968k (± 0.0%) i/s - 76.296k in 5.097225s
|
444
|
+
to_h block 18.745k (± 0.0%) i/s - 93.800k in 5.004043s
|
445
|
+
transform_values 44.903k (± 0.7%) i/s - 228.021k in 5.082046s
|
446
|
+
with 95.0% confidence
|
447
|
+
|
448
|
+
Comparison:
|
449
|
+
transform_values: 44903.5 i/s
|
450
|
+
to_h block: 18744.9 i/s - 2.40x (± 0.02) slower
|
451
|
+
map.to_h: 14968.1 i/s - 3.00x (± 0.02) slower
|
452
|
+
collect.Hash: 13982.6 i/s - 3.21x (± 0.02) slower
|
453
|
+
each_with_object: 13153.9 i/s - 3.41x (± 0.02) slower
|
454
|
+
with 95.0% confidence
|
455
|
+
```
|