Fix test_printf - any nan format is allowed by OpenCL C spec (#2298)

OpenCL C says that printing nan is implementation-defined for
floating-point numbers -
https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_C.html#printf-format-string
This commit is contained in:
Grzegorz Wawiorko
2025-04-01 22:44:39 +02:00
committed by GitHub
parent 5930d45fc6
commit 42b4bca510

View File

@@ -19,7 +19,7 @@
#include "test_printf.h" #include "test_printf.h"
#include <assert.h> #include <assert.h>
#include <CL/cl_half.h> #include <CL/cl_half.h>
#include <regex>
// Helpers for generating runtime reference results // Helpers for generating runtime reference results
static void intRefBuilder(printDataGenParameters&, char*, const size_t); static void intRefBuilder(printDataGenParameters&, char*, const size_t);
@@ -1743,10 +1743,14 @@ size_t verifyOutputBuffer(char *analysisBuffer,testCase* pTestCase,size_t testId
else if (pTestCase->_correctBuffer[testId] == "INF") else if (pTestCase->_correctBuffer[testId] == "INF")
return strcmp(analysisBuffer, "INF") return strcmp(analysisBuffer, "INF")
&& strcmp(analysisBuffer, "INFINITY"); && strcmp(analysisBuffer, "INFINITY");
else if (pTestCase->_correctBuffer[testId] == "nan") else if (pTestCase->_correctBuffer[testId] == "nan"
return strcmp(analysisBuffer, "nan") && strcmp(analysisBuffer, "-nan"); || pTestCase->_correctBuffer[testId] == "NAN")
else if (pTestCase->_correctBuffer[testId] == "NAN") {
return strcmp(analysisBuffer, "NAN") && strcmp(analysisBuffer, "-NAN"); std::string pattern =
R"(-?)" + pTestCase->_correctBuffer[testId] + R"((\(.*\))?)";
std::regex nanRegex(pattern);
return !std::regex_match(analysisBuffer, nanRegex);
}
return strcmp(analysisBuffer, pTestCase->_correctBuffer[testId].c_str()); return strcmp(analysisBuffer, pTestCase->_correctBuffer[testId].c_str());
} }