1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker * drawElements Internal Test Module
3*35238bceSAndroid Build Coastguard Worker * ---------------------------------
4*35238bceSAndroid Build Coastguard Worker *
5*35238bceSAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project
6*35238bceSAndroid Build Coastguard Worker *
7*35238bceSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
8*35238bceSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
9*35238bceSAndroid Build Coastguard Worker * You may obtain a copy of the License at
10*35238bceSAndroid Build Coastguard Worker *
11*35238bceSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
12*35238bceSAndroid Build Coastguard Worker *
13*35238bceSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
14*35238bceSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
15*35238bceSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16*35238bceSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
17*35238bceSAndroid Build Coastguard Worker * limitations under the License.
18*35238bceSAndroid Build Coastguard Worker *
19*35238bceSAndroid Build Coastguard Worker *//*!
20*35238bceSAndroid Build Coastguard Worker * \file
21*35238bceSAndroid Build Coastguard Worker * \brief Build information tests.
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "ditBuildInfoTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "tcuTestLog.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "deStringUtil.hpp"
27*35238bceSAndroid Build Coastguard Worker
28*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
29*35238bceSAndroid Build Coastguard Worker
30*35238bceSAndroid Build Coastguard Worker namespace dit
31*35238bceSAndroid Build Coastguard Worker {
32*35238bceSAndroid Build Coastguard Worker
getOsName(int os)33*35238bceSAndroid Build Coastguard Worker static const char *getOsName(int os)
34*35238bceSAndroid Build Coastguard Worker {
35*35238bceSAndroid Build Coastguard Worker switch (os)
36*35238bceSAndroid Build Coastguard Worker {
37*35238bceSAndroid Build Coastguard Worker case DE_OS_VANILLA:
38*35238bceSAndroid Build Coastguard Worker return "DE_OS_VANILLA";
39*35238bceSAndroid Build Coastguard Worker case DE_OS_WIN32:
40*35238bceSAndroid Build Coastguard Worker return "DE_OS_WIN32";
41*35238bceSAndroid Build Coastguard Worker case DE_OS_UNIX:
42*35238bceSAndroid Build Coastguard Worker return "DE_OS_UNIX";
43*35238bceSAndroid Build Coastguard Worker case DE_OS_WINCE:
44*35238bceSAndroid Build Coastguard Worker return "DE_OS_WINCE";
45*35238bceSAndroid Build Coastguard Worker case DE_OS_OSX:
46*35238bceSAndroid Build Coastguard Worker return "DE_OS_OSX";
47*35238bceSAndroid Build Coastguard Worker case DE_OS_ANDROID:
48*35238bceSAndroid Build Coastguard Worker return "DE_OS_ANDROID";
49*35238bceSAndroid Build Coastguard Worker case DE_OS_SYMBIAN:
50*35238bceSAndroid Build Coastguard Worker return "DE_OS_SYMBIAN";
51*35238bceSAndroid Build Coastguard Worker case DE_OS_IOS:
52*35238bceSAndroid Build Coastguard Worker return "DE_OS_IOS";
53*35238bceSAndroid Build Coastguard Worker default:
54*35238bceSAndroid Build Coastguard Worker return DE_NULL;
55*35238bceSAndroid Build Coastguard Worker }
56*35238bceSAndroid Build Coastguard Worker }
57*35238bceSAndroid Build Coastguard Worker
getCompilerName(int compiler)58*35238bceSAndroid Build Coastguard Worker static const char *getCompilerName(int compiler)
59*35238bceSAndroid Build Coastguard Worker {
60*35238bceSAndroid Build Coastguard Worker switch (compiler)
61*35238bceSAndroid Build Coastguard Worker {
62*35238bceSAndroid Build Coastguard Worker case DE_COMPILER_VANILLA:
63*35238bceSAndroid Build Coastguard Worker return "DE_COMPILER_VANILLA";
64*35238bceSAndroid Build Coastguard Worker case DE_COMPILER_MSC:
65*35238bceSAndroid Build Coastguard Worker return "DE_COMPILER_MSC";
66*35238bceSAndroid Build Coastguard Worker case DE_COMPILER_GCC:
67*35238bceSAndroid Build Coastguard Worker return "DE_COMPILER_GCC";
68*35238bceSAndroid Build Coastguard Worker case DE_COMPILER_CLANG:
69*35238bceSAndroid Build Coastguard Worker return "DE_COMPILER_CLANG";
70*35238bceSAndroid Build Coastguard Worker default:
71*35238bceSAndroid Build Coastguard Worker return DE_NULL;
72*35238bceSAndroid Build Coastguard Worker }
73*35238bceSAndroid Build Coastguard Worker }
74*35238bceSAndroid Build Coastguard Worker
getCpuName(int cpu)75*35238bceSAndroid Build Coastguard Worker static const char *getCpuName(int cpu)
76*35238bceSAndroid Build Coastguard Worker {
77*35238bceSAndroid Build Coastguard Worker switch (cpu)
78*35238bceSAndroid Build Coastguard Worker {
79*35238bceSAndroid Build Coastguard Worker case DE_CPU_VANILLA:
80*35238bceSAndroid Build Coastguard Worker return "DE_CPU_VANILLA";
81*35238bceSAndroid Build Coastguard Worker case DE_CPU_ARM:
82*35238bceSAndroid Build Coastguard Worker return "DE_CPU_ARM";
83*35238bceSAndroid Build Coastguard Worker case DE_CPU_X86:
84*35238bceSAndroid Build Coastguard Worker return "DE_CPU_X86";
85*35238bceSAndroid Build Coastguard Worker case DE_CPU_X86_64:
86*35238bceSAndroid Build Coastguard Worker return "DE_CPU_X86_64";
87*35238bceSAndroid Build Coastguard Worker case DE_CPU_ARM_64:
88*35238bceSAndroid Build Coastguard Worker return "DE_CPU_ARM_64";
89*35238bceSAndroid Build Coastguard Worker case DE_CPU_MIPS:
90*35238bceSAndroid Build Coastguard Worker return "DE_CPU_MIPS";
91*35238bceSAndroid Build Coastguard Worker case DE_CPU_MIPS_64:
92*35238bceSAndroid Build Coastguard Worker return "DE_CPU_MIPS_64";
93*35238bceSAndroid Build Coastguard Worker case DE_CPU_RISCV_32:
94*35238bceSAndroid Build Coastguard Worker return "DE_CPU_RISCV_32";
95*35238bceSAndroid Build Coastguard Worker case DE_CPU_RISCV_64:
96*35238bceSAndroid Build Coastguard Worker return "DE_CPU_RISCV_64";
97*35238bceSAndroid Build Coastguard Worker default:
98*35238bceSAndroid Build Coastguard Worker return DE_NULL;
99*35238bceSAndroid Build Coastguard Worker }
100*35238bceSAndroid Build Coastguard Worker }
101*35238bceSAndroid Build Coastguard Worker
getEndiannessName(int endianness)102*35238bceSAndroid Build Coastguard Worker static const char *getEndiannessName(int endianness)
103*35238bceSAndroid Build Coastguard Worker {
104*35238bceSAndroid Build Coastguard Worker switch (endianness)
105*35238bceSAndroid Build Coastguard Worker {
106*35238bceSAndroid Build Coastguard Worker case DE_BIG_ENDIAN:
107*35238bceSAndroid Build Coastguard Worker return "DE_BIG_ENDIAN";
108*35238bceSAndroid Build Coastguard Worker case DE_LITTLE_ENDIAN:
109*35238bceSAndroid Build Coastguard Worker return "DE_LITTLE_ENDIAN";
110*35238bceSAndroid Build Coastguard Worker default:
111*35238bceSAndroid Build Coastguard Worker return DE_NULL;
112*35238bceSAndroid Build Coastguard Worker }
113*35238bceSAndroid Build Coastguard Worker }
114*35238bceSAndroid Build Coastguard Worker
115*35238bceSAndroid Build Coastguard Worker class BuildInfoStringCase : public tcu::TestCase
116*35238bceSAndroid Build Coastguard Worker {
117*35238bceSAndroid Build Coastguard Worker public:
BuildInfoStringCase(tcu::TestContext & testCtx,const char * name,const char * valueName,const char * value)118*35238bceSAndroid Build Coastguard Worker BuildInfoStringCase(tcu::TestContext &testCtx, const char *name, const char *valueName, const char *value)
119*35238bceSAndroid Build Coastguard Worker : tcu::TestCase(testCtx, name, valueName)
120*35238bceSAndroid Build Coastguard Worker , m_valueName(valueName)
121*35238bceSAndroid Build Coastguard Worker , m_value(value)
122*35238bceSAndroid Build Coastguard Worker {
123*35238bceSAndroid Build Coastguard Worker }
124*35238bceSAndroid Build Coastguard Worker
iterate(void)125*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void)
126*35238bceSAndroid Build Coastguard Worker {
127*35238bceSAndroid Build Coastguard Worker m_testCtx.getLog() << TestLog::Message << m_valueName << " = " << m_value << TestLog::EndMessage;
128*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
129*35238bceSAndroid Build Coastguard Worker return STOP;
130*35238bceSAndroid Build Coastguard Worker }
131*35238bceSAndroid Build Coastguard Worker
132*35238bceSAndroid Build Coastguard Worker private:
133*35238bceSAndroid Build Coastguard Worker std::string m_valueName;
134*35238bceSAndroid Build Coastguard Worker std::string m_value;
135*35238bceSAndroid Build Coastguard Worker };
136*35238bceSAndroid Build Coastguard Worker
137*35238bceSAndroid Build Coastguard Worker class BuildEnumCase : public tcu::TestCase
138*35238bceSAndroid Build Coastguard Worker {
139*35238bceSAndroid Build Coastguard Worker public:
140*35238bceSAndroid Build Coastguard Worker typedef const char *(*GetStringFunc)(int value);
141*35238bceSAndroid Build Coastguard Worker
BuildEnumCase(tcu::TestContext & testCtx,const char * name,const char * varName,int value,GetStringFunc getString)142*35238bceSAndroid Build Coastguard Worker BuildEnumCase(tcu::TestContext &testCtx, const char *name, const char *varName, int value, GetStringFunc getString)
143*35238bceSAndroid Build Coastguard Worker : tcu::TestCase(testCtx, name, varName)
144*35238bceSAndroid Build Coastguard Worker , m_varName(varName)
145*35238bceSAndroid Build Coastguard Worker , m_value(value)
146*35238bceSAndroid Build Coastguard Worker , m_getString(getString)
147*35238bceSAndroid Build Coastguard Worker {
148*35238bceSAndroid Build Coastguard Worker }
149*35238bceSAndroid Build Coastguard Worker
iterate(void)150*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void)
151*35238bceSAndroid Build Coastguard Worker {
152*35238bceSAndroid Build Coastguard Worker const char *valueName = m_getString(m_value);
153*35238bceSAndroid Build Coastguard Worker const bool isOk = valueName != DE_NULL;
154*35238bceSAndroid Build Coastguard Worker std::string logValue = valueName ? std::string(valueName) : de::toString(m_value);
155*35238bceSAndroid Build Coastguard Worker
156*35238bceSAndroid Build Coastguard Worker m_testCtx.getLog() << TestLog::Message << m_varName << " = " << logValue << TestLog::EndMessage;
157*35238bceSAndroid Build Coastguard Worker
158*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(isOk ? QP_TEST_RESULT_PASS : QP_TEST_RESULT_FAIL, isOk ? "Pass" : "No enum name found");
159*35238bceSAndroid Build Coastguard Worker return STOP;
160*35238bceSAndroid Build Coastguard Worker }
161*35238bceSAndroid Build Coastguard Worker
162*35238bceSAndroid Build Coastguard Worker private:
163*35238bceSAndroid Build Coastguard Worker std::string m_varName;
164*35238bceSAndroid Build Coastguard Worker int m_value;
165*35238bceSAndroid Build Coastguard Worker GetStringFunc m_getString;
166*35238bceSAndroid Build Coastguard Worker };
167*35238bceSAndroid Build Coastguard Worker
168*35238bceSAndroid Build Coastguard Worker class EndiannessConsistencyCase : public tcu::TestCase
169*35238bceSAndroid Build Coastguard Worker {
170*35238bceSAndroid Build Coastguard Worker public:
EndiannessConsistencyCase(tcu::TestContext & context,const char * name,const char * description)171*35238bceSAndroid Build Coastguard Worker EndiannessConsistencyCase(tcu::TestContext &context, const char *name, const char *description)
172*35238bceSAndroid Build Coastguard Worker : tcu::TestCase(context, name, description)
173*35238bceSAndroid Build Coastguard Worker {
174*35238bceSAndroid Build Coastguard Worker }
175*35238bceSAndroid Build Coastguard Worker
iterate(void)176*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void)
177*35238bceSAndroid Build Coastguard Worker {
178*35238bceSAndroid Build Coastguard Worker const uint16_t multiByte = (uint16_t)0x0102;
179*35238bceSAndroid Build Coastguard Worker
180*35238bceSAndroid Build Coastguard Worker #if DE_ENDIANNESS == DE_BIG_ENDIAN
181*35238bceSAndroid Build Coastguard Worker const bool isOk = *((const uint8_t *)&multiByte) == (uint8_t)0x01;
182*35238bceSAndroid Build Coastguard Worker #elif DE_ENDIANNESS == DE_LITTLE_ENDIAN
183*35238bceSAndroid Build Coastguard Worker const bool isOk = *((const uint8_t *)&multiByte) == (uint8_t)0x02;
184*35238bceSAndroid Build Coastguard Worker #endif
185*35238bceSAndroid Build Coastguard Worker
186*35238bceSAndroid Build Coastguard Worker m_testCtx.getLog() << TestLog::Message << "Verifying DE_ENDIANNESS matches actual behavior"
187*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
188*35238bceSAndroid Build Coastguard Worker
189*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(isOk ? QP_TEST_RESULT_PASS : QP_TEST_RESULT_FAIL,
190*35238bceSAndroid Build Coastguard Worker isOk ? "Pass" : "Configured endianness inconsistent");
191*35238bceSAndroid Build Coastguard Worker return STOP;
192*35238bceSAndroid Build Coastguard Worker }
193*35238bceSAndroid Build Coastguard Worker };
194*35238bceSAndroid Build Coastguard Worker
BuildInfoTests(tcu::TestContext & testCtx)195*35238bceSAndroid Build Coastguard Worker BuildInfoTests::BuildInfoTests(tcu::TestContext &testCtx)
196*35238bceSAndroid Build Coastguard Worker : tcu::TestCaseGroup(testCtx, "build_info", "Build Info Tests")
197*35238bceSAndroid Build Coastguard Worker {
198*35238bceSAndroid Build Coastguard Worker }
199*35238bceSAndroid Build Coastguard Worker
~BuildInfoTests(void)200*35238bceSAndroid Build Coastguard Worker BuildInfoTests::~BuildInfoTests(void)
201*35238bceSAndroid Build Coastguard Worker {
202*35238bceSAndroid Build Coastguard Worker }
203*35238bceSAndroid Build Coastguard Worker
init(void)204*35238bceSAndroid Build Coastguard Worker void BuildInfoTests::init(void)
205*35238bceSAndroid Build Coastguard Worker {
206*35238bceSAndroid Build Coastguard Worker #if defined(DE_DEBUG)
207*35238bceSAndroid Build Coastguard Worker const bool isDebug = true;
208*35238bceSAndroid Build Coastguard Worker #else
209*35238bceSAndroid Build Coastguard Worker const bool isDebug = false;
210*35238bceSAndroid Build Coastguard Worker #endif
211*35238bceSAndroid Build Coastguard Worker
212*35238bceSAndroid Build Coastguard Worker addChild(new BuildInfoStringCase(m_testCtx, "de_debug", "DE_DEBUG", isDebug ? "1" : "not defined"));
213*35238bceSAndroid Build Coastguard Worker addChild(new BuildEnumCase(m_testCtx, "de_os", "DE_OS", DE_OS, getOsName));
214*35238bceSAndroid Build Coastguard Worker addChild(new BuildEnumCase(m_testCtx, "de_cpu", "DE_CPU", DE_CPU, getCpuName));
215*35238bceSAndroid Build Coastguard Worker addChild(new BuildEnumCase(m_testCtx, "de_compiler", "DE_COMPILER", DE_COMPILER, getCompilerName));
216*35238bceSAndroid Build Coastguard Worker addChild(new BuildInfoStringCase(m_testCtx, "de_ptr_size", "DE_PTR_SIZE", de::toString(DE_PTR_SIZE).c_str()));
217*35238bceSAndroid Build Coastguard Worker addChild(new BuildEnumCase(m_testCtx, "de_endianness", "DE_ENDIANNESS", DE_ENDIANNESS, getEndiannessName));
218*35238bceSAndroid Build Coastguard Worker addChild(new EndiannessConsistencyCase(m_testCtx, "de_endianness_consistent", "DE_ENDIANNESS"));
219*35238bceSAndroid Build Coastguard Worker }
220*35238bceSAndroid Build Coastguard Worker
221*35238bceSAndroid Build Coastguard Worker } // namespace dit
222