MyraMath
bothcat


Source: tests/dense/bothcat.cpp

1 // ========================================================================= //
2 // This file is part of MyraMath, copyright (c) 2014-2019 by Ryan A Chilton //
3 // and distributed by MyraCore, LLC. See LICENSE.txt for license terms. //
4 // ========================================================================= //
5 
11 // Containers.
13 #include <myramath/dense/Matrix.h>
16 
17 // Algorithms.
18 #include <myramath/dense/bothcat.h>
20 
21 // Reporting.
22 #include <tests/myratest.h>
23 
24 using namespace myra;
25 
26 namespace {
27 
28 // Test bothcat(A,B)
29 template<class Number> void test1(typename ReflectPrecision<Number>::type tolerance)
30  {
31  typedef typename ReflectPrecision<Number>::type Precision;
32  auto A = Matrix<Number>::random(6,6);
33  auto B = bothcat( A.top(2).left(2), A.top(2).right(4), A.bottom(4).left(2), A.bottom(4).right(4) );
34  Precision error = frobenius(A-B);
35  myra::out() << " |A - bothcat(a,a,a,a)| = " << error << std::endl;
36  REQUIRE(error < tolerance);
37  }
38 
39 #ifdef MYRAMATH_ENABLE_CPP11
40 
41 // Test horzcat({A,B,C})
42 template<class Number> void test2(typename ReflectPrecision<Number>::type tolerance)
43  {
44  typedef typename ReflectPrecision<Number>::type Precision;
45  auto A = Matrix<Number>::random(7,7);
46  auto B = bothcat( A.add_const().windows({2,3,2},{3,1,3}) );
47  Precision error = frobenius(A-B);
48  myra::out() << " |A - bothcat(...)| = " << error << std::endl;
49  REQUIRE(error < tolerance);
50  }
51 
52 #endif
53 
54 } // namespace
55 
56 ADD_TEST("bothcat","[dense]")
57  {
58  test1<NumberS>(1.0e-5f);
59  test1<NumberD>(1.0e-10);
60  test1<NumberC>(1.0e-5f);
61  test1<NumberZ>(1.0e-10);
62  }
63 
64 #ifdef MYRAMATH_ENABLE_CPP11
65 
66 ADD_TEST("bothcat_cpp11","[dense]")
67  {
68  test2<NumberS>(1.0e-5f);
69  test2<NumberD>(1.0e-10);
70  test2<NumberC>(1.0e-5f);
71  test2<NumberZ>(1.0e-10);
72  }
73 
74 #endif
Interface class for representing subranges of dense Matrix&#39;s.
Routines for computing Frobenius norms of various algebraic containers.
static Matrix< Number > random(int I, int J)
Generates a random Matrix of specified size.
Definition: Matrix.cpp:353
Container of values, allows random (i,j) access.
Definition: syntax.dox:1
General purpose dense matrix container, O(i*j) storage.
Reflects Precision trait for a Number, scalar Number types should specialize it.
Definition: Number.h:33
Routines to concatenate Matrix&#39;s in two-by-two fashion.
const DiagonalMatrix< Number > & add_const() const
Returns const reference to *this.
Definition: DiagonalMatrix.cpp:91
Interface class for representing subranges of contiguous int&#39;s.


Results: [PASS]

|A - bothcat(a,a,a,a)| = 0
|A - bothcat(a,a,a,a)| = 0
|A - bothcat(a,a,a,a)| = 0
|A - bothcat(a,a,a,a)| = 0


Go back to Summary of /test programs.