author | Claus Gittinger <cg@exept.de> |
Sun, 23 Feb 2020 14:03:15 +0100 | |
branch | cvs_MAIN |
changeset 3997 | 5bb44f7e1d20 |
parent 2598 | 94ae3f5f4df1 |
permissions | -rwxr-xr-x |
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 |