| 405 | |
| 406 | |
| 407 | void TestSubsetFeatures( |
| 408 | TMaybe<TArraySubsetIndexing<ui32>> subsetForGetSubset, |
| 409 | TMaybe<EObjectsOrder> objectsOrderForGetSubset, |
| 410 | const TObjectsGrouping& expectedObjectsGrouping, |
| 411 | const TCommonObjectsData& commonData, |
| 412 | |
| 413 | // SubsetIndexing is not checked, only TRawObjectsDataProvider's fields |
| 414 | const TCommonObjectsData& expectedCommonData, |
| 415 | const TVector<TVector<float>>& srcFloatFeatures, |
| 416 | const TVector<TVector<float>>& subsetFloatFeatures, |
| 417 | const TVector<THashMap<ui32, TString>>& catFeaturesHashToString, |
| 418 | const TVector<TVector<ui32>>& srcCatFeatures, |
| 419 | const TVector<TVector<ui32>>& subsetCatFeatures |
| 420 | ) { |
| 421 | NPar::TLocalExecutor localExecutor; |
| 422 | localExecutor.RunAdditionalThreads(2); |
| 423 | |
| 424 | // (use float, use cat) pairs |
| 425 | for (auto useFeatureTypes : { |
| 426 | std::make_pair(true, false), |
| 427 | std::make_pair(false, true), |
| 428 | std::make_pair(true, true) |
| 429 | }) { |
| 430 | auto objectsDataProvider = GetMaybeSubsetDataProvider( |
| 431 | CreateRawObjectsDataProvider( |
| 432 | srcFloatFeatures, |
| 433 | srcCatFeatures, |
| 434 | catFeaturesHashToString, |
| 435 | commonData, |
| 436 | useFeatureTypes, |
| 437 | &localExecutor |
| 438 | ), |
| 439 | subsetForGetSubset, |
| 440 | objectsOrderForGetSubset, |
| 441 | &localExecutor |
| 442 | ); |
| 443 | |
| 444 | ui32 featureCount = 0; |
| 445 | TVector<ui32> catFeatureIndices; |
| 446 | |
| 447 | UNIT_ASSERT_EQUAL(expectedObjectsGrouping, *objectsDataProvider.GetObjectsGrouping()); |
| 448 | |
| 449 | if (useFeatureTypes.first) { |
| 450 | featureCount += srcFloatFeatures.size(); |
| 451 | |
| 452 | for (auto i : xrange(subsetFloatFeatures.size())) { |
| 453 | UNIT_ASSERT( |
| 454 | Equal<float>( |
| 455 | *(*objectsDataProvider.GetFloatFeature(i))->ExtractValues(&localExecutor), |
| 456 | subsetFloatFeatures[i] |
| 457 | ) |
| 458 | ); |
| 459 | } |
| 460 | } |
| 461 | if (useFeatureTypes.second) { |
| 462 | catFeatureIndices.resize(srcCatFeatures.size()); |
| 463 | std::iota(catFeatureIndices.begin(), catFeatureIndices.end(), featureCount); |
| 464 |
no test coverage detected