@@ -62,22 +62,25 @@ namespace test {
6262 auto testIntAdd (size_t test_size = 100 ) ->void {
6363 Matrix<size_t > m (test_size,test_size);
6464 Matrix<size_t > n (test_size,test_size);
65+ Matrix<size_t > sum (test_size,test_size);
66+
6567 for (auto i = 0 ; i < m.row (); i++)
6668 for (auto j = 0 ; j < m.col (); j++)
6769 m (i,j) = i + j;
6870 for (auto i = 0 ; i < m.row (); i++)
6971 for (auto j = 0 ; j < m.col (); j++)
7072 n (i,j) = i + j;
71- START
72- auto s = m + n;
73- STOP (" Matrix Addition Time in milliseconds: " )
74-
75- Matrix<size_t > sum (test_size,test_size);
76-
73+
7774 for (auto i = 0 ; i < m.row (); i++)
7875 for (auto j = 0 ; j < m.col (); j++)
7976 sum (i,j) = 2 * (i + j);
80-
77+
78+ START
79+ auto s = m + n;
80+ for (auto i = 0 ; i < s.row (); i++)
81+ for (auto j = 0 ; j < s.col (); j++)
82+ s (i,j);
83+ STOP (" Matrix Addition Time in milliseconds: " )
8184 assert (sum == s);
8285 std::cout<<" Matrix Addition Test Passed!\n " <<' \n ' ;
8386
@@ -108,6 +111,7 @@ namespace test {
108111 auto testIntSub (size_t test_size = 100 ) ->void {
109112 Matrix<size_t > m (test_size,test_size);
110113 Matrix<size_t > n (test_size,test_size);
114+ Matrix<size_t > test (test_size,test_size);
111115 for (auto i = 0 ; i < m.row (); i++)
112116 for (auto j = 0 ; j < m.col (); j++)
113117 m (i,j) = i + j;
@@ -116,11 +120,11 @@ namespace test {
116120 n (i,j) = i + j;
117121 START
118122 auto diff = m - n;
123+ for (auto i = 0 ; i < diff.row (); i++)
124+ for (auto j = 0 ; j < diff.col (); j++)
125+ diff (i,j);
119126 STOP (" Matrix Subtraction Time in milliseconds: " )
120-
121- Matrix<size_t > t (test_size,test_size);
122-
123- assert (t == diff);
127+ assert (test == diff);
124128 std::cout<<" Matrix Subtraction Test Passed!\n\n " ;
125129 }
126130 auto testIntSubAssign (size_t test_size = 100 ) ->void {
@@ -152,25 +156,33 @@ namespace test {
152156 for (auto i = 0 ; i < m.row (); i++)
153157 for (auto j = 0 ; j < m.col (); j++)
154158 n (i,j) = i*m.col () + j + 1 ;
155- START
156- auto prod = m * n;
157- STOP (" Matrix Multipication Time in milliseconds: " );
158159
159160 std::vector<std::vector<size_t >> test (test_size,std::vector<size_t >(test_size));
161+ std::vector<std::vector<size_t >> test_prod (test_size,std::vector<size_t >(test_size,0 ));
160162 for (auto i = 0 ; i < test_size; i++)
161163 for (auto j = 0 ; j < test_size; j++)
162164 test[i][j] = i * test_size + j + 1 ;
163165
164-
166+ START
165167 for ( int i = 0 ; i < test_size; i++ ) {
166168 for ( int j = 0 ; j < test_size; j++ ) {
167169 size_t val = 0 ;
168170 for ( int k = 0 ; k < test_size; k++ ) {
169- val += test[i][k] * test[k][j];
171+ test_prod[i][j] += test[i][k] * test[k][j];
170172 }
171- assert (( prod (i,j) == val ));
172173 }
173174 }
175+ STOP (" Matrix Direct Multipication Time in milliseconds: " );
176+
177+ START
178+ auto prod = m * n;
179+ for (auto i = 0 ; i < prod.row (); i++){
180+ for (auto j = 0 ; j < prod.col (); j++){
181+ assert (( prod (i,j) == test_prod[i][j] ));
182+ }
183+ }
184+ STOP (" Matrix Lazy Multipication Time in milliseconds: " );
185+
174186 std::cout<<" Matrix Multipication Test Passed!\n\n " ;
175187 }
176188
@@ -184,25 +196,33 @@ namespace test {
184196 for (auto i = 0 ; i < m.row (); i++)
185197 for (auto j = 0 ; j < m.col (); j++)
186198 n (i,j) = i*m.col () + j + 1 ;
187- START
188- m *= n;
189- STOP (" Matrix Multipication Assign Time in milliseconds: " );
190199 std::vector<std::vector<size_t >> test (test_size,std::vector<size_t >(test_size));
200+ std::vector<std::vector<size_t >> test_prod (test_size,std::vector<size_t >(test_size,0 ));
191201 for (auto i = 0 ; i < test_size; i++)
192202 for (auto j = 0 ; j < test_size; j++)
193203 test[i][j] = i * test_size + j + 1 ;
194204
195-
205+ START
196206 for ( int i = 0 ; i < test_size; i++ ) {
197207 for ( int j = 0 ; j < test_size; j++ ) {
198208 size_t val = 0 ;
199209 for ( int k = 0 ; k < test_size; k++ ) {
200- val += test[i][k] * test[k][j];
210+ test_prod[i][j] += test[i][k] * test[k][j];
201211 }
202- assert (( m (i,j) == val ));
203212 }
204213 }
205- std::cout<<" Matrix Multipication Assign Test Passed!\n\n " ;
214+ STOP (" Matrix Direct Assign Multipication Time in milliseconds: " );
215+
216+ START
217+ m *= n;
218+ for (auto i = 0 ; i < m.row (); i++){
219+ for (auto j = 0 ; j < m.col (); j++){
220+ assert (( m (i,j) == test_prod[i][j] ));
221+ }
222+ }
223+ STOP (" Matrix Lazy Assign Multipication Time in milliseconds: " );
224+
225+ std::cout<<" Matrix Multipication Test Passed!\n\n " ;
206226 }
207227
208228 auto testComplexAssign (size_t test_size = 100 ) ->void {
@@ -243,22 +263,25 @@ namespace test {
243263 auto testComplexAdd (size_t test_size = 100 ) ->void {
244264 Matrix<complex <int >> m (test_size,test_size);
245265 Matrix<complex <int >> n (test_size,test_size);
266+ Matrix<complex <int >> sum (test_size,test_size);
267+
246268 for (auto i = 0 ; i < m.row (); i++)
247269 for (auto j = 0 ; j < m.col (); j++)
248270 m (i,j) = complex (i + j,i + j);
249271 for (auto i = 0 ; i < m.row (); i++)
250272 for (auto j = 0 ; j < m.col (); j++)
251273 n (i,j) = complex (i + j,i + j);
252- START
253- auto s = m + n;
254- STOP (" Complex Matrix Addition Time in milliseconds: " )
255-
256- Matrix<complex <int >> sum (test_size,test_size);
257274
258275 for (auto i = 0 ; i < m.row (); i++)
259276 for (auto j = 0 ; j < m.col (); j++)
260277 sum (i,j) = complex (2 * (i + j),2 * (i + j));
261-
278+
279+ START
280+ auto s = m + n;
281+ for (auto i = 0 ; i < s.row (); i++)
282+ for (auto j = 0 ; j < s.col (); j++)
283+ s (i,j);
284+ STOP (" Complex Matrix Addition Time in milliseconds: " )
262285 assert (sum == s);
263286 std::cout<<" Complex Matrix Addition Test Passed!\n\n " ;
264287
@@ -289,6 +312,7 @@ namespace test {
289312 auto testComplexSub (size_t test_size = 100 ) ->void {
290313 Matrix<complex <int >> m (test_size,test_size);
291314 Matrix<complex <int >> n (test_size,test_size);
315+ Matrix<complex <int >> test (test_size,test_size);
292316 for (auto i = 0 ; i < m.row (); i++)
293317 for (auto j = 0 ; j < m.col (); j++)
294318 m (i,j) = complex (i + j,i + j);
@@ -297,11 +321,11 @@ namespace test {
297321 n (i,j) = complex (i + j,i + j);
298322 START
299323 auto diff = m - n;
324+ for (auto i = 0 ; i < diff.row (); i++)
325+ for (auto j = 0 ; j < diff.col (); j++)
326+ diff (i,j);
300327 STOP (" Complex Matrix Subtraction Time in milliseconds: " )
301-
302- Matrix<complex <int >> t (test_size,test_size);
303-
304- assert (t == diff);
328+ assert (test == diff);
305329 std::cout<<" Complex Matrix Subtraction Test Passed!\n\n " ;
306330 }
307331 auto testComplexSubAssign (size_t test_size = 100 ) ->void {
@@ -324,66 +348,79 @@ namespace test {
324348 }
325349
326350 auto testComplexMul (size_t test_size = 100 ) ->void {
327- Matrix<complex <int >> m (test_size,test_size);
328- Matrix<complex <int >> n (test_size,test_size);
351+ Matrix<complex <size_t >> m (test_size,test_size);
352+ Matrix<complex <size_t >> n (test_size,test_size);
329353
330354 for (auto i = 0 ; i < m.row (); i++)
331355 for (auto j = 0 ; j < m.col (); j++)
332356 m (i,j) = complex (i * m.col () + j + 1 ,i * m.col () + j + 1 );
333357 for (auto i = 0 ; i < m.row (); i++)
334358 for (auto j = 0 ; j < m.col (); j++)
335359 n (i,j) = complex (i * m.col () + j + 1 ,i * m.col () + j + 1 );
336- START
337- auto prod = m * n;
338- STOP (" Complex Matrix Multipication Time in milliseconds: " );
339-
340- std::vector<std::vector<complex <int >>> test (test_size,std::vector<complex <int >>(test_size));
360+
361+ std::vector<std::vector<complex <size_t >>> test (test_size,std::vector<complex <size_t >>(test_size));
362+ std::vector<std::vector<complex <size_t >>> test_prod (test_size,std::vector<complex <size_t >>(test_size,complex {0 ,0 }));
341363 for (auto i = 0 ; i < test_size; i++)
342364 for (auto j = 0 ; j < test_size; j++)
343365 test[i][j] = complex (i * test_size + j + 1 ,i * test_size + j + 1 );
344366
345-
367+ START
346368 for ( int i = 0 ; i < test_size; i++ ) {
347369 for ( int j = 0 ; j < test_size; j++ ) {
348- complex val = complex ( 0 , 0 ) ;
370+ size_t val = 0 ;
349371 for ( int k = 0 ; k < test_size; k++ ) {
350- val += test[i][k] * test[k][j];
372+ test_prod[i][j] += test[i][k] * test[k][j];
351373 }
352- assert (( prod (i,j) == val ));
353374 }
354375 }
376+ STOP (" Matrix Direct Multipication Time in milliseconds: " );
377+
378+ START
379+ auto prod = m * n;
380+ for (auto i = 0 ; i < prod.row (); i++){
381+ for (auto j = 0 ; j < prod.col (); j++){
382+ assert (( prod (i,j) == test_prod[i][j] ));
383+ }
384+ }
385+ STOP (" Matrix Lazy Multipication Time in milliseconds: " );
355386 std::cout<<" Complex Matrix Multipication Test Passed!\n\n " ;
356387 }
357388
358389 auto testComplexMulAssign (size_t test_size = 100 ) ->void {
359- Matrix<complex <int >> m (test_size,test_size);
360- Matrix<complex <int >> n (test_size,test_size);
390+ Matrix<complex <size_t >> m (test_size,test_size);
391+ Matrix<complex <size_t >> n (test_size,test_size);
361392
362393 for (auto i = 0 ; i < m.row (); i++)
363394 for (auto j = 0 ; j < m.col (); j++)
364395 m (i,j) = complex (i * m.col () + j + 1 ,i * m.col () + j + 1 );
365396 for (auto i = 0 ; i < m.row (); i++)
366397 for (auto j = 0 ; j < m.col (); j++)
367398 n (i,j) = complex (i * m.col () + j + 1 ,i * m.col () + j + 1 );
368- START
369- m *= n;
370- STOP (" Complex Matrix Multipication Assign Time in milliseconds: " );
371-
372- std::vector<std::vector<complex <int >>> test (test_size,std::vector<complex <int >>(test_size));
399+
400+ std::vector<std::vector<complex <size_t >>> test (test_size,std::vector<complex <size_t >>(test_size));
401+ std::vector<std::vector<complex <size_t >>> test_prod (test_size,std::vector<complex <size_t >>(test_size,complex {0 ,0 }));
373402 for (auto i = 0 ; i < test_size; i++)
374403 for (auto j = 0 ; j < test_size; j++)
375404 test[i][j] = complex (i * test_size + j + 1 ,i * test_size + j + 1 );
376405
377-
406+ START
378407 for ( int i = 0 ; i < test_size; i++ ) {
379408 for ( int j = 0 ; j < test_size; j++ ) {
380- complex val = complex (0 ,0 );
381409 for ( int k = 0 ; k < test_size; k++ ) {
382- val += test[i][k] * test[k][j];
410+ test_prod[i][j] += test[i][k] * test[k][j];
383411 }
384- assert (( m (i,j) == val ));
385412 }
386413 }
414+ STOP (" Matrix Direct Assign Multipication Time in milliseconds: " );
415+
416+ START
417+ m *= n;
418+ for (auto i = 0 ; i < m.row (); i++){
419+ for (auto j = 0 ; j < m.col (); j++){
420+ assert (( m (i,j) == test_prod[i][j] ));
421+ }
422+ }
423+ STOP (" Matrix Lazy Assign Multipication Time in milliseconds: " );
387424 std::cout<<" Complex Matrix Multipication Assign Test Passed!\n\n " ;
388425 }
389426}
0 commit comments