1#!/usr/bin/ruby
2# -*- mode: ruby -*-
3# $Id: except-ruby.code,v 1.4 2004/11/13 07:41:33 bfulgham Exp $
4# http://www.bagley.org/~doug/shootout/
5
6$HI = 0
7$LO = 0
8NUM = 250000 # Integer(ARGV[0] || 1)
9
10
11class Lo_Exception < Exception
12  def initialize(num)
13    @value = num
14  end
15end
16
17class Hi_Exception < Exception
18  def initialize(num)
19    @value = num
20  end
21end
22
23def some_function(num)
24  begin
25    hi_function(num)
26  rescue
27    print "We shouldn't get here, exception is: #{$!.type}\n"
28  end
29end
30
31def hi_function(num)
32  begin
33    lo_function(num)
34  rescue Hi_Exception
35    $HI = $HI + 1
36  end
37end
38
39def lo_function(num)
40  begin
41    blowup(num)
42  rescue Lo_Exception
43    $LO = $LO + 1
44  end
45end
46
47def blowup(num)
48  if num % 2 == 0
49    raise Lo_Exception.new(num)
50  else
51    raise Hi_Exception.new(num)
52  end
53end
54
55
56i = 1
57max = NUM+1
58while i < max
59  i += 1
60  some_function(i+1)
61end
62