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 17595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian#define LOG_TAG "RegionTest" 18595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 19595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian#include <stdlib.h> 20595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian#include <ui/Region.h> 21595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian#include <ui/Rect.h> 22595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian#include <gtest/gtest.h> 23595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 24595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian#include <ui/mat4.h> 25595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 26595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopiannamespace android { 27595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 28595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopianclass MatTest : public testing::Test { 29595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopianprotected: 30595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian}; 31595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 32595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias AgopianTEST_F(MatTest, Basics) { 33595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m0; 34595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(sizeof(mat4), sizeof(float)*16); 35595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian} 36595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 37595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias AgopianTEST_F(MatTest, ComparisonOps) { 38595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m0; 39595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m1(2); 40595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 41595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_TRUE(m0 == m0); 42595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_TRUE(m0 != m1); 43595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_FALSE(m0 != m0); 44595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_FALSE(m0 == m1); 45595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian} 46595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 47595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias AgopianTEST_F(MatTest, Constructors) { 48595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m0; 49595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian ASSERT_EQ(m0[0].x, 1); 50595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian ASSERT_EQ(m0[0].y, 0); 51595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian ASSERT_EQ(m0[0].z, 0); 52595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian ASSERT_EQ(m0[0].w, 0); 53595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian ASSERT_EQ(m0[1].x, 0); 54595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian ASSERT_EQ(m0[1].y, 1); 55595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian ASSERT_EQ(m0[1].z, 0); 56595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian ASSERT_EQ(m0[1].w, 0); 57595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian ASSERT_EQ(m0[2].x, 0); 58595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian ASSERT_EQ(m0[2].y, 0); 59595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian ASSERT_EQ(m0[2].z, 1); 60595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian ASSERT_EQ(m0[2].w, 0); 61595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian ASSERT_EQ(m0[3].x, 0); 62595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian ASSERT_EQ(m0[3].y, 0); 63595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian ASSERT_EQ(m0[3].z, 0); 64595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian ASSERT_EQ(m0[3].w, 1); 65595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 66595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m1(2); 67595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m2(vec4(2)); 68595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m3(m2); 69595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 70595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(m1, m2); 71595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(m2, m3); 72595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(m3, m1); 73595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 74595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m4(vec4(1), vec4(2), vec4(3), vec4(4)); 75595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian} 76595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 77595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias AgopianTEST_F(MatTest, ArithmeticOps) { 78595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m0; 79595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m1(2); 80595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m2(vec4(2)); 81595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 82595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian m1 += m2; 83595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(mat4(4), m1); 84595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 85595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian m2 -= m1; 86595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(mat4(-2), m2); 87595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 88595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian m1 *= 2; 89595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(mat4(8), m1); 90595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 91595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian m1 /= 2; 92595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(mat4(4), m1); 93595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 94595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian m0 = -m0; 95595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(mat4(-1), m0); 96595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian} 97595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 98595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias AgopianTEST_F(MatTest, UnaryOps) { 99595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian const mat4 identity; 100595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m0; 101595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 102595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian ++m0; 103595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(mat4( vec4(2,1,1,1), vec4(1,2,1,1), vec4(1,1,2,1), vec4(1,1,1,2) ), m0); 104595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(mat4( -vec4(2,1,1,1), -vec4(1,2,1,1), -vec4(1,1,2,1), -vec4(1,1,1,2) ), -m0); 105595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 106595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian --m0; 107595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(identity, m0); 108595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian} 109595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 110595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias AgopianTEST_F(MatTest, MiscOps) { 111595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian const mat4 identity; 112595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m0; 113595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(4, trace(m0)); 114595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 115595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m1(vec4(1,2,3,4), vec4(5,6,7,8), vec4(9,10,11,12), vec4(13,14,15,16)); 116595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m2(vec4(1,5,9,13), vec4(2,6,10,14), vec4(3,7,11,15), vec4(4,8,12,16)); 117595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(m1, transpose(m2)); 118595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(m2, transpose(m1)); 119595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(vec4(1,6,11,16), diag(m1)); 120595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 121595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(identity, inverse(identity)); 122595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 123595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m3(vec4(4,3,0,0), vec4(3,2,0,0), vec4(0,0,1,0), vec4(0,0,0,1)); 124595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m3i(inverse(m3)); 125595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_FLOAT_EQ(-2, m3i[0][0]); 126595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_FLOAT_EQ( 3, m3i[0][1]); 127595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_FLOAT_EQ( 3, m3i[1][0]); 128595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_FLOAT_EQ(-4, m3i[1][1]); 129595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 130595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian mat4 m3ii(inverse(m3i)); 131595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_FLOAT_EQ(m3[0][0], m3ii[0][0]); 132595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_FLOAT_EQ(m3[0][1], m3ii[0][1]); 133595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_FLOAT_EQ(m3[1][0], m3ii[1][0]); 134595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_FLOAT_EQ(m3[1][1], m3ii[1][1]); 135595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 136595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian EXPECT_EQ(m1, m1*identity); 137595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian} 138595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian 139595ea77f6bdb5e9d0ddd3305da7a44b56f326b2cMathias Agopian}; // namespace android 140