/*------------------------------------------------------------------------- * 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_consitent", "DE_ENDIANNESS")); } } // dit