subsets are fixed: first is always FullSubset, second is always TIndexedSubset {2, 3} TComparisonFunc must accept two TTargetDataProviders and check their equality
| 925 | // subsets are fixed: first is always FullSubset, second is always TIndexedSubset<ui32>{2, 3} |
| 926 | // TComparisonFunc must accept two TTargetDataProviders and check their equality |
| 927 | void TestGetSubset( |
| 928 | const TVector<TTargetDataProviderPtr>& targetsVector, |
| 929 | const TVector<TTargetDataProviderPtr>& expectedSecondSubsets, |
| 930 | |
| 931 | // nondefault values used for checking TObjectsGroupingSubset with permutations inside group |
| 932 | TMaybe<TObjectsGroupingSubset> secondObjectsGroupingSubset = Nothing() |
| 933 | ) { |
| 934 | TVector<TArraySubsetIndexing<ui32>> subsetVector; |
| 935 | TVector<EObjectsOrder> subsetOrdersVector; |
| 936 | subsetVector.emplace_back(TFullSubset<ui32>(6)); |
| 937 | subsetOrdersVector.emplace_back(EObjectsOrder::Ordered); |
| 938 | subsetVector.emplace_back(TIndexedSubset<ui32>{2, 3}); |
| 939 | subsetOrdersVector.emplace_back(EObjectsOrder::Undefined); |
| 940 | |
| 941 | using TExpectedMapIndex = std::pair<size_t, size_t>; |
| 942 | |
| 943 | // (targetVector idx, subsetVector idx) -> expectedResult |
| 944 | THashMap<TExpectedMapIndex, TTargetDataProviderPtr> expectedResults; |
| 945 | |
| 946 | for (auto targetVectorIdx : xrange(targetsVector.size())) { |
| 947 | expectedResults[TExpectedMapIndex(targetVectorIdx, 0)] = targetsVector[targetVectorIdx]; |
| 948 | expectedResults[TExpectedMapIndex(targetVectorIdx, 1)] = expectedSecondSubsets[targetVectorIdx]; |
| 949 | } |
| 950 | |
| 951 | for (auto targetVectorIdx : xrange(targetsVector.size())) { |
| 952 | for (auto subsetIdx : xrange(subsetVector.size())) { |
| 953 | TObjectsGroupingSubset objectsGroupingSubset = |
| 954 | ((subsetIdx == 1) && secondObjectsGroupingSubset) ? |
| 955 | std::move(*secondObjectsGroupingSubset) |
| 956 | : GetSubset( |
| 957 | /* get object grouping from the first element of targetsVector[targetVectorIdx], |
| 958 | they all should be equal in all vector elements |
| 959 | */ |
| 960 | targetsVector[targetVectorIdx]->GetObjectsGrouping(), |
| 961 | TArraySubsetIndexing<ui32>(subsetVector[subsetIdx]), |
| 962 | subsetOrdersVector[subsetIdx] |
| 963 | ); |
| 964 | |
| 965 | NPar::TLocalExecutor localExecutor; |
| 966 | localExecutor.RunAdditionalThreads(2); |
| 967 | |
| 968 | TTargetDataProviderPtr subsetTarget = targetsVector[targetVectorIdx]->GetSubset( |
| 969 | objectsGroupingSubset, |
| 970 | &localExecutor |
| 971 | ); |
| 972 | |
| 973 | TTargetDataProviderPtr expectedSubsetTarget = |
| 974 | expectedResults[TExpectedMapIndex(targetVectorIdx, subsetIdx)]; |
| 975 | |
| 976 | UNIT_ASSERT_EQUAL(*subsetTarget, *expectedSubsetTarget); |
| 977 | } |
| 978 | } |
| 979 | } |
| 980 | |
| 981 | |
| 982 | Y_UNIT_TEST(MultiTarget_GetSubset) { |
no test coverage detected