/**
* 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.
*/
package org.apache.hadoop.hive.common.type;
import org.junit.*;
import static org.junit.Assert.*;
import com.google.code.tempusfugit.concurrency.annotations.*;
import com.google.code.tempusfugit.concurrency.*;
public class TestHiveIntervalDayTime {
@Rule public ConcurrentRule concurrentRule = new ConcurrentRule();
@Rule public RepeatingRule repeatingRule = new RepeatingRule();
@Test
@Concurrent(count=4)
@Repeating(repetition=100)
public void testGetters() throws Exception {
HiveIntervalDayTime i1 = new HiveIntervalDayTime(3, 4, 5, 6, 7);
assertEquals(3, i1.getDays());
assertEquals(4, i1.getHours());
assertEquals(5, i1.getMinutes());
assertEquals(6, i1.getSeconds());
assertEquals(7, i1.getNanos());
}
@Test
@Concurrent(count=4)
@Repeating(repetition=100)
public void testCompare() throws Exception {
HiveIntervalDayTime i1 = new HiveIntervalDayTime(3, 4, 5, 6, 7);
HiveIntervalDayTime i2 = new HiveIntervalDayTime(3, 4, 5, 6, 7);
HiveIntervalDayTime i3 = new HiveIntervalDayTime(3, 4, 8, 9, 10);
HiveIntervalDayTime i4 = new HiveIntervalDayTime(3, 4, 8, 9, 5);
// compareTo()
assertEquals(i1 + " compareTo " + i1, 0, i1.compareTo(i1));
assertEquals(i1 + " compareTo " + i2, 0, i1.compareTo(i2));
assertEquals(i2 + " compareTo " + i1, 0, i2.compareTo(i1));
assertEquals(i3 + " compareTo " + i3, 0, i3.compareTo(i3));
assertTrue(i1 + " compareTo " + i3, 0 > i1.compareTo(i3));
assertTrue(i3 + " compareTo " + i1, 0 < i3.compareTo(i1));
// equals()
assertTrue(i1 + " equals " + i1, i1.equals(i1));
assertTrue(i1 + " equals " + i2, i1.equals(i2));
assertFalse(i1 + " equals " + i3, i1.equals(i3));
assertFalse(i3 + " equals " + i1, i3.equals(i1));
assertFalse(i3 + " equals " + i4, i3.equals(i4));
// hashCode()
assertEquals(i1 + " hashCode " + i1, i1.hashCode(), i1.hashCode());
assertEquals(i1 + " hashCode " + i1, i1.hashCode(), i2.hashCode());
}
@Test
@Concurrent(count=4)
@Repeating(repetition=100)
public void testValueOf() throws Exception {
HiveIntervalDayTime i1 = HiveIntervalDayTime.valueOf("3 04:05:06.123456");
assertEquals(3, i1.getDays());
assertEquals(4, i1.getHours());
assertEquals(5, i1.getMinutes());
assertEquals(6, i1.getSeconds());
assertEquals(123456000, i1.getNanos());
HiveIntervalDayTime i2 = HiveIntervalDayTime.valueOf("+3 04:05:06");
assertEquals(3, i2.getDays());
assertEquals(4, i2.getHours());
assertEquals(5, i2.getMinutes());
assertEquals(6, i2.getSeconds());
assertEquals(0, i2.getNanos());
HiveIntervalDayTime i3 = HiveIntervalDayTime.valueOf("-12 13:14:15.987654321");
assertEquals(-12, i3.getDays());
assertEquals(-13, i3.getHours());
assertEquals(-14, i3.getMinutes());
assertEquals(-15, i3.getSeconds());
assertEquals(-987654321, i3.getNanos());
HiveIntervalDayTime i4 = HiveIntervalDayTime.valueOf("-0 0:0:0.000000012");
assertEquals(0, i4.getDays());
assertEquals(0, i4.getHours());
assertEquals(0, i4.getMinutes());
assertEquals(0, i4.getSeconds());
assertEquals(-12, i4.getNanos());
// Invalid values
String[] invalidValues = {
null,
"abc",
"0-11",
"0 60:0:0",
"0 0:60:0"
};
for (String invalidValue : invalidValues) {
boolean caughtException = false;
try {
HiveIntervalDayTime.valueOf(invalidValue);
fail("Expected exception");
} catch (IllegalArgumentException err) {
caughtException = true;
}
assertTrue("Expected exception", caughtException);
}
}
@Test
@Concurrent(count=4)
@Repeating(repetition=100)
public void testToString() throws Exception {
assertEquals("0 00:00:00.000000000", HiveIntervalDayTime.valueOf("0 00:00:00").toString());
assertEquals("3 04:05:06.123456000", HiveIntervalDayTime.valueOf("3 04:05:06.123456").toString());
assertEquals("-3 04:05:06.123456000", HiveIntervalDayTime.valueOf("-3 04:05:06.123456").toString());
assertEquals("1 00:00:00.000000000", HiveIntervalDayTime.valueOf("1 00:00:00").toString());
assertEquals("-1 00:00:00.000000000", HiveIntervalDayTime.valueOf("-1 00:00:00").toString());
assertEquals("0 00:00:00.880000000", HiveIntervalDayTime.valueOf("0 00:00:00.88").toString());
assertEquals("-0 00:00:00.880000000", HiveIntervalDayTime.valueOf("-0 00:00:00.88").toString());
// Mixed sign cases
assertEquals("-3 04:05:06.000000007",
new HiveIntervalDayTime(-3, -4, -5, -6, -7).toString());
assertEquals("3 04:05:06.000000007",
new HiveIntervalDayTime(3, 4, 5, 6, 7).toString());
}
@Test
@Concurrent(count=4)
@Repeating(repetition=100)
public void testNormalize() throws Exception {
HiveIntervalDayTime i1 = new HiveIntervalDayTime(50, 48, 3, 5400, 2000000123);
assertEquals(HiveIntervalDayTime.valueOf("52 1:33:2.000000123"), i1);
assertEquals(52, i1.getDays());
assertEquals(1, i1.getHours());
assertEquals(33, i1.getMinutes());
assertEquals(2, i1.getSeconds());
assertEquals(123, i1.getNanos());
assertEquals(HiveIntervalDayTime.valueOf("0 0:0:0"),
new HiveIntervalDayTime(0, 0, 0, 0, 0));
assertEquals(HiveIntervalDayTime.valueOf("0 0:0:0"),
new HiveIntervalDayTime(2, -48, 0, 1, -1000000000));
assertEquals(HiveIntervalDayTime.valueOf("0 0:0:0"),
new HiveIntervalDayTime(-2, 48, 0, -1, 1000000000));
assertEquals(HiveIntervalDayTime.valueOf("1 0:0:0"),
new HiveIntervalDayTime(-1, 48, 0, 0, 0));
assertEquals(HiveIntervalDayTime.valueOf("-1 0:0:0"),
new HiveIntervalDayTime(1, -48, 0, 0, 0));
assertEquals(HiveIntervalDayTime.valueOf("0 23:59:59.999999999"),
new HiveIntervalDayTime(1, 0, 0, 0, -1));
assertEquals(HiveIntervalDayTime.valueOf("-0 23:59:59.999999999"),
new HiveIntervalDayTime(-1, 0, 0, 0, 1));
// -1 day 10 hrs 11 mins 172800 secs = -1 day 10 hrs 11 mins + 2 days = 1 day 10 hrs 11 mins
assertEquals(HiveIntervalDayTime.valueOf("1 10:11:0"),
new HiveIntervalDayTime(-1, 10, 11, 172800, 0));
i1 = new HiveIntervalDayTime(480, 480, 0, 5400, 2000000123);
assertEquals(500, i1.getDays());
assertEquals(1, i1.getHours());
assertEquals(30, i1.getMinutes());
assertEquals(2, i1.getSeconds());
assertEquals(123, i1.getNanos());
}
}