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);
std::vector< double > aSequence(int n)
virtual std::ostream & put(std::ostream &os) const
NonRandomEngine vectorRestore1< NonRandomEngine >(int n, std::vector< double > &v)
int vectorTest64< NonRandomEngine >(int n)
static std::string engineName()
E vectorRestore1(int n, std::vector< double > &v)
void setRandomSequence(double *s, int n)
std::ofstream output("testEngineCopy.cout")
int vectorRestore2(E &f, const std::vector< double > &v)
bool equals01(const std::vector< double > &ab)
bool equals(double a, double b)