import unittest
import numpy as np

from inmoose.edgepy.makeCompressedMatrix import makeCompressedMatrix

class Test(unittest.TestCase):
    def test_makeCompressedMatrix(self):
        self.assertTrue(np.array_equal(makeCompressedMatrix(42, dims=(2,3), byrow=True), np.full((2,3), 42)))
        self.assertTrue(np.array_equal(makeCompressedMatrix(42, dims=(2,3), byrow=False), np.full((2,3), 42)))

        ref = np.array([[1,2,3] for i in range(2)])
        self.assertTrue(np.array_equal(makeCompressedMatrix([1,2,3], dims=(2,3), byrow=True), ref))
        self.assertTrue(np.array_equal(makeCompressedMatrix([1,2,3], dims=(3,2), byrow=False), ref.T))

        with self.assertRaisesRegex(ValueError, expected_regex="dims\[.\] should be equal to length of x"):
            makeCompressedMatrix([1,2,3], dims=(3,2), byrow=True)
        with self.assertRaisesRegex(ValueError, expected_regex="dims\[.\] should be equal to length of x"):
            makeCompressedMatrix([1,2,3], dims=(2,3), byrow=False)
        with self.assertRaisesRegex(ValueError, expected_regex="dims does not represent the shape of a matrix"):
            makeCompressedMatrix(42, dims=(5,))
        with self.assertRaisesRegex(ValueError, expected_regex="dims does not represent the shape of a matrix"):
            makeCompressedMatrix(42, dims=(1,2,3))
        with self.assertRaisesRegex(ValueError, expected_regex="input has too many dimensions to be interpreted as a matrix"):
            makeCompressedMatrix(np.ones(shape=(1,2,3)), dims=(2,3))

if __name__ == '__main__':
    unittest.main()

