1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This file is part of Eigen, a lightweight C++ template library 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// for linear algebra. Eigen itself is part of the KDE project. 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2008 Gael Guennebaud <g.gael@free.fr> 5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2008 Benoit Jacob <jacob.benoit.1@gmail.com> 6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This Source Code Form is subject to the terms of the Mozilla 8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Public License v. 2.0. If a copy of the MPL was not distributed 9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef EIGEN_NO_STATIC_ASSERT 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define EIGEN_NO_STATIC_ASSERT // turn static asserts into runtime asserts in order to check them 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef EIGEN_DONT_VECTORIZE 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define EIGEN_DONT_VECTORIZE // SSE intrinsics aren't designed to allow mixing types 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "main.h" 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<int SizeAtCompileType> void mixingtypes(int size = SizeAtCompileType) 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<float, SizeAtCompileType, SizeAtCompileType> Mat_f; 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<double, SizeAtCompileType, SizeAtCompileType> Mat_d; 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<std::complex<float>, SizeAtCompileType, SizeAtCompileType> Mat_cf; 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<std::complex<double>, SizeAtCompileType, SizeAtCompileType> Mat_cd; 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<float, SizeAtCompileType, 1> Vec_f; 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<double, SizeAtCompileType, 1> Vec_d; 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<std::complex<float>, SizeAtCompileType, 1> Vec_cf; 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<std::complex<double>, SizeAtCompileType, 1> Vec_cd; 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Mat_f mf(size,size); 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Mat_d md(size,size); 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Mat_cf mcf(size,size); 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Mat_cd mcd(size,size); 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Vec_f vf(size,1); 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Vec_d vd(size,1); 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Vec_cf vcf(size,1); 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Vec_cd vcd(size,1); 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mf+mf; 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(mf+md); 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(mf+mcf); 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(vf=vd); 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(vf+=vd); 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(mcd=md); 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mf*mf; 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath md*mcd; 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mcd*md; 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mf*vcf; 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mcf*vf; 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mcf *= mf; 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath vcd = md*vcd; 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath vcf = mcf*vf; 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if 0 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // these are know generating hard build errors in eigen3 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(mf*md); 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(mcf*mcd); 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(mcf*vcd); 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(vcf = mf*vf); 63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath vf.eigen2_dot(vf); 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(vd.eigen2_dot(vf)); 66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(vcf.eigen2_dot(vf)); // yeah eventually we should allow this but i'm too lazy to make that change now in Dot.h 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // especially as that might be rewritten as cwise product .sum() which would make that automatic. 68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid test_eigen2_mixingtypes() 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // check that our operator new is indeed called: 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_1(mixingtypes<3>()); 75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_2(mixingtypes<4>()); 76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_3(mixingtypes<Dynamic>(20)); 77c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 78