1595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian/* 2595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian * Copyright 2013 The Android Open Source Project 3595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian * 4595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian * you may not use this file except in compliance with the License. 6595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian * You may obtain a copy of the License at 7595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian * 8595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian * 10595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian * Unless required by applicable law or agreed to in writing, software 11595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian * See the License for the specific language governing permissions and 14595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian * limitations under the License. 15595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian */ 16595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 175d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy#define LOG_TAG "VecTest" 18595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 19ed7d193ae95ce72a014c8ba1ab177f3abf958765Dan Albert#include <math.h> 20595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian#include <stdlib.h> 21ed7d193ae95ce72a014c8ba1ab177f3abf958765Dan Albert 221d77b719d51a01cbd6954a048fb64e79d50a950eMathias Agopian#include <math/vec4.h> 23595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 24ed7d193ae95ce72a014c8ba1ab177f3abf958765Dan Albert#include <gtest/gtest.h> 25ed7d193ae95ce72a014c8ba1ab177f3abf958765Dan Albert 26595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopiannamespace android { 27595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 28595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopianclass VecTest : public testing::Test { 29595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian}; 30595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 31595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias AgopianTEST_F(VecTest, Basics) { 32595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian vec4 v4; 33595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian vec3& v3(v4.xyz); 34595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 35595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(sizeof(vec4), sizeof(float)*4); 36595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(sizeof(vec3), sizeof(float)*3); 37595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(sizeof(vec2), sizeof(float)*2); 385d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy EXPECT_EQ(reinterpret_cast<void*>(&v3), reinterpret_cast<void*>(&v4)); 39595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian} 40595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 41595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias AgopianTEST_F(VecTest, Constructors) { 42595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian vec4 v0; 43595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.x, 0); 44595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.y, 0); 45595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.z, 0); 46595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.w, 0); 47595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 48595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian vec4 v1(1); 49595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v1.x, 1); 50595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v1.y, 1); 51595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v1.z, 1); 52595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v1.w, 1); 53595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 545d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy vec4 v2(1, 2, 3, 4); 55595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v2.x, 1); 56595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v2.y, 2); 57595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v2.z, 3); 58595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v2.w, 4); 59595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 60595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian vec4 v3(v2); 61595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v3.x, 1); 62595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v3.y, 2); 63595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v3.z, 3); 64595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v3.w, 4); 65595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 66595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian vec4 v4(v3.xyz, 42); 67595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v4.x, 1); 68595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v4.y, 2); 69595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v4.z, 3); 70595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v4.w, 42); 71595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 72595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian vec4 v5(vec3(v2.xy, 42), 24); 73595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v5.x, 1); 74595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v5.y, 2); 75595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v5.z, 42); 76595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v5.w, 24); 77595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 785d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy float4 vf(2); 795d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy EXPECT_EQ(vf.x, 2); 805d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy EXPECT_EQ(vf.y, 2); 815d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy EXPECT_EQ(vf.z, 2); 825d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy EXPECT_EQ(vf.w, 2); 83595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian} 84595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 85595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias AgopianTEST_F(VecTest, Access) { 865d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy vec4 v0(1, 2, 3, 4); 875d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy 88595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0.x = 10; 89595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0.y = 20; 90595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0.z = 30; 91595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0.w = 40; 92595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.x, 10); 93595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.y, 20); 94595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.z, 30); 95595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.w, 40); 96595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 97595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0[0] = 100; 98595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0[1] = 200; 99595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0[2] = 300; 100595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0[3] = 400; 101595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.x, 100); 102595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.y, 200); 103595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.z, 300); 104595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.w, 400); 105595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 1065d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy v0.xyz = vec3(1, 2, 3); 107595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.x, 1); 108595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.y, 2); 109595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.z, 3); 110595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.w, 400); 111595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian} 112595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 113595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias AgopianTEST_F(VecTest, UnaryOps) { 1145d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy vec4 v0(1, 2, 3, 4); 115595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 116595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0 += 1; 117595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.x, 2); 118595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.y, 3); 119595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.z, 4); 120595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.w, 5); 121595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 122595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0 -= 1; 123595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.x, 1); 124595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.y, 2); 125595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.z, 3); 126595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.w, 4); 127595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 128595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0 *= 2; 129595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.x, 2); 130595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.y, 4); 131595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.z, 6); 132595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.w, 8); 133595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 134595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0 /= 2; 135595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.x, 1); 136595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.y, 2); 137595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.z, 3); 138595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.w, 4); 139595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 140595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian vec4 v1(10, 20, 30, 40); 141595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 142595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0 += v1; 143595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.x, 11); 144595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.y, 22); 145595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.z, 33); 146595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.w, 44); 147595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 148595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0 -= v1; 149595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.x, 1); 150595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.y, 2); 151595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.z, 3); 152595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.w, 4); 153595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 154595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0 *= v1; 155595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.x, 10); 156595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.y, 40); 157595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.z, 90); 158595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.w, 160); 159595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 160595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0 /= v1; 161595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.x, 1); 162595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.y, 2); 163595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.z, 3); 164595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.w, 4); 165595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 166595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v1 = -v1; 1675d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy EXPECT_EQ(v1.x, -10); 1685d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy EXPECT_EQ(v1.y, -20); 1695d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy EXPECT_EQ(v1.z, -30); 1705d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy EXPECT_EQ(v1.w, -40); 1715d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy 1725d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy float4 fv(1, 2, 3, 4); 1735d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy v1 += fv; 174595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v1.x, -9); 1755d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy EXPECT_EQ(v1.y, -18); 1765d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy EXPECT_EQ(v1.z, -27); 1775d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy EXPECT_EQ(v1.w, -36); 178595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian} 179595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 180595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias AgopianTEST_F(VecTest, ComparisonOps) { 1815d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy vec4 v0(1, 2, 3, 4); 1825d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy vec4 v1(10, 20, 30, 40); 183595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 184595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_TRUE(v0 == v0); 185595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_TRUE(v0 != v1); 186595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_FALSE(v0 != v0); 187595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_FALSE(v0 == v1); 188595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian} 189595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 19011ecb63414d2fea2f4217db8bb06a998bcf8b425Romain GuyTEST_F(VecTest, ComparisonFunctions) { 19111ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy vec4 v0(1, 2, 3, 4); 19211ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy vec4 v1(10, 20, 30, 40); 19311ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy 19411ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_TRUE(all(equal(v0, v0))); 19511ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_TRUE(all(notEqual(v0, v1))); 19611ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_FALSE(any(notEqual(v0, v0))); 19711ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_FALSE(any(equal(v0, v1))); 19811ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy 19911ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_FALSE(all(lessThan(v0, v0))); 20011ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_TRUE(all(lessThanEqual(v0, v0))); 20111ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_FALSE(all(greaterThan(v0, v0))); 20211ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_TRUE(all(greaterThanEqual(v0, v0))); 20311ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_TRUE(all(lessThan(v0, v1))); 20411ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_TRUE(all(greaterThan(v1, v0))); 20511ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy} 20611ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy 207595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias AgopianTEST_F(VecTest, ArithmeticOps) { 2085d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy vec4 v0(1, 2, 3, 4); 2095d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy vec4 v1(10, 20, 30, 40); 210595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 211595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian vec4 v2(v0 + v1); 212595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v2.x, 11); 213595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v2.y, 22); 214595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v2.z, 33); 215595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v2.w, 44); 216595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 217595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0 = v1 * 2; 218595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.x, 20); 219595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.y, 40); 220595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.z, 60); 221595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.w, 80); 222595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 223595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian v0 = 2 * v1; 224595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.x, 20); 225595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.y, 40); 226595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.z, 60); 227595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.w, 80); 228595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 2295d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy float4 vf(2); 2305d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy v0 = v1 * vf; 231595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.x, 20); 232595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.y, 40); 233595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.z, 60); 234595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(v0.w, 80); 235595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian} 236595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 237595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias AgopianTEST_F(VecTest, ArithmeticFunc) { 238595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian vec3 east(1, 0, 0); 239595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian vec3 north(0, 1, 0); 2405d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy vec3 up(cross(east, north)); 2415d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy EXPECT_EQ(up, vec3(0, 0, 1)); 242595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(dot(east, north), 0); 243595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(length(east), 1); 244595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(distance(east, north), sqrtf(2)); 245595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 2465d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy vec3 v0(1, 2, 3); 247595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian vec3 vn(normalize(v0)); 248595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_FLOAT_EQ(1, length(vn)); 249595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_FLOAT_EQ(length(v0), dot(v0, vn)); 250595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 2515d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy float3 vf(east); 2525d4bae7f170640e0e280b3ca8a22b18e80801a8aRomain Guy EXPECT_EQ(length(vf), 1); 25311ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy 25411ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_TRUE(any(vec3(0, 0, 1))); 25511ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_FALSE(any(vec3(0, 0, 0))); 25611ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy 25711ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_TRUE(all(vec3(1, 1, 1))); 25811ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_FALSE(all(vec3(0, 0, 1))); 25911ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy 26011ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_TRUE(any(bool3(false, false, true))); 26111ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_FALSE(any(bool3(false))); 26211ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy 26311ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_TRUE(all(bool3(true))); 26411ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_FALSE(all(bool3(false, false, true))); 26511ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy 26611ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy std::function<bool(float)> p = [](auto v) -> bool { return v > 0.0f; }; 26711ecb63414d2fea2f4217db8bb06a998bcf8b425Romain Guy EXPECT_TRUE(all(map(vec3(1, 2, 3), p))); 268595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian} 269595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 270595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian}; // namespace android 271