diff options
| author | vvvv <[email protected]> | 2025-10-09 12:25:18 +0300 |
|---|---|---|
| committer | vvvv <[email protected]> | 2025-10-09 12:57:17 +0300 |
| commit | cb77d014972b2cdb27d2e6d979fc3a2772b27ad4 (patch) | |
| tree | 7f3bcd8ce71c6bd0f3ccc11e31b9f665475b819e /yql/essentials/minikql/computation/mkql_computation_node_dict_ut.cpp | |
| parent | d58a8990d353b051c27e1069141117fdfde64358 (diff) | |
YQL-20086 minikql
commit_hash:e96f7390db5fcbe7e9f64f898141a263ad522daa
Diffstat (limited to 'yql/essentials/minikql/computation/mkql_computation_node_dict_ut.cpp')
| -rw-r--r-- | yql/essentials/minikql/computation/mkql_computation_node_dict_ut.cpp | 120 |
1 files changed, 59 insertions, 61 deletions
diff --git a/yql/essentials/minikql/computation/mkql_computation_node_dict_ut.cpp b/yql/essentials/minikql/computation/mkql_computation_node_dict_ut.cpp index ae2e64c77cd..7c940247b21 100644 --- a/yql/essentials/minikql/computation/mkql_computation_node_dict_ut.cpp +++ b/yql/essentials/minikql/computation/mkql_computation_node_dict_ut.cpp @@ -32,8 +32,8 @@ struct TSetup { THolder<IComputationGraph> BuildGraph(TRuntimeNode pgm, const std::vector<TNode*>& entryPoints = std::vector<TNode*>()) { Explorer.Walk(pgm.GetNode(), *Env); TComputationPatternOpts opts(Alloc.Ref(), *Env, GetBuiltinFactory(), - FunctionRegistry.Get(), - NUdf::EValidateMode::None, NUdf::EValidatePolicy::Exception, "OFF", EGraphPerProcess::Multi); + FunctionRegistry.Get(), + NUdf::EValidateMode::None, NUdf::EValidatePolicy::Exception, "OFF", EGraphPerProcess::Multi); Pattern = MakeComputationPattern(Explorer, pgm, entryPoints, opts); TComputationOptsFull compOpts = opts.ToComputationOptions(*RandomProvider, *TimeProvider); return Pattern->Clone(compOpts); @@ -50,75 +50,73 @@ struct TSetup { TExploringNodeVisitor Explorer; IComputationPattern::TPtr Pattern; }; -} +} // namespace Y_UNIT_TEST_SUITE(TestCompactMultiDict) { - Y_UNIT_TEST(TestIterate) { - TScopedAlloc alloc(__LOCATION__); +Y_UNIT_TEST(TestIterate) { + TScopedAlloc alloc(__LOCATION__); - TSetup setup(alloc); + TSetup setup(alloc); - const std::vector<std::pair<ui32, std::vector<ui32>>> items = {{1, {1, 2}}, {2, {1}}, {3, {0}}, {6, {1, 7}}}; + const std::vector<std::pair<ui32, std::vector<ui32>>> items = {{1, {1, 2}}, {2, {1}}, {3, {0}}, {6, {1, 7}}}; - TProgramBuilder& pgmBuilder = *setup.PgmBuilder; - TVector<TRuntimeNode> rItems; - for (auto& [k, vv]: items) { - for (auto& v: vv) { - rItems.push_back(pgmBuilder.NewTuple({pgmBuilder.NewDataLiteral<ui32>(k), pgmBuilder.NewDataLiteral<ui32>(v)})); - } + TProgramBuilder& pgmBuilder = *setup.PgmBuilder; + TVector<TRuntimeNode> rItems; + for (auto& [k, vv] : items) { + for (auto& v : vv) { + rItems.push_back(pgmBuilder.NewTuple({pgmBuilder.NewDataLiteral<ui32>(k), pgmBuilder.NewDataLiteral<ui32>(v)})); } - auto ui32Type = pgmBuilder.NewDataType(NUdf::TDataType<ui32>::Id); - auto list = pgmBuilder.NewList(pgmBuilder.NewTupleType({ui32Type, ui32Type}), rItems); + } + auto ui32Type = pgmBuilder.NewDataType(NUdf::TDataType<ui32>::Id); + auto list = pgmBuilder.NewList(pgmBuilder.NewTupleType({ui32Type, ui32Type}), rItems); - auto dict = pgmBuilder.ToHashedDict(list, /*all*/true, - [&pgmBuilder](TRuntimeNode item) { return pgmBuilder.Nth(item, 0); }, - [&pgmBuilder](TRuntimeNode item) { return pgmBuilder.Nth(item, 1); }, - /*isCompact*/true, - items.size()); + auto dict = pgmBuilder.ToHashedDict(list, /*all*/ true, + [&pgmBuilder](TRuntimeNode item) { return pgmBuilder.Nth(item, 0); }, + [&pgmBuilder](TRuntimeNode item) { return pgmBuilder.Nth(item, 1); }, + /*isCompact*/ true, + items.size()); - auto graph = setup.BuildGraph(dict, {}); - NUdf::TUnboxedValue res = graph->GetValue(); + auto graph = setup.BuildGraph(dict, {}); + NUdf::TUnboxedValue res = graph->GetValue(); - std::vector<ui32> keyVals; - for (NUdf::TUnboxedValue keys = res.GetKeysIterator(), v; keys.Next(v);) { - keyVals.push_back(v.Get<ui32>()); - } - UNIT_ASSERT_VALUES_EQUAL(keyVals.size(), items.size()); - std::sort(keyVals.begin(), keyVals.end()); - UNIT_ASSERT( - std::equal(keyVals.begin(), keyVals.end(), items.begin(), - [](ui32 l, const std::pair<ui32, std::vector<ui32>>& r) { return l == r.first; } - ) - ); - - std::vector<std::vector<ui32>> origPayloads; - for (auto& [k, vv]: items) { - origPayloads.push_back(vv); - std::sort(origPayloads.back().begin(), origPayloads.back().end()); - } - std::sort(origPayloads.begin(), origPayloads.end()); - - std::vector<std::vector<ui32>> payloadVals; - for (NUdf::TUnboxedValue payloads = res.GetPayloadsIterator(), v; payloads.Next(v);) { - payloadVals.emplace_back(); - for (NUdf::TUnboxedValue i = v.GetListIterator(), p; i.Next(p);) { - payloadVals.back().push_back(p.Get<ui32>()); - } - std::sort(payloadVals.back().begin(), payloadVals.back().end()); + std::vector<ui32> keyVals; + for (NUdf::TUnboxedValue keys = res.GetKeysIterator(), v; keys.Next(v);) { + keyVals.push_back(v.Get<ui32>()); + } + UNIT_ASSERT_VALUES_EQUAL(keyVals.size(), items.size()); + std::sort(keyVals.begin(), keyVals.end()); + UNIT_ASSERT( + std::equal(keyVals.begin(), keyVals.end(), items.begin(), + [](ui32 l, const std::pair<ui32, std::vector<ui32>>& r) { return l == r.first; })); + + std::vector<std::vector<ui32>> origPayloads; + for (auto& [k, vv] : items) { + origPayloads.push_back(vv); + std::sort(origPayloads.back().begin(), origPayloads.back().end()); + } + std::sort(origPayloads.begin(), origPayloads.end()); + + std::vector<std::vector<ui32>> payloadVals; + for (NUdf::TUnboxedValue payloads = res.GetPayloadsIterator(), v; payloads.Next(v);) { + payloadVals.emplace_back(); + for (NUdf::TUnboxedValue i = v.GetListIterator(), p; i.Next(p);) { + payloadVals.back().push_back(p.Get<ui32>()); } - std::sort(payloadVals.begin(), payloadVals.end()); - UNIT_ASSERT_VALUES_EQUAL(origPayloads, payloadVals); - - std::vector<std::pair<ui32, std::vector<ui32>>> vals; - for (NUdf::TUnboxedValue values = res.GetDictIterator(), k, payloads; values.NextPair(k, payloads);) { - vals.emplace_back(k.Get<ui32>(), std::vector<ui32>{}); - for (NUdf::TUnboxedValue i = payloads.GetListIterator(), p; i.Next(p);) { - vals.back().second.push_back(p.Get<ui32>()); - } - std::sort(vals.back().second.begin(), vals.back().second.end()); + std::sort(payloadVals.back().begin(), payloadVals.back().end()); + } + std::sort(payloadVals.begin(), payloadVals.end()); + UNIT_ASSERT_VALUES_EQUAL(origPayloads, payloadVals); + + std::vector<std::pair<ui32, std::vector<ui32>>> vals; + for (NUdf::TUnboxedValue values = res.GetDictIterator(), k, payloads; values.NextPair(k, payloads);) { + vals.emplace_back(k.Get<ui32>(), std::vector<ui32>{}); + for (NUdf::TUnboxedValue i = payloads.GetListIterator(), p; i.Next(p);) { + vals.back().second.push_back(p.Get<ui32>()); } - UNIT_ASSERT_VALUES_EQUAL(items, vals); + std::sort(vals.back().second.begin(), vals.back().second.end()); } + UNIT_ASSERT_VALUES_EQUAL(items, vals); } -} -} +} // Y_UNIT_TEST_SUITE(TestCompactMultiDict) +} // namespace NMiniKQL +} // namespace NKikimr |
