#include #include #include namespace NKikimr::NMiniKQL { using namespace NTest; Y_UNIT_TEST_SUITE(TMiniKQLBlockVariantNodeTest) { Y_UNIT_TEST(TupleVariant_Ui32_IntoIndex0) { using TVariant = std::variant; TVector data = {1u, 2u, 3u}; TVector expected = {TVariant{ui32{1u}}, TVariant{ui32{2u}}, TVariant{ui32{3u}}}; TBlockHelper().TestKernelFuzzied(data, expected, [](TSetup& setup, TRuntimeNode payloadValue) { auto& pb = *setup.PgmBuilder; return pb.BlockVariant(payloadValue, 0u, ConvertToMinikqlType(pb)); }); } Y_UNIT_TEST(TupleVariant_Ui64_IntoIndex1) { using TVariant = std::variant; TVector data = {10ull, 20ull, 30ull}; TVector expected = {TVariant{ui64{10ull}}, TVariant{ui64{20ull}}, TVariant{ui64{30ull}}}; TBlockHelper().TestKernelFuzzied(data, expected, [](TSetup& setup, TRuntimeNode payloadValue) { auto& pb = *setup.PgmBuilder; return pb.BlockVariant(payloadValue, 1u, ConvertToMinikqlType(pb)); }); } Y_UNIT_TEST(TupleVariant_StringAlternative) { using TVariant = std::variant; TVector data = {TString{"hello"}, TString{"world"}}; TVector expected = {TVariant{TString{"hello"}}, TVariant{TString{"world"}}}; TBlockHelper().TestKernelFuzzied(data, expected, [](TSetup& setup, TRuntimeNode payloadValue) { auto& pb = *setup.PgmBuilder; return pb.BlockVariant(payloadValue, 1u, ConvertToMinikqlType(pb)); }); } Y_UNIT_TEST(TupleVariant_TuplePayload) { using TInner = std::tuple; using TVariant = std::variant; TVector data = {TInner{ui32{1}, TString{"a"}}, TInner{ui32{2}, TString{"b"}}}; TVector expected = {TVariant{TInner{ui32{1}, TString{"a"}}}, TVariant{TInner{ui32{2}, TString{"b"}}}}; TBlockHelper().TestKernelFuzzied(data, expected, [](TSetup& setup, TRuntimeNode payloadValue) { auto& pb = *setup.PgmBuilder; return pb.BlockVariant(payloadValue, 0u, ConvertToMinikqlType(pb)); }); } Y_UNIT_TEST(StructVariant_ByMemberName_XMember) { using TVariant = TStructVariant, NTest::TStructMember<"y", ui64>>; TVector xData = {7u, 8u}; TVector> xExpected = {ui32{7u}, ui32{8u}}; TBlockHelper().TestKernelFuzzied(xData, xExpected, [](TSetup& setup, TRuntimeNode payloadValue) { auto& pb = *setup.PgmBuilder; auto varNode = pb.BlockVariant(payloadValue, NUdf::TStringRef("x"), ConvertToMinikqlType(pb)); return pb.BlockGuess(varNode, NUdf::TStringRef("x")); }); } Y_UNIT_TEST(StructVariant_ByMemberName_YMember) { using TVariant = TStructVariant, NTest::TStructMember<"y", ui64>>; TVector yData = {100ull, 200ull}; TVector> yExpected = {ui64{100ull}, ui64{200ull}}; TBlockHelper().TestKernelFuzzied(yData, yExpected, [](TSetup& setup, TRuntimeNode payloadValue) { auto& pb = *setup.PgmBuilder; auto varNode = pb.BlockVariant(payloadValue, NUdf::TStringRef("y"), ConvertToMinikqlType(pb)); return pb.BlockGuess(varNode, NUdf::TStringRef("y")); }); } } // Y_UNIT_TEST_SUITE(TMiniKQLBlockVariantNodeTest) } // namespace NKikimr::NMiniKQL