// // Copyright (c) 2017 The Khronos Group Inc. // // 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. // #ifndef TESTPRINTF_INCLUDED_H #define TESTPRINTF_INCLUDED_H #include "../../test_common/harness/compat.h" #include #include #ifdef __APPLE__ #include #include #else #include #include #endif // Enable the test to be used with ATF #if USE_ATF // export BUILD_WITH_ATF=1 #include #define test_start() ATFTestStart() #define log_info ATFLogInfo #define log_error ATFLogError #define test_finish() ATFTestFinish() #else #define test_start() #define log_info printf #define log_error printf #define test_finish() #endif // USE_ATF #define ANALYSIS_BUFFER_SIZE 256 //----------------------------------------- // Definitions and initializations //----------------------------------------- //----------------------------------------- // Types //----------------------------------------- enum Type { TYPE_INT, TYPE_FLOAT, TYPE_OCTAL, TYPE_UNSIGNED, TYPE_HEXADEC, TYPE_CHAR, TYPE_STRING, TYPE_VECTOR, TYPE_ADDRESS_SPACE, TYPE_COUNT }; struct printDataGenParameters { const char* genericFormat; const char* dataRepresentation; const char* vectorFormatFlag; const char* vectorFormatSpecifier; const char* dataType; const char* vectorSize; const char* addrSpaceArgumentTypeQualifier; const char* addrSpaceVariableTypeQualifier; const char* addrSpaceParameter; const char* addrSpacePAdd; }; //----------------------------------------- //Test Case //----------------------------------------- struct testCase { unsigned int _testNum; //test number enum Type _type; //(data)type for test //const char** _strPrint; //auxiliary data to build the code for kernel source const char** _correctBuffer; //look-up table for correct results for printf struct printDataGenParameters* _genParameters; //auxiliary data to build the code for kernel source }; extern const char* strType[]; extern testCase* allTestCase[]; size_t verifyOutputBuffer(char *analysisBuffer,testCase* pTestCase,size_t testId,cl_ulong pAddr = 0); // Helpful macros // The next three functions check on different return values. Returns -1 // if the check failed #define checkErr(err, msg) \ if (err != CL_SUCCESS) { \ log_error("%s failed errcode:%d\n", msg, err); \ return -1; \ } #define checkZero(val, msg) \ if (val == 0) { \ log_error("%s failed errcode:%d\n", msg, err); \ return -1; \ } #define checkNull(ptr, msg) \ if (!ptr) { \ log_error("%s failed\n", msg); \ return TEST_FAIL; \ } // When a helper returns a negative one, we want to return from main // with negative one. This helper prevents me from having to write // this multiple time #define checkHelperErr(err) \ if (err == -1) { \ return err; \ } #endif // TESTSPRINTF_INCLUDED_H