MachineIntelligenceCore:Algorithms
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
MatrixTests.cpp
Go to the documentation of this file.
1 
25 #include <gtest/gtest.h>
26 
27 #include <fstream>
28 // Include headers that implement a archive in simple text format
29 #include <boost/archive/text_iarchive.hpp>
30 #include <boost/archive/text_oarchive.hpp>
31 
32 // Redefine word "public" so every class field/method will be accessible for tests.
33 #define private public
34 #include <types/Matrix.hpp>
35 
39 TEST(Matrix, Dimensions2x5) {
40  // Default sizes of matrices.
41  const size_t N = 2;
42  const size_t M = 5;
43 
45 
46  ASSERT_EQ(nm.rows(), N);
47  ASSERT_EQ(nm.cols(), M);
48 
49 }
50 
51 
55 TEST(Matrix, Serialization) {
56  // Default sizes of matrices.
57  const size_t N = 2;
58  const size_t M = 5;
59 
61  nm.randn();
62 
63  const char* fileName = "saved.txt";
64  // Save data
65  {
66  // Create an output archive
67  std::ofstream ofs(fileName);
68  boost::archive::text_oarchive ar(ofs);
69  // Write data
70  ar & nm;
71 // std::cout << "Saved matrix = " << nm << std::endl;
72  }
73 
74  // Restore data
75  mic::types::Matrix<float> restored_mat;
76  restored_mat.randn();
77 
78  {
79  // Create and input archive
80  std::ifstream ifs(fileName);
81  boost::archive::text_iarchive ar(ifs);
82  // Load data
83  ar & restored_mat;
84 // std::cout << "Restored matrix = " << restored_mat << std::endl;
85  }
86 
87  for (size_t i =0; i< (size_t)nm.size(); i++)
88  ASSERT_EQ(nm(i), restored_mat(i));
89 
90 }
91 
95 TEST(Matrix, OperatorAssignmentFloat) {
96  // Default sizes of matrices.
97  const size_t N = 2;
98  const size_t M = 5;
99 
100  mic::types::Matrix<float> nm(N, M);
101  for (size_t i= 0; i<N; i++)
102  for (size_t j= 0; j<M; j++)
103  nm(i,j) = i*j;
104 
105 
106  mic::types::Matrix<float> nm2 = nm;
107  for (size_t i= 0; i<N; i++)
108  for (size_t j= 0; j<M; j++)
109  ASSERT_EQ(nm2(i,j), i*j);
110 
111 }
112 
113 
117 TEST(Matrix, Enumeration2x3) {
118  // Default sizes of matrices.
119  const size_t N = 2;
120  const size_t M = 3;
121 
122  mic::types::Matrix<float> nm(N, M);
123  nm.enumerate();
124 
125  for (size_t i =0; i< N*M; i++)
126  ASSERT_EQ(nm(i), i);
127 
128  /*for(size_t row=0; row<N; row++) {
129  for(size_t col=0; col<M; col++)
130  std::cout << " nm(" << row << "," << col << ") = " << nm(row,col);
131  std::cout << std::endl;
132  }//: for*/
133 
134  ASSERT_EQ(nm(0,0), 0);
135  ASSERT_EQ(nm(0,1), 2);
136  ASSERT_EQ(nm(0,2), 4);
137  ASSERT_EQ(nm(1,0), 1);
138  ASSERT_EQ(nm(1,1), 3);
139  ASSERT_EQ(nm(1,2), 5);
140 
141  nm.resize(M,N);
142 
143  /*for(size_t row=0; row<M; row++) {
144  for(size_t col=0; col<N; col++)
145  std::cout << " nm(" << row << "," << col << ") = " << nm(row,col);
146  std::cout << std::endl;
147  }//: for*/
148 
149 }
150 
151 
152 
153 
157 TEST(Matrix, ArmadilloCompatibilityTest) {
158  // Default sizes of matrices.
159  const size_t N = 4;
160  const size_t M = 5;
161 
162  mic::types::Matrix<float> nm(N, M);
163  nm.zeros();
164 
165  for (size_t i =0; i< N*M; i++)
166  ASSERT_EQ(nm[i], 0);
167 }
168 
169 
170 int main(int argc, char **argv) {
171  testing::InitGoogleTest(&argc, argv);
172  return RUN_ALL_TESTS();
173 }
174 
175 
void randn(T mean=0, T stddev=1)
Definition: Matrix.hpp:199
TEST(Matrix, Dimensions2x5)
Definition: MatrixTests.cpp:39
int main(int argc, char **argv)
Template-typed Matrix of dynamic size. Uses OpenBLAS if found by CMAKE - overloaded, specializations of * operator for types: float, double.
Definition: Matrix.hpp:64