vec_test.cpp revision ed7d193ae95ce72a014c8ba1ab177f3abf958765
1/* 2 * Copyright 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#define LOG_TAG "RegionTest" 18 19#include <math.h> 20#include <stdlib.h> 21 22#include <ui/Region.h> 23#include <ui/Rect.h> 24#include <ui/vec4.h> 25 26#include <gtest/gtest.h> 27 28namespace android { 29 30class VecTest : public testing::Test { 31}; 32 33TEST_F(VecTest, Basics) { 34 vec4 v4; 35 vec3& v3(v4.xyz); 36 37 EXPECT_EQ(sizeof(vec4), sizeof(float)*4); 38 EXPECT_EQ(sizeof(vec3), sizeof(float)*3); 39 EXPECT_EQ(sizeof(vec2), sizeof(float)*2); 40 EXPECT_EQ((void*)&v3, (void*)&v4); 41} 42 43TEST_F(VecTest, Constructors) { 44 vec4 v0; 45 EXPECT_EQ(v0.x, 0); 46 EXPECT_EQ(v0.y, 0); 47 EXPECT_EQ(v0.z, 0); 48 EXPECT_EQ(v0.w, 0); 49 50 vec4 v1(1); 51 EXPECT_EQ(v1.x, 1); 52 EXPECT_EQ(v1.y, 1); 53 EXPECT_EQ(v1.z, 1); 54 EXPECT_EQ(v1.w, 1); 55 56 vec4 v2(1,2,3,4); 57 EXPECT_EQ(v2.x, 1); 58 EXPECT_EQ(v2.y, 2); 59 EXPECT_EQ(v2.z, 3); 60 EXPECT_EQ(v2.w, 4); 61 62 vec4 v3(v2); 63 EXPECT_EQ(v3.x, 1); 64 EXPECT_EQ(v3.y, 2); 65 EXPECT_EQ(v3.z, 3); 66 EXPECT_EQ(v3.w, 4); 67 68 vec4 v4(v3.xyz, 42); 69 EXPECT_EQ(v4.x, 1); 70 EXPECT_EQ(v4.y, 2); 71 EXPECT_EQ(v4.z, 3); 72 EXPECT_EQ(v4.w, 42); 73 74 vec4 v5(vec3(v2.xy, 42), 24); 75 EXPECT_EQ(v5.x, 1); 76 EXPECT_EQ(v5.y, 2); 77 EXPECT_EQ(v5.z, 42); 78 EXPECT_EQ(v5.w, 24); 79 80 tvec4<double> vd(2); 81 EXPECT_EQ(vd.x, 2); 82 EXPECT_EQ(vd.y, 2); 83 EXPECT_EQ(vd.z, 2); 84 EXPECT_EQ(vd.w, 2); 85} 86 87TEST_F(VecTest, Access) { 88 vec4 v0(1,2,3,4); 89 v0.x = 10; 90 v0.y = 20; 91 v0.z = 30; 92 v0.w = 40; 93 EXPECT_EQ(v0.x, 10); 94 EXPECT_EQ(v0.y, 20); 95 EXPECT_EQ(v0.z, 30); 96 EXPECT_EQ(v0.w, 40); 97 98 v0[0] = 100; 99 v0[1] = 200; 100 v0[2] = 300; 101 v0[3] = 400; 102 EXPECT_EQ(v0.x, 100); 103 EXPECT_EQ(v0.y, 200); 104 EXPECT_EQ(v0.z, 300); 105 EXPECT_EQ(v0.w, 400); 106 107 v0.xyz = vec3(1,2,3); 108 EXPECT_EQ(v0.x, 1); 109 EXPECT_EQ(v0.y, 2); 110 EXPECT_EQ(v0.z, 3); 111 EXPECT_EQ(v0.w, 400); 112} 113 114TEST_F(VecTest, UnaryOps) { 115 vec4 v0(1,2,3,4); 116 117 v0 += 1; 118 EXPECT_EQ(v0.x, 2); 119 EXPECT_EQ(v0.y, 3); 120 EXPECT_EQ(v0.z, 4); 121 EXPECT_EQ(v0.w, 5); 122 123 v0 -= 1; 124 EXPECT_EQ(v0.x, 1); 125 EXPECT_EQ(v0.y, 2); 126 EXPECT_EQ(v0.z, 3); 127 EXPECT_EQ(v0.w, 4); 128 129 v0 *= 2; 130 EXPECT_EQ(v0.x, 2); 131 EXPECT_EQ(v0.y, 4); 132 EXPECT_EQ(v0.z, 6); 133 EXPECT_EQ(v0.w, 8); 134 135 v0 /= 2; 136 EXPECT_EQ(v0.x, 1); 137 EXPECT_EQ(v0.y, 2); 138 EXPECT_EQ(v0.z, 3); 139 EXPECT_EQ(v0.w, 4); 140 141 vec4 v1(10, 20, 30, 40); 142 143 v0 += v1; 144 EXPECT_EQ(v0.x, 11); 145 EXPECT_EQ(v0.y, 22); 146 EXPECT_EQ(v0.z, 33); 147 EXPECT_EQ(v0.w, 44); 148 149 v0 -= v1; 150 EXPECT_EQ(v0.x, 1); 151 EXPECT_EQ(v0.y, 2); 152 EXPECT_EQ(v0.z, 3); 153 EXPECT_EQ(v0.w, 4); 154 155 v0 *= v1; 156 EXPECT_EQ(v0.x, 10); 157 EXPECT_EQ(v0.y, 40); 158 EXPECT_EQ(v0.z, 90); 159 EXPECT_EQ(v0.w, 160); 160 161 v0 /= v1; 162 EXPECT_EQ(v0.x, 1); 163 EXPECT_EQ(v0.y, 2); 164 EXPECT_EQ(v0.z, 3); 165 EXPECT_EQ(v0.w, 4); 166 167 ++v0; 168 EXPECT_EQ(v0.x, 2); 169 EXPECT_EQ(v0.y, 3); 170 EXPECT_EQ(v0.z, 4); 171 EXPECT_EQ(v0.w, 5); 172 173 ++++v0; 174 EXPECT_EQ(v0.x, 4); 175 EXPECT_EQ(v0.y, 5); 176 EXPECT_EQ(v0.z, 6); 177 EXPECT_EQ(v0.w, 7); 178 179 --v1; 180 EXPECT_EQ(v1.x, 9); 181 EXPECT_EQ(v1.y, 19); 182 EXPECT_EQ(v1.z, 29); 183 EXPECT_EQ(v1.w, 39); 184 185 v1 = -v1; 186 EXPECT_EQ(v1.x, -9); 187 EXPECT_EQ(v1.y, -19); 188 EXPECT_EQ(v1.z, -29); 189 EXPECT_EQ(v1.w, -39); 190 191 tvec4<double> dv(1,2,3,4); 192 v1 += dv; 193 EXPECT_EQ(v1.x, -8); 194 EXPECT_EQ(v1.y, -17); 195 EXPECT_EQ(v1.z, -26); 196 EXPECT_EQ(v1.w, -35); 197} 198 199TEST_F(VecTest, ComparisonOps) { 200 vec4 v0(1,2,3,4); 201 vec4 v1(10,20,30,40); 202 203 EXPECT_TRUE(v0 == v0); 204 EXPECT_TRUE(v0 != v1); 205 EXPECT_FALSE(v0 != v0); 206 EXPECT_FALSE(v0 == v1); 207} 208 209TEST_F(VecTest, ArithmeticOps) { 210 vec4 v0(1,2,3,4); 211 vec4 v1(10,20,30,40); 212 213 vec4 v2(v0 + v1); 214 EXPECT_EQ(v2.x, 11); 215 EXPECT_EQ(v2.y, 22); 216 EXPECT_EQ(v2.z, 33); 217 EXPECT_EQ(v2.w, 44); 218 219 v0 = v1 * 2; 220 EXPECT_EQ(v0.x, 20); 221 EXPECT_EQ(v0.y, 40); 222 EXPECT_EQ(v0.z, 60); 223 EXPECT_EQ(v0.w, 80); 224 225 v0 = 2 * v1; 226 EXPECT_EQ(v0.x, 20); 227 EXPECT_EQ(v0.y, 40); 228 EXPECT_EQ(v0.z, 60); 229 EXPECT_EQ(v0.w, 80); 230 231 tvec4<double> vd(2); 232 v0 = v1 * vd; 233 EXPECT_EQ(v0.x, 20); 234 EXPECT_EQ(v0.y, 40); 235 EXPECT_EQ(v0.z, 60); 236 EXPECT_EQ(v0.w, 80); 237} 238 239TEST_F(VecTest, ArithmeticFunc) { 240 vec3 east(1, 0, 0); 241 vec3 north(0, 1, 0); 242 vec3 up( cross(east, north) ); 243 EXPECT_EQ(up, vec3(0,0,1)); 244 EXPECT_EQ(dot(east, north), 0); 245 EXPECT_EQ(length(east), 1); 246 EXPECT_EQ(distance(east, north), sqrtf(2)); 247 248 vec3 v0(1,2,3); 249 vec3 vn(normalize(v0)); 250 EXPECT_FLOAT_EQ(1, length(vn)); 251 EXPECT_FLOAT_EQ(length(v0), dot(v0, vn)); 252 253 tvec3<double> vd(east); 254 EXPECT_EQ(length(vd), 1); 255} 256 257}; // namespace android 258