~chaffra/+junk/trilinos

« back to all changes in this revision

Viewing changes to packages/sacado/test/tradoptest/tradoptest_59.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Christophe Prud'homme, Christophe Prud'homme, Johannes Ring
  • Date: 2009-12-13 12:53:22 UTC
  • mfrom: (5.1.2 sid)
  • Revision ID: james.westby@ubuntu.com-20091213125322-in0nrdjc55deqsw9
Tags: 10.0.3.dfsg-1
[Christophe Prud'homme]
* New upstream release

[Johannes Ring]
* debian/patches/libname.patch: Add prefix 'libtrilinos_' to all
  libraries. 
* debian/patches/soname.patch: Add soversion to libraries.
* debian/watch: Update download URL.
* debian/control:
  - Remove python-numeric from Build-Depends (virtual package).
  - Remove automake and autotools from Build-Depends and add cmake to
    reflect switch to CMake.
  - Add python-support to Build-Depends.
* debian/rules: 
  - Cleanup and updates for switch to CMake.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
 
 
3
/* Try to test all combinations of types and operations */
 
4
 
 
5
 
 
6
 
 
7
#define ADT_RAD Sacado::Rad::
 
8
 
 
9
 
 
10
 
 
11
#include "Sacado_trad.hpp"
 
12
 
 
13
#include <cstdio>
 
14
 
 
15
using std::printf;
 
16
 
 
17
 
 
18
 
 
19
typedef ADT_RAD IndepADvar<double> AI;
 
20
 
 
21
typedef ADT_RAD ADvar<double> A;
 
22
 
 
23
typedef ADT_RAD ConstADvar<double> C;
 
24
 
 
25
typedef ADT_RAD ADvari<double> Ai;
 
26
 
 
27
typedef const ADT_RAD IndepADvar<double> cAI;
 
28
 
 
29
typedef const ADT_RAD ADvar<double> cA;
 
30
 
 
31
typedef const ADT_RAD ConstADvar<double> cC;
 
32
 
 
33
typedef const ADT_RAD ADvari<double> cAi;
 
34
 
 
35
static int rc;
 
36
 
 
37
 
 
38
 
 
39
/* This is to be run through an awk program that changes lines */
 
40
 
 
41
/* with "BINTEST" or "UNOPTEST" at the beginning of the line into */
 
42
 
 
43
/* a the desired C++ (which we can then inspect). */
 
44
 
 
45
 
 
46
 
 
47
 void
 
48
 
 
49
botch(const char *what, double wanted, double got)
 
50
 
 
51
{
 
52
 
 
53
        printf("%s: expected %g, got %g, diff = %.2g\n", what, wanted, got, wanted-got);
 
54
 
 
55
        rc = 1;
 
56
 
 
57
        }
 
58
 
 
59
 
 
60
 
 
61
 const double tol = 5e-16;
 
62
 
 
63
 
 
64
 
 
65
 int
 
66
 
 
67
differ(double a, double b)
 
68
 
 
69
{
 
70
 
 
71
        double d = a - b;
 
72
 
 
73
        if (d < 0.)
 
74
 
 
75
                d = -d;
 
76
 
 
77
        if (a < 0.)
 
78
 
 
79
                a = -a;
 
80
 
 
81
        if (b < 0.)
 
82
 
 
83
                b = -b;
 
84
 
 
85
        if (a < b)
 
86
 
 
87
                a = b;
 
88
 
 
89
        if (a > 0.)
 
90
 
 
91
                d /= a;
 
92
 
 
93
        return d > tol;
 
94
 
 
95
        }
 
96
 
 
97
 
 
98
 
 
99
#ifndef RAD_EQ_ALIAS
 
100
 
 
101
#define Plus_dx 1.
 
102
 
 
103
#else
 
104
 
 
105
#ifdef RAD_AUTO_AD_Const
 
106
 
 
107
#define Plus_dx 1.
 
108
 
 
109
#else
 
110
 
 
111
#define Plus_dx 0.
 
112
 
 
113
#endif
 
114
 
 
115
#endif
 
116
 
 
117
 
 
118
 
 
119
 int
 
120
 
 
121
main(void)
 
122
 
 
123
{
 
124
 
 
125
        AI xAI, yAI;
 
126
 
 
127
        A fA, xA, yA;
 
128
 
 
129
        C xC, yC;
 
130
 
 
131
        double dx, dy, f, xd, yd;
 
132
 
 
133
        long xL, yL;
 
134
 
 
135
        int xi, yi;
 
136
 
 
137
 
 
138
 
 
139
        rc = 0;
 
140
 
 
141
 
 
142
        /**** Test of fabs ****/
 
143
 
 
144
        xd = 37.; f = 37.; dx = 1.;
 
145
        xAI = xd;
 
146
        fA = fabs(xAI);
 
147
        A::Gradcomp();
 
148
        if (differ(fA.val(), f)) botch("fA = fabs(xAI)", f, fA.val());
 
149
        else if (differ(xAI.adj(), dx)) botch("d fabs(xAI)/dx", dx, xAI.adj());
 
150
        {
 
151
        A::aval_reset();
 
152
        cAI xcAI(xd);
 
153
        fA = fabs(xcAI);
 
154
        A::Gradcomp();
 
155
        if (differ(fA.val(), f)) botch("fA = fabs(xcAI)", f, fA.val());
 
156
        else if (differ(xcAI.adj(), dx)) botch("d fabs(xcAI)/dx", dx, xcAI.adj());
 
157
        }
 
158
        xA = xd;
 
159
        fA = fabs(xA);
 
160
        A::Gradcomp();
 
161
        if (differ(fA.val(), f)) botch("fA = fabs(xA)", f, fA.val());
 
162
        else if (differ(xA.adj(), dx)) botch("d fabs(xA)/dx", dx, xA.adj());
 
163
        {
 
164
        A::aval_reset();
 
165
        cA xcA(xd);
 
166
        fA = fabs(xcA);
 
167
        A::Gradcomp();
 
168
        if (differ(fA.val(), f)) botch("fA = fabs(xcA)", f, fA.val());
 
169
        else if (differ(xcA.adj(), dx)) botch("d fabs(xcA)/dx", dx, xcA.adj());
 
170
        }
 
171
        xC = xd;
 
172
        fA = fabs(xC);
 
173
        A::Gradcomp();
 
174
        if (differ(fA.val(), f)) botch("fA = fabs(xC)", f, fA.val());
 
175
        else if (differ(xC.adj(), dx)) botch("d fabs(xC)/dx", dx, xC.adj());
 
176
        {
 
177
        A::aval_reset();
 
178
        cC xcC(xd);
 
179
        fA = fabs(xcC);
 
180
        A::Gradcomp();
 
181
        if (differ(fA.val(), f)) botch("fA = fabs(xcC)", f, fA.val());
 
182
        else if (differ(xcC.adj(), dx)) botch("d fabs(xcC)/dx", dx, xcC.adj());
 
183
        }
 
184
        {
 
185
        cAi xcAi(xd);
 
186
        fA = fabs(xcAi);
 
187
        A::Gradcomp();
 
188
        if (differ(fA.val(), f)) botch("fA = fabs(xcAi)", f, fA.val());
 
189
        else if (differ(xcAi.aval, dx)) botch("d fabs(xcAi)/dx", dx, xcAi.aval);
 
190
        }
 
191
        {
 
192
        A::aval_reset();
 
193
        cAi xcAi(xd);
 
194
        fA = fabs(xcAi);
 
195
        A::Gradcomp();
 
196
        if (differ(fA.val(), f)) botch("fA = fabs(xcAi)", f, fA.val());
 
197
        else if (differ(xcAi.aval, dx)) botch("d fabs(xcAi)/dx", dx, xcAi.aval);
 
198
        }
 
199
 
 
200
 
 
201
        if (!rc) // chatter for cppunit test, which cannot tolerate silence
 
202
 
 
203
                printf("OK\n");
 
204
 
 
205
        return rc;
 
206
 
 
207
        }