summaryrefslogtreecommitdiff
path: root/benchmark/so_exception.yml
blob: 0bfe3718ebd7b1b3ceb168f91deaacc679b9d8ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
prelude: |
  #!/usr/bin/ruby
  # -*- mode: ruby -*-
  # $Id: except-ruby.code,v 1.4 2004/11/13 07:41:33 bfulgham Exp $
  # http://www.bagley.org/~doug/shootout/
benchmark:
  so_exception: |

    $HI = 0
    $LO = 0
    NUM = 250000 # Integer(ARGV[0] || 1)


    class Lo_Exception < Exception
      def initialize(num)
        @value = num
      end
    end

    class Hi_Exception < Exception
      def initialize(num)
        @value = num
      end
    end

    def some_function(num)
      begin
        hi_function(num)
      rescue
        print "We shouldn't get here, exception is: #{$!.type}\n"
      end
    end

    def hi_function(num)
      begin
        lo_function(num)
      rescue Hi_Exception
        $HI = $HI + 1
      end
    end

    def lo_function(num)
      begin
        blowup(num)
      rescue Lo_Exception
        $LO = $LO + 1
      end
    end

    def blowup(num)
      if num % 2 == 0
        raise Lo_Exception.new(num)
      else
        raise Hi_Exception.new(num)
      end
    end


    i = 1
    max = NUM+1
    while i < max
      i += 1
      some_function(i+1)
    end
loop_count: 1