#include #include #include namespace NYT { namespace { //////////////////////////////////////////////////////////////////////////////// TEST(TRangeHelpersTest, ZipMutable) { std::vector vectorA(4); std::vector vectorB = {1, 2, 3}; for (auto [a, b] : ZipMutable(vectorA, vectorB)) { *a = *b + 1; } auto expectedA = std::vector{2, 3, 4, 0}; EXPECT_EQ(expectedA, vectorA); } //////////////////////////////////////////////////////////////////////////////// TEST(TRangeHelpersTest, RangeToVector) { auto data = std::vector{"A", "B", "C", "D"}; auto range = std::ranges::views::transform(data, [] (std::string x) { return "_" + x; }); std::initializer_list expectedValues{"_A", "_B", "_C", "_D"}; EXPECT_EQ(std::vector(expectedValues), RangeTo>(range)); using TListStrings = std::list; EXPECT_EQ(TListStrings(expectedValues), RangeTo(range)); } TEST(TRangeHelpersTest, RangeToString) { auto data = "_sample_"sv; auto range = std::ranges::views::filter(data, [] (char x) { return x != '_'; }); auto expectedData = "sample"sv; EXPECT_EQ(std::string(expectedData), RangeTo(range)); EXPECT_EQ(TString(expectedData), RangeTo(range)); } //////////////////////////////////////////////////////////////////////////////// TEST(TRangeHelpersTest, MonadicRangeToVector) { auto data = std::vector{"A", "B", "C", "D"}; auto range = std::ranges::views::transform(data, [] (std::string x) { return "_" + x; }); std::initializer_list expectedValues{"_A", "_B", "_C", "_D"}; EXPECT_EQ(std::vector(expectedValues), range | RangeTo>()); using TListStrings = std::list; EXPECT_EQ(TListStrings(expectedValues), range | RangeTo()); } TEST(TRangeHelpersTest, MonadicRangeToString) { auto data = "_sample_"sv; auto range = std::ranges::views::filter(data, [] (char x) { return x != '_'; }); auto expectedData = "sample"sv; EXPECT_EQ(std::string(expectedData), range | RangeTo()); EXPECT_EQ(TString(expectedData), range | RangeTo()); } //////////////////////////////////////////////////////////////////////////////// TEST(TRangeHelpersTest, Fold) { EXPECT_EQ(0, FoldRange(std::vector{}, std::plus{})); EXPECT_EQ(6, FoldRange(std::vector{1, 2, 3}, std::plus{})); EXPECT_EQ(5, FoldRange( std::vector>{{1, 2}, {3, 4, 5}}, std::plus{}, std::ranges::ssize)); } //////////////////////////////////////////////////////////////////////////////// TEST(TRangeHelpersTest, StaticRangeToVector) { EXPECT_EQ(StaticRangeTo>(1), std::vector{1}); auto expected = std::vector{1, 2, 10}; auto result = StaticRangeTo>(1, 2, 10); EXPECT_EQ(result, expected); } TEST(TRangeHelpersTest, StaticRangeToVectorMoveOnly) { auto result = StaticRangeTo>>(std::make_unique(1), std::make_unique(2)); ASSERT_EQ(std::ssize(result), 2); EXPECT_EQ(*result[0], 1); EXPECT_EQ(*result[1], 2); } TEST(TRangeHelpersTest, TStaticRangeToVector) { EXPECT_EQ(static_cast>(TStaticRange{1}), std::vector{1}); auto expected = std::vector{1, 2, 10}; std::vector result = TStaticRange{1, 2, 10}; EXPECT_EQ(result, expected); } TEST(TRangeHelpersTest, TStaticRangeToVectorMoveOnly) { std::vector> result = TStaticRange(std::make_unique(1), std::make_unique(2)); ASSERT_EQ(std::ssize(result), 2); EXPECT_EQ(*result[0], 1); EXPECT_EQ(*result[1], 2); } //////////////////////////////////////////////////////////////////////////////// } // namespace } // namespace NYT