From 3283d98d1378ccd3a8c89eec1d88108ddd517d95 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Fri, 14 Feb 2014 14:46:01 +0100 Subject: optimize sparse-sparse Kronecker product --- unsupported/test/kronecker_product.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'unsupported/test/kronecker_product.cpp') diff --git a/unsupported/test/kronecker_product.cpp b/unsupported/test/kronecker_product.cpp index c68a07de8..753a2d417 100644 --- a/unsupported/test/kronecker_product.cpp +++ b/unsupported/test/kronecker_product.cpp @@ -183,4 +183,38 @@ void test_kronecker_product() DM_b2.resize(4,8); DM_ab2 = kroneckerProduct(DM_a2,DM_b2); CALL_SUBTEST(check_dimension(DM_ab2,10*4,9*8)); + + for(int i = 0; i < g_repeat; i++) + { + double density = Eigen::internal::random(0.01,0.5); + int ra = Eigen::internal::random(1,50); + int ca = Eigen::internal::random(1,50); + int rb = Eigen::internal::random(1,50); + int cb = Eigen::internal::random(1,50); + SparseMatrix sA(ra,ca), sB(rb,cb), sC; + SparseMatrix sC2; + MatrixXf dA(ra,ca), dB(rb,cb), dC; + initSparse(density, dA, sA); + initSparse(density, dB, sB); + + sC = kroneckerProduct(sA,sB); + dC = kroneckerProduct(dA,dB); + VERIFY_IS_APPROX(MatrixXf(sC),dC); + + sC = kroneckerProduct(sA.transpose(),sB); + dC = kroneckerProduct(dA.transpose(),dB); + VERIFY_IS_APPROX(MatrixXf(sC),dC); + + sC = kroneckerProduct(sA.transpose(),sB.transpose()); + dC = kroneckerProduct(dA.transpose(),dB.transpose()); + VERIFY_IS_APPROX(MatrixXf(sC),dC); + + sC = kroneckerProduct(sA,sB.transpose()); + dC = kroneckerProduct(dA,dB.transpose()); + VERIFY_IS_APPROX(MatrixXf(sC),dC); + + sC2 = kroneckerProduct(sA,sB); + dC = kroneckerProduct(dA,dB); + VERIFY_IS_APPROX(MatrixXf(sC2),dC); + } } -- cgit v1.2.3