You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
199 lines
5.6 KiB
199 lines
5.6 KiB
/*------------------------------------------------------------------------- |
|
* drawElements Internal Test Module |
|
* --------------------------------- |
|
* |
|
* Copyright 2014 The Android Open Source Project |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
* |
|
*//*! |
|
* \file |
|
* \brief Build information tests. |
|
*//*--------------------------------------------------------------------*/ |
|
|
|
#include "ditBuildInfoTests.hpp" |
|
#include "tcuTestLog.hpp" |
|
#include "deStringUtil.hpp" |
|
|
|
using tcu::TestLog; |
|
|
|
namespace dit |
|
{ |
|
|
|
static const char* getOsName (int os) |
|
{ |
|
switch (os) |
|
{ |
|
case DE_OS_VANILLA: return "DE_OS_VANILLA"; |
|
case DE_OS_WIN32: return "DE_OS_WIN32"; |
|
case DE_OS_UNIX: return "DE_OS_UNIX"; |
|
case DE_OS_WINCE: return "DE_OS_WINCE"; |
|
case DE_OS_OSX: return "DE_OS_OSX"; |
|
case DE_OS_ANDROID: return "DE_OS_ANDROID"; |
|
case DE_OS_SYMBIAN: return "DE_OS_SYMBIAN"; |
|
case DE_OS_IOS: return "DE_OS_IOS"; |
|
default: |
|
return DE_NULL; |
|
} |
|
} |
|
|
|
static const char* getCompilerName (int compiler) |
|
{ |
|
switch (compiler) |
|
{ |
|
case DE_COMPILER_VANILLA: return "DE_COMPILER_VANILLA"; |
|
case DE_COMPILER_MSC: return "DE_COMPILER_MSC"; |
|
case DE_COMPILER_GCC: return "DE_COMPILER_GCC"; |
|
case DE_COMPILER_CLANG: return "DE_COMPILER_CLANG"; |
|
default: |
|
return DE_NULL; |
|
} |
|
} |
|
|
|
static const char* getCpuName (int cpu) |
|
{ |
|
switch (cpu) |
|
{ |
|
case DE_CPU_VANILLA: return "DE_CPU_VANILLA"; |
|
case DE_CPU_ARM: return "DE_CPU_ARM"; |
|
case DE_CPU_X86: return "DE_CPU_X86"; |
|
case DE_CPU_X86_64: return "DE_CPU_X86_64"; |
|
case DE_CPU_ARM_64: return "DE_CPU_ARM_64"; |
|
case DE_CPU_MIPS: return "DE_CPU_MIPS"; |
|
case DE_CPU_MIPS_64: return "DE_CPU_MIPS_64"; |
|
default: |
|
return DE_NULL; |
|
} |
|
} |
|
|
|
static const char* getEndiannessName (int endianness) |
|
{ |
|
switch (endianness) |
|
{ |
|
case DE_BIG_ENDIAN: return "DE_BIG_ENDIAN"; |
|
case DE_LITTLE_ENDIAN: return "DE_LITTLE_ENDIAN"; |
|
default: |
|
return DE_NULL; |
|
} |
|
} |
|
|
|
class BuildInfoStringCase : public tcu::TestCase |
|
{ |
|
public: |
|
BuildInfoStringCase (tcu::TestContext& testCtx, const char* name, const char* valueName, const char* value) |
|
: tcu::TestCase (testCtx, name, valueName) |
|
, m_valueName (valueName) |
|
, m_value (value) |
|
{ |
|
} |
|
|
|
IterateResult iterate (void) |
|
{ |
|
m_testCtx.getLog() << TestLog::Message << m_valueName << " = " << m_value << TestLog::EndMessage; |
|
m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); |
|
return STOP; |
|
} |
|
|
|
private: |
|
std::string m_valueName; |
|
std::string m_value; |
|
}; |
|
|
|
class BuildEnumCase : public tcu::TestCase |
|
{ |
|
public: |
|
typedef const char* (*GetStringFunc) (int value); |
|
|
|
BuildEnumCase (tcu::TestContext& testCtx, const char* name, const char* varName, int value, GetStringFunc getString) |
|
: tcu::TestCase (testCtx, name, varName) |
|
, m_varName (varName) |
|
, m_value (value) |
|
, m_getString (getString) |
|
{ |
|
} |
|
|
|
IterateResult iterate (void) |
|
{ |
|
const char* valueName = m_getString(m_value); |
|
const bool isOk = valueName != DE_NULL; |
|
std::string logValue = valueName ? std::string(valueName) : de::toString(m_value); |
|
|
|
m_testCtx.getLog() << TestLog::Message << m_varName << " = " << logValue << TestLog::EndMessage; |
|
|
|
m_testCtx.setTestResult(isOk ? QP_TEST_RESULT_PASS : QP_TEST_RESULT_FAIL, |
|
isOk ? "Pass" : "No enum name found"); |
|
return STOP; |
|
} |
|
|
|
private: |
|
std::string m_varName; |
|
int m_value; |
|
GetStringFunc m_getString; |
|
}; |
|
|
|
class EndiannessConsistencyCase : public tcu::TestCase |
|
{ |
|
public: |
|
EndiannessConsistencyCase (tcu::TestContext& context, const char* name, const char* description) |
|
: tcu::TestCase(context, name, description) |
|
{ |
|
} |
|
|
|
IterateResult iterate (void) |
|
{ |
|
const deUint16 multiByte = (deUint16)0x0102; |
|
|
|
#if DE_ENDIANNESS == DE_BIG_ENDIAN |
|
const bool isOk = *((const deUint8*)&multiByte) == (deUint8)0x01; |
|
#elif DE_ENDIANNESS == DE_LITTLE_ENDIAN |
|
const bool isOk = *((const deUint8*)&multiByte) == (deUint8)0x02; |
|
#endif |
|
|
|
m_testCtx.getLog() |
|
<< TestLog::Message |
|
<< "Verifying DE_ENDIANNESS matches actual behavior" |
|
<< TestLog::EndMessage; |
|
|
|
m_testCtx.setTestResult(isOk ? QP_TEST_RESULT_PASS : QP_TEST_RESULT_FAIL, |
|
isOk ? "Pass" : "Configured endianness inconsistent"); |
|
return STOP; |
|
} |
|
}; |
|
|
|
BuildInfoTests::BuildInfoTests (tcu::TestContext& testCtx) |
|
: tcu::TestCaseGroup(testCtx, "build_info", "Build Info Tests") |
|
{ |
|
} |
|
|
|
BuildInfoTests::~BuildInfoTests (void) |
|
{ |
|
} |
|
|
|
void BuildInfoTests::init (void) |
|
{ |
|
#if defined(DE_DEBUG) |
|
const bool isDebug = true; |
|
#else |
|
const bool isDebug = false; |
|
#endif |
|
|
|
addChild(new BuildInfoStringCase (m_testCtx, "de_debug", "DE_DEBUG", isDebug ? "1" : "not defined")); |
|
addChild(new BuildEnumCase (m_testCtx, "de_os", "DE_OS", DE_OS, getOsName)); |
|
addChild(new BuildEnumCase (m_testCtx, "de_cpu", "DE_CPU", DE_CPU, getCpuName)); |
|
addChild(new BuildEnumCase (m_testCtx, "de_compiler", "DE_COMPILER", DE_COMPILER, getCompilerName)); |
|
addChild(new BuildInfoStringCase (m_testCtx, "de_ptr_size", "DE_PTR_SIZE", de::toString(DE_PTR_SIZE).c_str())); |
|
addChild(new BuildEnumCase (m_testCtx, "de_endianness", "DE_ENDIANNESS", DE_ENDIANNESS, getEndiannessName)); |
|
addChild(new EndiannessConsistencyCase (m_testCtx, "de_endianness_consistent", "DE_ENDIANNESS")); |
|
} |
|
|
|
} // dit
|
|
|