// Copyright 2023 PingCAP, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include #include namespace DB::tests { #define ASSERT_INT_VALUE(v) ASSERT_EQ(getValueByRowV1(v), v) TEST(RowV1Suite, IntValue) { ASSERT_INT_VALUE(std::numeric_limits::max()); ASSERT_INT_VALUE(std::numeric_limits::min()); ASSERT_INT_VALUE(std::numeric_limits::max()); ASSERT_INT_VALUE(std::numeric_limits::min()); ASSERT_INT_VALUE(static_cast(static_cast(std::numeric_limits::max()) + Int16(1))); ASSERT_INT_VALUE(static_cast(static_cast(std::numeric_limits::min()) - Int16(1))); ASSERT_INT_VALUE(static_cast(static_cast(std::numeric_limits::max()) + UInt16(1))); ASSERT_INT_VALUE(static_cast(static_cast(std::numeric_limits::min()) - UInt16(1))); ASSERT_INT_VALUE(std::numeric_limits::max()); ASSERT_INT_VALUE(std::numeric_limits::min()); ASSERT_INT_VALUE(std::numeric_limits::max()); ASSERT_INT_VALUE(std::numeric_limits::min()); ASSERT_INT_VALUE(static_cast(static_cast(std::numeric_limits::max()) + Int32(1))); ASSERT_INT_VALUE(static_cast(static_cast(std::numeric_limits::min()) - Int32(1))); ASSERT_INT_VALUE(static_cast(static_cast(std::numeric_limits::max()) + UInt32(1))); ASSERT_INT_VALUE(static_cast(static_cast(std::numeric_limits::min()) - UInt32(1))); ASSERT_INT_VALUE(std::numeric_limits::max()); ASSERT_INT_VALUE(std::numeric_limits::min()); ASSERT_INT_VALUE(std::numeric_limits::max()); ASSERT_INT_VALUE(std::numeric_limits::min()); ASSERT_INT_VALUE(static_cast(static_cast(std::numeric_limits::max()) + Int64(1))); ASSERT_INT_VALUE(static_cast(static_cast(std::numeric_limits::min()) - Int64(1))); ASSERT_INT_VALUE(static_cast(static_cast(std::numeric_limits::max()) + UInt64(1))); ASSERT_INT_VALUE(static_cast(static_cast(std::numeric_limits::min()) - UInt64(1))); ASSERT_INT_VALUE(std::numeric_limits::max()); ASSERT_INT_VALUE(std::numeric_limits::min()); ASSERT_INT_VALUE(std::numeric_limits::max()); ASSERT_INT_VALUE(std::numeric_limits::min()); } #define ASSERT_FLOAT_VALUE(f) ASSERT_DOUBLE_EQ(getValueByRowV1(f), f) TEST(RowV1Suite, FloatValue) { ASSERT_FLOAT_VALUE(Float32(0)); ASSERT_FLOAT_VALUE(std::numeric_limits::min()); ASSERT_FLOAT_VALUE(std::numeric_limits::max()); ASSERT_FLOAT_VALUE(Float64(0)); ASSERT_FLOAT_VALUE(std::numeric_limits::min()); ASSERT_FLOAT_VALUE(std::numeric_limits::max()); } #define ASSERT_STRING_VALUE(b, s) ASSERT_EQ(getValueByRowV1(s), s) TEST(RowV1Suite, StringValue) { ASSERT_STRING_VALUE(false, String("")); ASSERT_STRING_VALUE(false, String("aaa")); ASSERT_STRING_VALUE(false, String(std::numeric_limits::max(), 'a')); ASSERT_STRING_VALUE(true, String(std::numeric_limits::max() + 1, 'a')); } #define ASSERT_DECIMAL_VALUE(d) ASSERT_EQ(getValueByRowV1(d), d) TEST(RowV1Suite, DecimalValue) { ASSERT_DECIMAL_VALUE(DecimalField(ToDecimal(12345678910ULL, 4), 4)); ASSERT_DECIMAL_VALUE(DecimalField(ToDecimal(1234.56789, 5), 5)); ASSERT_DECIMAL_VALUE(DecimalField(ToDecimal(1234.56789, 2), 2)); } } // namespace DB::tests