From 0c403e7dc7b66e5871efaabc3bc1cb27aa00a7ed Mon Sep 17 00:00:00 2001 From: Max Bernstein Date: Thu, 30 Oct 2025 16:35:44 -0400 Subject: [PATCH] Add struct aref benchmark --- benchmarks.yml | 4 ++++ benchmarks/structaref.rb | 31 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 benchmarks/structaref.rb 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