radius-spec 0.5.0 → 0.9.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/CHANGELOG.md +98 -0
- data/Gemfile +2 -3
- data/README.md +5 -6
- 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/style_hash_like_case.rb +285 -0
- data/benchmarks/unfreeze_string.rb +0 -2
- data/bin/ci +1 -1
- data/common_rubocop.yml +166 -45
- data/common_rubocop_rails.yml +47 -20
- data/lib/radius/spec/model_factory.rb +0 -2
- data/lib/radius/spec/rspec.rb +9 -0
- data/lib/radius/spec/vcr.rb +0 -2
- data/lib/radius/spec/version.rb +1 -1
- data/radius-spec.gemspec +8 -7
- metadata +42 -19
- data/.travis.yml +0 -17
- data/bin/ci-code-review +0 -28
@@ -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
|
+
```
|