Skip to content

Commit f42fdb0

Browse files
committed
Fixed GenericColumnTest<ColumnDecimal>
1 parent b7a279e commit f42fdb0

File tree

3 files changed

+22
-5
lines changed

3 files changed

+22
-5
lines changed

ut/Column_ut.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ class GenericColumnTest : public testing::Test {
4242
return std::make_shared<ColumnFixedString>(12);
4343
} else if constexpr (std::is_same_v<ColumnType, ColumnDateTime64>) {
4444
return std::make_shared<ColumnDateTime64>(3);
45+
} else if constexpr (std::is_same_v<ColumnType, ColumnDecimal>) {
46+
return std::make_shared<ColumnDecimal>(10, 5);
4547
} else {
4648
return std::make_shared<ColumnType>();
4749
}
@@ -99,8 +101,8 @@ using ValueColumns = ::testing::Types<
99101
, ColumnString, ColumnFixedString
100102
, ColumnDate, ColumnDateTime, ColumnDateTime64
101103
, ColumnIPv4, ColumnIPv6
102-
// , ColumnInt128
103-
// , ColumnDecimal
104+
, ColumnInt128
105+
, ColumnDecimal
104106
, ColumnUUID
105107
>;
106108
TYPED_TEST_SUITE(GenericColumnTest, ValueColumns);

ut/value_generators.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,20 @@ std::vector<clickhouse::Int128> MakeInt128s() {
8484
};
8585
}
8686

87-
std::vector<clickhouse::Int128> MakeDecimals(size_t /*precision*/, size_t /*scale*/) {
88-
return MakeInt128s();
87+
std::vector<clickhouse::Int128> MakeDecimals(size_t /*precision*/, size_t scale) {
88+
const auto scale_multiplier = static_cast<size_t>(std::pow(10, scale));
89+
const auto rhs_value = 12345678910;
90+
91+
const std::vector<long long int> vals {0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536 - 1};
92+
93+
std::vector<clickhouse::Int128> result;
94+
result.reserve(vals.size());
95+
96+
std::transform(vals.begin(), vals.end(), std::back_inserter(result), [scale_multiplier, rhs_value](const auto& value) {
97+
return value * scale_multiplier + rhs_value % scale_multiplier;
98+
});
99+
100+
return result;
89101
}
90102

91103
std::string FooBarGenerator(size_t i) {

ut/value_generators.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,10 @@ struct FromVectorGenerator {
111111
FromVectorGenerator(std::vector<T> data_)
112112
: data(std::move(data_)),
113113
random_generator(0, 0, data.size() - 1)
114-
{}
114+
{
115+
if (data.size() == 0)
116+
throw std::runtime_error("can't generate values from empty vector");
117+
}
115118

116119
auto operator()(size_t pos) {
117120
return data[random_generator(pos)];

0 commit comments

Comments
 (0)