xref: /aosp_15_r20/system/teeui/test/teeui_test.cpp (revision 20bfefbe1966c142a35ae1ab84a8af250b3fd403)
1*20bfefbeSAndroid Build Coastguard Worker /*
2*20bfefbeSAndroid Build Coastguard Worker  *
3*20bfefbeSAndroid Build Coastguard Worker  * Copyright 2019, The Android Open Source Project
4*20bfefbeSAndroid Build Coastguard Worker  *
5*20bfefbeSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*20bfefbeSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*20bfefbeSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
8*20bfefbeSAndroid Build Coastguard Worker  *
9*20bfefbeSAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
10*20bfefbeSAndroid Build Coastguard Worker  *
11*20bfefbeSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*20bfefbeSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*20bfefbeSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*20bfefbeSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*20bfefbeSAndroid Build Coastguard Worker  * limitations under the License.
16*20bfefbeSAndroid Build Coastguard Worker  */
17*20bfefbeSAndroid Build Coastguard Worker 
18*20bfefbeSAndroid Build Coastguard Worker #include <gtest/gtest.h>
19*20bfefbeSAndroid Build Coastguard Worker 
20*20bfefbeSAndroid Build Coastguard Worker #define TEEUI_DO_LOG_DEBUG
21*20bfefbeSAndroid Build Coastguard Worker 
22*20bfefbeSAndroid Build Coastguard Worker #include <teeui/error.h>
23*20bfefbeSAndroid Build Coastguard Worker #include <teeui/log.h>
24*20bfefbeSAndroid Build Coastguard Worker #include <teeui/utils.h>
25*20bfefbeSAndroid Build Coastguard Worker 
26*20bfefbeSAndroid Build Coastguard Worker namespace teeui {
27*20bfefbeSAndroid Build Coastguard Worker 
28*20bfefbeSAndroid Build Coastguard Worker namespace test {
29*20bfefbeSAndroid Build Coastguard Worker 
TEST(TeeUIUtilsTest,intersectTest)30*20bfefbeSAndroid Build Coastguard Worker TEST(TeeUIUtilsTest, intersectTest) {
31*20bfefbeSAndroid Build Coastguard Worker     PxVec a(0.0, 1.0);
32*20bfefbeSAndroid Build Coastguard Worker     PxPoint b(0.0, -2.0);
33*20bfefbeSAndroid Build Coastguard Worker     PxVec c(1.0, 0.0);
34*20bfefbeSAndroid Build Coastguard Worker     PxPoint d(3.0, 0.0);
35*20bfefbeSAndroid Build Coastguard Worker     auto result = intersect(a, b, c, d);
36*20bfefbeSAndroid Build Coastguard Worker     ASSERT_TRUE(result);
37*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(PxPoint(0.0, 0.0), *result);
38*20bfefbeSAndroid Build Coastguard Worker 
39*20bfefbeSAndroid Build Coastguard Worker     // one of the directional vectors is (0,0)
40*20bfefbeSAndroid Build Coastguard Worker     a = {0.0, 1.0};
41*20bfefbeSAndroid Build Coastguard Worker     b = {0.0, -2.0};
42*20bfefbeSAndroid Build Coastguard Worker     c = {0.0, 0.0};
43*20bfefbeSAndroid Build Coastguard Worker     d = {3.0, 0.0};
44*20bfefbeSAndroid Build Coastguard Worker     result = intersect(a, b, c, d);
45*20bfefbeSAndroid Build Coastguard Worker     ASSERT_FALSE(result);
46*20bfefbeSAndroid Build Coastguard Worker     result = intersect(c, d, a, b);
47*20bfefbeSAndroid Build Coastguard Worker     ASSERT_FALSE(result);
48*20bfefbeSAndroid Build Coastguard Worker 
49*20bfefbeSAndroid Build Coastguard Worker     a = {0.0, 0.0};
50*20bfefbeSAndroid Build Coastguard Worker     b = {0.0, -2.0};
51*20bfefbeSAndroid Build Coastguard Worker     c = {1.0, 0.0};
52*20bfefbeSAndroid Build Coastguard Worker     d = {3.0, 0.0};
53*20bfefbeSAndroid Build Coastguard Worker     result = intersect(a, b, c, d);
54*20bfefbeSAndroid Build Coastguard Worker     ASSERT_FALSE(result);
55*20bfefbeSAndroid Build Coastguard Worker     result = intersect(c, d, a, b);
56*20bfefbeSAndroid Build Coastguard Worker     ASSERT_FALSE(result);
57*20bfefbeSAndroid Build Coastguard Worker 
58*20bfefbeSAndroid Build Coastguard Worker     a = {0.0, 0.0};
59*20bfefbeSAndroid Build Coastguard Worker     b = {0.0, -2.0};
60*20bfefbeSAndroid Build Coastguard Worker     c = {0.0, 0.0};
61*20bfefbeSAndroid Build Coastguard Worker     d = {3.0, 0.0};
62*20bfefbeSAndroid Build Coastguard Worker     result = intersect(a, b, c, d);
63*20bfefbeSAndroid Build Coastguard Worker     ASSERT_FALSE(result);
64*20bfefbeSAndroid Build Coastguard Worker     result = intersect(c, d, a, b);
65*20bfefbeSAndroid Build Coastguard Worker     ASSERT_FALSE(result);
66*20bfefbeSAndroid Build Coastguard Worker 
67*20bfefbeSAndroid Build Coastguard Worker     // lines are parallel
68*20bfefbeSAndroid Build Coastguard Worker     a = {0.0, 1.0};
69*20bfefbeSAndroid Build Coastguard Worker     b = {0.0, -2.0};
70*20bfefbeSAndroid Build Coastguard Worker     c = {0.0, 2.0};
71*20bfefbeSAndroid Build Coastguard Worker     d = {3.0, 0.0};
72*20bfefbeSAndroid Build Coastguard Worker     result = intersect(a, b, c, d);
73*20bfefbeSAndroid Build Coastguard Worker     ASSERT_FALSE(result);
74*20bfefbeSAndroid Build Coastguard Worker     result = intersect(c, d, a, b);
75*20bfefbeSAndroid Build Coastguard Worker     ASSERT_FALSE(result);
76*20bfefbeSAndroid Build Coastguard Worker 
77*20bfefbeSAndroid Build Coastguard Worker     a = {3.0, 1.0};
78*20bfefbeSAndroid Build Coastguard Worker     b = {0.0, -2.0};
79*20bfefbeSAndroid Build Coastguard Worker     c = {6.0, 2.0};
80*20bfefbeSAndroid Build Coastguard Worker     d = {0.0, 4.0};
81*20bfefbeSAndroid Build Coastguard Worker     result = intersect(a, b, c, d);
82*20bfefbeSAndroid Build Coastguard Worker     ASSERT_FALSE(result);
83*20bfefbeSAndroid Build Coastguard Worker     result = intersect(c, d, a, b);
84*20bfefbeSAndroid Build Coastguard Worker     ASSERT_FALSE(result);
85*20bfefbeSAndroid Build Coastguard Worker 
86*20bfefbeSAndroid Build Coastguard Worker     a = {1.0, 1.0};
87*20bfefbeSAndroid Build Coastguard Worker     b = {0.0, -0.5};
88*20bfefbeSAndroid Build Coastguard Worker     c = {1.0, 0.0};
89*20bfefbeSAndroid Build Coastguard Worker     d = {0.0, 0.0};
90*20bfefbeSAndroid Build Coastguard Worker     result = intersect(a, b, c, d);
91*20bfefbeSAndroid Build Coastguard Worker     ASSERT_TRUE(result);
92*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(PxPoint(0.5, 0.0), *result);
93*20bfefbeSAndroid Build Coastguard Worker     result = intersect(c, d, a, b);
94*20bfefbeSAndroid Build Coastguard Worker     ASSERT_TRUE(result);
95*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(PxPoint(0.5, 0.0), *result);
96*20bfefbeSAndroid Build Coastguard Worker 
97*20bfefbeSAndroid Build Coastguard Worker     a = {-1.0, -1.0};
98*20bfefbeSAndroid Build Coastguard Worker     b = {0.0, -0.5};
99*20bfefbeSAndroid Build Coastguard Worker     c = {1.0, 0.0};
100*20bfefbeSAndroid Build Coastguard Worker     d = {0.0, 0.0};
101*20bfefbeSAndroid Build Coastguard Worker     result = intersect(a, b, c, d);
102*20bfefbeSAndroid Build Coastguard Worker     ASSERT_TRUE(result);
103*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(PxPoint(0.5, 0.0), *result);
104*20bfefbeSAndroid Build Coastguard Worker     result = intersect(c, d, a, b);
105*20bfefbeSAndroid Build Coastguard Worker     ASSERT_TRUE(result);
106*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(PxPoint(0.5, 0.0), *result);
107*20bfefbeSAndroid Build Coastguard Worker 
108*20bfefbeSAndroid Build Coastguard Worker     a = {1.0, -1.0};
109*20bfefbeSAndroid Build Coastguard Worker     b = {0.0, 1.0};
110*20bfefbeSAndroid Build Coastguard Worker     c = {1.0, 1.0};
111*20bfefbeSAndroid Build Coastguard Worker     d = {0.0, 0.0};
112*20bfefbeSAndroid Build Coastguard Worker     result = intersect(a, b, c, d);
113*20bfefbeSAndroid Build Coastguard Worker     ASSERT_TRUE(result);
114*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(PxPoint(0.5, 0.5), *result);
115*20bfefbeSAndroid Build Coastguard Worker     result = intersect(c, d, a, b);
116*20bfefbeSAndroid Build Coastguard Worker     ASSERT_TRUE(result);
117*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(PxPoint(0.5, 0.5), *result);
118*20bfefbeSAndroid Build Coastguard Worker }
119*20bfefbeSAndroid Build Coastguard Worker 
TEST(TeeUIUtilsTest,ConvexObjectConstruction)120*20bfefbeSAndroid Build Coastguard Worker TEST(TeeUIUtilsTest, ConvexObjectConstruction) {
121*20bfefbeSAndroid Build Coastguard Worker     constexpr ConvexObject<10> o{{.0, .0}, {1.0, .0}, {1.0, 1.0}, {.0, 1.0}};
122*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(size_t(4), o.size());
123*20bfefbeSAndroid Build Coastguard Worker }
124*20bfefbeSAndroid Build Coastguard Worker 
TEST(TeeUIUtilsTest,ConvexObjectLineIntersection)125*20bfefbeSAndroid Build Coastguard Worker TEST(TeeUIUtilsTest, ConvexObjectLineIntersection) {
126*20bfefbeSAndroid Build Coastguard Worker     constexpr ConvexObject<10> o{{.0, .0}, {1.0, .0}, {1.0, 1.0}, {.0, 1.0}};
127*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(size_t(4), o.size());
128*20bfefbeSAndroid Build Coastguard Worker 
129*20bfefbeSAndroid Build Coastguard Worker     // diagonally through the corners
130*20bfefbeSAndroid Build Coastguard Worker     auto o2 = o.intersect<10>({.0, .0}, {1.0, 1.0});
131*20bfefbeSAndroid Build Coastguard Worker     ASSERT_TRUE(o2);
132*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(size_t(3), o2->size());
133*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(pxs(.5), o2->area());
134*20bfefbeSAndroid Build Coastguard Worker 
135*20bfefbeSAndroid Build Coastguard Worker     // diagonally through the corners reversed
136*20bfefbeSAndroid Build Coastguard Worker     o2 = o.intersect<10>({1.0, 1.0}, {.0, .0});
137*20bfefbeSAndroid Build Coastguard Worker     ASSERT_TRUE(o2);
138*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(size_t(3), o2->size());
139*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(pxs(.5), o2->area());
140*20bfefbeSAndroid Build Coastguard Worker 
141*20bfefbeSAndroid Build Coastguard Worker     // diagonally through the top right corner
142*20bfefbeSAndroid Build Coastguard Worker     o2 = o.intersect<10>({.0, 2.0}, {2.0, .0});
143*20bfefbeSAndroid Build Coastguard Worker     ASSERT_FALSE(o2);
144*20bfefbeSAndroid Build Coastguard Worker 
145*20bfefbeSAndroid Build Coastguard Worker     // diagonally through the top right corner reversed
146*20bfefbeSAndroid Build Coastguard Worker     o2 = o.intersect<10>({2.0, .0}, {.0, 2.0});
147*20bfefbeSAndroid Build Coastguard Worker     ASSERT_TRUE(o2);
148*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(size_t(4), o2->size());
149*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(pxs(1.0), o2->area());
150*20bfefbeSAndroid Build Coastguard Worker 
151*20bfefbeSAndroid Build Coastguard Worker     // diagonally through the top left corner
152*20bfefbeSAndroid Build Coastguard Worker     o2 = o.intersect<10>({-1.0, .0}, {1.0, 2.0});
153*20bfefbeSAndroid Build Coastguard Worker     ASSERT_FALSE(o2);
154*20bfefbeSAndroid Build Coastguard Worker 
155*20bfefbeSAndroid Build Coastguard Worker     // diagonally through the top left corner reversed
156*20bfefbeSAndroid Build Coastguard Worker     o2 = o.intersect<10>({1.0, 2.0}, {-1.0, .0});
157*20bfefbeSAndroid Build Coastguard Worker     ASSERT_TRUE(o2);
158*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(size_t(4), o2->size());
159*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(pxs(1.0), o2->area());
160*20bfefbeSAndroid Build Coastguard Worker 
161*20bfefbeSAndroid Build Coastguard Worker     // diagonally through the bottom right corner
162*20bfefbeSAndroid Build Coastguard Worker     o2 = o.intersect<10>({2.0, 1.0}, {.0, -1.0});
163*20bfefbeSAndroid Build Coastguard Worker     ASSERT_FALSE(o2);
164*20bfefbeSAndroid Build Coastguard Worker 
165*20bfefbeSAndroid Build Coastguard Worker     // diagonally through the bottom right corner reversed
166*20bfefbeSAndroid Build Coastguard Worker     o2 = o.intersect<10>({.0, -1.0}, {2.0, 1.0});
167*20bfefbeSAndroid Build Coastguard Worker     ASSERT_TRUE(o2);
168*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(size_t(4), o2->size());
169*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(pxs(1.0), o2->area());
170*20bfefbeSAndroid Build Coastguard Worker 
171*20bfefbeSAndroid Build Coastguard Worker     // diagonally through the bottom left corner
172*20bfefbeSAndroid Build Coastguard Worker     o2 = o.intersect<10>({1.0, -1.0}, {-1.0, 1.0});
173*20bfefbeSAndroid Build Coastguard Worker     ASSERT_FALSE(o2);
174*20bfefbeSAndroid Build Coastguard Worker 
175*20bfefbeSAndroid Build Coastguard Worker     // diagonally through the top right corner reversed
176*20bfefbeSAndroid Build Coastguard Worker     o2 = o.intersect<10>({-1.0, 1.0}, {1.0, -1.0});
177*20bfefbeSAndroid Build Coastguard Worker     ASSERT_TRUE(o2);
178*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(size_t(4), o2->size());
179*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(pxs(1.0), o2->area());
180*20bfefbeSAndroid Build Coastguard Worker 
181*20bfefbeSAndroid Build Coastguard Worker     // through two corners
182*20bfefbeSAndroid Build Coastguard Worker     o2 = o.intersect<10>({-1.0, 1.0}, {2.0, 1.0});
183*20bfefbeSAndroid Build Coastguard Worker     ASSERT_FALSE(o2);
184*20bfefbeSAndroid Build Coastguard Worker 
185*20bfefbeSAndroid Build Coastguard Worker     // through two corners reversed
186*20bfefbeSAndroid Build Coastguard Worker     o2 = o.intersect<10>({2.0, 1.0}, {-1.0, 1.0});
187*20bfefbeSAndroid Build Coastguard Worker     ASSERT_TRUE(o2);
188*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(size_t(4), o2->size());
189*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(pxs(1.0), o2->area());
190*20bfefbeSAndroid Build Coastguard Worker 
191*20bfefbeSAndroid Build Coastguard Worker     o2 = o.intersect<10>({.0, -.5}, {.5, .0});
192*20bfefbeSAndroid Build Coastguard Worker     ASSERT_TRUE(o2);
193*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(size_t(5), o2->size());
194*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(pxs(.875), o2->area());
195*20bfefbeSAndroid Build Coastguard Worker 
196*20bfefbeSAndroid Build Coastguard Worker     o2 = o.intersect<10>({.0, .5}, {.5, .0});
197*20bfefbeSAndroid Build Coastguard Worker     ASSERT_TRUE(o2);
198*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(size_t(5), o2->size());
199*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(pxs(.875), o2->area());
200*20bfefbeSAndroid Build Coastguard Worker 
201*20bfefbeSAndroid Build Coastguard Worker     ConvexObject<10> o3{{-1.3845, 23.0}, {-0.384501, 23}, {-0.384501, 24}, {-1.3845, 24}};
202*20bfefbeSAndroid Build Coastguard Worker     o2 = o3.intersect<10>({-3.3845, 25.3339}, {7.59022, 14.3592});
203*20bfefbeSAndroid Build Coastguard Worker     ASSERT_TRUE(o2);
204*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(size_t(5), o2->size());
205*20bfefbeSAndroid Build Coastguard Worker }
206*20bfefbeSAndroid Build Coastguard Worker 
TEST(TeeUIUtilsTest,ErrorOperatorOrOverloadTest)207*20bfefbeSAndroid Build Coastguard Worker TEST(TeeUIUtilsTest, ErrorOperatorOrOverloadTest) {
208*20bfefbeSAndroid Build Coastguard Worker     // This expression should evaluate to the first (non OK) error code in the sequence.
209*20bfefbeSAndroid Build Coastguard Worker     ASSERT_EQ(Error(Error::NotInitialized), Error(Error::OK) || Error(Error::NotInitialized) ||
210*20bfefbeSAndroid Build Coastguard Worker                                                 Error(Error::FaceNotLoaded) || Error(Error::OK));
211*20bfefbeSAndroid Build Coastguard Worker }
212*20bfefbeSAndroid Build Coastguard Worker 
213*20bfefbeSAndroid Build Coastguard Worker }  // namespace test
214*20bfefbeSAndroid Build Coastguard Worker 
215*20bfefbeSAndroid Build Coastguard Worker }  // namespace teeui
216