// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you 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 <gtest/gtest.h>

#include "arrow/util/logging_internal.h"
#include "gandiva/execution_context.h"
#include "gandiva/precompiled/testing.h"
#include "gandiva/precompiled/time_constants.h"
#include "gandiva/precompiled/types.h"

namespace gandiva {

TEST(TestTime, TestCastDate) {
  ExecutionContext context;
  int64_t context_ptr = reinterpret_cast<int64_t>(&context);

  EXPECT_EQ(castDATE_utf8(context_ptr, "1967-12-1", 9), -65836800000);
  EXPECT_EQ(castDATE_utf8(context_ptr, "2067-12-1", 9), 3089923200000);

  EXPECT_EQ(castDATE_utf8(context_ptr, "7-12-1", 6), 1196467200000);
  EXPECT_EQ(castDATE_utf8(context_ptr, "67-12-1", 7), 3089923200000);
  EXPECT_EQ(castDATE_utf8(context_ptr, "067-12-1", 8), 3089923200000);
  EXPECT_EQ(castDATE_utf8(context_ptr, "0067-12-1", 9), -60023980800000);
  EXPECT_EQ(castDATE_utf8(context_ptr, "00067-12-1", 10), -60023980800000);
  EXPECT_EQ(castDATE_utf8(context_ptr, "167-12-1", 8), -56868307200000);

  EXPECT_EQ(castDATE_utf8(context_ptr, "1972-12-1", 9), 92016000000);
  EXPECT_EQ(castDATE_utf8(context_ptr, "72-12-1", 7), 92016000000);

  EXPECT_EQ(castDATE_utf8(context_ptr, "1972222222", 10), 0);
  EXPECT_EQ(context.get_error(), "Not a valid date value 1972222222");
  context.Reset();

  EXPECT_EQ(castDATE_utf8(context_ptr, "blahblah", 8), 0);
  EXPECT_EQ(castDATE_utf8(context_ptr, "1967-12-1bb", 11), -65836800000);

  EXPECT_EQ(castDATE_utf8(context_ptr, "67-12-1", 7), 3089923200000);
  EXPECT_EQ(castDATE_utf8(context_ptr, "67-1-1", 6), 3061065600000);
  EXPECT_EQ(castDATE_utf8(context_ptr, "71-1-1", 6), 31536000000);
  EXPECT_EQ(castDATE_utf8(context_ptr, "71-45-1", 7), 0);
  EXPECT_EQ(castDATE_utf8(context_ptr, "71-12-XX", 8), 0);

  EXPECT_EQ(castDATE_date32(1), 86400000);
}

TEST(TestTime, TestCastTimestamp) {
  ExecutionContext context;
  int64_t context_ptr = reinterpret_cast<int64_t>(&context);

  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "1967-12-1", 9), -65836800000);
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2067-12-1", 9), 3089923200000);

  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "7-12-1", 6), 1196467200000);
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "67-12-1", 7), 3089923200000);
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "067-12-1", 8), 3089923200000);
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "0067-12-1", 9), -60023980800000);
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "00067-12-1", 10), -60023980800000);
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "167-12-1", 8), -56868307200000);

  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "1972-12-1", 9), 92016000000);
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "72-12-1", 7), 92016000000);

  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "1972-12-1", 9), 92016000000);
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "67-12-1", 7), 3089923200000);
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "67-1-1", 6), 3061065600000);
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "71-1-1", 6), 31536000000);

  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-09-23 9:45:30", 18), 969702330000);
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-09-23 9:45:30.920", 22), 969702330920);

  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-09-23 9:45:30.920 +08:00", 29),
            969673530920);
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-09-23 9:45:30.920 -11:45", 29),
            969744630920);
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "65-03-04 00:20:40.920 +00:30", 28),
            3003349840920);
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "1932-05-18 11:30:00.920 +11:30", 30),
            -1187308799080);
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "1857-02-11 20:31:40.920 -05:30", 30),
            -3562264699080);
  EXPECT_EQ(castTIMESTAMP_date64(
                castDATE_utf8(context_ptr, "2000-09-23 9:45:30.920 +08:00", 29)),
            castTIMESTAMP_utf8(context_ptr, "2000-09-23 0:00:00.000 +00:00", 29));

  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-09-23 9:45:30.1", 20),
            castTIMESTAMP_utf8(context_ptr, "2000-09-23 9:45:30", 18) + 100);

  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-09-23 9:45:30.10", 20),
            castTIMESTAMP_utf8(context_ptr, "2000-09-23 9:45:30", 18) + 100);

  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-09-23 9:45:30.100", 20),
            castTIMESTAMP_utf8(context_ptr, "2000-09-23 9:45:30", 18) + 100);

  // error cases
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-01-01 24:00:00", 19), 0);
  EXPECT_EQ(context.get_error(),
            "Not a valid time for timestamp value 2000-01-01 24:00:00");
  context.Reset();

  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-01-01 00:60:00", 19), 0);
  EXPECT_EQ(context.get_error(),
            "Not a valid time for timestamp value 2000-01-01 00:60:00");
  context.Reset();

  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-01-01 00:00:100", 20), 0);
  EXPECT_EQ(context.get_error(),
            "Not a valid time for timestamp value 2000-01-01 00:00:100");
  context.Reset();

  // Test truncation of subseconds to 3 digits (milliseconds)
  // "2000-01-01 00:00:00.0001" should truncate to "2000-01-01 00:00:00.000"
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-01-01 00:00:00.0001", 24),
            castTIMESTAMP_utf8(context_ptr, "2000-01-01 00:00:00.000", 23));

  // "2000-01-01 00:00:00.1000" should truncate to "2000-01-01 00:00:00.100"
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-01-01 00:00:00.1000", 24),
            castTIMESTAMP_utf8(context_ptr, "2000-01-01 00:00:00.100", 23));

  // "2000-01-01 00:00:00.123456789" should truncate to "2000-01-01 00:00:00.123"
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-01-01 00:00:00.123456789", 29),
            castTIMESTAMP_utf8(context_ptr, "2000-01-01 00:00:00.123", 23));

  // "2000-01-01 00:00:00.1999" should truncate to "2000-01-01 00:00:00.199"
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-01-01 00:00:00.1999", 24),
            castTIMESTAMP_utf8(context_ptr, "2000-01-01 00:00:00.199", 23));

  // "2000-01-01 00:00:00.1994" should truncate to "2000-01-01 00:00:00.199"
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-01-01 00:00:00.1994", 24),
            castTIMESTAMP_utf8(context_ptr, "2000-01-01 00:00:00.199", 23));
}

TEST(TestTime, TestCastTimeUtf8) {
  ExecutionContext context;
  auto context_ptr = reinterpret_cast<int64_t>(&context);

  EXPECT_EQ(castTIME_utf8(context_ptr, "9:45:30", 7), 35130000);
  EXPECT_EQ(castTIME_utf8(context_ptr, "9:45:30.920", 11), 35130920);

  EXPECT_EQ(castTIME_utf8(context_ptr, "9:45:30.1", 9),
            castTIME_utf8(context_ptr, "9:45:30", 7) + 100);

  EXPECT_EQ(castTIME_utf8(context_ptr, "9:45:30.10", 10),
            castTIME_utf8(context_ptr, "9:45:30", 7) + 100);

  EXPECT_EQ(castTIME_utf8(context_ptr, "9:45:30.100", 11),
            castTIME_utf8(context_ptr, "9:45:30", 7) + 100);

  // error cases
  EXPECT_EQ(castTIME_utf8(context_ptr, "24H00H00", 8), 0);
  EXPECT_EQ(context.get_error(), "Invalid character in time 24H00H00");
  context.Reset();

  EXPECT_EQ(castTIME_utf8(context_ptr, "24:00:00", 8), 0);
  EXPECT_EQ(context.get_error(), "Not a valid time value 24:00:00");
  context.Reset();

  EXPECT_EQ(castTIME_utf8(context_ptr, "00:60:00", 8), 0);
  EXPECT_EQ(context.get_error(), "Not a valid time value 00:60:00");
  context.Reset();

  EXPECT_EQ(castTIME_utf8(context_ptr, "00:00:100", 9), 0);
  EXPECT_EQ(context.get_error(), "Not a valid time value 00:00:100");
  context.Reset();

  // Test truncation of subseconds to 3 digits (milliseconds)
  // "00:00:00.0001" should truncate to "00:00:00.000"
  EXPECT_EQ(castTIME_utf8(context_ptr, "00:00:00.0001", 13),
            castTIME_utf8(context_ptr, "00:00:00.000", 12));

  // "00:00:00.1000" should truncate to "00:00:00.100"
  EXPECT_EQ(castTIME_utf8(context_ptr, "00:00:00.1000", 13),
            castTIME_utf8(context_ptr, "00:00:00.100", 12));

  // "9:45:30.123456789" should truncate to "9:45:30.123"
  EXPECT_EQ(castTIME_utf8(context_ptr, "9:45:30.123456789", 17),
            castTIME_utf8(context_ptr, "9:45:30.123", 11));

  // "00:00:00.1999" should truncate to "00:00:00.199"
  EXPECT_EQ(castTIME_utf8(context_ptr, "00:00:00.1999", 13),
            castTIME_utf8(context_ptr, "00:00:00.199", 12));

  // "00:00:00.1994" should truncate to "00:00:00.199"
  EXPECT_EQ(castTIME_utf8(context_ptr, "00:00:00.1994", 13),
            castTIME_utf8(context_ptr, "00:00:00.199", 12));
}

#ifndef _WIN32

// TODO(wesm): ARROW-4495. Need to address TZ database issues on Windows

TEST(TestTime, TestCastTimestampWithTZ) {
  ExecutionContext context;
  int64_t context_ptr = reinterpret_cast<int64_t>(&context);

  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-09-23 9:45:30.920 Canada/Pacific", 37),
            969727530920);
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2012-02-28 23:30:59 Asia/Kolkata", 32),
            1330452059000);
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "1923-10-07 03:03:03 America/New_York", 36),
            -1459094217000);
}

TEST(TestTime, TestCastTimestampErrors) {
  ExecutionContext context;
  int64_t context_ptr = reinterpret_cast<int64_t>(&context);

  // error cases
  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "20000923", 8), 0);
  EXPECT_EQ(context.get_error(), "Not a valid day for timestamp value 20000923");
  context.Reset();

  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-09-2b", 10), 0);
  EXPECT_EQ(context.get_error(),
            "Invalid timestamp or unknown zone for timestamp value 2000-09-2b");
  context.Reset();

  EXPECT_EQ(castTIMESTAMP_utf8(context_ptr, "2000-09-23 9:45:30.920 Unknown/Zone", 35),
            0);
  EXPECT_EQ(context.get_error(),
            "Invalid timestamp or unknown zone for timestamp value 2000-09-23 "
            "9:45:30.920 Unknown/Zone");
  context.Reset();
}

#endif

TEST(TestTime, TestExtractTime) {
  // 10:20:33
  gdv_int32 time_as_millis_in_day = 37233000;

  EXPECT_EQ(extractHour_time32(time_as_millis_in_day), 10);
  EXPECT_EQ(extractMinute_time32(time_as_millis_in_day), 20);
  EXPECT_EQ(extractSecond_time32(time_as_millis_in_day), 33);
}

TEST(TestTime, TestDateDiff) {
  gdv_timestamp ts1 = StringToTimestamp("2019-06-30 00:00:00");
  gdv_timestamp ts2 = StringToTimestamp("2019-05-31 00:00:00");
  EXPECT_EQ(datediff_timestamp_timestamp(ts1, ts2), 30);

  ts1 = StringToTimestamp("2019-06-30 00:00:00");
  ts2 = StringToTimestamp("2019-02-28 00:00:00");
  EXPECT_EQ(datediff_timestamp_timestamp(ts1, ts2), 122);

  ts1 = StringToTimestamp("2019-06-30 00:00:00");
  ts2 = StringToTimestamp("2019-03-31 00:00:00");
  EXPECT_EQ(datediff_timestamp_timestamp(ts1, ts2), 91);

  ts1 = StringToTimestamp("2019-06-30 00:00:00");
  ts2 = StringToTimestamp("2019-06-30 00:00:00");
  EXPECT_EQ(datediff_timestamp_timestamp(ts1, ts2), 0);

  ts1 = StringToTimestamp("2019-06-30 00:00:00");
  ts2 = StringToTimestamp("2019-07-01 00:00:00");
  EXPECT_EQ(datediff_timestamp_timestamp(ts1, ts2), -1);

  ts1 = StringToTimestamp("2019-06-30 00:00:00");
  ts2 = StringToTimestamp("2019-07-31 00:00:00");
  EXPECT_EQ(datediff_timestamp_timestamp(ts1, ts2), -31);

  ts1 = StringToTimestamp("2019-06-30 00:00:00");
  ts2 = StringToTimestamp("2019-07-30 00:00:00");
  EXPECT_EQ(datediff_timestamp_timestamp(ts1, ts2), -30);

  ts1 = StringToTimestamp("2019-06-30 00:00:00");
  ts2 = StringToTimestamp("2019-07-29 00:00:00");
  EXPECT_EQ(datediff_timestamp_timestamp(ts1, ts2), -29);
}

TEST(TestTime, TestTimestampDiffMonth) {
  gdv_timestamp ts1 = StringToTimestamp("2019-06-30 00:00:00");
  gdv_timestamp ts2 = StringToTimestamp("2019-05-31 00:00:00");
  EXPECT_EQ(timestampdiffMonth_timestamp_timestamp(ts1, ts2), -1);

  ts1 = StringToTimestamp("2019-06-30 00:00:00");
  ts2 = StringToTimestamp("2019-02-28 00:00:00");
  EXPECT_EQ(timestampdiffMonth_timestamp_timestamp(ts1, ts2), -4);

  ts1 = StringToTimestamp("2019-06-30 00:00:00");
  ts2 = StringToTimestamp("2019-03-31 00:00:00");
  EXPECT_EQ(timestampdiffMonth_timestamp_timestamp(ts1, ts2), -3);

  ts1 = StringToTimestamp("2019-06-30 00:00:00");
  ts2 = StringToTimestamp("2019-06-30 00:00:00");
  EXPECT_EQ(timestampdiffMonth_timestamp_timestamp(ts1, ts2), 0);

  ts1 = StringToTimestamp("2019-06-30 00:00:00");
  ts2 = StringToTimestamp("2019-07-31 00:00:00");
  EXPECT_EQ(timestampdiffMonth_timestamp_timestamp(ts1, ts2), 1);

  ts1 = StringToTimestamp("2019-06-30 00:00:00");
  ts2 = StringToTimestamp("2019-07-30 00:00:00");
  EXPECT_EQ(timestampdiffMonth_timestamp_timestamp(ts1, ts2), 1);

  ts1 = StringToTimestamp("2019-06-30 00:00:00");
  ts2 = StringToTimestamp("2019-07-29 00:00:00");
  EXPECT_EQ(timestampdiffMonth_timestamp_timestamp(ts1, ts2), 0);
}

TEST(TestTime, TestExtractTimestamp) {
  gdv_timestamp ts = StringToTimestamp("1970-05-02 10:20:33");

  EXPECT_EQ(extractMillennium_timestamp(ts), 2);
  EXPECT_EQ(extractCentury_timestamp(ts), 20);
  EXPECT_EQ(extractDecade_timestamp(ts), 197);
  EXPECT_EQ(extractYear_timestamp(ts), 1970);
  EXPECT_EQ(extractDoy_timestamp(ts), 122);
  EXPECT_EQ(extractMonth_timestamp(ts), 5);
  EXPECT_EQ(extractDow_timestamp(ts), 7);
  EXPECT_EQ(extractDay_timestamp(ts), 2);
  EXPECT_EQ(extractHour_timestamp(ts), 10);
  EXPECT_EQ(extractMinute_timestamp(ts), 20);
  EXPECT_EQ(extractSecond_timestamp(ts), 33);
}

TEST(TestTime, TimeStampTrunc) {
  EXPECT_EQ(date_trunc_Second_date64(StringToTimestamp("2015-05-05 10:20:34")),
            StringToTimestamp("2015-05-05 10:20:34"));
  EXPECT_EQ(date_trunc_Minute_date64(StringToTimestamp("2015-05-05 10:20:34")),
            StringToTimestamp("2015-05-05 10:20:00"));
  EXPECT_EQ(date_trunc_Hour_date64(StringToTimestamp("2015-05-05 10:20:34")),
            StringToTimestamp("2015-05-05 10:00:00"));
  EXPECT_EQ(date_trunc_Day_date64(StringToTimestamp("2015-05-05 10:20:34")),
            StringToTimestamp("2015-05-05 00:00:00"));
  EXPECT_EQ(date_trunc_Month_date64(StringToTimestamp("2015-05-05 10:20:34")),
            StringToTimestamp("2015-05-01 00:00:00"));
  EXPECT_EQ(date_trunc_Quarter_date64(StringToTimestamp("2015-05-05 10:20:34")),
            StringToTimestamp("2015-04-01 00:00:00"));
  EXPECT_EQ(date_trunc_Year_date64(StringToTimestamp("2015-05-05 10:20:34")),
            StringToTimestamp("2015-01-01 00:00:00"));
  EXPECT_EQ(date_trunc_Decade_date64(StringToTimestamp("2015-05-05 10:20:34")),
            StringToTimestamp("2010-01-01 00:00:00"));
  EXPECT_EQ(date_trunc_Century_date64(StringToTimestamp("2115-05-05 10:20:34")),
            StringToTimestamp("2101-01-01 00:00:00"));
  EXPECT_EQ(date_trunc_Millennium_date64(StringToTimestamp("2115-05-05 10:20:34")),
            StringToTimestamp("2001-01-01 00:00:00"));

  // truncate week going to previous year
  EXPECT_EQ(date_trunc_Week_timestamp(StringToTimestamp("2011-01-01 10:10:10")),
            StringToTimestamp("2010-12-27 00:00:00"));
  EXPECT_EQ(date_trunc_Week_timestamp(StringToTimestamp("2011-01-02 10:10:10")),
            StringToTimestamp("2010-12-27 00:00:00"));
  EXPECT_EQ(date_trunc_Week_timestamp(StringToTimestamp("2011-01-03 10:10:10")),
            StringToTimestamp("2011-01-03 00:00:00"));
  EXPECT_EQ(date_trunc_Week_timestamp(StringToTimestamp("2011-01-04 10:10:10")),
            StringToTimestamp("2011-01-03 00:00:00"));
  EXPECT_EQ(date_trunc_Week_timestamp(StringToTimestamp("2011-01-05 10:10:10")),
            StringToTimestamp("2011-01-03 00:00:00"));
  EXPECT_EQ(date_trunc_Week_timestamp(StringToTimestamp("2011-01-06 10:10:10")),
            StringToTimestamp("2011-01-03 00:00:00"));
  EXPECT_EQ(date_trunc_Week_timestamp(StringToTimestamp("2011-01-07 10:10:10")),
            StringToTimestamp("2011-01-03 00:00:00"));
  EXPECT_EQ(date_trunc_Week_timestamp(StringToTimestamp("2011-01-08 10:10:10")),
            StringToTimestamp("2011-01-03 00:00:00"));
  EXPECT_EQ(date_trunc_Week_timestamp(StringToTimestamp("2011-01-09 10:10:10")),
            StringToTimestamp("2011-01-03 00:00:00"));

  // truncate week for Feb in a leap year
  EXPECT_EQ(date_trunc_Week_timestamp(StringToTimestamp("2000-02-28 10:10:10")),
            StringToTimestamp("2000-02-28 00:00:00"));
  EXPECT_EQ(date_trunc_Week_timestamp(StringToTimestamp("2000-02-29 10:10:10")),
            StringToTimestamp("2000-02-28 00:00:00"));
  EXPECT_EQ(date_trunc_Week_timestamp(StringToTimestamp("2000-03-01 10:10:10")),
            StringToTimestamp("2000-02-28 00:00:00"));
  EXPECT_EQ(date_trunc_Week_timestamp(StringToTimestamp("2000-03-02 10:10:10")),
            StringToTimestamp("2000-02-28 00:00:00"));
  EXPECT_EQ(date_trunc_Week_timestamp(StringToTimestamp("2000-03-03 10:10:10")),
            StringToTimestamp("2000-02-28 00:00:00"));
  EXPECT_EQ(date_trunc_Week_timestamp(StringToTimestamp("2000-03-04 10:10:10")),
            StringToTimestamp("2000-02-28 00:00:00"));
  EXPECT_EQ(date_trunc_Week_timestamp(StringToTimestamp("2000-03-05 10:10:10")),
            StringToTimestamp("2000-02-28 00:00:00"));
  EXPECT_EQ(date_trunc_Week_timestamp(StringToTimestamp("2000-03-06 10:10:10")),
            StringToTimestamp("2000-03-06 00:00:00"));

  // Test dates before epoch (1970-01-01)
  EXPECT_EQ(date_trunc_Second_date64(StringToTimestamp("1969-12-31 23:45:15")),
            StringToTimestamp("1969-12-31 23:45:15"));
  EXPECT_EQ(date_trunc_Minute_date64(StringToTimestamp("1969-12-31 23:45:15")),
            StringToTimestamp("1969-12-31 23:45:00"));
  EXPECT_EQ(date_trunc_Hour_date64(StringToTimestamp("1969-12-31 23:45:15")),
            StringToTimestamp("1969-12-31 23:00:00"));
  EXPECT_EQ(date_trunc_Day_date64(StringToTimestamp("1969-12-31 23:45:15")),
            StringToTimestamp("1969-12-31 00:00:00"));
  EXPECT_EQ(date_trunc_Month_date64(StringToTimestamp("1969-12-31 23:45:15")),
            StringToTimestamp("1969-12-01 00:00:00"));
  EXPECT_EQ(date_trunc_Quarter_date64(StringToTimestamp("1969-12-31 23:45:15")),
            StringToTimestamp("1969-10-01 00:00:00"));
  EXPECT_EQ(date_trunc_Year_date64(StringToTimestamp("1969-12-31 23:45:15")),
            StringToTimestamp("1969-01-01 00:00:00"));
  EXPECT_EQ(date_trunc_Decade_date64(StringToTimestamp("1969-12-31 23:45:15")),
            StringToTimestamp("1960-01-01 00:00:00"));

  // Test date further in the past
  EXPECT_EQ(date_trunc_Second_date64(StringToTimestamp("1930-05-15 12:34:56")),
            StringToTimestamp("1930-05-15 12:34:56"));
  EXPECT_EQ(date_trunc_Minute_date64(StringToTimestamp("1930-05-15 12:34:56")),
            StringToTimestamp("1930-05-15 12:34:00"));
  EXPECT_EQ(date_trunc_Hour_date64(StringToTimestamp("1930-05-15 12:34:56")),
            StringToTimestamp("1930-05-15 12:00:00"));
  EXPECT_EQ(date_trunc_Day_date64(StringToTimestamp("1930-05-15 12:34:56")),
            StringToTimestamp("1930-05-15 00:00:00"));
  EXPECT_EQ(date_trunc_Day_date64(StringToTimestamp("1940-02-29 12:00:00")),
            StringToTimestamp("1940-02-29 00:00:00"));
  EXPECT_EQ(date_trunc_Month_date64(StringToTimestamp("1930-05-15 12:34:56")),
            StringToTimestamp("1930-05-01 00:00:00"));
  EXPECT_EQ(date_trunc_Quarter_date64(StringToTimestamp("1930-05-15 12:34:56")),
            StringToTimestamp("1930-04-01 00:00:00"));
  EXPECT_EQ(date_trunc_Year_date64(StringToTimestamp("1930-05-15 12:34:56")),
            StringToTimestamp("1930-01-01 00:00:00"));
  EXPECT_EQ(date_trunc_Decade_date64(StringToTimestamp("1931-05-15 12:34:56")),
            StringToTimestamp("1930-01-01 00:00:00"));
  EXPECT_EQ(date_trunc_Century_date64(StringToTimestamp("1930-05-15 12:34:56")),
            StringToTimestamp("1901-01-01 00:00:00"));
}

TEST(TestTime, TimeStampAdd) {
  EXPECT_EQ(
      timestampaddSecond_int32_timestamp(30, StringToTimestamp("2000-05-01 10:20:34")),
      StringToTimestamp("2000-05-01 10:21:04"));

  EXPECT_EQ(
      timestampaddSecond_timestamp_int32(StringToTimestamp("2000-05-01 10:20:34"), 30),
      StringToTimestamp("2000-05-01 10:21:04"));

  EXPECT_EQ(
      timestampaddMinute_int64_timestamp(-30, StringToTimestamp("2000-05-01 10:20:34")),
      StringToTimestamp("2000-05-01 09:50:34"));

  EXPECT_EQ(
      timestampaddMinute_timestamp_int64(StringToTimestamp("2000-05-01 10:20:34"), -30),
      StringToTimestamp("2000-05-01 09:50:34"));

  EXPECT_EQ(
      timestampaddHour_int32_timestamp(20, StringToTimestamp("2000-05-01 10:20:34")),
      StringToTimestamp("2000-05-02 06:20:34"));

  EXPECT_EQ(
      timestampaddHour_timestamp_int32(StringToTimestamp("2000-05-01 10:20:34"), 20),
      StringToTimestamp("2000-05-02 06:20:34"));

  EXPECT_EQ(
      timestampaddDay_int64_timestamp(-35, StringToTimestamp("2000-05-01 10:20:34")),
      StringToTimestamp("2000-03-27 10:20:34"));

  EXPECT_EQ(
      timestampaddDay_timestamp_int64(StringToTimestamp("2000-05-01 10:20:34"), -35),
      StringToTimestamp("2000-03-27 10:20:34"));

  EXPECT_EQ(timestampaddWeek_int32_timestamp(4, StringToTimestamp("2000-05-01 10:20:34")),
            StringToTimestamp("2000-05-29 10:20:34"));

  EXPECT_EQ(timestampaddWeek_timestamp_int32(StringToTimestamp("2000-05-01 10:20:34"), 4),
            StringToTimestamp("2000-05-29 10:20:34"));

  EXPECT_EQ(timestampaddWeek_timestamp_int32(StringToTimestamp("2000-05-01 10:20:34"), 4),
            StringToTimestamp("2000-05-29 10:20:34"));

  EXPECT_EQ(
      timestampaddMonth_int64_timestamp(10, StringToTimestamp("2000-05-01 10:20:34")),
      StringToTimestamp("2001-03-01 10:20:34"));

  EXPECT_EQ(
      timestampaddMonth_int64_timestamp(1, StringToTimestamp("2000-01-31 10:20:34")),
      StringToTimestamp("2000-2-29 10:20:34"));
  EXPECT_EQ(
      timestampaddMonth_int64_timestamp(13, StringToTimestamp("2001-01-31 10:20:34")),
      StringToTimestamp("2002-02-28 10:20:34"));

  EXPECT_EQ(
      timestampaddMonth_int64_timestamp(11, StringToTimestamp("2000-05-31 10:20:34")),
      StringToTimestamp("2001-04-30 10:20:34"));

  EXPECT_EQ(
      timestampaddMonth_timestamp_int64(StringToTimestamp("2000-05-31 10:20:34"), 11),
      StringToTimestamp("2001-04-30 10:20:34"));

  EXPECT_EQ(
      timestampaddQuarter_int32_timestamp(-2, StringToTimestamp("2000-05-01 10:20:34")),
      StringToTimestamp("1999-11-01 10:20:34"));

  EXPECT_EQ(timestampaddYear_int64_timestamp(2, StringToTimestamp("2000-05-01 10:20:34")),
            StringToTimestamp("2002-05-01 10:20:34"));

  EXPECT_EQ(
      timestampaddQuarter_int32_timestamp(-5, StringToTimestamp("2000-05-01 10:20:34")),
      StringToTimestamp("1999-02-01 10:20:34"));
  EXPECT_EQ(
      timestampaddQuarter_int32_timestamp(-6, StringToTimestamp("2000-05-01 10:20:34")),
      StringToTimestamp("1998-11-01 10:20:34"));

  // date_add
  EXPECT_EQ(date_add_int32_timestamp(7, StringToTimestamp("2000-05-01 00:00:00")),
            StringToTimestamp("2000-05-08 00:00:00"));

  EXPECT_EQ(add_int32_timestamp(4, StringToTimestamp("2000-05-01 00:00:00")),
            StringToTimestamp("2000-05-05 00:00:00"));

  EXPECT_EQ(add_int64_timestamp(7, StringToTimestamp("2000-05-01 00:00:00")),
            StringToTimestamp("2000-05-08 00:00:00"));

  EXPECT_EQ(date_add_int64_timestamp(4, StringToTimestamp("2000-05-01 00:00:00")),
            StringToTimestamp("2000-05-05 00:00:00"));

  EXPECT_EQ(date_add_int64_timestamp(4, StringToTimestamp("2000-02-27 00:00:00")),
            StringToTimestamp("2000-03-02 00:00:00"));

  EXPECT_EQ(add_date64_int64(StringToTimestamp("2000-02-27 00:00:00"), 4),
            StringToTimestamp("2000-03-02 00:00:00"));

  // date_sub
  EXPECT_EQ(date_sub_timestamp_int32(StringToTimestamp("2000-05-01 00:00:00"), 7),
            StringToTimestamp("2000-04-24 00:00:00"));

  EXPECT_EQ(subtract_timestamp_int32(StringToTimestamp("2000-05-01 00:00:00"), -7),
            StringToTimestamp("2000-05-08 00:00:00"));

  EXPECT_EQ(date_diff_timestamp_int64(StringToTimestamp("2000-05-01 00:00:00"), 365),
            StringToTimestamp("1999-05-02 00:00:00"));

  EXPECT_EQ(date_diff_timestamp_int64(StringToTimestamp("2000-03-01 00:00:00"), 1),
            StringToTimestamp("2000-02-29 00:00:00"));

  EXPECT_EQ(date_diff_timestamp_int64(StringToTimestamp("2000-02-29 00:00:00"), 365),
            StringToTimestamp("1999-03-01 00:00:00"));
}

// test cases from http://www.staff.science.uu.nl/~gent0113/calendar/isocalendar.htm
TEST(TestTime, TestExtractWeek) {
  std::vector<std::string> data;

  // A type
  // Jan 1, 2 and 3
  data.push_back("2006-01-01 10:10:10");
  data.push_back("52");
  data.push_back("2006-01-02 10:10:10");
  data.push_back("1");
  data.push_back("2006-01-03 10:10:10");
  data.push_back("1");
  // middle, Monday and Sunday
  data.push_back("2006-04-24 10:10:10");
  data.push_back("17");
  data.push_back("2006-04-30 10:10:10");
  data.push_back("17");
  // Dec 29-31
  data.push_back("2006-12-29 10:10:10");
  data.push_back("52");
  data.push_back("2006-12-30 10:10:10");
  data.push_back("52");
  data.push_back("2006-12-31 10:10:10");
  data.push_back("52");
  // B(C) type
  // Jan 1, 2 and 3
  data.push_back("2011-01-01 10:10:10");
  data.push_back("52");
  data.push_back("2011-01-02 10:10:10");
  data.push_back("52");
  data.push_back("2011-01-03 10:10:10");
  data.push_back("1");
  // middle, Monday and Sunday
  data.push_back("2011-07-18 10:10:10");
  data.push_back("29");
  data.push_back("2011-07-24 10:10:10");
  data.push_back("29");
  // Dec 29-31
  data.push_back("2011-12-29 10:10:10");
  data.push_back("52");
  data.push_back("2011-12-30 10:10:10");
  data.push_back("52");
  data.push_back("2011-12-31 10:10:10");
  data.push_back("52");
  // B(DC) type
  // Jan 1, 2 and 3
  data.push_back("2005-01-01 10:10:10");
  data.push_back("53");
  data.push_back("2005-01-02 10:10:10");
  data.push_back("53");
  data.push_back("2005-01-03 10:10:10");
  data.push_back("1");
  // middle, Monday and Sunday
  data.push_back("2005-11-07 10:10:10");
  data.push_back("45");
  data.push_back("2005-11-13 10:10:10");
  data.push_back("45");
  // Dec 29-31
  data.push_back("2005-12-29 10:10:10");
  data.push_back("52");
  data.push_back("2005-12-30 10:10:10");
  data.push_back("52");
  data.push_back("2005-12-31 10:10:10");
  data.push_back("52");
  // C type
  // Jan 1, 2 and 3
  data.push_back("2010-01-01 10:10:10");
  data.push_back("53");
  data.push_back("2010-01-02 10:10:10");
  data.push_back("53");
  data.push_back("2010-01-03 10:10:10");
  data.push_back("53");
  // middle, Monday and Sunday
  data.push_back("2010-09-13 10:10:10");
  data.push_back("37");
  data.push_back("2010-09-19 10:10:10");
  data.push_back("37");
  // Dec 29-31
  data.push_back("2010-12-29 10:10:10");
  data.push_back("52");
  data.push_back("2010-12-30 10:10:10");
  data.push_back("52");
  data.push_back("2010-12-31 10:10:10");
  data.push_back("52");
  // D type
  // Jan 1, 2 and 3
  data.push_back("2037-01-01 10:10:10");
  data.push_back("1");
  data.push_back("2037-01-02 10:10:10");
  data.push_back("1");
  data.push_back("2037-01-03 10:10:10");
  data.push_back("1");
  // middle, Monday and Sunday
  data.push_back("2037-08-17 10:10:10");
  data.push_back("34");
  data.push_back("2037-08-23 10:10:10");
  data.push_back("34");
  // Dec 29-31
  data.push_back("2037-12-29 10:10:10");
  data.push_back("53");
  data.push_back("2037-12-30 10:10:10");
  data.push_back("53");
  data.push_back("2037-12-31 10:10:10");
  data.push_back("53");
  // E type
  // Jan 1, 2 and 3
  data.push_back("2014-01-01 10:10:10");
  data.push_back("1");
  data.push_back("2014-01-02 10:10:10");
  data.push_back("1");
  data.push_back("2014-01-03 10:10:10");
  data.push_back("1");
  // middle, Monday and Sunday
  data.push_back("2014-01-13 10:10:10");
  data.push_back("3");
  data.push_back("2014-01-19 10:10:10");
  data.push_back("3");
  // Dec 29-31
  data.push_back("2014-12-29 10:10:10");
  data.push_back("1");
  data.push_back("2014-12-30 10:10:10");
  data.push_back("1");
  data.push_back("2014-12-31 10:10:10");
  data.push_back("1");
  // F type
  // Jan 1, 2 and 3
  data.push_back("2019-01-01 10:10:10");
  data.push_back("1");
  data.push_back("2019-01-02 10:10:10");
  data.push_back("1");
  data.push_back("2019-01-03 10:10:10");
  data.push_back("1");
  // middle, Monday and Sunday
  data.push_back("2019-02-11 10:10:10");
  data.push_back("7");
  data.push_back("2019-02-17 10:10:10");
  data.push_back("7");
  // Dec 29-31
  data.push_back("2019-12-29 10:10:10");
  data.push_back("52");
  data.push_back("2019-12-30 10:10:10");
  data.push_back("1");
  data.push_back("2019-12-31 10:10:10");
  data.push_back("1");
  // G type
  // Jan 1, 2 and 3
  data.push_back("2001-01-01 10:10:10");
  data.push_back("1");
  data.push_back("2001-01-02 10:10:10");
  data.push_back("1");
  data.push_back("2001-01-03 10:10:10");
  data.push_back("1");
  // middle, Monday and Sunday
  data.push_back("2001-03-19 10:10:10");
  data.push_back("12");
  data.push_back("2001-03-25 10:10:10");
  data.push_back("12");
  // Dec 29-31
  data.push_back("2001-12-29 10:10:10");
  data.push_back("52");
  data.push_back("2001-12-30 10:10:10");
  data.push_back("52");
  data.push_back("2001-12-31 10:10:10");
  data.push_back("1");
  // AG type
  // Jan 1, 2 and 3
  data.push_back("2012-01-01 10:10:10");
  data.push_back("52");
  data.push_back("2012-01-02 10:10:10");
  data.push_back("1");
  data.push_back("2012-01-03 10:10:10");
  data.push_back("1");
  // middle, Monday and Sunday
  data.push_back("2012-04-02 10:10:10");
  data.push_back("14");
  data.push_back("2012-04-08 10:10:10");
  data.push_back("14");
  // Dec 29-31
  data.push_back("2012-12-29 10:10:10");
  data.push_back("52");
  data.push_back("2012-12-30 10:10:10");
  data.push_back("52");
  data.push_back("2012-12-31 10:10:10");
  data.push_back("1");
  // BA type
  // Jan 1, 2 and 3
  data.push_back("2000-01-01 10:10:10");
  data.push_back("52");
  data.push_back("2000-01-02 10:10:10");
  data.push_back("52");
  data.push_back("2000-01-03 10:10:10");
  data.push_back("1");
  // middle, Monday and Sunday
  data.push_back("2000-05-22 10:10:10");
  data.push_back("21");
  data.push_back("2000-05-28 10:10:10");
  data.push_back("21");
  // Dec 29-31
  data.push_back("2000-12-29 10:10:10");
  data.push_back("52");
  data.push_back("2000-12-30 10:10:10");
  data.push_back("52");
  data.push_back("2000-12-31 10:10:10");
  data.push_back("52");
  // CB type
  // Jan 1, 2 and 3
  data.push_back("2016-01-01 10:10:10");
  data.push_back("53");
  data.push_back("2016-01-02 10:10:10");
  data.push_back("53");
  data.push_back("2016-01-03 10:10:10");
  data.push_back("53");
  // middle, Monday and Sunday
  data.push_back("2016-06-20 10:10:10");
  data.push_back("25");
  data.push_back("2016-06-26 10:10:10");
  data.push_back("25");
  // Dec 29-31
  data.push_back("2016-12-29 10:10:10");
  data.push_back("52");
  data.push_back("2016-12-30 10:10:10");
  data.push_back("52");
  data.push_back("2016-12-31 10:10:10");
  data.push_back("52");
  // DC type
  // Jan 1, 2 and 3
  data.push_back("2004-01-01 10:10:10");
  data.push_back("1");
  data.push_back("2004-01-02 10:10:10");
  data.push_back("1");
  data.push_back("2004-01-03 10:10:10");
  data.push_back("1");
  // middle, Monday and Sunday
  data.push_back("2004-07-19 10:10:10");
  data.push_back("30");
  data.push_back("2004-07-25 10:10:10");
  data.push_back("30");
  // Dec 29-31
  data.push_back("2004-12-29 10:10:10");
  data.push_back("53");
  data.push_back("2004-12-30 10:10:10");
  data.push_back("53");
  data.push_back("2004-12-31 10:10:10");
  data.push_back("53");
  // ED type
  // Jan 1, 2 and 3
  data.push_back("2020-01-01 10:10:10");
  data.push_back("1");
  data.push_back("2020-01-02 10:10:10");
  data.push_back("1");
  data.push_back("2020-01-03 10:10:10");
  data.push_back("1");
  // middle, Monday and Sunday
  data.push_back("2020-08-17 10:10:10");
  data.push_back("34");
  data.push_back("2020-08-23 10:10:10");
  data.push_back("34");
  // Dec 29-31
  data.push_back("2020-12-29 10:10:10");
  data.push_back("53");
  data.push_back("2020-12-30 10:10:10");
  data.push_back("53");
  data.push_back("2020-12-31 10:10:10");
  data.push_back("53");
  // FE type
  // Jan 1, 2 and 3
  data.push_back("2008-01-01 10:10:10");
  data.push_back("1");
  data.push_back("2008-01-02 10:10:10");
  data.push_back("1");
  data.push_back("2008-01-03 10:10:10");
  data.push_back("1");
  // middle, Monday and Sunday
  data.push_back("2008-09-15 10:10:10");
  data.push_back("38");
  data.push_back("2008-09-21 10:10:10");
  data.push_back("38");
  // Dec 29-31
  data.push_back("2008-12-29 10:10:10");
  data.push_back("1");
  data.push_back("2008-12-30 10:10:10");
  data.push_back("1");
  data.push_back("2008-12-31 10:10:10");
  data.push_back("1");
  // GF type
  // Jan 1, 2 and 3
  data.push_back("2024-01-01 10:10:10");
  data.push_back("1");
  data.push_back("2024-01-02 10:10:10");
  data.push_back("1");
  data.push_back("2024-01-03 10:10:10");
  data.push_back("1");
  // middle, Monday and Sunday
  data.push_back("2024-10-07 10:10:10");
  data.push_back("41");
  data.push_back("2024-10-13 10:10:10");
  data.push_back("41");
  // Dec 29-31
  data.push_back("2024-12-29 10:10:10");
  data.push_back("52");
  data.push_back("2024-12-30 10:10:10");
  data.push_back("1");
  data.push_back("2024-12-31 10:10:10");
  data.push_back("1");

  for (uint32_t i = 0; i < data.size(); i += 2) {
    gdv_timestamp ts = StringToTimestamp(data.at(i).c_str());
    gdv_int64 exp = atol(data.at(i + 1).c_str());
    EXPECT_EQ(extractWeek_timestamp(ts), exp);
  }
}

TEST(TestTime, TestIsNullInterval) {
  EXPECT_EQ(isnull_day_time_interval(150, true), false);
  EXPECT_EQ(isnull_day_time_interval(150, false), true);
}

TEST(TestTime, TestMonthsBetween) {
  std::vector<std::string> testStrings = {
      "1995-03-02 00:00:00", "1995-02-02 00:00:00", "1.0",
      "1995-02-02 00:00:00", "1995-03-02 00:00:00", "-1.0",
      "1995-03-31 00:00:00", "1995-02-28 00:00:00", "1.0",
      "1996-03-31 00:00:00", "1996-02-28 00:00:00", "1.09677418",
      "1996-03-31 00:00:00", "1996-02-29 00:00:00", "1.0",
      "1996-05-31 00:00:00", "1996-04-30 00:00:00", "1.0",
      "1996-05-31 00:00:00", "1996-03-31 00:00:00", "2.0",
      "1996-05-31 00:00:00", "1996-03-30 00:00:00", "2.03225806",
      "1996-03-15 00:00:00", "1996-02-14 00:00:00", "1.03225806",
      "1995-02-02 00:00:00", "1995-01-01 00:00:00", "1.03225806",
      "1995-02-02 10:00:00", "1995-01-01 11:00:00", "1.03091397"};

  for (uint32_t i = 0; i < testStrings.size();) {
    gdv_timestamp endTs = StringToTimestamp(testStrings[i++].c_str());
    gdv_timestamp startTs = StringToTimestamp(testStrings[i++].c_str());

    double expectedResult = atof(testStrings[i++].c_str());
    double actualResult = months_between_timestamp_timestamp(endTs, startTs);

    double diff = actualResult - expectedResult;
    if (diff < 0) {
      diff = expectedResult - actualResult;
    }

    EXPECT_TRUE(diff < 0.001);
  }
}

TEST(TestTime, castVarcharTimestamp) {
  ExecutionContext context;
  int64_t context_ptr = reinterpret_cast<int64_t>(&context);
  gdv_int32 out_len;
  gdv_timestamp ts = StringToTimestamp("2000-05-01 10:20:34");
  const char* out = castVARCHAR_timestamp_int64(context_ptr, ts, 30L, &out_len);
  EXPECT_EQ(std::string(out, out_len), "2000-05-01 10:20:34.000");

  out = castVARCHAR_timestamp_int64(context_ptr, ts, 19L, &out_len);
  EXPECT_EQ(std::string(out, out_len), "2000-05-01 10:20:34");

  out = castVARCHAR_timestamp_int64(context_ptr, ts, 0L, &out_len);
  EXPECT_EQ(std::string(out, out_len), "");

  ts = StringToTimestamp("2-5-1 00:00:04");
  out = castVARCHAR_timestamp_int64(context_ptr, ts, 24L, &out_len);
  EXPECT_EQ(std::string(out, out_len), "0002-05-01 00:00:04.000");
}

TEST(TestTime, TestCastTimestampToDate) {
  gdv_timestamp ts = StringToTimestamp("2000-05-01 10:20:34");
  auto out = castDATE_timestamp(ts);
  EXPECT_EQ(StringToTimestamp("2000-05-01 00:00:00"), out);
}

TEST(TestTime, TestNextDay) {
  ExecutionContext context;
  int64_t context_ptr = reinterpret_cast<int64_t>(&context);

  gdv_timestamp ts = StringToTimestamp("2021-11-08 10:20:34");
  auto out = next_day_from_timestamp(context_ptr, ts, "FR", 2);
  EXPECT_EQ(StringToTimestamp("2021-11-12 00:00:00"), out);

  out = next_day_from_timestamp(context_ptr, ts, "FRI", 3);
  EXPECT_EQ(StringToTimestamp("2021-11-12 00:00:00"), out);

  out = next_day_from_timestamp(context_ptr, ts, "FRIDAY", 6);
  EXPECT_EQ(StringToTimestamp("2021-11-12 00:00:00"), out);

  ts = StringToTimestamp("2015-08-06 11:12:30");
  out = next_day_from_timestamp(context_ptr, ts, "THU", 3);
  EXPECT_EQ(StringToTimestamp("2015-08-13 00:00:00"), out);

  ts = StringToTimestamp("2012-08-14 11:12:30");
  out = next_day_from_timestamp(context_ptr, ts, "TUE", 3);
  EXPECT_EQ(StringToTimestamp("2012-08-21 00:00:00"), out);

  ts = StringToTimestamp("2012-12-12 12:00:00");
  out = next_day_from_timestamp(context_ptr, ts, "TU", 2);
  EXPECT_EQ(StringToTimestamp("2012-12-18 00:00:00"), out);

  ts = StringToTimestamp("2000-01-01 20:15:00");
  out = next_day_from_timestamp(context_ptr, ts, "SATURDAY", 8);
  EXPECT_EQ(StringToTimestamp("2000-01-08 00:00:00"), out);

  ts = StringToTimestamp("2015-08-06 11:12:30");
  out = next_day_from_timestamp(context_ptr, ts, "AHSRK", 5);
  EXPECT_EQ(context.get_error(), "The weekday in this entry is invalid");
  context.Reset();
}

TEST(TestTime, TestCastTimestampToTime) {
  gdv_timestamp ts = StringToTimestamp("2000-05-01 10:20:34");
  auto expected_response =
      static_cast<int32_t>(ts - StringToTimestamp("2000-05-01 00:00:00"));
  auto out = castTIME_timestamp(ts);
  EXPECT_EQ(expected_response, out);

  // Test when the defined value is midnight, so the returned value must 0
  ts = StringToTimestamp("1998-12-01 00:00:00");
  expected_response = 0;
  out = castTIME_timestamp(ts);
  EXPECT_EQ(expected_response, out);

  ts = StringToTimestamp("2015-09-16 23:59:59");
  expected_response = static_cast<int32_t>(ts - StringToTimestamp("2015-09-16 00:00:00"));
  out = castTIME_timestamp(ts);
  EXPECT_EQ(expected_response, out);
}

TEST(TestTime, TestIntToTime) {
  int32_t val = 1000;
  int32_t expected_response = val;
  auto out = castTIME_int32(val);
  EXPECT_EQ(expected_response, out);

  val = MILLIS_IN_DAY - 1;
  expected_response = val;
  out = castTIME_int32(val);
  EXPECT_EQ(expected_response, out);

  val = MILLIS_IN_DAY + 1;
  expected_response = 1;
  out = castTIME_int32(val);
  EXPECT_EQ(expected_response, out);

  val = -1;
  expected_response = 0;
  out = castTIME_int32(val);
  EXPECT_EQ(expected_response, out);
}

TEST(TestTime, TestLastDay) {
  // leap year test
  gdv_timestamp ts = StringToTimestamp("2016-02-11 03:20:34");
  auto out = last_day_from_timestamp(ts);
  EXPECT_EQ(StringToTimestamp("2016-02-29 00:00:00"), out);

  ts = StringToTimestamp("2016-02-29 23:59:59");
  out = last_day_from_timestamp(ts);
  EXPECT_EQ(StringToTimestamp("2016-02-29 00:00:00"), out);

  ts = StringToTimestamp("2016-01-30 23:59:00");
  out = last_day_from_timestamp(ts);
  EXPECT_EQ(StringToTimestamp("2016-01-31 00:00:00"), out);

  // normal year
  ts = StringToTimestamp("2017-02-03 23:59:59");
  out = last_day_from_timestamp(ts);
  EXPECT_EQ(StringToTimestamp("2017-02-28 00:00:00"), out);

  // december
  ts = StringToTimestamp("2015-12-03 03:12:59");
  out = last_day_from_timestamp(ts);
  EXPECT_EQ(StringToTimestamp("2015-12-31 00:00:00"), out);
}

TEST(TestTime, TestToTimestamp) {
  auto ts = StringToTimestamp("1970-01-01 00:00:00");
  EXPECT_EQ(ts, to_timestamp_int32(0));
  EXPECT_EQ(ts, to_timestamp_int64(0));
  EXPECT_EQ(ts, to_timestamp_float32(0));
  EXPECT_EQ(ts, to_timestamp_float64(0));

  ts = StringToTimestamp("1970-01-01 00:00:01");
  EXPECT_EQ(ts, to_timestamp_int32(1));
  EXPECT_EQ(ts, to_timestamp_int64(1));
  EXPECT_EQ(ts, to_timestamp_float32(1));
  EXPECT_EQ(ts, to_timestamp_float64(1));

  ts = StringToTimestamp("2021-07-14 09:31:39");
  EXPECT_EQ(ts, to_timestamp_int32(1626255099));
  EXPECT_EQ(ts, to_timestamp_int64(1626255099));

  ts = StringToTimestamp("1970-01-01 00:01:00");
  EXPECT_EQ(ts, to_timestamp_int32(60));
  EXPECT_EQ(ts, to_timestamp_int64(60));
  EXPECT_EQ(ts, to_timestamp_float32(60));
  EXPECT_EQ(ts, to_timestamp_float64(60));

  ts = StringToTimestamp("1970-01-01 01:00:00");
  EXPECT_EQ(ts, to_timestamp_int32(3600));
  EXPECT_EQ(ts, to_timestamp_int64(3600));
  EXPECT_EQ(ts, to_timestamp_float32(3600));
  EXPECT_EQ(ts, to_timestamp_float64(3600));

  ts = StringToTimestamp("1970-01-02 00:00:00");
  EXPECT_EQ(ts, to_timestamp_int32(86400));
  EXPECT_EQ(ts, to_timestamp_int64(86400));
  EXPECT_EQ(ts, to_timestamp_float32(86400));
  EXPECT_EQ(ts, to_timestamp_float64(86400));

  // tests with fractional part
  ts = StringToTimestamp("1970-01-01 00:00:01") + 500;
  EXPECT_EQ(ts, to_timestamp_float32(1.500f));
  EXPECT_EQ(ts, to_timestamp_float64(1.500));

  ts = StringToTimestamp("1970-01-01 00:01:01") + 600;
  EXPECT_EQ(ts, to_timestamp_float32(61.600f));
  EXPECT_EQ(ts, to_timestamp_float64(61.600));

  ts = StringToTimestamp("1970-01-01 01:00:01") + 400;
  EXPECT_EQ(ts, to_timestamp_float32(3601.400f));
  EXPECT_EQ(ts, to_timestamp_float64(3601.400));
}

TEST(TestTime, TestToTimeNumeric) {
  // input timestamp in seconds: 1970-01-01 00:00:00
  int64_t expected_output = 0;  // 0 milliseconds
  EXPECT_EQ(expected_output, to_time_int32(0));
  EXPECT_EQ(expected_output, to_time_int64(0));
  EXPECT_EQ(expected_output, to_time_float32(0.000f));
  EXPECT_EQ(expected_output, to_time_float64(0.000));

  // input timestamp in seconds: 1970-01-01 00:00:01
  expected_output = 1000;  // 1 seconds
  EXPECT_EQ(expected_output, to_time_int32(1));
  EXPECT_EQ(expected_output, to_time_int64(1));
  EXPECT_EQ(expected_output, to_time_float32(1.000f));
  EXPECT_EQ(expected_output, to_time_float64(1.000));

  // input timestamp in seconds: 1970-01-01 01:00:00
  expected_output = 3600000;  // 3600 seconds
  EXPECT_EQ(expected_output, to_time_int32(3600));
  EXPECT_EQ(expected_output, to_time_int64(3600));
  EXPECT_EQ(expected_output, to_time_float32(3600.000f));
  EXPECT_EQ(expected_output, to_time_float64(3600.000));

  // input timestamp in seconds: 1970-01-01 23:59:59
  expected_output = 86399000;  // 86399 seconds
  EXPECT_EQ(expected_output, to_time_int32(86399));
  EXPECT_EQ(expected_output, to_time_int64(86399));
  EXPECT_EQ(expected_output, to_time_float32(86399.000f));
  EXPECT_EQ(expected_output, to_time_float64(86399.000));

  // input timestamp in seconds: 2020-01-01 00:00:01
  expected_output = 1000;  // 1 second
  EXPECT_EQ(expected_output, to_time_int64(1577836801));
  EXPECT_EQ(expected_output, to_time_float64(1577836801.000));

  // tests with fractional part
  // input timestamp in seconds: 1970-01-01 00:00:01.500
  expected_output = 1500;  // 1.5 seconds
  EXPECT_EQ(expected_output, to_time_float32(1.500f));
  EXPECT_EQ(expected_output, to_time_float64(1.500));

  // input timestamp in seconds: 1970-01-01 00:01:01.500
  expected_output = 61500;  // 61.5 seconds
  EXPECT_EQ(expected_output, to_time_float32(61.500f));
  EXPECT_EQ(expected_output, to_time_float64(61.500));

  // input timestamp in seconds: 1970-01-01 01:00:01.500
  expected_output = 3601500;  // 3601.5 seconds
  EXPECT_EQ(expected_output, to_time_float32(3601.500f));
  EXPECT_EQ(expected_output, to_time_float64(3601.500));
}

TEST(TestTime, TestCastIntDayInterval) {
  EXPECT_EQ(castBIGINT_daytimeinterval(10), 864000000);
  EXPECT_EQ(castBIGINT_daytimeinterval(-100), -8640000001);
  EXPECT_EQ(castBIGINT_daytimeinterval(-0), 0);
}

TEST(TestTime, TestCastIntYearInterval) {
  EXPECT_EQ(castINT_year_interval(24), 2);
  EXPECT_EQ(castINT_year_interval(-24), -2);
  EXPECT_EQ(castINT_year_interval(-23), -1);

  EXPECT_EQ(castBIGINT_year_interval(24), 2);
  EXPECT_EQ(castBIGINT_year_interval(-24), -2);
  EXPECT_EQ(castBIGINT_year_interval(-23), -1);
}

TEST(TestTime, TestCastNullableInterval) {
  ExecutionContext context;
  auto context_ptr = reinterpret_cast<int64_t>(&context);
  // Test castNULLABLEINTERVALDAY for int and bigint
  EXPECT_EQ(castNULLABLEINTERVALDAY_int32(1), 1);
  EXPECT_EQ(castNULLABLEINTERVALDAY_int32(12), 12);
  EXPECT_EQ(castNULLABLEINTERVALDAY_int32(-55), -55);
  EXPECT_EQ(castNULLABLEINTERVALDAY_int32(-1201), -1201);
  EXPECT_EQ(castNULLABLEINTERVALDAY_int64(1), 1);
  EXPECT_EQ(castNULLABLEINTERVALDAY_int64(12), 12);
  EXPECT_EQ(castNULLABLEINTERVALDAY_int64(-55), -55);
  EXPECT_EQ(castNULLABLEINTERVALDAY_int64(-1201), -1201);

  // Test castNULLABLEINTERVALYEAR for int and bigint
  EXPECT_EQ(castNULLABLEINTERVALYEAR_int32(context_ptr, 1), 1);
  EXPECT_EQ(castNULLABLEINTERVALYEAR_int32(context_ptr, 12), 12);
  EXPECT_EQ(castNULLABLEINTERVALYEAR_int32(context_ptr, 55), 55);
  EXPECT_EQ(castNULLABLEINTERVALYEAR_int32(context_ptr, 1201), 1201);
  EXPECT_EQ(castNULLABLEINTERVALYEAR_int64(context_ptr, 1), 1);
  EXPECT_EQ(castNULLABLEINTERVALYEAR_int64(context_ptr, 12), 12);
  EXPECT_EQ(castNULLABLEINTERVALYEAR_int64(context_ptr, 55), 55);
  EXPECT_EQ(castNULLABLEINTERVALYEAR_int64(context_ptr, 1201), 1201);
  // validate overflow error when using bigint as input
  castNULLABLEINTERVALYEAR_int64(context_ptr, INT64_MAX);
  EXPECT_EQ(context.get_error(), "Integer overflow");
  context.Reset();
}

}  // namespace gandiva
