Skip to content

Commit 8990f1d

Browse files
committed
Add benchmark for setting Struct fields
* Based on benchmarks/structaref.rb
1 parent c34aeca commit 8990f1d

2 files changed

Lines changed: 36 additions & 1 deletion

File tree

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: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
require_relative '../harness/loader'
2+
3+
TheClass = Struct.new(:v0, :v1, :v2, :levar)
4+
5+
def set_value_loop obj
6+
sum = 0
7+
# 1M
8+
i = 0
9+
while i < 1000000
10+
# 10 times to de-emphasize loop overhead
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+
obj.levar = i
21+
i += 1
22+
end
23+
24+
return sum
25+
end
26+
27+
obj = TheClass.new(1, 2, 3, 1)
28+
29+
run_benchmark(850) do
30+
set_value_loop obj
31+
end

0 commit comments

Comments
 (0)