Skip to content

Commit 25c9497

Browse files
authored
Merge pull request #433 from eregon/structaset
Add benchmark for setting Struct fields
2 parents becf89f + 91209a0 commit 25c9497

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

benchmarks.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,11 @@ getivar:
153153
single_file: true
154154
ractor: true
155155
structaref:
156-
desc: structaref tests the performance of getting struct members
156+
desc: structaref tests the performance of getting Struct members
157+
category: micro
158+
single_file: true
159+
structaset:
160+
desc: structaset tests the performance of setting Struct members
157161
category: micro
158162
single_file: true
159163
keyword_args:

benchmarks/structaset.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
require_relative '../harness/loader'
2+
3+
TheClass = Struct.new(:v0, :v1, :v2, :levar)
4+
5+
def set_value_loop obj
6+
# 1M
7+
i = 0
8+
while i < 1000000
9+
# 10 times to de-emphasize loop overhead
10+
obj.levar = i
11+
obj.levar = i
12+
obj.levar = i
13+
obj.levar = i
14+
obj.levar = i
15+
obj.levar = i
16+
obj.levar = i
17+
obj.levar = i
18+
obj.levar = i
19+
obj.levar = i
20+
i += 1
21+
end
22+
end
23+
24+
obj = TheClass.new(1, 2, 3, 1)
25+
26+
run_benchmark(850) do
27+
set_value_loop obj
28+
end

0 commit comments

Comments
 (0)