From a7e4efcd3912fbba77d93f1f7b99461f1faaae7b Mon Sep 17 00:00:00 2001 From: Marcin Hajder Date: Tue, 6 Aug 2024 13:49:35 +0200 Subject: [PATCH] Added printf test for long type cases --- test_conformance/printf/test_printf.cpp | 36 ++++++----- test_conformance/printf/test_printf.h | 2 + test_conformance/printf/util_printf.cpp | 85 +++++++++++++++++++++++-- 3 files changed, 103 insertions(+), 20 deletions(-) diff --git a/test_conformance/printf/test_printf.cpp b/test_conformance/printf/test_printf.cpp index 3d539ed572..f4f9933aeb 100644 --- a/test_conformance/printf/test_printf.cpp +++ b/test_conformance/printf/test_printf.cpp @@ -698,6 +698,13 @@ int doTest(cl_command_queue queue, cl_context context, return TEST_SKIPPED_ITSELF; } + if ((allTestCase[testId]->_type == TYPE_LONG) && !isLongSupported(device)) + { + log_info("Skipping long because non-embeded test or cles_khr_int64 " + "extension is not supported.\n"); + return TEST_SKIPPED_ITSELF; + } + auto& genParams = allTestCase[testId]->_genParameters; auto fail_count = s_test_fail; @@ -911,6 +918,12 @@ int test_int(cl_device_id deviceID, cl_context context, cl_command_queue queue, return doTest(gQueue, gContext, TYPE_INT, deviceID); } +int test_long(cl_device_id deviceID, cl_context context, cl_command_queue queue, + int num_elements) +{ + return doTest(gQueue, gContext, TYPE_LONG, deviceID); +} + int test_half(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) { @@ -1015,21 +1028,14 @@ int test_buffer_size(cl_device_id deviceID, cl_context context, } test_definition test_list[] = { - ADD_TEST(int), - ADD_TEST(half), - ADD_TEST(half_limits), - ADD_TEST(float), - ADD_TEST(float_limits), - ADD_TEST(octal), - ADD_TEST(unsigned), - ADD_TEST(hexadecimal), - ADD_TEST(char), - ADD_TEST(string), - ADD_TEST(format_string), - ADD_TEST(vector), - ADD_TEST(address_space), - ADD_TEST(buffer_size), - ADD_TEST(mixed_format_random), + ADD_TEST(int), ADD_TEST(long), + ADD_TEST(half), ADD_TEST(half_limits), + ADD_TEST(float), ADD_TEST(float_limits), + ADD_TEST(octal), ADD_TEST(unsigned), + ADD_TEST(hexadecimal), ADD_TEST(char), + ADD_TEST(string), ADD_TEST(format_string), + ADD_TEST(vector), ADD_TEST(address_space), + ADD_TEST(buffer_size), ADD_TEST(mixed_format_random), }; const int test_num = ARRAY_SIZE( test_list ); diff --git a/test_conformance/printf/test_printf.h b/test_conformance/printf/test_printf.h index a2cd9ed2be..db751aa686 100644 --- a/test_conformance/printf/test_printf.h +++ b/test_conformance/printf/test_printf.h @@ -46,6 +46,7 @@ enum PrintfTestType { TYPE_INT, + TYPE_LONG, TYPE_HALF, TYPE_HALF_LIMITS, TYPE_FLOAT, @@ -78,6 +79,7 @@ struct printDataGenParameters // Reference results - filled out at run-time static std::vector correctBufferInt; +static std::vector correctBufferLong; static std::vector correctBufferHalf; static std::vector correctBufferFloat; static std::vector correctBufferOctal; diff --git a/test_conformance/printf/util_printf.cpp b/test_conformance/printf/util_printf.cpp index 292d95b303..66e077343e 100644 --- a/test_conformance/printf/util_printf.cpp +++ b/test_conformance/printf/util_printf.cpp @@ -23,6 +23,7 @@ // Helpers for generating runtime reference results static void intRefBuilder(printDataGenParameters&, char*, const size_t); +static void longRefBuilder(printDataGenParameters&, char*, const size_t); static void halfRefBuilder(printDataGenParameters&, char* rResult, const size_t); static void floatRefBuilder(printDataGenParameters&, char* rResult, const size_t); @@ -105,6 +106,73 @@ testCase testCaseInt = { }; +//================================== + +// long + +//================================== + +//------------------------------------------------------ + +// [string] format | [string] int-data representation | + +//------------------------------------------------------ + +std::vector printLongGenParameters = { + + //(Minimum) fifteen-wide,default(right)-justified + + { { "%5d" }, "10000000000L" }, + + //(Minimum) fifteen-wide,left-justified + + { { "%-15d" }, "-10000000000L" }, + + //(Minimum) fifteen-wide,default(right)-justified,zero-filled + + { { "%015d" }, "10000000000L" }, + + //(Minimum) fifteen-wide,default(right)-justified,with sign + + { { "%+15d" }, "-10000000000L" }, + + //(Minimum) fifteen-wide ,left-justified,with sign + + { { "%-+15d" }, "10000000000L" }, + + //(Minimum) fifteen-digit(zero-filled in absent + // digits),default(right)-justified + + { { "%.15i" }, "10000000000L" }, + + //(Minimum)Sixteen-wide, fifteen-digit(zero-filled in absent + // digits),default(right)-justified + + { { "%-+16.15i" }, "-10000000000L" }, + +}; + +//----------------------------------------------- + +// test case for long | + +//----------------------------------------------- + +testCase testCaseLong = { + + TYPE_LONG, + + correctBufferLong, + + printLongGenParameters, + + longRefBuilder, + + klong + +}; + + //============================================== // half @@ -1134,11 +1202,11 @@ testCase testCaseMixedFormat = { TYPE_MIXED_FORMAT_RANDOM, //------------------------------------------------------------------------------- std::vector allTestCase = { - &testCaseInt, &testCaseHalf, &testCaseHalfLimits, - &testCaseFloat, &testCaseFloatLimits, &testCaseOctal, - &testCaseUnsigned, &testCaseHexadecimal, &testCaseChar, - &testCaseString, &testCaseFormatString, &testCaseVector, - &testCaseAddrSpace, &testCaseMixedFormat + &testCaseInt, &testCaseLong, &testCaseHalf, + &testCaseHalfLimits, &testCaseFloat, &testCaseFloatLimits, + &testCaseOctal, &testCaseUnsigned, &testCaseHexadecimal, + &testCaseChar, &testCaseString, &testCaseFormatString, + &testCaseVector, &testCaseAddrSpace, &testCaseMixedFormat }; //----------------------------------------- @@ -1255,6 +1323,13 @@ static void intRefBuilder(printDataGenParameters& params, char* refResult, const atoi(params.dataRepresentation)); } +static void longRefBuilder(printDataGenParameters& params, char* refResult, + const size_t refSize) +{ + snprintf(refResult, refSize, params.genericFormats.front().c_str(), + atoll(params.dataRepresentation)); +} + static void halfRefBuilder(printDataGenParameters& params, char* refResult, const size_t refSize) {