diff --git a/src/optimizer/test/IndexBoundValueTest.cpp b/src/optimizer/test/IndexBoundValueTest.cpp index 810c502d5c319620768ecf2b76845872bb2c485d..dad22ee3f24314cbd5906847ea5c175ad94b81c4 100644 --- a/src/optimizer/test/IndexBoundValueTest.cpp +++ b/src/optimizer/test/IndexBoundValueTest.cpp @@ -189,6 +189,70 @@ TEST(IndexBoundValueTest, DateTest) { OptimizerUtils::boundValue(col, OP::LESS_THAN, Value(Date(2019, 1, 1)))); } +TEST(IndexBoundValueTest, TimeTest) { + meta::cpp2::ColumnDef col; + { + meta::cpp2::ColumnTypeDef typeDef; + typeDef.set_type(meta::cpp2::PropertyType::TIME); + col.set_type(std::move(typeDef)); + } + // TODO(shylock) us may limited to 999999 + Time maxT{24, 60, 60, std::numeric_limits<int32_t>::max()}; + + Time minT = Time(); + + EXPECT_EQ(maxT, OptimizerUtils::boundValue(col, OP::MAX, Value(maxT)).getTime()); + EXPECT_EQ(minT, OptimizerUtils::boundValue(col, OP::MIN, Value(maxT)).getTime()); + EXPECT_EQ(maxT, OptimizerUtils::boundValue(col, OP::GREATER_THAN, Value(maxT)).getTime()); + + { + Time actual, expect; + actual.microsec = std::numeric_limits<int32_t>::max(); + actual.sec = 60; + actual.minute = 60; + actual.hour = 22; + + expect.microsec = 1; + expect.sec = 1; + expect.minute = 1; + expect.hour = 23; + EXPECT_EQ(expect, + OptimizerUtils::boundValue(col, OP::GREATER_THAN, Value(actual)).getTime()); + } + { + Time actual, expect; + actual.microsec = std::numeric_limits<int32_t>::max(); + actual.sec = 34; + actual.minute = 60; + actual.hour = 24; + + expect.microsec = 1; + expect.sec = 35; + expect.minute = 60; + expect.hour = 24; + EXPECT_EQ(expect, + OptimizerUtils::boundValue(col, OP::GREATER_THAN, Value(actual)).getTime()); + } + { + Time expect = Time(); + EXPECT_EQ(expect, OptimizerUtils::boundValue(col, OP::LESS_THAN, Value(expect))); + } + { + Time actual, expect; + actual.microsec = std::numeric_limits<int32_t>::max(); + actual.sec = 34; + actual.minute = 60; + actual.hour = 24; + + expect.microsec = std::numeric_limits<int32_t>::max() - 1; + expect.sec = 34; + expect.minute = 60; + expect.hour = 24; + EXPECT_EQ(expect, + OptimizerUtils::boundValue(col, OP::LESS_THAN, Value(actual)).getTime()); + } +} + TEST(IndexBoundValueTest, DateTimeTest) { meta::cpp2::ColumnDef col; {