source: trunk/test_more/compare_change.cpp @ 2506

Last change on this file since 2506 was 2506, checked in by bradbell, 8 years ago

Change Licenses: CPL-1.0 -> EPL-1.0, GPL-2.0->GPL-3.0

  • Property svn:keywords set to Id
File size: 7.3 KB
Line 
1/* $Id: compare_change.cpp 2506 2012-10-24 19:36:49Z bradbell $ */
2/* --------------------------------------------------------------------------
3CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-12 Bradley M. Bell
4
5CppAD is distributed under multiple licenses. This distribution is under
6the terms of the
7                    Eclipse Public License Version 1.0.
8
9A copy of this license is included in the COPYING file of this distribution.
10Please visit http://www.coin-or.org/CppAD/ for information on other licenses.
11-------------------------------------------------------------------------- */
12
13/*
14Old CompareChange example and test, now just used for validation testing
15*/
16
17# include <cppad/cppad.hpp>
18
19bool CompareChange(void)
20{       bool ok = true;
21
22        using namespace CppAD;
23
24        // ------------------------------- < ----------------------------
25
26        // create independent variables
27        CPPAD_TESTVECTOR(AD<double>) X(2);
28        X[0] = 3.;
29        X[1] = 4.;
30        Independent(X);
31
32        // create dependent variables
33        CPPAD_TESTVECTOR(AD<double>) Y(6);
34
35        // CondExp would never require retaping
36        if( X[0] < X[1] )      // True variable < variable
37                Y[0] = X[0];
38        else    Y[0] = X[1];
39        if( X[1] < X[0] )      // False variable < variable
40                Y[1] = X[0];
41        else    Y[1] = X[1];
42        if( 3.5  < X[1] )      // True parameter < variable
43                Y[2] = X[0];
44        else    Y[2] = X[1];
45        if( 3.5  < X[0] )      // False parameter < variable
46                Y[3] = X[0];
47        else    Y[3] = X[1];
48        if( X[0] < 4.   )      // True variable < parameter
49                Y[4] = X[0];
50        else    Y[4] = X[1];
51        if( X[1] < 4.   )      // False variable < parameter
52                Y[5] = X[0];
53        else    Y[5] = X[1];
54
55        // f : X -> Y
56        ADFun<double> *f;
57        f = new ADFun<double>(X, Y);
58
59        // new argument value
60        CPPAD_TESTVECTOR(double) x( X.size() );
61        x[0] = 4.;
62        x[1] = 3.;
63
64        // evaluate the function at new argument
65        CPPAD_TESTVECTOR(double) y( Y.size() );
66        y = f->Forward(0, x);
67
68        // check results
69        ok &= (y[0] == x[0]);           // this is what the was taped
70        ok &= (y[1] == x[1]);
71        ok &= (y[2] == x[0]);
72        ok &= (y[3] == x[1]);
73        ok &= (y[4] == x[0]);
74        ok &= (y[5] == x[1]);
75        ok &= (f->CompareChange() == 6); // all comparisions have changed
76
77        // done with this function
78        delete f;
79
80        // ------------------------------- > ----------------------------
81        // create independent variables
82        Independent(X);
83
84        if( X[0] > X[1] )      // False variable > variable
85                Y[0] = X[0];
86        else    Y[0] = X[1];
87        if( X[1] > X[0] )      // True variable > variable
88                Y[1] = X[0];
89        else    Y[1] = X[1];
90        if( 3.5  > X[1] )      // False parameter > variable
91                Y[2] = X[0];
92        else    Y[2] = X[1];
93        if( 3.5  > X[0] )      // True parameter > variable
94                Y[3] = X[0];
95        else    Y[3] = X[1];
96        if( X[0] > 3.   )      // False variable > parameter
97                Y[4] = X[0];
98        else    Y[4] = X[1];
99        if( X[1] > 3.   )      // True variable > parameter
100                Y[5] = X[0];
101        else    Y[5] = X[1];
102
103        // f : X -> Y
104        f = new ADFun<double> (X, Y);
105
106        // evaluate the function at new argument
107        y = f->Forward(0, x);
108
109        // check results
110        ok &= (y[0] == x[1]);           // this is what the was taped
111        ok &= (y[1] == x[0]);
112        ok &= (y[2] == x[1]);
113        ok &= (y[3] == x[0]);
114        ok &= (y[4] == x[1]);
115        ok &= (y[5] == x[0]);
116        ok &= (f->CompareChange() == 6); // all comparisions have changed
117
118        // done with this function
119        delete f;
120
121        // ------------------------------- <= ----------------------------
122        // create independent variables
123        Independent(X);
124
125        if( X[0] <= X[1] )      // True variable <= variable
126                Y[0] = X[0];
127        else    Y[0] = X[1];
128        if( X[1] <= X[0] )      // False variable <= variable
129                Y[1] = X[0];
130        else    Y[1] = X[1];
131        if( 4.  <= X[1] )       // True parameter <= variable
132                Y[2] = X[0];
133        else    Y[2] = X[1];
134        if( 4.  <= X[0] )       // False parameter <= variable
135                Y[3] = X[0];
136        else    Y[3] = X[1];
137        if( X[0] <= 3.5   )     // True variable <= parameter
138                Y[4] = X[0];
139        else    Y[4] = X[1];
140        if( X[1] <= 3.5  )      // False variable <= parameter
141                Y[5] = X[0];
142        else    Y[5] = X[1];
143
144        // f : X -> Y
145        f = new ADFun<double> (X, Y);
146
147        // evaluate the function at new argument
148        y = f->Forward(0, x);
149
150        // check results
151        ok &= (y[0] == x[0]);           // this is what the was taped
152        ok &= (y[1] == x[1]);
153        ok &= (y[2] == x[0]);
154        ok &= (y[3] == x[1]);
155        ok &= (y[4] == x[0]);
156        ok &= (y[5] == x[1]);
157        ok &= (f->CompareChange() == 6); // all comparisions have changed
158
159        // done with this function
160        delete f;
161
162
163        // ------------------------------- >= ----------------------------
164        // create independent variables
165        Independent(X);
166
167        if( X[0] >= X[1] )      // False variable >= variable
168                Y[0] = X[0];
169        else    Y[0] = X[1];
170        if( X[1] >= X[0] )      // True variable >= variable
171                Y[1] = X[0];
172        else    Y[1] = X[1];
173        if( 3.5  >= X[1] )      // False parameter >= variable
174                Y[2] = X[0];
175        else    Y[2] = X[1];
176        if( 3.5  >= X[0] )      // True parameter >= variable
177                Y[3] = X[0];
178        else    Y[3] = X[1];
179        if( X[0] >= 4.   )      // False variable >= parameter
180                Y[4] = X[0];
181        else    Y[4] = X[1];
182        if( X[1] >= 4.   )      // True variable >= parameter
183                Y[5] = X[0];
184        else    Y[5] = X[1];
185
186        // f : X -> Y
187        f = new ADFun<double> (X, Y);
188
189        // evaluate the function at new argument
190        y = f->Forward(0, x);
191
192        // check results
193        ok &= (y[0] == x[1]);           // this is what the was taped
194        ok &= (y[1] == x[0]);
195        ok &= (y[2] == x[1]);
196        ok &= (y[3] == x[0]);
197        ok &= (y[4] == x[1]);
198        ok &= (y[5] == x[0]);
199        ok &= (f->CompareChange() == 6); // all comparisions have changed
200
201        // done with this function
202        delete f;
203
204        // ------------------------------- == ----------------------------
205        // create independent variables
206        Independent(X);
207
208        if( X[0] == X[1] )      // False variable == variable
209                Y[0] = X[0];
210        else    Y[0] = X[1];
211        if( X[0] == X[0] )      // True variable == variable
212                Y[1] = X[0];
213        else    Y[1] = X[1];
214        if( 3.  == X[1] )       // False parameter == variable
215                Y[2] = X[0];
216        else    Y[2] = X[1];
217        if( 3.  == X[0] )       // True parameter == variable
218                Y[3] = X[0];
219        else    Y[3] = X[1];
220        if( X[0] == 4.   )      // False variable == parameter
221                Y[4] = X[0];
222        else    Y[4] = X[1];
223        if( X[1] == 4.   )      // True variable == parameter
224                Y[5] = X[0];
225        else    Y[5] = X[1];
226
227        // f : X -> Y
228        f = new ADFun<double> (X, Y);
229
230        // evaluate the function at new argument
231        y = f->Forward(0, x);
232
233        // check results
234        ok &= (y[0] == x[1]);           // this is what the was taped
235        ok &= (y[1] == x[0]);
236        ok &= (y[2] == x[1]);
237        ok &= (y[3] == x[0]);
238        ok &= (y[4] == x[1]);
239        ok &= (y[5] == x[0]);
240        // the first two comparisions do not change
241        ok &= (f->CompareChange() == 4); 
242
243        // done with this function
244        delete f;
245
246        // ------------------------------- != ----------------------------
247        // create independent variables
248        Independent(X);
249
250        if( X[0] != X[1] )      // True variable != variable
251                Y[0] = X[0];
252        else    Y[0] = X[1];
253        if( X[0] != X[0] )      // False variable != variable
254                Y[1] = X[0];
255        else    Y[1] = X[1];
256        if( 3.  != X[1] )       // True parameter != variable
257                Y[2] = X[0];
258        else    Y[2] = X[1];
259        if( 3.  != X[0] )       // False parameter != variable
260                Y[3] = X[0];
261        else    Y[3] = X[1];
262        if( X[0] != 4.   )      // True variable != parameter
263                Y[4] = X[0];
264        else    Y[4] = X[1];
265        if( X[1] != 4.   )      // False variable != parameter
266                Y[5] = X[0];
267        else    Y[5] = X[1];
268
269        // f : X -> Y
270        f = new ADFun<double> (X, Y);
271
272        // evaluate the function at new argument
273        y = f->Forward(0, x);
274
275        // check results
276        ok &= (y[0] == x[0]);           // this is what the was taped
277        ok &= (y[1] == x[1]);
278        ok &= (y[2] == x[0]);
279        ok &= (y[3] == x[1]);
280        ok &= (y[4] == x[0]);
281        ok &= (y[5] == x[1]);
282        // the first two comparisions do not change
283        ok &= (f->CompareChange() == 4); 
284
285        // done with this function
286        delete f;
287
288        return ok;
289}
Note: See TracBrowser for help on using the repository browser.