@@ -224,15 +224,15 @@ TEST(ColumnsCase, DateTime64_Swap) {
224224 }
225225
226226 auto column2 = std::make_shared<ColumnDateTime64>(6ul );
227+ const auto single_dt64_value = 1'234'567'890'123'456'789ll ;
228+ column2->Append (single_dt64_value);
227229 column->Swap (*column2);
228230
229231 // Validate that all items were transferred to column2.
230- ASSERT_EQ (0u , column->Size ());
231- ASSERT_EQ (data.size (), column2->Size ());
232-
233- // Clearing doesn't affects precision value.
234- ASSERT_EQ (6ul , column->GetPrecision ());
232+ ASSERT_EQ (1u , column->Size ());
233+ EXPECT_EQ (single_dt64_value, column->At (0 ));
235234
235+ ASSERT_EQ (data.size (), column2->Size ());
236236 for (size_t i = 0 ; i < data.size (); ++i) {
237237 ASSERT_EQ (data[i], column2->At (i));
238238 }
@@ -289,6 +289,23 @@ TEST(ColumnsCase, DateTime64_Slice) {
289289 }
290290}
291291
292+ TEST (ColumnsCase, DateTime64_Slice_OUTOFBAND) {
293+ // Slice() shouldn't throw exceptions on invalid parameters, just clamp values to the nearest bounds.
294+
295+ auto column = std::make_shared<ColumnDateTime64>(6ul );
296+
297+ // Non-Empty slice on empty column
298+ EXPECT_EQ (0u , column->Slice (0 , 10 )->Size ());
299+
300+ const auto data = MakeDateTime64s ();
301+ for (const auto & v : data) {
302+ column->Append (v);
303+ }
304+
305+ EXPECT_EQ (column->Slice (0 , data.size () + 1 )->Size (), data.size ());
306+ EXPECT_EQ (column->Slice (data.size () + 1 , 1 )->Size (), 0u );
307+ }
308+
292309TEST (ColumnsCase, DateTime64_Swap_EXCEPTION) {
293310 auto column1 = std::make_shared<ColumnDateTime64>(6ul );
294311 auto column2 = std::make_shared<ColumnDateTime64>(0ul );
0 commit comments