xref: /aosp_15_r20/external/deqp/modules/internal/ditBuildInfoTests.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
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