]> git.karo-electronics.de Git - karo-tx-redboot.git/blob - packages/infra/v2_0/tests/cxxsupp.cxx
ed82cdac5eae104e7b3266285bf0cb1d0cdc704f
[karo-tx-redboot.git] / packages / infra / v2_0 / tests / cxxsupp.cxx
1 //==========================================================================
2 //
3 //        cxxsupp.cxx
4 //
5 //        C++ runtime support test
6 //
7 //==========================================================================
8 //####ECOSGPLCOPYRIGHTBEGIN####
9 // -------------------------------------------
10 // This file is part of eCos, the Embedded Configurable Operating System.
11 // Copyright (C) 2003 Nick Garnett <nickg@calivar.com>
12 //
13 // eCos is free software; you can redistribute it and/or modify it under
14 // the terms of the GNU General Public License as published by the Free
15 // Software Foundation; either version 2 or (at your option) any later version.
16 //
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
20 // for more details.
21 //
22 // You should have received a copy of the GNU General Public License along
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
25 //
26 // As a special exception, if other files instantiate templates or use macros
27 // or inline functions from this file, or you compile this file and link it
28 // with other works to produce a work based on this file, this file does not
29 // by itself cause the resulting work to be covered by the GNU General Public
30 // License. However the source code for this file must still be made available
31 // in accordance with section (3) of the GNU General Public License.
32 //
33 // This exception does not invalidate any other reasons why a work based on
34 // this file might be covered by the GNU General Public License.
35 //
36 // Alternative licenses for eCos may be arranged by contacting the copyright
37 // holders.
38 // -------------------------------------------
39 //####ECOSGPLCOPYRIGHTEND####
40 //==========================================================================
41 //#####DESCRIPTIONBEGIN####
42 //
43 // Author(s):     nickg
44 // Contributors:  nickg
45 // Date:          2003-04-01
46 // Description:   Simple test for C++ runtime support.
47 //
48 //####DESCRIPTIONEND####
49 //==========================================================================
50
51 #include <pkgconf/hal.h>
52 #include <pkgconf/isoinfra.h>
53
54 #include <cyg/infra/testcase.h>
55 #include <cyg/infra/diag.h>
56
57 // The H8300 does not have C++ support in its toolchain
58 #ifndef CYGPKG_HAL_H8300
59
60 #include <new>
61
62 //==========================================================================
63
64 class Pure
65 {
66 protected:    
67     int instance;
68 public:
69     Pure(int i);
70     virtual void pure_fun1(void) = 0;
71     virtual void pure_fun2(void) = 0;
72     virtual void impure_fun1(void);
73     inline void inline_fun1(void);
74 };
75
76 Pure::Pure(int i)
77 {
78     instance = i;
79     diag_printf("%s(%d) called\n",__PRETTY_FUNCTION__,instance);    
80 }
81
82 void Pure::impure_fun1()
83 {
84     diag_printf("%s(%d) called\n",__PRETTY_FUNCTION__,instance);
85 }
86
87 inline void Pure::inline_fun1()
88 {
89     diag_printf("%s(%d) called\n",__PRETTY_FUNCTION__,instance);
90 }
91
92 //==========================================================================
93
94 class Derived : public Pure
95 {
96 public:
97     Derived(int i);
98     void pure_fun1(void);
99     void pure_fun2(void);
100     void impure_fun2(void);
101 };
102
103 Derived::Derived(int i)
104     : Pure(i)
105 {
106     diag_printf("%s(%d) called\n",__PRETTY_FUNCTION__,instance);
107 }
108
109 void Derived::pure_fun1(void)
110 {
111     diag_printf("%s(%d) called\n",__PRETTY_FUNCTION__,instance);
112 }
113
114 void Derived::pure_fun2(void)
115 {
116     diag_printf("%s(%d) called\n",__PRETTY_FUNCTION__,instance);
117 }
118
119
120 void Derived::impure_fun2(void)
121 {
122     diag_printf("%s(%d) called\n",__PRETTY_FUNCTION__,instance);
123 }
124
125 //==========================================================================
126
127 __externC void
128 cyg_start( void )
129 {
130
131     CYG_TEST_INIT();
132     
133     Derived derived(1);
134     Pure *pure = &derived;
135
136     CYG_TEST_INFO("Calling derived members");
137     derived.pure_fun1();
138     derived.pure_fun2();
139     derived.impure_fun1();
140     derived.impure_fun2();
141     derived.inline_fun1();
142
143     CYG_TEST_INFO("Calling pure members");
144     pure->pure_fun1();
145     pure->pure_fun2();
146     pure->impure_fun1();
147     pure->inline_fun1();
148
149 #if CYGINT_ISO_MALLOC
150     Derived *derived2 = new Derived(2);
151     Pure *pure2 = derived2;
152     
153     CYG_TEST_INFO("Calling derived2 members");
154     derived2->pure_fun1();
155     derived2->pure_fun2();
156     derived2->impure_fun1();
157     derived2->impure_fun2();
158     derived2->inline_fun1();
159
160     CYG_TEST_INFO("Calling pure2 members");
161     pure2->pure_fun1();
162     pure2->pure_fun2();
163     pure2->impure_fun1();
164     pure2->inline_fun1();
165
166     delete derived2;
167     
168 #else
169     CYG_TEST_INFO("No malloc support, new and delete not tested");
170 #endif
171     
172     CYG_TEST_PASS_FINISH("C++ Support OK");
173 }
174
175 //==========================================================================
176
177 #else
178
179 __externC void
180 cyg_start( void )
181 {
182
183     CYG_TEST_INIT();
184
185     CYG_TEST_NA("C++ not supported on this architecture\n");
186 }
187
188 #endif
189
190 //==========================================================================
191 // EOF cxxsupp.cxx