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

Reply via email to