benchmarks/ackerman.rb
author Stefan Vogel <sv@exept.de>
Fri, 17 May 2019 16:56:31 +0200
branchcvs_MAIN
changeset 3899 3c0aea90b463
parent 2598 94ae3f5f4df1
permissions -rwxr-xr-x
#REFACTORING by stefan Sanitize BlockValues class: JavaCodeBundleEditor changed: #canAddHolder #canEditHolder #canRemoveHolder
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2598
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
     1
#!/usr/bin/env ruby
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
     2
require 'benchmark'
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
     3
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
     4
class Integer
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
     5
  def ackermann(n)
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
     6
    return n + 1 if self == 0
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
     7
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
     8
    if n == 0
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
     9
      (self - 1).ackermann(1)
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
    10
    else
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
    11
      (self - 1).ackermann(ackermann(n - 1))
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
    12
    end
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
    13
  end
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
    14
end
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
    15
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
    16
results = Benchmark.bmbm do |bm|
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
    17
  raise "Expecting one arg - second ackermann param" if ARGV.size == 0
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
    18
  n = ARGV[0].to_i
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
    19
  bm.report { 10.times { 3.ackermann(n) } }
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
    20
end
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
    21
puts "EXECUTION TIME: #{results[0].real * 1000.0}"
94ae3f5f4df1 adding ruby benchmarks for comparison
Marcel Hlopko <marcel.hlopko@fit.cvut.cz>
parents:
diff changeset
    22