| #ifndef _XETESTCASERESULT_HPP |
| #define _XETESTCASERESULT_HPP |
| /*------------------------------------------------------------------------- |
| * drawElements Quality Program Test Executor |
| * ------------------------------------------ |
| * |
| * 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 Test case result models. |
| *//*--------------------------------------------------------------------*/ |
| |
| #include "xeDefs.hpp" |
| #include "xeTestCase.hpp" |
| |
| #include <string> |
| #include <vector> |
| #include <ostream> |
| |
| namespace xe |
| { |
| |
| enum TestStatusCode |
| { |
| TESTSTATUSCODE_PASS, //!< Test case passed. |
| TESTSTATUSCODE_FAIL, //!< Test case failed (not passed). |
| TESTSTATUSCODE_QUALITY_WARNING, //!< Result within specification, but suspicious quality wise |
| TESTSTATUSCODE_COMPATIBILITY_WARNING, //!< Result within specification, but likely to cause fragmentation |
| TESTSTATUSCODE_PENDING, //!< Not yet started. |
| TESTSTATUSCODE_RUNNING, //!< Currently running (not stored in database). |
| TESTSTATUSCODE_NOT_SUPPORTED, //!< Some feature was not supported in the implementation. |
| TESTSTATUSCODE_RESOURCE_ERROR, //!< A resource error has occurred. |
| TESTSTATUSCODE_INTERNAL_ERROR, //!< An internal error has occurred. |
| TESTSTATUSCODE_CANCELED, //!< User canceled the execution |
| TESTSTATUSCODE_TIMEOUT, //!< Test was killed because of watch dog timeout. |
| TESTSTATUSCODE_CRASH, //!< Test executable crashed before finishing the test. |
| TESTSTATUSCODE_DISABLED, //!< Test case disabled (for current target) |
| TESTSTATUSCODE_TERMINATED, //!< Terminated for other reason. |
| |
| TESTSTATUSCODE_LAST |
| }; |
| |
| const char* getTestStatusCodeName (TestStatusCode statusCode); |
| |
| namespace ri |
| { |
| |
| class Item; |
| class Result; |
| class Text; |
| class Number; |
| class Image; |
| class ImageSet; |
| class VertexShader; |
| class FragmentShader; |
| class ShaderProgram; |
| class ShaderSource; |
| class InfoLog; |
| class EglConfig; |
| class EglConfigSet; |
| class Section; |
| class KernelSource; |
| class CompileInfo; |
| class SampleList; |
| class SampleInfo; |
| class ValueInfo; |
| class Sample; |
| class SampleValue; |
| |
| // \todo [2014-02-28 pyry] Make List<T> for items that have only specific subitems. |
| |
| class List |
| { |
| public: |
| List (void); |
| ~List (void); |
| |
| int getNumItems (void) const { return (int)m_items.size(); } |
| const Item& getItem (int ndx) const { return *m_items[ndx]; } |
| Item& getItem (int ndx) { return *m_items[ndx]; } |
| |
| template <typename T> |
| T* allocItem (void); |
| |
| private: |
| std::vector<Item*> m_items; |
| }; |
| |
| template <typename T> |
| T* List::allocItem (void) |
| { |
| m_items.reserve(m_items.size()+1); |
| T* item = new T(); |
| m_items.push_back(static_cast<ri::Item*>(item)); |
| return item; |
| } |
| |
| } // ri |
| |
| class TestCaseResultHeader |
| { |
| public: |
| TestCaseResultHeader (void) : caseType(TESTCASETYPE_LAST), statusCode(TESTSTATUSCODE_LAST) {} |
| |
| std::string casePath; //!< Full test case path. |
| TestCaseType caseType; //!< Test case type. |
| TestStatusCode statusCode; //!< Test status code. |
| std::string statusDetails; //!< Status description. |
| }; |
| |
| class TestCaseResult : public TestCaseResultHeader |
| { |
| public: |
| ri::List resultItems; //!< Test log items. |
| }; |
| |
| // Result items. |
| namespace ri |
| { |
| |
| // Result item type. |
| enum Type |
| { |
| TYPE_RESULT = 0, |
| TYPE_TEXT, |
| TYPE_NUMBER, |
| TYPE_IMAGE, |
| TYPE_IMAGESET, |
| TYPE_SHADER, |
| TYPE_SHADERPROGRAM, |
| TYPE_SHADERSOURCE, |
| TYPE_SPIRVSOURCE, |
| TYPE_INFOLOG, |
| TYPE_EGLCONFIG, |
| TYPE_EGLCONFIGSET, |
| TYPE_SECTION, |
| TYPE_KERNELSOURCE, |
| TYPE_COMPILEINFO, |
| TYPE_SAMPLELIST, |
| TYPE_SAMPLEINFO, |
| TYPE_VALUEINFO, |
| TYPE_SAMPLE, |
| TYPE_SAMPLEVALUE, |
| |
| TYPE_LAST |
| }; |
| |
| class NumericValue |
| { |
| public: |
| enum Type |
| { |
| TYPE_EMPTY = 0, |
| TYPE_INT64, |
| TYPE_FLOAT64, |
| |
| TYPE_LAST |
| }; |
| |
| NumericValue (void) : m_type(TYPE_EMPTY) {} |
| NumericValue (deInt64 value) : m_type(TYPE_INT64) { m_value.int64 = value; } |
| NumericValue (double value) : m_type(TYPE_FLOAT64) { m_value.float64 = value; } |
| |
| Type getType (void) const { return m_type; } |
| deInt64 getInt64 (void) const { DE_ASSERT(getType() == TYPE_INT64); return m_value.int64; } |
| double getFloat64 (void) const { DE_ASSERT(getType() == TYPE_FLOAT64); return m_value.float64; } |
| |
| private: |
| Type m_type; |
| union |
| { |
| deInt64 int64; |
| double float64; |
| } m_value; |
| }; |
| |
| std::ostream& operator<< (std::ostream& str, const NumericValue& value); |
| |
| class Item |
| { |
| public: |
| |
| virtual ~Item (void) {} |
| |
| Type getType (void) const { return m_type; } |
| |
| protected: |
| Item (Type type) : m_type(type) {} |
| |
| private: |
| Item (const Item& other); |
| Item& operator= (const Item& other); |
| |
| Type m_type; |
| }; |
| |
| class Result : public Item |
| { |
| public: |
| Result (void) : Item(TYPE_RESULT), statusCode(TESTSTATUSCODE_LAST) {} |
| ~Result (void) {} |
| |
| TestStatusCode statusCode; |
| std::string details; |
| }; |
| |
| class Text : public Item |
| { |
| public: |
| Text (void) : Item(TYPE_TEXT) {} |
| ~Text (void) {} |
| |
| std::string text; |
| }; |
| |
| class Number : public Item |
| { |
| public: |
| Number (void) : Item(TYPE_NUMBER) {} |
| ~Number (void) {} |
| |
| std::string name; |
| std::string description; |
| std::string unit; |
| std::string tag; |
| NumericValue value; |
| }; |
| |
| class Image : public Item |
| { |
| public: |
| enum Format |
| { |
| FORMAT_RGB888, |
| FORMAT_RGBA8888, |
| |
| FORMAT_LAST |
| }; |
| |
| enum Compression |
| { |
| COMPRESSION_NONE = 0, |
| COMPRESSION_PNG, |
| |
| COMPRESSION_LAST |
| }; |
| |
| Image (void) : Item(TYPE_IMAGE), width(0), height(0), format(FORMAT_LAST), compression(COMPRESSION_LAST) {} |
| ~Image (void) {} |
| |
| std::string name; |
| std::string description; |
| int width; |
| int height; |
| Format format; |
| Compression compression; |
| std::vector<deUint8> data; |
| }; |
| |
| class ImageSet : public Item |
| { |
| public: |
| ImageSet (void) : Item(TYPE_IMAGESET) {} |
| ~ImageSet (void) {} |
| |
| std::string name; |
| std::string description; |
| List images; |
| }; |
| |
| class ShaderSource : public Item |
| { |
| public: |
| ShaderSource (void) : Item(TYPE_SHADERSOURCE) {} |
| ~ShaderSource (void) {} |
| |
| std::string source; |
| }; |
| |
| class SpirVSource : public Item |
| { |
| public: |
| SpirVSource (void) : Item(TYPE_SPIRVSOURCE) {} |
| ~SpirVSource (void) {} |
| |
| std::string source; |
| }; |
| |
| class InfoLog : public Item |
| { |
| public: |
| InfoLog (void) : Item(TYPE_INFOLOG) {} |
| ~InfoLog (void) {} |
| |
| std::string log; |
| }; |
| |
| class Shader : public Item |
| { |
| public: |
| enum ShaderType |
| { |
| SHADERTYPE_VERTEX = 0, |
| SHADERTYPE_FRAGMENT, |
| SHADERTYPE_GEOMETRY, |
| SHADERTYPE_TESS_CONTROL, |
| SHADERTYPE_TESS_EVALUATION, |
| SHADERTYPE_COMPUTE, |
| |
| SHADERTYPE_LAST |
| }; |
| |
| Shader (void) : Item(TYPE_SHADER), shaderType(SHADERTYPE_LAST), compileStatus(false) {} |
| ~Shader (void) {} |
| |
| ShaderType shaderType; |
| bool compileStatus; |
| ShaderSource source; |
| InfoLog infoLog; |
| }; |
| |
| class ShaderProgram : public Item |
| { |
| public: |
| ShaderProgram (void) : Item(TYPE_SHADERPROGRAM), linkStatus(false) {} |
| ~ShaderProgram (void) {} |
| |
| List shaders; |
| bool linkStatus; |
| InfoLog linkInfoLog; |
| }; |
| |
| class EglConfig : public Item |
| { |
| public: |
| EglConfig (void); |
| ~EglConfig (void) {} |
| |
| int bufferSize; |
| int redSize; |
| int greenSize; |
| int blueSize; |
| int luminanceSize; |
| int alphaSize; |
| int alphaMaskSize; |
| bool bindToTextureRGB; |
| bool bindToTextureRGBA; |
| std::string colorBufferType; |
| std::string configCaveat; |
| int configID; |
| std::string conformant; |
| int depthSize; |
| int level; |
| int maxPBufferWidth; |
| int maxPBufferHeight; |
| int maxPBufferPixels; |
| int maxSwapInterval; |
| int minSwapInterval; |
| bool nativeRenderable; |
| std::string renderableType; |
| int sampleBuffers; |
| int samples; |
| int stencilSize; |
| std::string surfaceTypes; |
| std::string transparentType; |
| int transparentRedValue; |
| int transparentGreenValue; |
| int transparentBlueValue; |
| }; |
| |
| inline EglConfig::EglConfig (void) |
| : Item (TYPE_EGLCONFIG) |
| , bufferSize (0) |
| , redSize (0) |
| , greenSize (0) |
| , blueSize (0) |
| , luminanceSize (0) |
| , alphaSize (0) |
| , alphaMaskSize (0) |
| , bindToTextureRGB (false) |
| , bindToTextureRGBA (false) |
| , configID (0) |
| , depthSize (0) |
| , level (0) |
| , maxPBufferWidth (0) |
| , maxPBufferHeight (0) |
| , maxPBufferPixels (0) |
| , maxSwapInterval (0) |
| , minSwapInterval (0) |
| , nativeRenderable (false) |
| , sampleBuffers (0) |
| , samples (0) |
| , stencilSize (0) |
| , transparentRedValue (0) |
| , transparentGreenValue (0) |
| , transparentBlueValue (0) |
| { |
| } |
| |
| class EglConfigSet : public Item |
| { |
| public: |
| EglConfigSet (void) : Item(TYPE_EGLCONFIGSET) {} |
| ~EglConfigSet (void) {} |
| |
| std::string name; |
| std::string description; |
| List configs; |
| }; |
| |
| class Section : public Item |
| { |
| public: |
| Section (void) : Item(TYPE_SECTION) {} |
| ~Section (void) {} |
| |
| std::string name; |
| std::string description; |
| List items; |
| }; |
| |
| class KernelSource : public Item |
| { |
| public: |
| KernelSource (void) : Item(TYPE_KERNELSOURCE) {} |
| ~KernelSource (void) {} |
| |
| std::string source; |
| }; |
| |
| class CompileInfo : public Item |
| { |
| public: |
| CompileInfo (void) : Item(TYPE_COMPILEINFO), compileStatus(false) {} |
| ~CompileInfo (void) {} |
| |
| std::string name; |
| std::string description; |
| bool compileStatus; |
| InfoLog infoLog; |
| }; |
| |
| class ValueInfo : public Item |
| { |
| public: |
| enum ValueTag |
| { |
| VALUETAG_PREDICTOR, |
| VALUETAG_RESPONSE, |
| |
| VALUETAG_LAST |
| }; |
| |
| ValueInfo (void) : Item(TYPE_VALUEINFO), tag(VALUETAG_LAST) {} |
| ~ValueInfo (void) {} |
| |
| std::string name; |
| std::string description; |
| std::string unit; |
| ValueTag tag; |
| }; |
| |
| class SampleInfo : public Item |
| { |
| public: |
| SampleInfo (void) : Item(TYPE_SAMPLEINFO) {} |
| ~SampleInfo (void) {} |
| |
| List valueInfos; |
| }; |
| |
| class SampleValue : public Item |
| { |
| public: |
| SampleValue (void) : Item(TYPE_SAMPLEVALUE) {} |
| ~SampleValue (void) {} |
| |
| NumericValue value; |
| }; |
| |
| class Sample : public Item |
| { |
| public: |
| Sample (void) : Item(TYPE_SAMPLE) {} |
| ~Sample (void) {} |
| |
| List values; |
| }; |
| |
| class SampleList : public Item |
| { |
| public: |
| SampleList (void) : Item(TYPE_SAMPLELIST) {} |
| ~SampleList (void) {} |
| |
| std::string name; |
| std::string description; |
| SampleInfo sampleInfo; |
| List samples; |
| }; |
| |
| } // ri |
| } // xe |
| |
| #endif // _XETESTCASERESULT_HPP |