1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This file is part of Eigen, a lightweight C++ template library 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// for linear algebra. 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2011 Gael Guennebaud <gael.guennebaud@inria.fr> 5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This Source Code Form is subject to the terms of the Mozilla 7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Public License v. 2.0. If a copy of the MPL was not distributed 8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "sparse.h" 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<int OtherStorage, typename SparseMatrixType> void sparse_permutations(const SparseMatrixType& ref) 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename SparseMatrixType::Index Index; 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const Index rows = ref.rows(); 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const Index cols = ref.cols(); 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename SparseMatrixType::Scalar Scalar; 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename SparseMatrixType::Index Index; 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef SparseMatrix<Scalar, OtherStorage, Index> OtherSparseMatrixType; 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<Scalar,Dynamic,Dynamic> DenseMatrix; 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<Index,Dynamic,1> VectorI; 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath double density = (std::max)(8./(rows*cols), 0.01); 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SparseMatrixType mat(rows, cols), up(rows,cols), lo(rows,cols); 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath OtherSparseMatrixType res; 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath DenseMatrix mat_d = DenseMatrix::Zero(rows, cols), up_sym_d, lo_sym_d, res_d; 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath initSparse<Scalar>(density, mat_d, mat, 0); 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath up = mat.template triangularView<Upper>(); 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath lo = mat.template triangularView<Lower>(); 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath up_sym_d = mat_d.template selfadjointView<Upper>(); 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath lo_sym_d = mat_d.template selfadjointView<Lower>(); 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(mat, mat_d); 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(up, DenseMatrix(mat_d.template triangularView<Upper>())); 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(lo, DenseMatrix(mat_d.template triangularView<Lower>())); 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath PermutationMatrix<Dynamic> p, p_null; 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VectorI pi; 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath randomPermutationVector(pi, cols); 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath p.indices() = pi; 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = mat*p; 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = mat_d*p; 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "mat*p"); 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = p*mat; 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = p*mat_d; 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "p*mat"); 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = mat*p.inverse(); 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = mat*p.inverse(); 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "mat*inv(p)"); 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = p.inverse()*mat; 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = p.inverse()*mat_d; 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "inv(p)*mat"); 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = mat.twistedBy(p); 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = (p * mat_d) * p.inverse(); 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "p*mat*inv(p)"); 66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = mat.template selfadjointView<Upper>().twistedBy(p_null); 69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = up_sym_d; 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "full selfadjoint upper to full"); 71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = mat.template selfadjointView<Lower>().twistedBy(p_null); 73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = lo_sym_d; 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "full selfadjoint lower to full"); 75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 77c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = up.template selfadjointView<Upper>().twistedBy(p_null); 78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = up_sym_d; 79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "upper selfadjoint to full"); 80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = lo.template selfadjointView<Lower>().twistedBy(p_null); 82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = lo_sym_d; 83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "lower selfadjoint full"); 84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = mat.template selfadjointView<Upper>(); 87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = up_sym_d; 88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "full selfadjoint upper to full"); 89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = mat.template selfadjointView<Lower>(); 91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = lo_sym_d; 92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "full selfadjoint lower to full"); 93c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 94c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = up.template selfadjointView<Upper>(); 95c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = up_sym_d; 96c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "upper selfadjoint to full"); 97c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 98c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = lo.template selfadjointView<Lower>(); 99c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = lo_sym_d; 100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "lower selfadjoint full"); 101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 103c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.template selfadjointView<Upper>() = mat.template selfadjointView<Upper>(); 104c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = up_sym_d.template triangularView<Upper>(); 105c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "full selfadjoint upper to upper"); 106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.template selfadjointView<Lower>() = mat.template selfadjointView<Upper>(); 108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = up_sym_d.template triangularView<Lower>(); 109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "full selfadjoint upper to lower"); 110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.template selfadjointView<Upper>() = mat.template selfadjointView<Lower>(); 112c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = lo_sym_d.template triangularView<Upper>(); 113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "full selfadjoint lower to upper"); 114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.template selfadjointView<Lower>() = mat.template selfadjointView<Lower>(); 116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = lo_sym_d.template triangularView<Lower>(); 117c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "full selfadjoint lower to lower"); 118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.template selfadjointView<Upper>() = mat.template selfadjointView<Upper>().twistedBy(p); 122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = ((p * up_sym_d) * p.inverse()).eval().template triangularView<Upper>(); 123c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "full selfadjoint upper twisted to upper"); 124c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.template selfadjointView<Upper>() = mat.template selfadjointView<Lower>().twistedBy(p); 126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = ((p * lo_sym_d) * p.inverse()).eval().template triangularView<Upper>(); 127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "full selfadjoint lower twisted to upper"); 128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.template selfadjointView<Lower>() = mat.template selfadjointView<Lower>().twistedBy(p); 130c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = ((p * lo_sym_d) * p.inverse()).eval().template triangularView<Lower>(); 131c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "full selfadjoint lower twisted to lower"); 132c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 133c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.template selfadjointView<Lower>() = mat.template selfadjointView<Upper>().twistedBy(p); 134c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = ((p * up_sym_d) * p.inverse()).eval().template triangularView<Lower>(); 135c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "full selfadjoint upper twisted to lower"); 136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 137c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 138c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.template selfadjointView<Upper>() = up.template selfadjointView<Upper>().twistedBy(p); 139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = ((p * up_sym_d) * p.inverse()).eval().template triangularView<Upper>(); 140c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "upper selfadjoint twisted to upper"); 141c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.template selfadjointView<Upper>() = lo.template selfadjointView<Lower>().twistedBy(p); 143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = ((p * lo_sym_d) * p.inverse()).eval().template triangularView<Upper>(); 144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "lower selfadjoint twisted to upper"); 145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 146c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.template selfadjointView<Lower>() = lo.template selfadjointView<Lower>().twistedBy(p); 147c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = ((p * lo_sym_d) * p.inverse()).eval().template triangularView<Lower>(); 148c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "lower selfadjoint twisted to lower"); 149c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 150c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res.template selfadjointView<Lower>() = up.template selfadjointView<Upper>().twistedBy(p); 151c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = ((p * up_sym_d) * p.inverse()).eval().template triangularView<Lower>(); 152c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "upper selfadjoint twisted to lower"); 153c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 154c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 155c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = mat.template selfadjointView<Upper>().twistedBy(p); 156c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = (p * up_sym_d) * p.inverse(); 157c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "full selfadjoint upper twisted to full"); 158c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 159c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = mat.template selfadjointView<Lower>().twistedBy(p); 160c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = (p * lo_sym_d) * p.inverse(); 161c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "full selfadjoint lower twisted to full"); 162c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 163c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = up.template selfadjointView<Upper>().twistedBy(p); 164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = (p * up_sym_d) * p.inverse(); 165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "upper selfadjoint twisted to full"); 166c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 167c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = lo.template selfadjointView<Lower>().twistedBy(p); 168c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res_d = (p * lo_sym_d) * p.inverse(); 169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(res.isApprox(res_d) && "lower selfadjoint twisted to full"); 170c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 171c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 172c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> void sparse_permutations_all(int size) 173c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 174c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST(( sparse_permutations<ColMajor>(SparseMatrix<Scalar, ColMajor>(size,size)) )); 175c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST(( sparse_permutations<ColMajor>(SparseMatrix<Scalar, RowMajor>(size,size)) )); 176c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST(( sparse_permutations<RowMajor>(SparseMatrix<Scalar, ColMajor>(size,size)) )); 177c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST(( sparse_permutations<RowMajor>(SparseMatrix<Scalar, RowMajor>(size,size)) )); 178c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 179c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 180c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid test_sparse_permutations() 181c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 182c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for(int i = 0; i < g_repeat; i++) { 183c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int s = Eigen::internal::random<int>(1,50); 184c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_1(( sparse_permutations_all<double>(s) )); 185c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_2(( sparse_permutations_all<std::complex<double> >(s) )); 186c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 187c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 188