File: ExceptionTest.sidl

package info (click to toggle)
babel 0.10.2-1
  • links: PTS
  • area: contrib
  • in suites: sarge
  • size: 43,932 kB
  • ctags: 29,707
  • sloc: java: 74,695; ansic: 73,142; cpp: 40,649; sh: 18,411; f90: 10,062; fortran: 6,727; python: 6,406; makefile: 3,866; xml: 118; perl: 48
file content (125 lines) | stat: -rw-r--r-- 4,402 bytes parent folder | download
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
//
// File:        ExceptionTest.idl
// Revision:    $Revision: 4434 $
// Date:        $Date: 2005-03-17 09:05:29 -0800 (Thu, 17 Mar 2005) $
// Description: An IDL design to test sidl exception handling
//
// Copyright (c) 2001-2003, The Regents of the University of Calfornia.
// Produced at the Lawrence Livermore National Laboratory.
// Written by the Components Team <components@llnl.gov>
// UCRL-CODE-2002-054
// All rights reserved.
// 
// This file is part of Babel. For more information, see
// http://www.llnl.gov/CASC/components/. Please read the COPYRIGHT file
// for Our Notice and the LICENSE file for the GNU Lesser General Public
// License.
// 
// This program is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License (as published by
// the Free Software Foundation) version 2.1 dated February 1999.
// 
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
// conditions of the GNU Lesser General Public License for more details.
// 
// You should have recieved a copy of the GNU Lesser General Public License
// along with this program; if not, write to the Free Software Foundation,
// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

/**
 * <p>
 * Package <code>ExceptionTest</code> tests the exception capabilites of the
 * sidl run-time system.  The test case is Fibanocci number generation in which
 * exceptions may be thrown if the input parameter is negative, the Fibanocci
 * number exceeds a specified maximum, or if the Fibanocci recursion exceeds
 * a specified depth.  Three different exceptions may be thrown:
 * </p>
 * <ul>
 * <li>a <code>NegativeValueException</code> if the input is negative</li>
 * <li>a <code>TooDeepException</code> if the recursion depth is exceeded</li>
 * <li>a <code>TooBigException</code> if the maximum value is exceeded</li>
 * </ul>
 * <p>
 * Just to make things interesting, the <code>TooDeepException</code> and the
 * <code>TooBigException</code> extend a common <code>FibException</code>.
 * This derivation allows us to test the exception casting support in the
 * run-time.
 * </p>
 */

package ExceptionTest version 1.0 {

  /**
   * This exception is thrown if the value for which the Fibonacci number
   * is requested is negative.
   */
  class NegativeValueException extends sidl.SIDLException {
  }

  /**
   * This exception is a base class for the Fibonacci exceptions that are
   * thrown if the value is too large or the recursion depth is too deep.
   */
  class FibException extends sidl.SIDLException {
  }

  /**
   * This exception is thrown if the Fibonacci recursion is too deep.
   */
  class TooDeepException extends FibException {
  }

  /**
   * This exception is thrown if the Fibonacci number is too large.
   */
  class TooBigException extends FibException {
  }

  /**
   * This class holds the method <code>getFib</code> that generates the
   * requested Fibonacci numbers.
   */
  class Fib {
    /**
     * <p>
     * Generate the requested Fibonacci number or generate exceptions if
     * the input Fibonacci number is invalid or if any of the maximum depth
     * or maximum value parameters are exceeded.  The last argument of the
     * method should be zero.
     * </p>
     * <p>
     * The algorithm should be similar to the <code>Java</code> code below.
     * </p>
     * <pre>
     * public int getFib(int n, int max_depth, int max_value, int depth)
     *     throws NegativeValueException, FibException {
     *
     *   if (n < 0) {
     *     throw new NegativeValueException("n negative");
     *
     *   } else if (depth > max_depth) {
     *     throw new TooDeepException("too deep");
     * 
     *   } else if (n == 0) {
     *     return 1;
     * 
     *   } else if (n == 1) {
     *     return 1;
     * 
     *   } else {
     *     int a = getFib(n-1, max_depth, max_value, depth+1);
     *     int b = getFib(n-2, max_depth, max_value, depth+1);
     *     if (a + b > max_value) {
     *       throw new TooBigException("too big");
     *     }
     *     return a + b;
     *   }
     * } 
     * </pre>
     */
    int getFib(in int n, in int max_depth, in int max_value, in int depth)
      throws NegativeValueException, FibException;
  }
}