From 59aaa89599000f25fdd97582c356c8a495f9b1a0 Mon Sep 17 00:00:00 2001
From: Shylock Hg <33566796+Shylock-Hg@users.noreply.github.com>
Date: Mon, 12 Oct 2020 09:58:55 +0800
Subject: [PATCH] Tests/add case for time index bound (#307)

* Remove timezone field.

* Fix the value to string.

* Remove extra blank.

* Add more.

* Correct the typo.

* Add test cases for index bound.

* Correct the error.

Co-authored-by: dutor <440396+dutor@users.noreply.github.com>
---
 src/optimizer/test/IndexBoundValueTest.cpp | 64 ++++++++++++++++++++++
 1 file changed, 64 insertions(+)

diff --git a/src/optimizer/test/IndexBoundValueTest.cpp b/src/optimizer/test/IndexBoundValueTest.cpp
index 810c502d..dad22ee3 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;
     {
-- 
GitLab