1 
2 #include "TMV.h"
3 #include "TMV_Small.h"
4 #include "TMV_Test.h"
5 #include "TMV_Test_3.h"
6 #define NOLDIVEQ
7 #include "TMV_TestMatrixDivArith.h"
8 
9 template <class T, tmv::StorageType stor, int N>
TestSmallNonSquareDiv_B2a()10 static void TestSmallNonSquareDiv_B2a()
11 {
12     tmv::SmallMatrix<T,6,N,stor> m;
13 
14     for(int i=0;i<6;++i) for(int j=0;j<N;++j) m(i,j) = T(2+4*i-5*j);
15     m.diag() *= T(11);
16     m /= T(7);
17     if (N > 1) m(1,0) = -2;
18     if (N > 2) m(2,0) = 7;
19     if (N > 3) m(3,0) = -10;
20     if (N > 2) m(2,2) = 30;
21 
22     tmv::SmallMatrix<T,6,N,stor> a1 = m;
23     tmv::SmallMatrix<T,6,6,tmv::ColMajor> a3a = m * m.transpose();
24     tmv::SmallMatrix<T,N,6,stor> a4;
25     a3a.row(5) *= T(7);
26     if (N > 3) a3a.col(3).addToAll(7);
27     tmv::SmallMatrix<std::complex<T>,6,N,stor> c1 = a1 * std::complex<T>(1,2);
28     tmv::SmallMatrix<std::complex<T>,6,6,tmv::ColMajor> c3a =
29         a3a * std::complex<T>(-4,8);
30     tmv::SmallMatrix<std::complex<T>,N,6,stor> c4;
31 
32     TestMatrixDivArith3b(tmv::QR,a1,a3a,a4,c1,c3a,c4,"Square/NonSquare");
33 #if (XTEST & 32)
34     tmv::SmallMatrix<T,6,N,stor|tmv::FortranStyle> a1f = a1;
35     tmv::SmallMatrix<std::complex<T>,6,N,stor|tmv::FortranStyle> c1f = c1;
36 
37     tmv::SmallMatrix<T,6,6,tmv::ColMajor|tmv::FortranStyle> a3fa = a3a;
38     tmv::SmallMatrix<std::complex<T>,6,6,tmv::ColMajor|tmv::FortranStyle> c3fa = c3a;
39     tmv::SmallMatrix<T,N,6,stor|tmv::FortranStyle> a4f = a4;
40     tmv::SmallMatrix<std::complex<T>,N,6,stor|tmv::FortranStyle> c4f = c4;
41 
42     TestMatrixDivArith3b(tmv::QR,a1f,a3a,a4,c1f,c3a,c4,"Square/NonSquare");
43     TestMatrixDivArith3b(tmv::QR,a1f,a3fa,a4,c1f,c3fa,c4,"Square/NonSquare");
44     TestMatrixDivArith3b(tmv::QR,a1f,a3fa,a4f,c1f,c3fa,c4f,"Square/NonSquare");
45 #endif
46 }
47 
48 template <class T>
TestSmallMatrixDiv_B2a()49 void TestSmallMatrixDiv_B2a()
50 {
51     TestSmallNonSquareDiv_B2a<T,tmv::ColMajor,2>();
52     TestSmallNonSquareDiv_B2a<T,tmv::ColMajor,5>();
53 #if (XTEST & 2)
54     TestSmallNonSquareDiv_B2a<T,tmv::ColMajor,1>();
55     TestSmallNonSquareDiv_B2a<T,tmv::ColMajor,3>();
56     TestSmallNonSquareDiv_B2a<T,tmv::ColMajor,4>();
57     TestSmallNonSquareDiv_B2a<T,tmv::RowMajor,1>();
58     TestSmallNonSquareDiv_B2a<T,tmv::RowMajor,2>();
59     TestSmallNonSquareDiv_B2a<T,tmv::RowMajor,3>();
60     TestSmallNonSquareDiv_B2a<T,tmv::RowMajor,4>();
61     TestSmallNonSquareDiv_B2a<T,tmv::RowMajor,5>();
62 #endif
63 }
64 
65 #ifdef TEST_DOUBLE
66 template void TestSmallMatrixDiv_B2a<double>();
67 #endif
68 #ifdef TEST_FLOAT
69 template void TestSmallMatrixDiv_B2a<float>();
70 #endif
71 #ifdef TEST_LONGDOUBLE
72 template void TestSmallMatrixDiv_B2a<long double>();
73 #endif
74