// This file is part of Eigen, a lightweight C++ template library // for linear algebra. // // Copyright (C) 2008-2009 Gael Guennebaud // // Eigen is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 3 of the License, or (at your option) any later version. // // Alternatively, you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation; either version 2 of // the License, or (at your option) any later version. // // Eigen is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the // GNU General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License and a copy of the GNU General Public License along with // Eigen. If not, see . #include "main.h" template void solve_ref(const Lhs& lhs, Rhs& rhs) { for (int j=0; j void trsm(int size,int cols) { typedef typename NumTraits::Real RealScalar; Matrix cmLhs(size,size); Matrix rmLhs(size,size); Matrix cmRef(size,cols), cmRhs(size,cols); Matrix rmRef(size,cols), rmRhs(size,cols); cmLhs.setRandom(); cmLhs.diagonal().cwise() += 10; rmLhs.setRandom(); rmLhs.diagonal().cwise() += 10; cmRhs.setRandom(); cmRef = cmRhs; cmLhs.conjugate().template triangularView().solveInPlace(cmRhs); solve_ref(cmLhs.conjugate().template triangularView(),cmRef); VERIFY_IS_APPROX(cmRhs, cmRef); cmRhs.setRandom(); cmRef = cmRhs; cmLhs.conjugate().template triangularView().solveInPlace(cmRhs); solve_ref(cmLhs.conjugate().template triangularView(),cmRef); VERIFY_IS_APPROX(cmRhs, cmRef); rmRhs.setRandom(); rmRef = rmRhs; cmLhs.template triangularView().solveInPlace(rmRhs); solve_ref(cmLhs.template triangularView(),rmRef); VERIFY_IS_APPROX(rmRhs, rmRef); rmRhs.setRandom(); rmRef = rmRhs; cmLhs.template triangularView().solveInPlace(rmRhs); solve_ref(cmLhs.template triangularView(),rmRef); VERIFY_IS_APPROX(rmRhs, rmRef); cmRhs.setRandom(); cmRef = cmRhs; rmLhs.template triangularView().solveInPlace(cmRhs); solve_ref(rmLhs.template triangularView(),cmRef); VERIFY_IS_APPROX(cmRhs, cmRef); cmRhs.setRandom(); cmRef = cmRhs; rmLhs.template triangularView().solveInPlace(cmRhs); solve_ref(rmLhs.template triangularView(),cmRef); VERIFY_IS_APPROX(cmRhs, cmRef); rmRhs.setRandom(); rmRef = rmRhs; rmLhs.template triangularView().solveInPlace(rmRhs); solve_ref(rmLhs.template triangularView(),rmRef); VERIFY_IS_APPROX(rmRhs, rmRef); rmRhs.setRandom(); rmRef = rmRhs; rmLhs.template triangularView().solveInPlace(rmRhs); solve_ref(rmLhs.template triangularView(),rmRef); VERIFY_IS_APPROX(rmRhs, rmRef); } void test_product_trsm() { for(int i = 0; i < g_repeat ; i++) { trsm(ei_random(1,320),ei_random(1,320)); trsm >(ei_random(1,320),ei_random(1,320)); } }