diff --git a/benchmarks.yml b/benchmarks.yml index 56b3a1b..a4fa9e0 100644 --- a/benchmarks.yml +++ b/benchmarks.yml @@ -152,6 +152,10 @@ getivar: category: micro single_file: true ractor: true +structaref: + desc: structaref tests the performance of getting struct members + category: micro + single_file: true keyword_args: desc: keyword_args tests the performance of method calls with keyword arguments. category: micro diff --git a/benchmarks/structaref.rb b/benchmarks/structaref.rb new file mode 100644 index 0000000..95bb357 --- /dev/null +++ b/benchmarks/structaref.rb @@ -0,0 +1,31 @@ +require_relative '../harness/loader' + +TheClass = Struct.new(:v0, :v1, :v2, :levar) + +def get_value_loop obj + sum = 0 + # 1M + i = 0 + while i < 1000000 + # 10 times to de-emphasize loop overhead + sum += obj.levar + sum += obj.levar + sum += obj.levar + sum += obj.levar + sum += obj.levar + sum += obj.levar + sum += obj.levar + sum += obj.levar + sum += obj.levar + sum += obj.levar + i += 1 + end + + return sum +end + +obj = TheClass.new(1, 2, 3, 1) + +run_benchmark(850) do + get_value_loop obj +end