Sha256: 9c7ea899cb3f3fab4799a5084cdf6d64b5ac6ad2cd5c2895532382777f02b530

Contents?: true

Size: 1.15 KB

Versions: 1

Compression:

Stored size: 1.15 KB

Contents

#!/usr/bin/env ruby

require 'bundler/inline'

require 'benchmark'
require 'ostruct'

gemfile do
  source 'https://rubygems.org'

  gem 'ivo', '~> 0.4'
  gem 'immutable-struct', '~> 2.4'
  gem 'values', '~> 1.8'
end

StructClass = Struct.new(:x, :y)
ImmutableStructClass = ImmutableStruct.new(:x, :y)
ValueClass = Value.new(:x, :y)
IvoClass = Ivo.new(:x, :y)

n = 1_000_000

Benchmark.bm(30) do |x|
  x.report('StructClass.new') do
    n.times do
      StructClass.new(1, 2)
    end
  end

  x.report('IvoClass.new') do
    n.times do
      IvoClass.new(1, 2)
    end
  end

  x.report('IvoClass.with') do
    n.times do
      IvoClass.with(x: 1, y: 2)
    end
  end

  x.report('ValueClass.new') do
    n.times do
      ValueClass.new(1, 2)
    end
  end

  x.report('ValueClass.with') do
    n.times do
      ValueClass.with(x: 1, y: 2)
    end
  end

  x.report('ImmutableStructClass.new') do
    n.times do
      ImmutableStructClass.new(x: 1, y: 2)
    end
  end
end

Benchmark.bm(30) do |x|
  x.report('OpenStruct.new') do
    n.times do
      OpenStruct.new(x: 1, y: 2)
    end
  end

  x.report('Ivo.call') do
    n.times do
      Ivo.call(x: 1, y: 2)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ivo-0.5.0 benchmarks.rb