From 42b4bca51048bcd5e1eccb4f7eda1d242f773d14 Mon Sep 17 00:00:00 2001 From: Grzegorz Wawiorko Date: Tue, 1 Apr 2025 22:44:39 +0200 Subject: [PATCH] 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 --- test_conformance/printf/util_printf.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/test_conformance/printf/util_printf.cpp b/test_conformance/printf/util_printf.cpp index 803f13ab..f982f15e 100644 --- a/test_conformance/printf/util_printf.cpp +++ b/test_conformance/printf/util_printf.cpp @@ -19,7 +19,7 @@ #include "test_printf.h" #include #include - +#include // Helpers for generating runtime reference results 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") return strcmp(analysisBuffer, "INF") && strcmp(analysisBuffer, "INFINITY"); - else if (pTestCase->_correctBuffer[testId] == "nan") - return strcmp(analysisBuffer, "nan") && strcmp(analysisBuffer, "-nan"); - else if (pTestCase->_correctBuffer[testId] == "NAN") - return strcmp(analysisBuffer, "NAN") && strcmp(analysisBuffer, "-NAN"); + else if (pTestCase->_correctBuffer[testId] == "nan" + || pTestCase->_correctBuffer[testId] == "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()); }