1 /*
   2  * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /*
  25  * This file is available under and governed by the GNU General Public
  26  * License version 2 only, as published by the Free Software Foundation.
  27  * However, the following notice accompanied the original version of this
  28  * file:
  29  *
  30  * Copyright (c) 2008-2012, Stephen Colebourne & Michael Nascimento Santos
  31  *
  32  * All rights reserved.
  33  *
  34  * Redistribution and use in source and binary forms, with or without
  35  * modification, are permitted provided that the following conditions are met:
  36  *
  37  *  * Redistributions of source code must retain the above copyright notice,
  38  *    this list of conditions and the following disclaimer.
  39  *
  40  *  * Redistributions in binary form must reproduce the above copyright notice,
  41  *    this list of conditions and the following disclaimer in the documentation
  42  *    and/or other materials provided with the distribution.
  43  *
  44  *  * Neither the name of JSR-310 nor the names of its contributors
  45  *    may be used to endorse or promote products derived from this software
  46  *    without specific prior written permission.
  47  *
  48  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  49  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  50  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  51  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  52  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  53  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  54  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  55  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  56  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  57  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  58  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  59  */
  60 package test.java.time;
  61 
  62 import static org.testng.Assert.assertEquals;
  63 import static org.testng.Assert.assertSame;
  64 import static org.testng.Assert.assertTrue;
  65 
  66 import java.time.LocalDate;
  67 import java.time.LocalDateTime;
  68 import java.time.LocalTime;
  69 import java.time.Period;
  70 import java.time.temporal.ChronoUnit;
  71 
  72 import org.testng.annotations.DataProvider;
  73 import org.testng.annotations.Test;
  74 
  75 /**
  76  * Test LocalDateTime.
  77  */
  78 @Test
  79 public class TestLocalDateTime extends AbstractTest {
  80 
  81     private LocalDateTime TEST_2007_07_15_12_30_40_987654321 = LocalDateTime.of(2007, 7, 15, 12, 30, 40, 987654321);
  82 
  83     //-----------------------------------------------------------------------
  84     @Test
  85     public void test_immutable() {
  86         assertImmutable(LocalDateTime.class);
  87     }
  88 
  89     //-----------------------------------------------------------------------
  90     @DataProvider(name="sampleDates")
  91     Object[][] provider_sampleDates() {
  92         return new Object[][] {
  93             {2008, 7, 5},
  94             {2007, 7, 5},
  95             {2006, 7, 5},
  96             {2005, 7, 5},
  97             {2004, 1, 1},
  98             {-1, 1, 2},
  99         };
 100     }
 101 
 102     @DataProvider(name="sampleTimes")
 103     Object[][] provider_sampleTimes() {
 104         return new Object[][] {
 105             {0, 0, 0, 0},
 106             {0, 0, 0, 1},
 107             {0, 0, 1, 0},
 108             {0, 0, 1, 1},
 109             {0, 1, 0, 0},
 110             {0, 1, 0, 1},
 111             {0, 1, 1, 0},
 112             {0, 1, 1, 1},
 113             {1, 0, 0, 0},
 114             {1, 0, 0, 1},
 115             {1, 0, 1, 0},
 116             {1, 0, 1, 1},
 117             {1, 1, 0, 0},
 118             {1, 1, 0, 1},
 119             {1, 1, 1, 0},
 120             {1, 1, 1, 1},
 121         };
 122     }
 123 
 124     @Test
 125     public void test_withYear_int_noChange() {
 126         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.withYear(2007);
 127         assertSame(t.toLocalDate(), TEST_2007_07_15_12_30_40_987654321.toLocalDate());
 128         assertSame(t.toLocalTime(), TEST_2007_07_15_12_30_40_987654321.toLocalTime());
 129     }
 130 
 131     @Test
 132     public void test_withMonth_int_noChange() {
 133         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.withMonth(7);
 134         assertSame(t.toLocalDate(), TEST_2007_07_15_12_30_40_987654321.toLocalDate());
 135         assertSame(t.toLocalTime(), TEST_2007_07_15_12_30_40_987654321.toLocalTime());
 136     }
 137 
 138     @Test
 139     public void test_withDayOfMonth_noChange() {
 140         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.withDayOfMonth(15);
 141         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 142     }
 143 
 144     @Test
 145     public void test_withDayOfYear_noChange() {
 146         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.withDayOfYear(31 + 28 + 31 + 30 + 31 + 30 + 15);
 147         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 148     }
 149 
 150     @Test
 151     public void test_withHour_noChange() {
 152         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.withHour(12);
 153         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 154     }
 155 
 156     @Test
 157     public void test_withHour_toMidnight() {
 158         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(1, 0)).withHour(0);
 159         assertSame(t.toLocalTime(), LocalTime.MIDNIGHT);
 160     }
 161 
 162     @Test
 163     public void test_withHour_toMidday() {
 164         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(1, 0)).withHour(12);
 165         assertSame(t.toLocalTime(), LocalTime.NOON);
 166     }
 167 
 168     @Test
 169     public void test_withMinute_noChange() {
 170         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.withMinute(30);
 171         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 172     }
 173 
 174     @Test
 175     public void test_withMinute_toMidnight() {
 176         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(0, 1)).withMinute(0);
 177         assertSame(t.toLocalTime(), LocalTime.MIDNIGHT);
 178     }
 179 
 180     @Test
 181     public void test_withMinute_toMidday() {
 182         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(12, 1)).withMinute(0);
 183         assertSame(t.toLocalTime(), LocalTime.NOON);
 184     }
 185 
 186     @Test
 187     public void test_withSecond_noChange() {
 188         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.withSecond(40);
 189         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 190     }
 191 
 192     @Test
 193     public void test_withSecond_toMidnight() {
 194         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(0, 0, 1)).withSecond(0);
 195         assertSame(t.toLocalTime(), LocalTime.MIDNIGHT);
 196     }
 197 
 198     @Test
 199     public void test_withSecond_toMidday() {
 200         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(12, 0, 1)).withSecond(0);
 201         assertSame(t.toLocalTime(), LocalTime.NOON);
 202     }
 203 
 204     @Test
 205     public void test_withNanoOfSecond_noChange() {
 206         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.withNano(987654321);
 207         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 208     }
 209 
 210     @Test
 211     public void test_withNanoOfSecond_toMidnight() {
 212         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(0, 0, 0, 1)).withNano(0);
 213         assertSame(t.toLocalTime(), LocalTime.MIDNIGHT);
 214     }
 215 
 216     @Test
 217     public void test_withNanoOfSecond_toMidday() {
 218         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(12, 0, 0, 1)).withNano(0);
 219         assertSame(t.toLocalTime(), LocalTime.NOON);
 220     }
 221 
 222     @Test
 223     public void test_plus_adjuster_zero() {
 224         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.plus(Period.ZERO);
 225         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 226     }
 227 
 228     @Test
 229     public void test_plus_Period_zero() {
 230         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.plus(MockSimplePeriod.ZERO_DAYS);
 231         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 232     }
 233 
 234     @Test
 235     public void test_plus_longPeriodUnit_zero() {
 236         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.plus(0, ChronoUnit.DAYS);
 237         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 238     }
 239 
 240     @Test
 241     public void test_plusYears_int_noChange() {
 242         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.plusYears(0);
 243         assertSame(TEST_2007_07_15_12_30_40_987654321, t);
 244     }
 245 
 246     @Test
 247     public void test_plusMonths_int_noChange() {
 248         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.plusMonths(0);
 249         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 250     }
 251 
 252     @Test
 253     public void test_plusWeeks_noChange() {
 254         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.plusWeeks(0);
 255         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 256     }
 257 
 258     @Test
 259     public void test_plusDays_noChange() {
 260         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.plusDays(0);
 261         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 262     }
 263 
 264     @Test
 265     public void test_plusHours_noChange() {
 266         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.plusHours(0);
 267         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 268     }
 269 
 270     @Test
 271     public void test_plusHours_toMidnight() {
 272         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(23, 0)).plusHours(1);
 273         assertSame(t.toLocalTime(), LocalTime.MIDNIGHT);
 274     }
 275 
 276     @Test
 277     public void test_plusHours_toMidday() {
 278         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(11, 0)).plusHours(1);
 279         assertSame(t.toLocalTime(), LocalTime.NOON);
 280     }
 281 
 282     @Test
 283     public void test_plusMinutes_noChange() {
 284         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.plusMinutes(0);
 285         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 286     }
 287 
 288     @Test
 289     public void test_plusMinutes_noChange_oneDay_same() {
 290         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.plusMinutes(24 * 60);
 291         assertSame(t.toLocalTime(), TEST_2007_07_15_12_30_40_987654321.toLocalTime());
 292     }
 293 
 294     @Test
 295     public void test_plusMinutes_toMidnight() {
 296         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(23, 59)).plusMinutes(1);
 297         assertSame(t.toLocalTime(), LocalTime.MIDNIGHT);
 298     }
 299 
 300     @Test
 301     public void test_plusMinutes_toMidday() {
 302         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(11, 59)).plusMinutes(1);
 303         assertSame(t.toLocalTime(), LocalTime.NOON);
 304     }
 305 
 306     @Test
 307     public void test_plusSeconds_noChange() {
 308         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.plusSeconds(0);
 309         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 310     }
 311 
 312     @Test
 313     public void test_plusSeconds_noChange_oneDay_same() {
 314         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.plusSeconds(24 * 60 * 60);
 315         assertSame(t.toLocalTime(), TEST_2007_07_15_12_30_40_987654321.toLocalTime());
 316     }
 317 
 318     @Test
 319     public void test_plusSeconds_toMidnight() {
 320         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(23, 59, 59)).plusSeconds(1);
 321         assertSame(t.toLocalTime(), LocalTime.MIDNIGHT);
 322     }
 323 
 324     @Test
 325     public void test_plusSeconds_toMidday() {
 326         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(11, 59, 59)).plusSeconds(1);
 327         assertSame(t.toLocalTime(), LocalTime.NOON);
 328     }
 329 
 330     @Test
 331     public void test_plusNanos_noChange() {
 332         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.plusNanos(0);
 333         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 334     }
 335 
 336     @Test
 337     public void test_plusNanos_noChange_oneDay_same() {
 338         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.plusNanos(24 * 60 * 60 * 1000000000L);
 339         assertSame(t.toLocalTime(), TEST_2007_07_15_12_30_40_987654321.toLocalTime());
 340     }
 341 
 342     @Test
 343     public void test_plusNanos_toMidnight() {
 344         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(23, 59, 59, 999999999)).plusNanos(1);
 345         assertSame(t.toLocalTime(), LocalTime.MIDNIGHT);
 346     }
 347 
 348     @Test
 349     public void test_plusNanos_toMidday() {
 350         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(11, 59, 59, 999999999)).plusNanos(1);
 351         assertSame(t.toLocalTime(), LocalTime.NOON);
 352     }
 353 
 354     @Test
 355     public void test_minus_adjuster_zero() {
 356         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.minus(Period.ZERO);
 357         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 358     }
 359 
 360     @Test
 361     public void test_minus_Period_zero() {
 362         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.minus(MockSimplePeriod.ZERO_DAYS);
 363         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 364     }
 365 
 366     @Test
 367     public void test_minus_longPeriodUnit_zero() {
 368         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.minus(0, ChronoUnit.DAYS);
 369         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 370     }
 371 
 372     @Test
 373     public void test_minusYears_int_noChange() {
 374         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.minusYears(0);
 375         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 376     }
 377 
 378     @Test
 379     public void test_minusMonths_int_noChange() {
 380         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.minusMonths(0);
 381         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 382     }
 383 
 384     @Test
 385     public void test_minusWeeks_noChange() {
 386         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.minusWeeks(0);
 387         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 388     }
 389 
 390     @Test
 391     public void test_minusDays_noChange() {
 392         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.minusDays(0);
 393         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 394     }
 395 
 396     @Test
 397     public void test_minusHours_noChange() {
 398         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.minusHours(0);
 399         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 400     }
 401 
 402     @Test
 403     public void test_minusHours_toMidnight() {
 404         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(1, 0)).minusHours(1);
 405         assertSame(t.toLocalTime(), LocalTime.MIDNIGHT);
 406     }
 407 
 408     @Test
 409     public void test_minusHours_toMidday() {
 410         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(13, 0)).minusHours(1);
 411         assertSame(t.toLocalTime(), LocalTime.NOON);
 412     }
 413 
 414     @Test
 415     public void test_minusMinutes_noChange() {
 416         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.minusMinutes(0);
 417         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 418     }
 419 
 420     @Test
 421     public void test_minusMinutes_noChange_oneDay_same() {
 422         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.minusMinutes(24 * 60);
 423         assertSame(t.toLocalTime(), TEST_2007_07_15_12_30_40_987654321.toLocalTime());
 424     }
 425 
 426     @Test
 427     public void test_minusMinutes_toMidnight() {
 428         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(0, 1)).minusMinutes(1);
 429         assertSame(t.toLocalTime(), LocalTime.MIDNIGHT);
 430     }
 431 
 432     @Test
 433     public void test_minusMinutes_toMidday() {
 434         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(12, 1)).minusMinutes(1);
 435         assertSame(t.toLocalTime(), LocalTime.NOON);
 436     }
 437 
 438     @Test
 439     public void test_minusSeconds_noChange() {
 440         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.minusSeconds(0);
 441         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 442     }
 443 
 444     @Test
 445     public void test_minusSeconds_noChange_oneDay() {
 446         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.minusSeconds(24 * 60 * 60);
 447         assertEquals(t.toLocalDate(), TEST_2007_07_15_12_30_40_987654321.toLocalDate().minusDays(1));
 448         assertSame(t.toLocalTime(), TEST_2007_07_15_12_30_40_987654321.toLocalTime());
 449     }
 450 
 451     @Test
 452     public void test_minusSeconds_toMidnight() {
 453         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(0, 0, 1)).minusSeconds(1);
 454         assertSame(t.toLocalTime(), LocalTime.MIDNIGHT);
 455     }
 456 
 457     @Test
 458     public void test_minusSeconds_toMidday() {
 459         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(12, 0, 1)).minusSeconds(1);
 460         assertSame(t.toLocalTime(), LocalTime.NOON);
 461     }
 462 
 463     @Test
 464     public void test_minusNanos_noChange() {
 465         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.minusNanos(0);
 466         assertSame(t, TEST_2007_07_15_12_30_40_987654321);
 467     }
 468 
 469     @Test
 470     public void test_minusNanos_noChange_oneDay() {
 471         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.minusNanos(24 * 60 * 60 * 1000000000L);
 472         assertEquals(t.toLocalDate(), TEST_2007_07_15_12_30_40_987654321.toLocalDate().minusDays(1));
 473         assertSame(t.toLocalTime(), TEST_2007_07_15_12_30_40_987654321.toLocalTime());
 474     }
 475 
 476     @Test
 477     public void test_minusNanos_toMidnight() {
 478         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(0, 0, 0, 1)).minusNanos(1);
 479         assertSame(t.toLocalTime(), LocalTime.MIDNIGHT);
 480     }
 481 
 482     @Test
 483     public void test_minusNanos_toMidday() {
 484         LocalDateTime t = TEST_2007_07_15_12_30_40_987654321.with(LocalTime.of(12, 0, 0, 1)).minusNanos(1);
 485         assertSame(t.toLocalTime(), LocalTime.NOON);
 486     }
 487 
 488     //-----------------------------------------------------------------------
 489     // toLocalDate()
 490     //-----------------------------------------------------------------------
 491     @Test(dataProvider="sampleDates")
 492     public void test_getDate(int year, int month, int day) {
 493         LocalDate d = LocalDate.of(year, month, day);
 494         LocalDateTime dt = LocalDateTime.of(d, LocalTime.MIDNIGHT);
 495         assertSame(dt.toLocalDate(), d);
 496     }
 497 
 498     //-----------------------------------------------------------------------
 499     // toLocalTime()
 500     //-----------------------------------------------------------------------
 501     @Test(dataProvider="sampleTimes")
 502     public void test_getTime(int h, int m, int s, int ns) {
 503         LocalTime t = LocalTime.of(h, m, s, ns);
 504         LocalDateTime dt = LocalDateTime.of(LocalDate.of(2011, 7, 30), t);
 505         assertSame(dt.toLocalTime(), t);
 506     }
 507 
 508     void test_comparisons_LocalDateTime(LocalDate... localDates) {
 509         test_comparisons_LocalDateTime(
 510             localDates,
 511             LocalTime.MIDNIGHT,
 512             LocalTime.of(0, 0, 0, 999999999),
 513             LocalTime.of(0, 0, 59, 0),
 514             LocalTime.of(0, 0, 59, 999999999),
 515             LocalTime.of(0, 59, 0, 0),
 516             LocalTime.of(0, 59, 59, 999999999),
 517             LocalTime.NOON,
 518             LocalTime.of(12, 0, 0, 999999999),
 519             LocalTime.of(12, 0, 59, 0),
 520             LocalTime.of(12, 0, 59, 999999999),
 521             LocalTime.of(12, 59, 0, 0),
 522             LocalTime.of(12, 59, 59, 999999999),
 523             LocalTime.of(23, 0, 0, 0),
 524             LocalTime.of(23, 0, 0, 999999999),
 525             LocalTime.of(23, 0, 59, 0),
 526             LocalTime.of(23, 0, 59, 999999999),
 527             LocalTime.of(23, 59, 0, 0),
 528             LocalTime.of(23, 59, 59, 999999999)
 529         );
 530     }
 531 
 532     void test_comparisons_LocalDateTime(LocalDate[] localDates, LocalTime... localTimes) {
 533         LocalDateTime[] localDateTimes = new LocalDateTime[localDates.length * localTimes.length];
 534         int i = 0;
 535 
 536         for (LocalDate localDate : localDates) {
 537             for (LocalTime localTime : localTimes) {
 538                 localDateTimes[i++] = LocalDateTime.of(localDate, localTime);
 539             }
 540         }
 541 
 542         doTest_comparisons_LocalDateTime(localDateTimes);
 543     }
 544 
 545     void doTest_comparisons_LocalDateTime(LocalDateTime[] localDateTimes) {
 546         for (int i = 0; i < localDateTimes.length; i++) {
 547             LocalDateTime a = localDateTimes[i];
 548             for (int j = 0; j < localDateTimes.length; j++) {
 549                 LocalDateTime b = localDateTimes[j];
 550                 if (i < j) {
 551                     assertTrue(a.compareTo(b) < 0, a + " <=> " + b);
 552                     assertEquals(a.isBefore(b), true, a + " <=> " + b);
 553                     assertEquals(a.isAfter(b), false, a + " <=> " + b);
 554                     assertEquals(a.equals(b), false, a + " <=> " + b);
 555                 } else if (i > j) {
 556                     assertTrue(a.compareTo(b) > 0, a + " <=> " + b);
 557                     assertEquals(a.isBefore(b), false, a + " <=> " + b);
 558                     assertEquals(a.isAfter(b), true, a + " <=> " + b);
 559                     assertEquals(a.equals(b), false, a + " <=> " + b);
 560                 } else {
 561                     assertEquals(a.compareTo(b), 0, a + " <=> " + b);
 562                     assertEquals(a.isBefore(b), false, a + " <=> " + b);
 563                     assertEquals(a.isAfter(b), false, a + " <=> " + b);
 564                     assertEquals(a.equals(b), true, a + " <=> " + b);
 565                 }
 566             }
 567         }
 568     }
 569 
 570 }