zclllyybb commented on code in PR #44083: URL: https://github.com/apache/doris/pull/44083#discussion_r1858203619
########## be/test/vec/core/block_test.cpp: ########## @@ -693,6 +693,1801 @@ void serialize_and_deserialize_test_array() { } } +TEST(BlockTest, Constructor) { + // Test empty block constructor + { + vectorized::Block block; + EXPECT_EQ(0, block.columns()); + EXPECT_EQ(0, block.rows()); + EXPECT_TRUE(block.empty()); + } + + // Test constructor with regular Int32 columns + { + auto col = vectorized::ColumnVector<Int32>::create(); + vectorized::DataTypePtr type(std::make_shared<vectorized::DataTypeInt32>()); + vectorized::Block block({{col->get_ptr(), type, "col1"}, {col->get_ptr(), type, "col2"}}); + EXPECT_EQ(2, block.columns()); + EXPECT_EQ(0, block.rows()); + EXPECT_TRUE(block.empty()); + } + + // Test constructor with const column + { + auto col = vectorized::ColumnVector<Int32>::create(); + col->insert_value(42); + auto const_col = vectorized::ColumnConst::create(col->get_ptr(), 10); + vectorized::DataTypePtr type(std::make_shared<vectorized::DataTypeInt32>()); + vectorized::Block block({{const_col->get_ptr(), type, "const_col"}}); + EXPECT_EQ(1, block.columns()); + EXPECT_EQ(10, block.rows()); + } + + // Test constructor with nullable column + { + auto col = vectorized::ColumnVector<Int32>::create(); + auto nullable_col = vectorized::make_nullable(col->get_ptr()); + auto nullable_type = + vectorized::make_nullable(std::make_shared<vectorized::DataTypeInt32>()); + vectorized::Block block({{nullable_col, nullable_type, "nullable_col"}}); + EXPECT_EQ(1, block.columns()); + } + + // Test constructor with mixed column types + { + vectorized::ColumnsWithTypeAndName columns; + + // Regular column + auto regular_col = vectorized::ColumnVector<Int32>::create(); + auto regular_type = std::make_shared<vectorized::DataTypeInt32>(); + columns.emplace_back(regular_col->get_ptr(), regular_type, "regular_col"); + + // Const column + auto const_base = vectorized::ColumnVector<Int32>::create(); + const_base->insert_value(42); + auto const_col = vectorized::ColumnConst::create(const_base->get_ptr(), 10); + columns.emplace_back(const_col->get_ptr(), regular_type, "const_col"); + + // Nullable column + auto nullable_col = vectorized::make_nullable(regular_col->get_ptr()); + auto nullable_type = vectorized::make_nullable(regular_type); + columns.emplace_back(nullable_col, nullable_type, "nullable_col"); + + vectorized::Block block(columns); + EXPECT_EQ(3, block.columns()); + } + + // Test constructor with empty columns + { + vectorized::ColumnsWithTypeAndName columns; + vectorized::Block block(columns); + EXPECT_EQ(0, block.columns()); + EXPECT_TRUE(block.empty()); + } + + // Test constructor with nullptr column (should handle gracefully) + { + auto type = std::make_shared<vectorized::DataTypeInt32>(); + vectorized::Block block({{nullptr, type, "null_col"}}); + EXPECT_EQ(1, block.columns()); + EXPECT_EQ(0, block.rows()); + } +} + +TEST(BlockTest, BasicOperations) { + // Test with empty block + { + vectorized::Block empty_block; + EXPECT_NO_THROW(empty_block.clear()); + EXPECT_NO_THROW(empty_block.clear_names()); + EXPECT_NO_THROW(empty_block.reserve(0)); + } + + // Test with regular columns + { + vectorized::Block block; + auto col1 = vectorized::ColumnVector<Int32>::create(); + auto col2 = vectorized::ColumnVector<Int32>::create(); + auto col3 = vectorized::ColumnVector<Int32>::create(); + vectorized::DataTypePtr type(std::make_shared<vectorized::DataTypeInt32>()); + + // Test reserve with different sizes + EXPECT_NO_THROW(block.reserve(0)); + EXPECT_NO_THROW(block.reserve(100)); + block.reserve(3); + block.insert({col1->get_ptr(), type, "col1"}); + block.insert({col2->get_ptr(), type, "col2"}); + block.insert({col3->get_ptr(), type, "col3"}); + EXPECT_EQ(3, block.columns()); + + // Test clear_names + block.clear_names(); + EXPECT_EQ("", block.get_by_position(0).name); Review Comment: I think all these functions should have exception test. such as `EXPECT_DEATH(empty_block.get_by_potition(1))` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org