blob: 0ba23abee3452ed92237432951ec5cbfa88bc1ed [file] [log] [blame]
/*
* 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 <boost/test/unit_test.hpp>
#include <ignite/time.h>
#include <ignite/date.h>
#include <ignite/timestamp.h>
#include <ignite/common/utils.h>
#include <ignite/test_utils.h>
using namespace ignite;
using namespace cache;
using namespace boost::unit_test;
/**
* Check operators for type.
* All args should refer to a different instances.
* Also, val1 should be less then val2 and equeal val3.
*/
template<typename T>
void CheckOperators(const T& val1, const T& val2, const T& val3)
{
BOOST_CHECK(&val1 != &val2);
BOOST_CHECK(&val1 != &val3);
BOOST_CHECK(&val2 != &val3);
BOOST_CHECK(val1 == val1);
BOOST_CHECK(val2 == val2);
BOOST_CHECK(val1 == val3);
BOOST_CHECK(val3 == val1);
BOOST_CHECK(val1 != val2);
BOOST_CHECK(val2 != val1);
BOOST_CHECK(val3 != val2);
BOOST_CHECK(val2 != val3);
BOOST_CHECK(val1 < val2);
BOOST_CHECK(val3 < val2);
BOOST_CHECK(val1 <= val2);
BOOST_CHECK(val3 <= val2);
BOOST_CHECK(val1 <= val1);
BOOST_CHECK(val2 <= val2);
BOOST_CHECK(val1 <= val3);
BOOST_CHECK(val3 <= val1);
BOOST_CHECK(val2 > val1);
BOOST_CHECK(val2 > val3);
BOOST_CHECK(val2 >= val1);
BOOST_CHECK(val2 >= val3);
BOOST_CHECK(val1 >= val1);
BOOST_CHECK(val2 >= val2);
BOOST_CHECK(val1 >= val3);
BOOST_CHECK(val3 >= val1);
}
void CheckTime(int hour, int mins, int sec)
{
Time time = common::MakeTimeGmt(hour, mins, sec);
tm res;
common::TimeToCTm(time, res);
BOOST_CHECK_EQUAL(res.tm_hour, hour);
BOOST_CHECK_EQUAL(res.tm_min, mins);
BOOST_CHECK_EQUAL(res.tm_sec, sec);
}
void CheckDate(int year, int mon, int day)
{
Date date = common::MakeDateGmt(year, mon, day);
tm res;
common::DateToCTm(date, res);
BOOST_CHECK_EQUAL(res.tm_year + 1900, year);
BOOST_CHECK_EQUAL(res.tm_mon + 1, mon);
BOOST_CHECK_EQUAL(res.tm_mday, day);
}
void CheckTimestamp(int year, int mon, int day, int hour, int mins, int sec, int ns)
{
Timestamp ts = common::MakeTimestampGmt(year, mon, day, hour, mins, sec, ns);
tm res;
common::TimestampToCTm(ts, res);
BOOST_CHECK_EQUAL(res.tm_year + 1900, year);
BOOST_CHECK_EQUAL(res.tm_mon + 1, mon);
BOOST_CHECK_EQUAL(res.tm_mday, day);
BOOST_CHECK_EQUAL(res.tm_hour, hour);
BOOST_CHECK_EQUAL(res.tm_min, mins);
BOOST_CHECK_EQUAL(res.tm_sec, sec);
}
BOOST_AUTO_TEST_SUITE(DateTimeTestSuite)
BOOST_AUTO_TEST_CASE(TimeOperators1)
{
Time val1(1);
Time val2(2);
Time val3(1);
CheckOperators(val1, val2, val3);
}
BOOST_AUTO_TEST_CASE(TimeOperators2)
{
Time val1(154362);
Time val2(val1.GetMilliseconds() + 42363);
Time val3(val1);
CheckOperators(val1, val2, val3);
}
BOOST_AUTO_TEST_CASE(DateOperators1)
{
Date val1(1);
Date val2(2);
Date val3(1);
CheckOperators(val1, val2, val3);
}
BOOST_AUTO_TEST_CASE(DateOperators2)
{
Date val1(154362);
Date val2(val1.GetMilliseconds() + 42363);
Date val3(val1);
CheckOperators(val1, val2, val3);
}
BOOST_AUTO_TEST_CASE(TimestampOperators1)
{
Timestamp val1(1);
Timestamp val2(2);
Timestamp val3(1);
CheckOperators(val1, val2, val3);
}
BOOST_AUTO_TEST_CASE(TimestampOperators2)
{
Timestamp val1(154362);
Timestamp val2(val1.GetMilliseconds() + 42363);
Timestamp val3(val1);
CheckOperators(val1, val2, val3);
}
BOOST_AUTO_TEST_CASE(TimestampOperators3)
{
Timestamp val1(42, 1);
Timestamp val2(42, 2);
Timestamp val3(42, 1);
CheckOperators(val1, val2, val3);
}
BOOST_AUTO_TEST_CASE(TimestampOperators4)
{
Timestamp val1(42, 154362);
Timestamp val2(42, val1.GetSecondFraction() + 42363);
Timestamp val3(42, val1.GetSecondFraction());
CheckOperators(val1, val2, val3);
}
BOOST_AUTO_TEST_CASE(TimestampOperators5)
{
Timestamp val1(154362, 154362);
Timestamp val2(val1.GetMilliseconds() + 42363, val1.GetSecondFraction() + 42363);
Timestamp val3(val1);
CheckOperators(val1, val2, val3);
}
BOOST_AUTO_TEST_CASE(MakeTime)
{
using namespace common;
BOOST_CHECK_EQUAL(MakeTimeGmt(0, 0, 0).GetMilliseconds(), 0);
BOOST_CHECK_EQUAL(MakeTimeGmt(23, 59, 59).GetMilliseconds(), 86399000);
BOOST_CHECK_EQUAL(MakeTimeGmt(14, 23, 47).GetMilliseconds(), 51827000);
BOOST_CHECK_EQUAL(MakeTimeGmt(0, 24, 12).GetMilliseconds(), 1452000);
BOOST_CHECK_EQUAL(MakeTimeGmt(8, 0, 0).GetMilliseconds(), 28800000);
BOOST_CHECK_EQUAL(MakeTimeGmt(0, 0, 0).GetSeconds(), 0);
BOOST_CHECK_EQUAL(MakeTimeGmt(23, 59, 59).GetSeconds(), 86399);
BOOST_CHECK_EQUAL(MakeTimeGmt(14, 23, 47).GetSeconds(), 51827);
BOOST_CHECK_EQUAL(MakeTimeGmt(0, 24, 12).GetSeconds(), 1452);
BOOST_CHECK_EQUAL(MakeTimeGmt(8, 0, 0).GetSeconds(), 28800);
}
BOOST_AUTO_TEST_CASE(MakeDate)
{
using namespace common;
BOOST_CHECK_EQUAL(MakeDateGmt(1970, 1, 1).GetMilliseconds(), 0);
BOOST_CHECK_EQUAL(MakeDateGmt(2000, 12, 31).GetMilliseconds(), 978220800000);
BOOST_CHECK_EQUAL(MakeDateGmt(2017, 3, 20).GetMilliseconds(), 1489968000000);
BOOST_CHECK_EQUAL(MakeDateGmt(1970, 1, 1).GetSeconds(), 0);
BOOST_CHECK_EQUAL(MakeDateGmt(2000, 12, 31).GetSeconds(), 978220800);
BOOST_CHECK_EQUAL(MakeDateGmt(2017, 3, 20).GetSeconds(), 1489968000);
}
BOOST_AUTO_TEST_CASE(MakeTimestamp)
{
using namespace common;
BOOST_CHECK_EQUAL(MakeTimestampGmt(1970, 1, 1, 0, 0, 0, 0).GetMilliseconds(), 0);
BOOST_CHECK_EQUAL(MakeTimestampGmt(2000, 12, 31, 23, 59, 59, 999999999).GetMilliseconds(), 978307199999);
BOOST_CHECK_EQUAL(MakeTimestampGmt(2001, 9, 9, 1, 46, 39, 999999999).GetMilliseconds(), 999999999999);
BOOST_CHECK_EQUAL(MakeTimestampGmt(2017, 3, 20, 18, 43, 19, 170038645).GetMilliseconds(), 1490035399170);
BOOST_CHECK_EQUAL(MakeTimestampGmt(1970, 1, 1, 0, 0, 0, 0).GetSeconds(), 0);
BOOST_CHECK_EQUAL(MakeTimestampGmt(2000, 12, 31, 23, 59, 59, 999999999).GetSeconds(), 978307199);
BOOST_CHECK_EQUAL(MakeTimestampGmt(2001, 9, 9, 1, 46, 39, 999999999).GetSeconds(), 999999999);
BOOST_CHECK_EQUAL(MakeTimestampGmt(2017, 3, 20, 18, 43, 19, 170038645).GetSeconds(), 1490035399);
BOOST_CHECK_EQUAL(MakeTimestampGmt(1970, 1, 1, 0, 0, 0, 0).GetSecondFraction(), 0);
BOOST_CHECK_EQUAL(MakeTimestampGmt(2000, 12, 31, 23, 59, 59, 999999999).GetSecondFraction(), 999999999);
BOOST_CHECK_EQUAL(MakeTimestampGmt(2001, 9, 9, 1, 46, 39, 999999999).GetSecondFraction(), 999999999);
BOOST_CHECK_EQUAL(MakeTimestampGmt(2017, 3, 20, 18, 43, 19, 170038645).GetSecondFraction(), 170038645);
BOOST_CHECK_EQUAL(MakeTimestampGmt(1970, 1, 1, 0, 0, 0, 0).GetDate().GetMilliseconds(), 0);
BOOST_CHECK_EQUAL(MakeTimestampGmt(2000, 12, 31, 23, 59, 59, 999999999).GetDate().GetMilliseconds(), 978307199999);
BOOST_CHECK_EQUAL(MakeTimestampGmt(2001, 9, 9, 1, 46, 39, 999999999).GetDate().GetMilliseconds(), 999999999999);
BOOST_CHECK_EQUAL(MakeTimestampGmt(2017, 3, 20, 18, 43, 19, 170038645).GetDate().GetMilliseconds(), 1490035399170);
}
BOOST_AUTO_TEST_CASE(CastTimeToTm)
{
CheckTime(21, 8, 5);
CheckTime(12, 41, 11);
CheckTime(1, 28, 18);
CheckTime(8, 12, 59);
CheckTime(17, 52, 31);
CheckTime(21, 56, 21);
}
BOOST_AUTO_TEST_CASE(CastDateToTm)
{
CheckDate(2024, 8, 5);
CheckDate(1987, 1, 1);
CheckDate(1999, 2, 18);
CheckDate(1997, 12, 9);
CheckDate(2007, 12, 31);
CheckDate(2001, 6, 21);
}
BOOST_AUTO_TEST_CASE(CastTimestampToTm)
{
CheckTimestamp(1970, 1, 1, 0, 0, 0, 0);
CheckTimestamp(2000, 12, 31, 23, 59, 59, 999999999);
CheckTimestamp(2001, 9, 9, 1, 46, 39, 999999999);
CheckTimestamp(2017, 3, 20, 18, 43, 19, 170038645);
CheckTimestamp(2007, 12, 31, 19, 24, 44, 894375963);
CheckTimestamp(2001, 6, 21, 13, 53, 2, 25346547);
}
BOOST_AUTO_TEST_SUITE_END()