#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
#define N 1
template< typename T>
void test_rotm()
{
T X[N], X_ref[N];
T Y[N], Y_ref[N];
int n;
int incx, incy;
const T P[5] = { -1.0f, -4.44982e+03f, -15.5826f, 7.091334e+04f, 2.95912e+04f };
const T P_double[5] = { 1.0, -1.244580625511e+03, 1.11154682624,
2.269384716089e-05, -0.0143785338883 };
n = N;
incx = 1;
incy = 1;
if(is_same<T , float>::value)
{
X[0] = { -0.034f };
Y[0] = { -0.56f };
X_ref[0] = { -3.956017e+04f };
Y_ref[0] = { -1.657054e+04f };
}else{
X[0] = { 0.84 };
Y[0] = { -0.711 };
X_ref[0] = { -1.046158725429e+03 };
Y_ref[0] = { -0.829776862405 };
}
#ifdef PRINT
printvector(X, n, (char *)"Before blis::rot\nVector X");
printvector(Y, n, (char *)"Vector Y");
#endif
if(is_same<T , float>::value)
{
blis::rotm<T>( N, X, incx, Y, incy, P);
}else{
blis::rotm<T>( N, X, incx, Y, incy, P_double);
}
#ifdef PRINT
printvector(X, n, (char *)"After blis::rot\nVector X");
printvector(Y, n, (char *)"Vector Y");
printvector(X, n, (char *)"Expected Output from blis::rot\nVector X");
printvector(Y, n, (char *)"Vector Y");
#endif
if((computeErrorV(incx, incx , n, X, X_ref )==1)
|| (computeErrorV(incy, incy , n, Y, Y_ref )==1))
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
}
int main( int argc, char** argv )
{
test_rotm<float>( );
test_rotm<double>( );
return 0;
}