Sha256: cfdb0b9e2a7d304b0f57607dcd92db0e4b5dbcd166c54fe10a1a557f4f2c57c0

Contents?: true

Size: 1.97 KB

Versions: 1

Compression:

Stored size: 1.97 KB

Contents

require 'bundler/inline'

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

  gem 'benchmark-ips', '~> 2.7', '>= 2.7.2'
  gem 'interactor', '~> 3.1', '>= 3.1.1'
  gem 'u-service', '~> 0.12.0'
end

require 'benchmark/ips'

class IT_Multiply
  include Interactor

  def call
    a = context.a
    b = context.b

    if a.is_a?(Numeric) && b.is_a?(Numeric)
      context.number = a * b
    else
      context.fail!(:invalid_data)
    end
  end
end

class MSB_Multiply < Micro::Service::Base
  attributes :a, :b

  def call!
    if a.is_a?(Numeric) && b.is_a?(Numeric)
      Success(a * b)
    else
      Failure(:invalid_data)
    end
  end
end

class MSS_Multiply < Micro::Service::Strict
  attributes :a, :b

  def call!
    if a.is_a?(Numeric) && b.is_a?(Numeric)
      Success(a * b)
    else
      Failure(:invalid_data)
    end
  end
end

SYMBOL_KEYS = { a: 2, b: 2 }
STRING_KEYS = { 'a' => 1, 'b' => 1 }

Benchmark.ips do |x|
  x.config(:time => 5, :warmup => 2)

  x.time = 5
  x.warmup = 2

  x.report('Interactor') do
    IT_Multiply.call(SYMBOL_KEYS)
    IT_Multiply.call(STRING_KEYS)
  end

  x.report('Micro::Service::Base') do
    MSB_Multiply.call(SYMBOL_KEYS)
    MSB_Multiply.call(STRING_KEYS)
  end

  x.report('Micro::Service::Strict') do
    MSS_Multiply.call(SYMBOL_KEYS)
    MSS_Multiply.call(STRING_KEYS)
  end

  x.compare!
end

# Warming up --------------------------------------
#           Interactor     2.943k i/100ms
# Micro::Service::Base    12.540k i/100ms
# Micro::Service::Strict
#                          9.584k i/100ms
# Calculating -------------------------------------
#           Interactor     29.874k (± 2.7%) i/s -    150.093k in   5.027909s
# Micro::Service::Base    131.440k (± 1.9%) i/s -    664.620k in   5.058327s
# Micro::Service::Strict
#                          99.111k (± 2.2%) i/s -    498.368k in   5.031006s

# Comparison:
# Micro::Service::Base:   131440.3 i/s
# Micro::Service::Strict: 99111.3 i/s - 1.33x  slower
#           Interactor:   29873.6 i/s - 4.40x  slower

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
u-service-0.13.0 benchmarks/interactor/service_success.rb