Skip to content

Commit fe34dc5

Browse files
improved testing
1 parent dec7d1c commit fe34dc5

File tree

4 files changed

+101
-64
lines changed

4 files changed

+101
-64
lines changed
28 KB
Binary file not shown.

README.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,22 @@ Simple Matrix lib for **Programming competency test**
1717

1818
| Type | Shape | Execution time (in ms) |Execution time for assignment (in ms) |
1919
| :--------: | :---------: | :-----------------------|:----------------------------------:|
20-
| `int` | (1000,1000) |0 |0 |
21-
| `complex` | (1000,1000) | 0 |54 |
20+
| `int` | (1000,1000) | 35 | 0 |
21+
| `complex` | (1000,1000) | 48 | 55 |
2222

2323
#### Subtraction
2424

2525
| Type | Shape | Execution time (in ms) |Execution time for assignment (in ms) |
2626
| :--------: | :---------: | :-----------------------|:----------------------------------:|
27-
| `int` | (1000,1000) |0 |0 |
28-
| `complex` | (1000,1000) |0 |55 |
27+
| `int` | (1000,1000) | 36 | 0 |
28+
| `complex` | (1000,1000) | 48 | 55 |
2929

3030
#### Multiplication
3131

32-
| Type | Shape | Execution time (in ms) |Execution time for assignment (in ms) |
33-
| :--------: | :---------: | :---------------------: |:----------------------------------:|
34-
| `int` | (1000,1000) | 0 |13479 |
35-
| `complex` | (1000,1000) | 0 |30137 |
32+
| Type | Shape | Execution time for Direct (in ms) |Execution time for Lazy (in ms) |Execution time for Lazy assignment (in ms) |
33+
| :--------: | :---------: | :---------------------: |:----------------------------------: |:----------------------------------: |
34+
| `int` | (1000,1000) | 26433 |13479 |13312 |
35+
| `complex` | (1000,1000) | 61080 |34132 |36019 |
3636

3737
# System Specs
3838
- OS: MacOS

bin/Simple_Matrix

26.1 KB
Binary file not shown.

test/test.hpp

Lines changed: 93 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)