source: trunk/testcase/throw.cpp@ 835

Last change on this file since 835 was 835, checked in by bird, 22 years ago

Extended testcase.

  • Property cvs2svn:cvs-rev set to 1.3
  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 1.8 KB
RevLine 
[575]1#include <stdio.h>
[834]2#include "throw.h"
[575]3
4class foo
5{
6 int i;
7public:
8 foo(int i) : i(i)
9 {
[834]10 fprintf(stderr, "foo::constructor 1\n");
[575]11 }
12
13 foo() throw(int) : i(1)
14 {
[834]15 fprintf(stderr, "foo::constructor 2\n");
[575]16 throw(1);
17 }
18
19 int get() const
20 {
21 return i;
22 }
23
[835]24 int getthrow() const throw(int)
25 {
26 throw(2);
27 return i;
28 }
[575]29};
30
31
32static foo o2(2);
[835]33static bar o3(3);
[575]34
35int main()
36{
[834]37 int rc = 0;
[575]38
[834]39 /* static foo - inline implementation */
[575]40 if (o2.get() == 2)
41 fprintf(stderr, "o2 ok\n");
42 else
[834]43 {
44 rc++;
[575]45 fprintf(stderr, "o2 failed\n");
[834]46 }
[835]47 try
48 {
49 rc += o2.getthrow();
50 printf("error: foo::getthrow() didn't throw!\n");
51 }
52 catch (int e)
53 {
54 fprintf(stderr, "foo caught e=%d (ok)\n", e);
55 }
[575]56
[834]57 /* foo - inline implementation */
[575]58 try
59 {
[834]60 fprintf(stderr, "foo creating\n");
[575]61 foo o;
[834]62 fprintf(stderr, "foo no throw!\n");
63 printf("error: foo::foo() didn't throw!\n");
64 rc += o.get();
[575]65 }
66 catch (int e)
67 {
[834]68 fprintf(stderr, "foo caught e=%d (ok)\n", e);
[575]69 }
70
[835]71
72 /* static bar - external implementation */
73 if (o3.get() == 3)
74 fprintf(stderr, "o3 ok\n");
75 else
76 {
77 rc++;
78 fprintf(stderr, "o3 failed\n");
79 }
80 try
81 {
82 rc += o3.getThrow();
83 printf("error: bar:getThrow() didn't throw!\n");
84 }
85 catch (expt e)
86 {
87 fprintf(stderr, "foo caught e=%d (ok)\n", e.get());
88 }
89
[834]90 /* bar - external implementation */
91 try
92 {
93 fprintf(stderr, "bar creating\n");
94 bar o;
95 fprintf(stderr, "bar no throw!\n");
96 printf("error: bar::bar() didn't throw!\n");
97 rc += o.get();
98 }
99 catch (int e)
100 {
101 fprintf(stderr, "bar caught e=%d (ok)\n", e);
102 }
103
[575]104 return rc;
105}
Note: See TracBrowser for help on using the repository browser.