new benchmarks for hashing dsyms and fixnums

* benchmark/bm_hash_aref_dsym.rb: new benchmark
* benchmark/bm_hash_aref_dsym_long.rb: ditto
* benchmark/bm_hash_aref_fix.rb: ditto

[ruby-core:70129] [Bug #11396] pointed out we need to consider
more cases for hashing.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51435 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
normal 2015-07-29 19:54:12 +00:00
Родитель b729e9278f
Коммит cb87005f69
4 изменённых файлов: 35 добавлений и 0 удалений

Просмотреть файл

@ -1,3 +1,9 @@
Thu Jul 30 04:29:25 2015 Eric Wong <e@80x24.org>
* benchmark/bm_hash_aref_dsym.rb: new benchmark
* benchmark/bm_hash_aref_dsym_long.rb: ditto
* benchmark/bm_hash_aref_fix.rb: ditto
Wed Jul 29 21:38:41 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* hash.c (any_hash), symbol.c (dsymbol_alloc): fix dynamic symbol

Просмотреть файл

@ -0,0 +1,4 @@
h = {}
syms = ('a'..'z').map { |s| s.to_sym }
syms.each { |s| h[s] = 1 }
200_000.times { syms.each { |s| h[s] } }

Просмотреть файл

@ -0,0 +1,21 @@
# [ruby-core:70129] [Bug #11396]
collection_size = 200000
sample_size = 10000
values = (1..collection_size).to_a.map do |x|
"THIS IS A LONGER STRING THAT IS ALSO UNIQUE #{x}"
end
symbol_hash = {}
values.each do |x|
symbol_hash[x.to_sym] = 1
end
# use the same samples each time to minimize deviations
rng = Random.new(0)
symbol_sample_array = values.sample(sample_size, random: rng).map(&:to_sym)
3000.times do
symbol_sample_array.each { |x| symbol_hash[x] }
end

Просмотреть файл

@ -0,0 +1,4 @@
h = {}
nums = (1..26).to_a
nums.each { |i| h[i] = i }
200_000.times { nums.each { |s| h[s] } }