Skip to content

Commit 78757f4

Browse files
committed
[Test] Add matrix generator
- Add utils for input/output matrix from/to disk - Small bug fix into tests - Add environment variable - TestMatrix_Path - Add generators for operations and matrix
1 parent 81d293d commit 78757f4

21 files changed

+344
-80
lines changed

python/tests/test_duplicate.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,25 @@
11
import unittest
22
import test_utils
3+
import utils.io_file
34

45

56
class TestMatrixDuplicate(unittest.TestCase):
7+
def setUp(self) -> None:
8+
self.input_matrices = [["matrix_1.mtx"], ["matrix_2.mtx"]]
9+
self.result_matrices = ["duplicate_res_1.mtx", "duplicate_res_2.mtx"]
10+
611
def test_duplicate(self):
712
"""
813
Unit test for duplicate of matrix
914
"""
10-
first_matrix = test_utils.build_matrix_from_file("../data/duplicate.mtx")
11-
12-
actual_matrix = first_matrix.dup()
15+
for i in range(len(self.input_matrices)):
16+
matrices = list()
17+
for matrix in self.input_matrices[i]:
18+
matrices.append(utils.io_file.build_matrix_by_name(matrix))
19+
expected_matrix = utils.io_file.build_matrix_by_name(self.result_matrices[i])
20+
actual_matrix = matrices[0].dup()
1321

14-
self.assertTrue(test_utils.compare_matrix(first_matrix, actual_matrix))
22+
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
1523

1624

1725
if __name__ == "__main__":

python/tests/test_extract_matrix.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,26 @@
11
import unittest
22
import test_utils
3+
import utils.io_file
34

45

56
class TestMatrixExtractMatrix(unittest.TestCase):
7+
def setUp(self) -> None:
8+
self.input_matrices = [["matrix_1.mtx"], ["matrix_2.mtx"]]
9+
self.result_matrices = ["extract_res_1.mtx", "extract_res_2.mtx"]
10+
611
def test_extract_matrix(self):
712
"""
813
Unit test for extract submatrix from left-upper corner of matrix
914
"""
10-
first_matrix = test_utils.build_matrix_from_file("../data/extract_matrix.mtx")
11-
expected_matrix = test_utils.build_matrix_from_file("../data/extract_matrix_result.mtx")
15+
for i in range(len(self.input_matrices)):
16+
matrices = list()
17+
for matrix in self.input_matrices[i]:
18+
matrices.append(utils.io_file.build_matrix_by_name(matrix))
19+
expected_matrix = utils.io_file.build_matrix_by_name(self.result_matrices[i])
1220

13-
actual_matrix = first_matrix.extract_matrix(0, 0, expected_matrix.shape)
21+
actual_matrix = matrices[0].extract_matrix(0, 0, expected_matrix.shape)
1422

15-
self.assertTrue(expected_matrix, actual_matrix)
23+
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
1624

1725

1826
if __name__ == "__main__":

python/tests/test_kronecker.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
11
import unittest
22
import test_utils
3+
import utils.io_file
34

45

56
class TestMatrixKronecker(unittest.TestCase):
7+
def setUp(self) -> None:
8+
self.input_matrices = [["matrix_1.mtx", "matrix_2.mtx"], ["matrix_3.mtx", "matrix_4.mtx"]]
9+
self.result_matrices = ["kronecker_res_12.mtx", "kronecker_res_34.mtx"]
10+
611
def test_kronecker(self):
712
"""
813
Unit test for kronecker product of two matrices
914
"""
10-
first_matrix = test_utils.build_matrix_from_file("../data/kronecker_1.mtx")
11-
second_matrix = test_utils.build_matrix_from_file("../data/kronecker_2.mtx")
12-
13-
actual_matrix = first_matrix.kronecker(second_matrix)
14-
expected_matrix = test_utils.build_matrix_from_file("../data/kronecker_result.mtx")
15+
for i in range(len(self.input_matrices)):
16+
matrices = list()
17+
for matrix in self.input_matrices[i]:
18+
matrices.append(utils.io_file.build_matrix_by_name(matrix))
19+
expected_matrix = utils.io_file.build_matrix_by_name(self.result_matrices[i])
20+
first_matrix = matrices[0]
21+
second_matrix = matrices[1]
22+
actual_matrix = first_matrix.kronecker(second_matrix)
1523

16-
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
24+
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
1725

1826

1927
if __name__ == "__main__":

python/tests/test_matrix_add.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
11
import unittest
22
import test_utils
3+
import utils.io_file
34

45

56
class TestMatrixAdd(unittest.TestCase):
7+
def setUp(self) -> None:
8+
self.input_matrices = [["matrix_1.mtx", "matrix_2.mtx"], ["matrix_3.mtx", "matrix_4.mtx"]]
9+
self.result_matrices = ["add_res_12.mtx", "add_res_34.mtx"]
10+
611
def test_add(self):
712
"""
813
Unit test for addition of two matrices
914
"""
10-
first_matrix = test_utils.build_matrix_from_file("../data/add_1.mtx")
11-
second_matrix = test_utils.build_matrix_from_file("../data/add_2.mtx")
12-
13-
actual_matrix = first_matrix.ewiseadd(second_matrix)
14-
expected_matrix = test_utils.build_matrix_from_file("../data/add_result.mtx")
15+
for i in range(len(self.input_matrices)):
16+
matrices = list()
17+
for matrix in self.input_matrices[i]:
18+
matrices.append(utils.io_file.build_matrix_by_name(matrix))
19+
expected_matrix = utils.io_file.build_matrix_by_name(self.result_matrices[i])
20+
first_matrix = matrices[0]
21+
second_matrix = matrices[1]
22+
actual_matrix = first_matrix.ewiseadd(second_matrix)
1523

16-
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
24+
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
1725

1826

1927
if __name__ == "__main__":

python/tests/test_matrix_mxm.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
11
import unittest
22
import test_utils
3+
import utils.io_file
34

45

56
class TestMatrixMxm(unittest.TestCase):
7+
def setUp(self) -> None:
8+
self.input_matrices = [["matrix_1.mtx", "matrix_2.mtx"], ["matrix_3.mtx", "matrix_4.mtx"]]
9+
self.result_matrices = ["mxm_res_12.mtx", "mxm_res_34.mtx"]
10+
611
def test_mxm(self):
712
"""
813
Unit test for multiplication of two matrices
914
"""
10-
first_matrix = test_utils.build_matrix_from_file("../data/mxm_1.mtx")
11-
second_matrix = test_utils.build_matrix_from_file("../data/mxm_2.mtx")
12-
13-
actual_matrix = first_matrix.mxm(second_matrix)
14-
expected_matrix = test_utils.build_matrix_from_file("../data/mxm_result.mtx")
15+
for i in range(len(self.input_matrices)):
16+
matrices = list()
17+
for matrix in self.input_matrices[i]:
18+
matrices.append(utils.io_file.build_matrix_by_name(matrix))
19+
expected_matrix = utils.io_file.build_matrix_by_name(self.result_matrices[i])
20+
first_matrix = matrices[0]
21+
second_matrix = matrices[1]
22+
actual_matrix = first_matrix.mxm(second_matrix)
1523

16-
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
24+
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
1725

1826

1927
if __name__ == "__main__":

python/tests/test_matrix_properties.py

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
import unittest
2-
import test_utils
2+
import utils.io_file
33

44

55
class TestMatrixMethods(unittest.TestCase):
6-
76
def setUp(self) -> None:
8-
self.matrix = test_utils.build_matrix_from_file("../data/property.mtx")
7+
self.input_matrices = [["matrix_1.mtx"], ["matrix_2.mtx"]]
8+
self.result_matrices = ["property_res_1.mtx", "property_res_2.mtx"]
9+
10+
self.matrices = list()
911
self.result_property = list()
10-
with open("/matrices/property_result.mtx", 'r') as _file:
11-
line = list(map(int, _file.readline().split()))
12-
self.result_property.append(line)
12+
for i in range(len(self.input_matrices)):
13+
for matrix in self.input_matrices[i]:
14+
self.matrices.append(utils.io_file.build_matrix_by_name(matrix))
15+
16+
for i in range(len(self.result_matrices)):
17+
self.result_property.append(utils.io_file.build_matrix_by_name(self.result_matrices[i]))
1318

1419
def tearDown(self) -> None:
1520
"""
@@ -20,16 +25,20 @@ def tearDown(self) -> None:
2025
pass
2126

2227
def test_nrows(self):
23-
self.assertEqual(self.result_property[0][0], self.matrix.nrows)
28+
for i in range(len(self.matrices)):
29+
self.assertEqual(self.result_property[i].nrows, self.matrices[i].nrows)
2430

2531
def test_ncols(self):
26-
self.assertEqual(self.result_property[1][0], self.matrix.ncols)
32+
for i in range(len(self.matrices)):
33+
self.assertEqual(self.result_property[i].ncols, self.matrices[i].ncols)
2734

2835
def test_nvals(self):
29-
self.assertEqual(self.result_property[2][0], self.matrix.nvals)
36+
for i in range(len(self.matrices)):
37+
self.assertEqual(self.result_property[i].nvals, self.matrices[i].nvals)
3038

3139
def test_shape(self):
32-
self.assertEqual(self.result_property[0], self.matrix.shape)
40+
for i in range(len(self.matrices)):
41+
self.assertEqual(self.result_property[i].shape, self.matrices[i].shape)
3342

3443

3544
if __name__ == "__main__":

python/tests/test_reduce.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
11
import unittest
22
import test_utils
3+
import utils.io_file
34

45

56
class TestMatrixReduce(unittest.TestCase):
7+
def setUp(self) -> None:
8+
self.input_matrices = [["matrix_1.mtx"], ["matrix_2.mtx"]]
9+
self.result_matrices = ["reduce_res_1.mtx", "reduce_res_2.mtx"]
10+
611
def test_reduce(self):
712
"""
813
Unit test for reduce of matrix
914
"""
10-
first_matrix = test_utils.build_matrix_from_file("../data/reduce.mtx")
11-
12-
actual_matrix = first_matrix.reduce()
13-
expected_matrix = test_utils.build_matrix_from_file("../data/reduce_result.mtx")
15+
for i in range(len(self.input_matrices)):
16+
matrices = list()
17+
for matrix in self.input_matrices[i]:
18+
matrices.append(utils.io_file.build_matrix_by_name(matrix))
19+
expected_matrix = utils.io_file.build_matrix_by_name(self.result_matrices[i])
20+
actual_matrix = matrices[0].reduce()
1421

15-
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
22+
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
1623

1724

1825
if __name__ == "__main__":

python/tests/test_to_lists.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,36 @@
11
import unittest
2-
import test_utils
2+
import utils.io_file
33

44

55
class TestMatrixToLists(unittest.TestCase):
66
def setUp(self) -> None:
7-
self.matrix = test_utils.build_matrix_from_file("../data/to_lists.mtx")
7+
self.input_matrices = [["matrix_1.mtx"], ["matrix_2.mtx"]]
8+
self.result_matrices = ["to_lists_res_1.mtx", "to_lists_res_2.mtx"]
9+
10+
self.matrices = list()
811
self.result_lists = list()
9-
with open("../data/to_lists_result.mtx", 'r') as _file:
10-
line = list(map(int, _file.readline().split()))
11-
self.result_lists.append(line)
12+
for i in range(len(self.input_matrices)):
13+
for matrix in self.input_matrices[i]:
14+
self.matrices.append(utils.io_file.build_matrix_by_name(matrix))
15+
16+
for i in range(len(self.result_matrices)):
17+
self.result_lists.append(utils.io_file.build_matrix_by_name(self.result_matrices[i]))
1218

1319
def test_to_lists(self):
1420
"""
1521
Unit test to extract a matrix as two lists
1622
"""
23+
for i in range(len(self.matrices)):
1724

18-
actual_rows, actual_cols = self.matrix.to_lists()
25+
actual_rows, actual_cols = self.matrices[i].to_lists()
26+
expected_rows, expected_cols = self.result_lists[i].to_lists()
1927

20-
self.assertListEqual(self.result_lists[0], actual_rows)
21-
self.assertListEqual(self.result_lists[1], actual_cols)
28+
# element-wise compare
29+
if len(actual_cols) != len(expected_cols) and len(expected_rows) != len(actual_rows):
30+
self.assertTrue(False, msg="Length of lists doesn't match")
31+
for j in range(len(actual_cols)):
32+
self.assertEqual(expected_rows[j], actual_rows[j])
33+
self.assertEqual(expected_cols[j], actual_cols[j])
2234

2335

2436
if __name__ == "__main__":

python/tests/test_transpose.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
11
import unittest
22
import test_utils
3+
import utils.io_file
34

45

56
class TestMatrixTranspose(unittest.TestCase):
7+
def setUp(self) -> None:
8+
self.input_matrices = [["matrix_1.mtx"], ["matrix_2.mtx"]]
9+
self.result_matrices = ["transpose_res_1.mtx", "transpose_res_2.mtx"]
10+
611
def test_transpose(self):
712
"""
813
Unit test for transpose of matrix
914
"""
10-
first_matrix = test_utils.build_matrix_from_file("../data/transpose.mtx")
11-
12-
actual_matrix = first_matrix.transpose()
13-
expected_matrix = test_utils.build_matrix_from_file("../data/transpose_result.mtx")
15+
for i in range(len(self.input_matrices)):
16+
matrices = list()
17+
for matrix in self.input_matrices[i]:
18+
matrices.append(utils.io_file.build_matrix_by_name(matrix))
19+
expected_matrix = utils.io_file.build_matrix_by_name(self.result_matrices[i])
20+
actual_matrix = matrices[0].transpose()
1421

15-
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
22+
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
1623

1724

1825
if __name__ == "__main__":

python/tests/test_utils.py

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,20 @@
11
import pycubool
22

33

4-
def _read_matrix_mtx(path: str):
5-
"""
6-
Read matrix from file
7-
"""
8-
with open(path, 'r') as file:
9-
n, m, nvals = map(int, file.readline().split())
10-
rows = list()
11-
cols = list()
12-
for k in range(nvals):
13-
i, j = map(int, file.readline().split())
14-
rows.append(i)
15-
cols.append(j)
16-
return n, m, [rows, cols]
17-
18-
19-
def build_matrix_from_file(path: str) -> pycubool.Matrix:
20-
n, m, matrix = _read_matrix_mtx(path)
21-
nvals = len(matrix[0])
22-
result = pycubool.Matrix.empty([n, m])
23-
result.build(matrix[0], matrix[1], nvals)
24-
25-
return result
26-
27-
284
def compare_matrix(a: pycubool.Matrix, b: pycubool.Matrix) -> bool:
295
a_rows, a_cols = a.to_lists()
306
b_rows, b_cols = b.to_lists()
317

328
if len(a_rows) != len(b_rows):
339
return False
34-
n = a_rows
10+
n = len(a_rows)
3511
for i in range(n):
3612
if a_rows[i] != b_rows[i]:
3713
return False
3814

3915
if len(a_cols) != len(b_cols):
4016
return False
41-
m = a_cols
17+
m = len(a_cols)
4218
for i in range(m):
4319
if a_cols[i] != b_cols[i]:
4420
return False

0 commit comments

Comments
 (0)