4 #include "CLHEP/Units/GlobalPhysicalConstants.h"
5 #include "CLHEP/Random/Randomize.h"
6 #include "CLHEP/Random/NonRandomEngine.h"
7 #include "CLHEP/Random/defs.h"
14 std::ofstream
output(
"testEngineCopy.cout");
16 std::ostream &
output = std::cout;
24 #define TEST_ENGINE_COPY
29 using namespace CLHEP;
36 std::vector<double> ab(2);
42 std::vector<double> v;
45 for (
int i=0; i<
n; i++) {
56 output <<
"Copy 64bit test for " << E::engineName() <<
"\n";
60 for (
int i=0; i<
n; i++) x += e.flat();
63 output <<
"x = " << x << std::endl;
66 output <<
"y = " << y << std::endl;
67 if( x != y )
return n;
69 for(
int i=0; i<1000; ++i ) {
73 output <<
"i = " << i <<
" x, y " << x <<
" " << y
74 <<
" vectorTest64 problem: e != f \n";
86 std::vector<double> nonRand =
aSequence(500);
91 for (
int i=0; i<
n; i++) x += e.
flat();
92 std::vector<unsigned long> v = e.
put();
95 output <<
"x = " << x << std::endl;
98 output <<
"y = " << y << std::endl;
99 if( x != y )
return n;
101 for(
int i=0; i<300; ++i ) {
103 output <<
"i = " << i <<
" vectorTest64 for NonRandomEngine problem: e != f \n";
113 output <<
"Copy for " << E::engineName() <<
"\n";
116 for (
int i=0; i<
n; i++) r += e.flat();
118 for (
int j=0; j<25; j++) v.push_back(e.flat());
120 output <<
"First four of v are: "
121 << v[0] <<
", " << v[1] <<
", " << v[2] <<
", " << v[3] <<
"\n";
132 std::vector<double> nonRand =
aSequence(500);
136 for (
int i=0; i<
n; i++) r += e.
flat();
138 for (
int j=0; j<25; j++) v.push_back(e.
flat());
140 output <<
"First four of v are: "
141 << v[0] <<
", " << v[1] <<
", " << v[2] <<
", " << v[3] <<
"\n";
149 std::vector<double> k;
150 for (
int j=0; j<25; j++) k.push_back(f.flat());
152 output <<
"First four of k are: "
153 << k[0] <<
", " << k[1] <<
", " << k[2] <<
", " << k[3] <<
"\n";
155 for (
int m1=0; m1<25; m1++) {
156 if ( v[m1] != k[m1] ) {
157 std::cout <<
"???? Incorrect copy restored value for engine: "
158 << E::engineName() <<
"\n";
160 output <<
"???? Incorrect copy restored value for engine: "
161 << E::engineName() <<
"\n";
173 std::vector<double> v;
174 int status1 = vectorTest64<E>(
n);
175 E
f = vectorRestore1<E>(
n,v);
176 int status2 = vectorRestore2<E>(
f, v);
177 return (status1 | status2);
190 #ifdef TEST_ENGINE_COPY
191 output <<
"\n=================================\n";
193 output <<
" Copy test of engines\n";
194 output <<
"=================================\n\n";
196 stat |= vectorRestore<DualRand>(113);
199 stat |= vectorRestore<Hurd160Engine>(115);
200 stat |= vectorRestore<Hurd288Engine>(116);
201 stat |= vectorRestore<HepJamesRandom>(117);
202 stat |= vectorRestore<MTwistEngine>(118);
203 stat |= vectorRestore<RanecuEngine>(139);
204 stat |= vectorRestore<Ranlux64Engine>(119);
205 stat |= vectorRestore<RanluxEngine>(120);
206 stat |= vectorRestore<RanshiEngine>(121);
207 stat |= vectorRestore<TripleRand>(122);
208 stat |= vectorRestore<NonRandomEngine>(123);
213 output <<
"\n=============================================\n\n";
216 std::cout <<
"One or more problems detected: stat = " << stat <<
"\n";
217 output <<
"One or more problems detected: stat = " << stat <<
"\n";
219 output <<
"ranRestoreTest passed with no problems detected.\n";
222 if (stat == 0)
return 0;
223 if (stat > 0)
return -(stat|1);