47 int main(
int argc,
char* argv[])
49 int numberFailedTests = 0;
51 if (argc>1)
if (argv[1][0]==
'-' && argv[1][1]==
'v') verbose =
true;
70 for(i = 0; i < 16; i++)
75 for(i = 0; i < 4; i++)
83 Ad[0] = 1; Ad[2] = 1; Ad[5] = 1; Ad[8] = 2; Ad[9] = 1; Ad[10] = 1; Ad[14] = 2; Ad[15] = 2;
85 bd[1] = 2; bd[2] = 1; bd[3] = 2;
86 Af[0] = 1; Af[2] = 1; Af[5] = 1; Af[8] = 2; Af[9] = 1; Af[10] = 1; Af[14] = 2; Af[15] = 2;
88 bf[1] = 2; bf[2] = 1; bf[3] = 2;
90 if (verbose) std::cout <<
"GESV test ... ";
91 L.
GESV(4, 1, Ad, 4, IPIV, bd, 4, &info);
92 M.
GESV(4, 1, Af, 4, IPIV, bf, 4, &info);
93 for(i = 0; i < 4; i++)
96 if (verbose && i==3) std::cout <<
"passed!" << std::endl;
98 if (verbose) std::cout <<
"FAILED" << std::endl;
104 if (verbose) std::cout <<
"LAPY2 test ... ";
105 float fx = 3, fy = 4;
106 float flapy = M.
LAPY2(fx, fy);
107 double dx = 3, dy = 4;
108 double dlapy = L.
LAPY2(dx, dy);
109 if ( dlapy == flapy && dlapy == 5.0 && flapy == 5.0
f ) {
110 if (verbose) std::cout <<
"passed!" << std::endl;
112 if (verbose) std::cout <<
"FAILED (" << dlapy <<
" != " << flapy <<
")" << std::endl;
116 if (verbose) std::cout <<
"STEQR test ... ";
118 typedef double ScalarType;
122 const int DIAG_SZ = 1031;
124 std::vector<ScalarType> diagonal(DIAG_SZ);
125 std::vector<ScalarType> subdiagonal(DIAG_SZ-1);
127 for (i=0; i < DIAG_SZ; ++i) {
128 diagonal[i] = DIAG_SZ - i;
130 subdiagonal[i] = STS::eps () * i;
133 ScalarType expected_lambda_min = STS::one ();
134 ScalarType expected_lambda_max = DIAG_SZ;
136 int dont_call_me_info = 0;
137 const int dummy_ldz = 1;
138 std::vector<ScalarType> scalar_dummy(1,-1.0);
141 const int N = DIAG_SZ;
142 std::vector<MagnitudeType> mag_dummy(N);
144 ScalarType lambda_min = STS::one ();
145 ScalarType lambda_max = STS::one ();
148 lapack.
STEQR (char_N, N, &diagonal[0], &subdiagonal[0],
149 &scalar_dummy[0], dummy_ldz, &mag_dummy[0], &dont_call_me_info);
151 if (dont_call_me_info < 0) {
153 std::cout <<
"STEQR: compute symmetric tridiagonal eigenvalues: "
154 <<
"LAPACK's _STEQR failed with info = "
155 << dont_call_me_info <<
" < 0.";
159 lambda_min = diagonal[0];
160 lambda_max = diagonal[N-1];
164 bool good_lambda_min = (fabs (lambda_min - expected_lambda_min) <= 1.e-8);
165 bool good_lambda_max = (fabs (lambda_max - expected_lambda_max) <= 1.e-8);
167 if (good_lambda_min && good_lambda_max) {
168 if (verbose) std::cout <<
"Passed! ( Lambda min: expected "
169 << expected_lambda_min <<
", computed " << lambda_min
170 <<
"; Lambda max: expected " << expected_lambda_max <<
", computed " << lambda_max <<
")"
174 if (verbose) std::cout <<
"FAILED ( Lambda min: expected "
175 << expected_lambda_min <<
", computed " << lambda_min
176 <<
"; Lambda max: expected " << expected_lambda_max <<
", computed " << lambda_max <<
")"
181 #if ! (defined(__INTEL_COMPILER) && defined(_WIN32) )
186 if (verbose) std::cout <<
"ILAENV test ... ";
190 if (verbose) std::cout <<
"passed!" << std::endl;
192 if (verbose) std::cout <<
"FAILED!" << std::endl;
198 if(numberFailedTests > 0)
201 std::cout <<
"Number of failed tests: " << numberFailedTests << std::endl;
202 std::cout <<
"End Result: TEST FAILED" << std::endl;
206 if(numberFailedTests==0)
207 std::cout <<
"End Result: TEST PASSED" << std::endl;