[CALCITE-2299] Add tests for TimeUnitRange (Sergey Nuyanzin)

Close apache/calcite-avatica#60

Signed-off-by: Kevin Risden <krisden@apache.org>
diff --git a/core/src/test/java/org/apache/calcite/avatica/util/DateTimeUtilsTest.java b/core/src/test/java/org/apache/calcite/avatica/util/DateTimeUtilsTest.java
index 9c9bc34..7dbfaba 100644
--- a/core/src/test/java/org/apache/calcite/avatica/util/DateTimeUtilsTest.java
+++ b/core/src/test/java/org/apache/calcite/avatica/util/DateTimeUtilsTest.java
@@ -18,6 +18,7 @@
 
 import org.junit.Test;
 
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Locale;
@@ -48,6 +49,7 @@
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
@@ -89,6 +91,66 @@
     assertThat(floorMod(-1, 3), is(2L));
   }
 
+  @Test public void testTimeUnitRange() {
+    assertSame(TimeUnitRange.of(TimeUnit.YEAR, null), TimeUnitRange.YEAR);
+    assertSame(TimeUnitRange.of(TimeUnit.YEAR, TimeUnit.MONTH), TimeUnitRange.YEAR_TO_MONTH);
+    assertSame(TimeUnitRange.of(TimeUnit.MONTH, null), TimeUnitRange.MONTH);
+    assertSame(TimeUnitRange.of(TimeUnit.DAY, null), TimeUnitRange.DAY);
+    assertSame(TimeUnitRange.of(TimeUnit.DAY, TimeUnit.HOUR), TimeUnitRange.DAY_TO_HOUR);
+    assertSame(TimeUnitRange.of(TimeUnit.DAY, TimeUnit.MINUTE), TimeUnitRange.DAY_TO_MINUTE);
+    assertSame(TimeUnitRange.of(TimeUnit.DAY, TimeUnit.SECOND), TimeUnitRange.DAY_TO_SECOND);
+    assertSame(TimeUnitRange.of(TimeUnit.HOUR, null), TimeUnitRange.HOUR);
+    assertSame(TimeUnitRange.of(TimeUnit.HOUR, TimeUnit.MINUTE), TimeUnitRange.HOUR_TO_MINUTE);
+    assertSame(TimeUnitRange.of(TimeUnit.HOUR, TimeUnit.SECOND), TimeUnitRange.HOUR_TO_SECOND);
+    assertSame(TimeUnitRange.of(TimeUnit.MINUTE, null), TimeUnitRange.MINUTE);
+    assertSame(TimeUnitRange.of(TimeUnit.MINUTE, TimeUnit.SECOND), TimeUnitRange.MINUTE_TO_SECOND);
+    assertSame(TimeUnitRange.of(TimeUnit.SECOND, null), TimeUnitRange.SECOND);
+    assertSame(TimeUnitRange.of(TimeUnit.ISOYEAR, null), TimeUnitRange.ISOYEAR);
+    assertSame(TimeUnitRange.of(TimeUnit.QUARTER, null), TimeUnitRange.QUARTER);
+    assertSame(TimeUnitRange.of(TimeUnit.WEEK, null), TimeUnitRange.WEEK);
+    assertSame(TimeUnitRange.of(TimeUnit.MILLISECOND, null), TimeUnitRange.MILLISECOND);
+    assertSame(TimeUnitRange.of(TimeUnit.MICROSECOND, null), TimeUnitRange.MICROSECOND);
+    assertSame(TimeUnitRange.of(TimeUnit.NANOSECOND, null), TimeUnitRange.NANOSECOND);
+    assertSame(TimeUnitRange.of(TimeUnit.DOW, null), TimeUnitRange.DOW);
+    assertSame(TimeUnitRange.of(TimeUnit.ISODOW, null), TimeUnitRange.ISODOW);
+    assertSame(TimeUnitRange.of(TimeUnit.DOY, null), TimeUnitRange.DOY);
+    assertSame(TimeUnitRange.of(TimeUnit.EPOCH, null), TimeUnitRange.EPOCH);
+    assertSame(TimeUnitRange.of(TimeUnit.DECADE, null), TimeUnitRange.DECADE);
+    assertSame(TimeUnitRange.of(TimeUnit.CENTURY, null), TimeUnitRange.CENTURY);
+    assertSame(TimeUnitRange.of(TimeUnit.MILLENNIUM, null), TimeUnitRange.MILLENNIUM);
+  }
+
+  @Test public void testTimeUnitMultipliers() {
+    assertEquals(TimeUnit.NANOSECOND.multiplier,
+        TimeUnit.MICROSECOND.multiplier.divide(BigDecimal.valueOf(1000)));
+    assertEquals(TimeUnit.MICROSECOND.multiplier,
+        TimeUnit.MILLISECOND.multiplier.divide(BigDecimal.valueOf(1000)));
+    assertEquals(TimeUnit.MILLISECOND.multiplier,
+        TimeUnit.SECOND.multiplier.divide(BigDecimal.valueOf(1000)));
+    assertEquals(BigDecimal.valueOf(60),
+        TimeUnit.HOUR.multiplier.divide(TimeUnit.MINUTE.multiplier));
+    assertEquals(BigDecimal.valueOf(60),
+        TimeUnit.MINUTE.multiplier.divide(TimeUnit.SECOND.multiplier));
+    assertEquals(BigDecimal.valueOf(24),
+        TimeUnit.DAY.multiplier.divide(TimeUnit.HOUR.multiplier));
+    assertEquals(BigDecimal.valueOf(7),
+        TimeUnit.WEEK.multiplier.divide(TimeUnit.DAY.multiplier));
+    assertEquals(BigDecimal.valueOf(4),
+        TimeUnit.YEAR.multiplier.divide(TimeUnit.QUARTER.multiplier));
+    assertEquals(BigDecimal.valueOf(12),
+        TimeUnit.YEAR.multiplier.divide(TimeUnit.MONTH.multiplier));
+    assertEquals(BigDecimal.valueOf(12),
+        TimeUnit.ISOYEAR.multiplier.divide(TimeUnit.MONTH.multiplier));
+    assertEquals(BigDecimal.valueOf(3),
+        TimeUnit.QUARTER.multiplier.divide(TimeUnit.MONTH.multiplier));
+    assertEquals(BigDecimal.valueOf(10),
+        TimeUnit.DECADE.multiplier.divide(TimeUnit.YEAR.multiplier));
+    assertEquals(BigDecimal.valueOf(100),
+        TimeUnit.CENTURY.multiplier.divide(TimeUnit.YEAR.multiplier));
+    assertEquals(BigDecimal.valueOf(1000),
+        TimeUnit.MILLENNIUM.multiplier.divide(TimeUnit.YEAR.multiplier));
+  }
+
   @Test public void testUnixDateToString() {
     // Verify these using the "date" command. E.g.
     // $ date -u --date="@$(expr 10957 \* 86400)"