1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This file is part of Eigen, a lightweight C++ template library 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// for linear algebra. 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.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#include "main.h" 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <Eigen/Geometry> 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <Eigen/LU> 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <Eigen/QR> 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename HyperplaneType> void hyperplane(const HyperplaneType& _plane) 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath /* this test covers the following files: 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Hyperplane.h 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 212b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang using std::abs; 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename HyperplaneType::Index Index; 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const Index dim = _plane.dim(); 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath enum { Options = HyperplaneType::Options }; 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename HyperplaneType::Scalar Scalar; 262b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang typedef typename HyperplaneType::RealScalar RealScalar; 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<Scalar, HyperplaneType::AmbientDimAtCompileTime, 1> VectorType; 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<Scalar, HyperplaneType::AmbientDimAtCompileTime, 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath HyperplaneType::AmbientDimAtCompileTime> MatrixType; 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VectorType p0 = VectorType::Random(dim); 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VectorType p1 = VectorType::Random(dim); 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VectorType n0 = VectorType::Random(dim).normalized(); 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VectorType n1 = VectorType::Random(dim).normalized(); 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath HyperplaneType pl0(n0, p0); 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath HyperplaneType pl1(n1, p1); 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath HyperplaneType pl2 = pl1; 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Scalar s0 = internal::random<Scalar>(); 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Scalar s1 = internal::random<Scalar>(); 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX( n1.dot(n1), Scalar(1) ); 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_MUCH_SMALLER_THAN( pl0.absDistance(p0), Scalar(1) ); 472b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang if(numext::abs2(s0)>RealScalar(1e-6)) 482b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang VERIFY_IS_APPROX( pl1.signedDistance(p1 + n1 * s0), s0); 492b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang else 502b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang VERIFY_IS_MUCH_SMALLER_THAN( abs(pl1.signedDistance(p1 + n1 * s0) - s0), Scalar(1) ); 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_MUCH_SMALLER_THAN( pl1.signedDistance(pl1.projection(p0)), Scalar(1) ); 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_MUCH_SMALLER_THAN( pl1.absDistance(p1 + pl1.normal().unitOrthogonal() * s1), Scalar(1) ); 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // transform 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (!NumTraits<Scalar>::IsComplex) 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MatrixType rot = MatrixType::Random(dim,dim).householderQr().householderQ(); 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath DiagonalMatrix<Scalar,HyperplaneType::AmbientDimAtCompileTime> scaling(VectorType::Random()); 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Translation<Scalar,HyperplaneType::AmbientDimAtCompileTime> translation(VectorType::Random()); 602b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 612b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang while(scaling.diagonal().cwiseAbs().minCoeff()<RealScalar(1e-4)) scaling.diagonal() = VectorType::Random(); 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath pl2 = pl1; 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_MUCH_SMALLER_THAN( pl2.transform(rot).absDistance(rot * p1), Scalar(1) ); 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath pl2 = pl1; 66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_MUCH_SMALLER_THAN( pl2.transform(rot,Isometry).absDistance(rot * p1), Scalar(1) ); 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath pl2 = pl1; 68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_MUCH_SMALLER_THAN( pl2.transform(rot*scaling).absDistance((rot*scaling) * p1), Scalar(1) ); 692b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang VERIFY_IS_APPROX( pl2.normal().norm(), RealScalar(1) ); 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath pl2 = pl1; 71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_MUCH_SMALLER_THAN( pl2.transform(rot*scaling*translation) 722b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang .absDistance((rot*scaling*translation) * p1), Scalar(1) ); 732b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang VERIFY_IS_APPROX( pl2.normal().norm(), RealScalar(1) ); 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath pl2 = pl1; 75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_MUCH_SMALLER_THAN( pl2.transform(rot*translation,Isometry) 76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath .absDistance((rot*translation) * p1), Scalar(1) ); 772b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang VERIFY_IS_APPROX( pl2.normal().norm(), RealScalar(1) ); 78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // casting 81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const int Dim = HyperplaneType::AmbientDimAtCompileTime; 82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename GetDifferentType<Scalar>::type OtherScalar; 83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Hyperplane<OtherScalar,Dim,Options> hp1f = pl1.template cast<OtherScalar>(); 84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(hp1f.template cast<Scalar>(),pl1); 85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Hyperplane<Scalar,Dim,Options> hp1d = pl1.template cast<Scalar>(); 86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(hp1d.template cast<Scalar>(),pl1); 87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> void lines() 90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 917faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez using std::abs; 92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Hyperplane<Scalar, 2> HLine; 93c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef ParametrizedLine<Scalar, 2> PLine; 94c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<Scalar,2,1> Vector; 95c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<Scalar,3,1> CoeffsType; 96c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 97c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for(int i = 0; i < 10; i++) 98c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 99c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Vector center = Vector::Random(); 100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Vector u = Vector::Random(); 101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Vector v = Vector::Random(); 102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Scalar a = internal::random<Scalar>(); 1032b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang while (abs(a-1) < Scalar(1e-4)) a = internal::random<Scalar>(); 1042b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang while (u.norm() < Scalar(1e-4)) u = Vector::Random(); 1052b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang while (v.norm() < Scalar(1e-4)) v = Vector::Random(); 106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath HLine line_u = HLine::Through(center + u, center + a*u); 108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath HLine line_v = HLine::Through(center + v, center + a*v); 109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // the line equations should be normalized so that a^2+b^2=1 111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(line_u.normal().norm(), Scalar(1)); 112c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(line_v.normal().norm(), Scalar(1)); 113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Vector result = line_u.intersection(line_v); 115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // the lines should intersect at the point we called "center" 1172b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang if(abs(a-1) > Scalar(1e-2) && abs(v.normalized().dot(u.normalized()))<Scalar(0.9)) 1182b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang VERIFY_IS_APPROX(result, center); 119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // check conversions between two types of lines 121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath PLine pl(line_u); // gcc 3.3 will commit suicide if we don't name this variable 1222b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang HLine line_u2(pl); 1232b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang CoeffsType converted_coeffs = line_u2.coeffs(); 1242b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang if(line_u2.normal().dot(line_u.normal())<Scalar(0)) 1252b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang converted_coeffs = -line_u2.coeffs(); 126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(line_u.coeffs().isApprox(converted_coeffs)); 127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 130615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murraytemplate<typename Scalar> void planes() 131615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray{ 132615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray using std::abs; 133615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray typedef Hyperplane<Scalar, 3> Plane; 134615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray typedef Matrix<Scalar,3,1> Vector; 135615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray 136615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray for(int i = 0; i < 10; i++) 137615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray { 138615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray Vector v0 = Vector::Random(); 139615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray Vector v1(v0), v2(v0); 140615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray if(internal::random<double>(0,1)>0.25) 141615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray v1 += Vector::Random(); 142615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray if(internal::random<double>(0,1)>0.25) 143615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray v2 += v1 * std::pow(internal::random<Scalar>(0,1),internal::random<int>(1,16)); 144615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray if(internal::random<double>(0,1)>0.25) 145615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray v2 += Vector::Random() * std::pow(internal::random<Scalar>(0,1),internal::random<int>(1,16)); 146615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray 147615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray Plane p0 = Plane::Through(v0, v1, v2); 148615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray 149615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray VERIFY_IS_APPROX(p0.normal().norm(), Scalar(1)); 150615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray VERIFY_IS_MUCH_SMALLER_THAN(p0.absDistance(v0), Scalar(1)); 151615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray VERIFY_IS_MUCH_SMALLER_THAN(p0.absDistance(v1), Scalar(1)); 152615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray VERIFY_IS_MUCH_SMALLER_THAN(p0.absDistance(v2), Scalar(1)); 153615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray } 154615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray} 155615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray 156c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> void hyperplane_alignment() 157c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 158c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Hyperplane<Scalar,3,AutoAlign> Plane3a; 159c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Hyperplane<Scalar,3,DontAlign> Plane3u; 160c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1612b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang EIGEN_ALIGN_MAX Scalar array1[4]; 1622b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang EIGEN_ALIGN_MAX Scalar array2[4]; 1632b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang EIGEN_ALIGN_MAX Scalar array3[4+1]; 164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Scalar* array3u = array3+1; 165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 166c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Plane3a *p1 = ::new(reinterpret_cast<void*>(array1)) Plane3a; 167c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Plane3u *p2 = ::new(reinterpret_cast<void*>(array2)) Plane3u; 168c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Plane3u *p3 = ::new(reinterpret_cast<void*>(array3u)) Plane3u; 169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 170c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath p1->coeffs().setRandom(); 171c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *p2 = *p1; 172c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *p3 = *p1; 173c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 174c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(p1->coeffs(), p2->coeffs()); 175c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(p1->coeffs(), p3->coeffs()); 176c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1772b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang #if defined(EIGEN_VECTORIZE) && EIGEN_MAX_STATIC_ALIGN_BYTES > 0 1782b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang if(internal::packet_traits<Scalar>::Vectorizable && internal::packet_traits<Scalar>::size<=4) 179c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT((::new(reinterpret_cast<void*>(array3u)) Plane3a)); 180c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #endif 181c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 182c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 183c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 184c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid test_geo_hyperplane() 185c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 186c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for(int i = 0; i < g_repeat; i++) { 187c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_1( hyperplane(Hyperplane<float,2>()) ); 188c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_2( hyperplane(Hyperplane<float,3>()) ); 189c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_2( hyperplane(Hyperplane<float,3,DontAlign>()) ); 190c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_2( hyperplane_alignment<float>() ); 191c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_3( hyperplane(Hyperplane<double,4>()) ); 192c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_4( hyperplane(Hyperplane<std::complex<double>,5>()) ); 193c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_1( lines<float>() ); 194c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_3( lines<double>() ); 195615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray CALL_SUBTEST_2( planes<float>() ); 196615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray CALL_SUBTEST_5( planes<double>() ); 197c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 198c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 199