/* * openingconetest.cpp * * Created on: Feb 19, 2015 * Author: gregor */ #include "gtest/gtest.h" #include "GLTB/geom/openingcone.h" TEST(OpeningCone, constructors) { gltb::OpeningCone oc1(glm::vec3(1, 1, 1)); ASSERT_EQ(oc1.openingAngle, 0); ASSERT_EQ(oc1.centralDirection.x, 1); ASSERT_EQ(oc1.centralDirection.y, 1); ASSERT_EQ(oc1.centralDirection.z, 1); gltb::OpeningCone oc2(glm::vec3(0, 1, 0), 0.1f); ASSERT_EQ(oc2.openingAngle, 0.1f); ASSERT_EQ(oc2.centralDirection.x, 0); ASSERT_EQ(oc2.centralDirection.y, 1); ASSERT_EQ(oc2.centralDirection.z, 0); } TEST(OpeningCone, isVectorInside) { gltb::OpeningCone oc1(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0)); glm::vec3 diag = glm::normalize(glm::vec3(1, 1, 0)); ASSERT_TRUE(oc1.isVectorInside(diag)); diag = -1.0f * diag; ASSERT_FALSE(oc1.isVectorInside(diag)); glm::vec3 v = glm::vec3(0, 0, 1); ASSERT_FALSE(oc1.isVectorInside(v)); v = -1.0f * v; ASSERT_FALSE(oc1.isVectorInside(v)); } TEST(OpeningCone, fromTwoVectors) { gltb::OpeningCone oc1(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0)); glm::vec3 diag = glm::normalize(glm::vec3(1, 1, 0)); std::cout << oc1.centralDirection.x << " " << oc1.centralDirection.y << " " << oc1.centralDirection.z << " " << oc1.openingAngle << std::endl; ASSERT_FLOAT_EQ(diag.x, oc1.centralDirection.x); ASSERT_FLOAT_EQ(diag.y, oc1.centralDirection.y); ASSERT_FLOAT_EQ(diag.z, oc1.centralDirection.z); ASSERT_FLOAT_EQ(M_PI / 4, oc1.openingAngle); } TEST(OpeningCone, fromThreeVectors) { std::vector vectors = { glm::vec3(1, 0, 0), glm::vec3(0, 1, 0), glm::vec3(0, 0, 1) }; gltb::OpeningCone oc1(vectors); glm::vec3 diag = glm::normalize(glm::vec3(1, 1, 1)); std::cout << oc1.centralDirection.x << " " << oc1.centralDirection.y << " " << oc1.centralDirection.z << " " << oc1.openingAngle << std::endl; ASSERT_FLOAT_EQ(diag.x, oc1.centralDirection.x); ASSERT_FLOAT_EQ(diag.y, oc1.centralDirection.y); ASSERT_FLOAT_EQ(diag.z, oc1.centralDirection.z); ASSERT_FLOAT_EQ(acos(glm::dot(vectors[0], diag)), oc1.openingAngle); vectors[2] = glm::normalize(vectors[0] + vectors[1]); gltb::OpeningCone oc2(vectors); ASSERT_FLOAT_EQ(vectors[2].x, oc2.centralDirection.x); ASSERT_FLOAT_EQ(vectors[2].y, oc2.centralDirection.y); ASSERT_FLOAT_EQ(vectors[2].z, oc2.centralDirection.z); ASSERT_FLOAT_EQ(M_PI / 4, oc2.openingAngle); } int main(int argc, char *argv[]) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }