@@ -449,3 +449,69 @@ TEST(ConfigTests, CheckPersistentCacheEvictionThresholdTest) {
449449 OnDiskEvicType::reset ();
450450 TestConfig (0 );
451451}
452+
453+ // SYCL_PARALLEL_FOR_RANGE_ROUNDING_PARAMS accepts ...
454+ TEST (ConfigTests, CheckParallelForRangeRoundingParams) {
455+
456+ // Lambda to set SYCL_PARALLEL_FOR_RANGE_ROUNDING_PARAMS.
457+ auto SetRoundingParams = [](const char *value) {
458+ #ifdef _WIN32
459+ _putenv_s (" SYCL_PARALLEL_FOR_RANGE_ROUNDING_PARAMS" , value);
460+ #else
461+ setenv (" SYCL_PARALLEL_FOR_RANGE_ROUNDING_PARAMS" , value, 1 );
462+ #endif
463+ sycl::detail::readConfig (true );
464+ };
465+
466+ // Lambda to assert test parameters are as expected.
467+ auto AssertRoundingParams = [](size_t MF, size_t GF, size_t MR,
468+ const char *errMsg, bool ForceUpdate = false ) {
469+ size_t ResultMF = 0 , ResultGF = 0 , ResultMR = 0 ;
470+ SYCLConfig<SYCL_PARALLEL_FOR_RANGE_ROUNDING_PARAMS>::GetSettings (
471+ ResultMF, ResultGF, ResultMR, ForceUpdate);
472+ EXPECT_EQ (MF, ResultMF) << errMsg;
473+ EXPECT_EQ (GF, ResultGF) << errMsg;
474+ EXPECT_EQ (MR, ResultMR) << errMsg;
475+ };
476+
477+ // Lambda to test invalid input -- factors should remain unchanged.
478+ auto TestBadInput = [&](const char *value, const char *errMsg) {
479+ // Original factor values are stored as its own variable as size of size_t
480+ // varies depending on system and architecture:
481+ constexpr size_t MF = 1 , GF = 2 , MR = 3 ;
482+ size_t TestMF = MF, TestGF = GF, TestMR = MR;
483+ SetRoundingParams (value);
484+ SYCLConfig<SYCL_PARALLEL_FOR_RANGE_ROUNDING_PARAMS>::GetSettings (
485+ TestMF, TestGF, TestMR, true );
486+ EXPECT_EQ (TestMF, MF) << errMsg;
487+ EXPECT_EQ (TestGF, GF) << errMsg;
488+ EXPECT_EQ (TestMR, MR) << errMsg;
489+ };
490+
491+ // Test malformed input:
492+ constexpr char MalformedErr[] =
493+ " Rounding parameters should be ignored on malformed input" ;
494+ TestBadInput (" abc" , MalformedErr);
495+ TestBadInput (" 42" , MalformedErr);
496+ TestBadInput (" :7" , MalformedErr);
497+ TestBadInput (" 7:" , MalformedErr);
498+ TestBadInput (" 1:2" , MalformedErr);
499+ TestBadInput (" 1:2:" , MalformedErr);
500+ TestBadInput (" 1:abc:3" , MalformedErr);
501+
502+ // Test well-formed input, but bad parameters:
503+ constexpr char BadParamsErr[] = " Rounding parameters should be ignored if "
504+ " parameters provided are invalid" ;
505+ TestBadInput (" 0:1:2" , BadParamsErr);
506+ TestBadInput (" 1:0:2" , BadParamsErr);
507+ TestBadInput (" -1:2:3" , BadParamsErr);
508+ TestBadInput (" 1:2:31415926535897932384626433832795028841971" , BadParamsErr);
509+
510+ // Test valid values.
511+ SetRoundingParams (" 8:16:32" );
512+ AssertRoundingParams (8 , 16 , 32 ,
513+ " Failed to read rounding parameters properly" );
514+ SetRoundingParams (" 8:16:0" );
515+ AssertRoundingParams (8 , 16 , 0 , " 0 is a valid value for MinRange" ,
516+ /* ForceUpdate =*/ true );
517+ }
0 commit comments