Skip to content

Commit d83756f

Browse files
committed
Fast first in benchmark; Improve variable names; Link to PR
Closes #42
1 parent c8139d7 commit d83756f

3 files changed

+44
-42
lines changed

README.md

+15-13
Original file line numberDiff line numberDiff line change
@@ -542,26 +542,28 @@ Comparison:
542542
Hash#merge: 409.6 i/s - 24.00x slower
543543
```
544544

545-
##### `Hash#merge({})` vs `Hash#dup#merge!({})` vs `{}#merge!(Hash)` [code](code/hash/merge-vs-dup-merge-bang-vs-merge-bang.rb)
545+
##### `{}#merge!(Hash)` vs `Hash#merge({})` vs `Hash#dup#merge!({})` [code](code/hash/merge-bang-vs-merge-vs-dup-merge-bang.rb)
546546

547-
When we don't want to modify the original hash, and we want duplicates to be created
547+
> When we don't want to modify the original hash, and we want duplicates to be created
548+
> See [#42](https://github.com/JuanitoFatas/fast-ruby/pull/42#issue-93502261) for more details.
548549
549550
```
550-
$ ruby -v code/hash/merge-vs-dup-merge-bang-vs-merge-bang.rb
551-
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
551+
$ ruby -v code/hash/merge-bang-vs-merge-vs-dup-merge-bang.rb
552+
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14]
553+
552554
Calculating -------------------------------------
553-
Hash#merge({}) 603.000 i/100ms
554-
Hash#dup#merge!({}) 650.000 i/100ms
555-
{}#merge!(Hash) 1.763k i/100ms
555+
{}#merge!(Hash) 1.082k i/100ms
556+
Hash#merge({}) 422.000 i/100ms
557+
Hash#dup#merge!({}) 419.000 i/100ms
556558
-------------------------------------------------
557-
Hash#merge({}) 6.593k7.6%) i/s - 33.165k
558-
Hash#dup#merge!({}) 6.591k5.2%) i/s - 33.150k
559-
{}#merge!(Hash) 17.654k3.0%) i/s - 89.913k
559+
{}#merge!(Hash) 11.161k5.1%) i/s - 56.264k
560+
Hash#merge({}) 4.449k3.8%) i/s - 22.366k
561+
Hash#dup#merge!({}) 4.340k6.2%) i/s - 21.788k
560562
561563
Comparison:
562-
{}#merge!(Hash): 17654.0 i/s
563-
Hash#merge({}): 6592.7 i/s - 2.68x slower
564-
Hash#dup#merge!({}): 6591.2 i/s - 2.68x slower
564+
{}#merge!(Hash): 11161.3 i/s
565+
Hash#merge({}): 4449.4 i/s - 2.51x slower
566+
Hash#dup#merge!({}): 4340.3 i/s - 2.57x slower
565567
```
566568

567569
##### `Hash#sort_by` vs `Hash#sort` [code](code/hash/hash-key-sort_by-vs-sort.rb)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
require "benchmark/ips"
2+
3+
ENUM = (1..100)
4+
ORIGINAL_HASH = { foo: "foo" }
5+
6+
def fast
7+
ENUM.inject([]) do |accumulator, element|
8+
accumulator << { bar: element }.merge!(ORIGINAL_HASH)
9+
end
10+
end
11+
12+
def slow
13+
ENUM.inject([]) do |accumulator, element|
14+
accumulator << ORIGINAL_HASH.merge(bar: element)
15+
end
16+
end
17+
18+
def slow_dup
19+
ENUM.inject([]) do |accumulator, element|
20+
accumulator << ORIGINAL_HASH.dup.merge!(bar: element)
21+
end
22+
end
23+
24+
Benchmark.ips do |x|
25+
x.report("{}#merge!(Hash)") { fast }
26+
x.report("Hash#merge({})") { slow }
27+
x.report("Hash#dup#merge!({})") { slow_dup }
28+
x.compare!
29+
end

code/hash/merge-vs-dup-merge-bang-vs-merge-bang.rb

-29
This file was deleted.

0 commit comments

Comments
 (0)