Skip to content

Commit d343428

Browse files
committed
add ut
1 parent 79f311f commit d343428

File tree

2 files changed

+27
-37
lines changed

2 files changed

+27
-37
lines changed

ut/Column_ut.cpp

Lines changed: 13 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -376,25 +376,18 @@ TYPED_TEST(GenericColumnTest, Swap) {
376376
#endif
377377

378378
TYPED_TEST(GenericColumnTest, ReserveAndCapacity) {
379-
if constexpr (
380-
// TODO(venemkov): test that ColumnType has Reserve() and Capacity() methods
381-
is_one_of_v<typename TestFixture::ColumnType,
382-
// Only types that support Reserve() and Capacity() methods
383-
ColumnUInt8,
384-
ColumnUInt16,
385-
ColumnUInt32,
386-
ColumnUInt64,
387-
ColumnInt8,
388-
ColumnInt16,
389-
ColumnInt32,
390-
ColumnInt64,
391-
ColumnInt128,
392-
ColumnFloat32,
393-
ColumnFloat64,
394-
ColumnDate,
395-
ColumnDate32,
396-
ColumnDateTime>) {
397-
379+
using column_type = typename TestFixture::ColumnType;
380+
auto [column0, values] = this->MakeColumnWithValues(2);
381+
auto values_copy = values;
382+
EXPECT_NO_THROW(column0->Reserve(0u));
383+
EXPECT_EQ(2u, column0->Size());
384+
EXPECT_TRUE(CompareRecursive(values, values_copy));
385+
386+
auto column1 = this->MakeColumn();
387+
column1->Reserve(10u);
388+
EXPECT_EQ(0u, column1->Size());
389+
390+
if constexpr (has_method_Reserve_v<column_type> && has_method_Capacity_v<column_type>) {
398391
auto column = this->MakeColumn();
399392
EXPECT_EQ(0u, column->Capacity());
400393
EXPECT_NO_THROW(column->Reserve(100u));
@@ -408,24 +401,7 @@ TYPED_TEST(GenericColumnTest, ReserveAndCapacity) {
408401

409402

410403
TYPED_TEST(GenericColumnTest, GetWritableData) {
411-
if constexpr (
412-
// TODO(venemkov): test that ColumnType has GetWritableData() method
413-
is_one_of_v<typename TestFixture::ColumnType,
414-
// Only types that support GetWritableData() method
415-
ColumnUInt8,
416-
ColumnUInt16,
417-
ColumnUInt32,
418-
ColumnUInt64,
419-
ColumnInt8,
420-
ColumnInt16,
421-
ColumnInt32,
422-
ColumnInt64,
423-
ColumnInt128,
424-
ColumnFloat32,
425-
ColumnFloat64,
426-
ColumnDate,
427-
ColumnDate32,
428-
ColumnDateTime>) {
404+
if constexpr (has_method_GetWritableData_v<typename TestFixture::ColumnType>) {
429405
auto [column, values] = this->MakeColumnWithValues(111);
430406
// Do conversion from time_t to internal representation, similar to what ColumnDate and ColumnDate32 do
431407
if constexpr (is_one_of_v<typename TestFixture::ColumnType,

ut/utils_meta.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,17 @@ struct is_one_of<F, S, T...> {
6666

6767
template <typename F, typename S, typename... T>
6868
inline constexpr bool is_one_of_v = is_one_of<F, S, T...>::value;
69+
70+
71+
#define HAS_METHOD(FUN) \
72+
template <typename T, class U = void> \
73+
struct has_method_##FUN : std::false_type {}; \
74+
template <typename T> \
75+
struct has_method_##FUN<T, std::enable_if_t<std::is_member_function_pointer_v<decltype(&T::FUN)>>> \
76+
: std::true_type {}; \
77+
template <class T> \
78+
constexpr bool has_method_##FUN##_v = has_method_##FUN<T>::value;
79+
80+
HAS_METHOD(Reserve);
81+
HAS_METHOD(Capacity);
82+
HAS_METHOD(GetWritableData);

0 commit comments

Comments
 (0)