@@ -449,3 +449,69 @@ TEST(ConfigTests, CheckPersistentCacheEvictionThresholdTest) {
449
449
OnDiskEvicType::reset ();
450
450
TestConfig (0 );
451
451
}
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