Skip to content

Commit 7bf439d

Browse files
authored
Merge pull request #3 from Krekep/master
[Python] Wrapper tests
2 parents 70607dc + 78757f4 commit 7bf439d

21 files changed

+506
-0
lines changed

python/tests/test_duplicate.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import unittest
2+
import test_utils
3+
import utils.io_file
4+
5+
6+
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+
11+
def test_duplicate(self):
12+
"""
13+
Unit test for duplicate of matrix
14+
"""
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()
21+
22+
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
23+
24+
25+
if __name__ == "__main__":
26+
unittest.main()

python/tests/test_extract_matrix.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import unittest
2+
import test_utils
3+
import utils.io_file
4+
5+
6+
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+
11+
def test_extract_matrix(self):
12+
"""
13+
Unit test for extract submatrix from left-upper corner of matrix
14+
"""
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+
21+
actual_matrix = matrices[0].extract_matrix(0, 0, expected_matrix.shape)
22+
23+
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
24+
25+
26+
if __name__ == "__main__":
27+
unittest.main()

python/tests/test_kronecker.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import unittest
2+
import test_utils
3+
import utils.io_file
4+
5+
6+
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+
11+
def test_kronecker(self):
12+
"""
13+
Unit test for kronecker product of two matrices
14+
"""
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)
23+
24+
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
25+
26+
27+
if __name__ == "__main__":
28+
unittest.main()

python/tests/test_matrix_add.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import unittest
2+
import test_utils
3+
import utils.io_file
4+
5+
6+
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+
11+
def test_add(self):
12+
"""
13+
Unit test for addition of two matrices
14+
"""
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)
23+
24+
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
25+
26+
27+
if __name__ == "__main__":
28+
unittest.main()

python/tests/test_matrix_mxm.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import unittest
2+
import test_utils
3+
import utils.io_file
4+
5+
6+
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+
11+
def test_mxm(self):
12+
"""
13+
Unit test for multiplication of two matrices
14+
"""
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)
23+
24+
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
25+
26+
27+
if __name__ == "__main__":
28+
unittest.main()
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import unittest
2+
import utils.io_file
3+
4+
5+
class TestMatrixMethods(unittest.TestCase):
6+
def setUp(self) -> None:
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()
11+
self.result_property = list()
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]))
18+
19+
def tearDown(self) -> None:
20+
"""
21+
Final actions
22+
Performed AFTER tests
23+
"""
24+
25+
pass
26+
27+
def test_nrows(self):
28+
for i in range(len(self.matrices)):
29+
self.assertEqual(self.result_property[i].nrows, self.matrices[i].nrows)
30+
31+
def test_ncols(self):
32+
for i in range(len(self.matrices)):
33+
self.assertEqual(self.result_property[i].ncols, self.matrices[i].ncols)
34+
35+
def test_nvals(self):
36+
for i in range(len(self.matrices)):
37+
self.assertEqual(self.result_property[i].nvals, self.matrices[i].nvals)
38+
39+
def test_shape(self):
40+
for i in range(len(self.matrices)):
41+
self.assertEqual(self.result_property[i].shape, self.matrices[i].shape)
42+
43+
44+
if __name__ == "__main__":
45+
unittest.main()

python/tests/test_reduce.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import unittest
2+
import test_utils
3+
import utils.io_file
4+
5+
6+
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+
11+
def test_reduce(self):
12+
"""
13+
Unit test for reduce of matrix
14+
"""
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()
21+
22+
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
23+
24+
25+
if __name__ == "__main__":
26+
unittest.main()

python/tests/test_to_lists.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import unittest
2+
import utils.io_file
3+
4+
5+
class TestMatrixToLists(unittest.TestCase):
6+
def setUp(self) -> None:
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()
11+
self.result_lists = list()
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]))
18+
19+
def test_to_lists(self):
20+
"""
21+
Unit test to extract a matrix as two lists
22+
"""
23+
for i in range(len(self.matrices)):
24+
25+
actual_rows, actual_cols = self.matrices[i].to_lists()
26+
expected_rows, expected_cols = self.result_lists[i].to_lists()
27+
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])
34+
35+
36+
if __name__ == "__main__":
37+
unittest.main()

python/tests/test_transpose.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import unittest
2+
import test_utils
3+
import utils.io_file
4+
5+
6+
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+
11+
def test_transpose(self):
12+
"""
13+
Unit test for transpose of matrix
14+
"""
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()
21+
22+
self.assertTrue(test_utils.compare_matrix(expected_matrix, actual_matrix))
23+
24+
25+
if __name__ == "__main__":
26+
unittest.main()

python/tests/test_utils.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import pycubool
2+
3+
4+
def compare_matrix(a: pycubool.Matrix, b: pycubool.Matrix) -> bool:
5+
a_rows, a_cols = a.to_lists()
6+
b_rows, b_cols = b.to_lists()
7+
8+
if len(a_rows) != len(b_rows):
9+
return False
10+
n = len(a_rows)
11+
for i in range(n):
12+
if a_rows[i] != b_rows[i]:
13+
return False
14+
15+
if len(a_cols) != len(b_cols):
16+
return False
17+
m = len(a_cols)
18+
for i in range(m):
19+
if a_cols[i] != b_cols[i]:
20+
return False
21+
22+
return True

0 commit comments

Comments
 (0)