/** * Subtracts a {@link Duration} from this Julian date, producing a new Julian date. * @param duration The duration to subtract. * @return A new {@link JulianDate} that is the result of the subtraction. */ @CS2JWarning("Unhandled attribute removed: Pure") @Nonnull public final JulianDate subtract(@Nonnull Duration duration) { return add(new Duration(-duration.getDays(), -duration.getSeconds())); }
@Nonnull private final JulianDate addIgnoringTimeStandard(@Nonnull Duration duration) { int days = getDay() + duration.getDays(); double seconds = getSecondsOfDay() + duration.getSeconds(); return new JulianDate(days, seconds, getStandard()); }
/** * Tests the Duration constructors that take days, minutes, hours, and seconds. */ @Test public final void testDaysHoursMinutesSecondsConstructors() { Duration duration = new Duration(1, 1, 1, 1.0); Assert.assertEquals((int) 1, (int) duration.getDays()); Assert.assertEquals(3661, duration.getSeconds(), 0d); }
/** * Tests that initialization produces a {@link Duration} which is normalized with the seconds element in the range -86400.0 < seconds < 86400.0. */ @Test public final void testSecondsGreaterThanADay() { Duration duration = new Duration(0, 107000.0); Assert.assertEquals((int) 1, (int) duration.getDays()); Assert.assertEquals(20600.0, duration.getSeconds(), 0d); }
/** * Tests construction of a {@link Duration} with a really small negative seconds. Duration will attempt to eliminate the negative Seconds by rolling the Days back one day, but doing so results in setting the Seconds to 86400.0 seconds. This is still not normalized, so Duration should bump the Days back up and round the Seconds to 0.0. */ @Test public final void testReallySmallSeconds() { Duration duration = new Duration(10, -Constants.Epsilon13); Assert.assertEquals((int) duration.getDays(), (int) 10); Assert.assertEquals(0.0, duration.getSeconds(), 0d); duration = new Duration(-10, Constants.Epsilon13); Assert.assertEquals((int) duration.getDays(), (int) -10); Assert.assertEquals(0.0, duration.getSeconds(), 0d); }
/** * Tests that initialization produces a {@link Duration} in canonical form with day and seconds elements being either both positive or both negative. */ @Test public final void testNormalization() { // A duration's day and time should either be both negative or both positive Duration duration = new Duration(1, 100.0); Assert.assertEquals((int) 1, (int) duration.getDays()); Assert.assertEquals(100.0, duration.getSeconds(), 0d); duration = new Duration(-1, -100.0); Assert.assertEquals((int) -1, (int) duration.getDays()); Assert.assertEquals(-100.0, duration.getSeconds(), 0d); duration = new Duration(-1, 100.0); Assert.assertEquals((int) 0, (int) duration.getDays()); Assert.assertEquals(-86300.0, duration.getSeconds(), 0d); duration = new Duration(1, -100.0); Assert.assertEquals((int) 0, (int) duration.getDays()); Assert.assertEquals(86300.0, duration.getSeconds(), 0d); }
/** * Tests the Duration.AddDays method. */ @Test public final void testAddDays() { Duration test = new Duration(5, 43200.0); Duration result = test.addDays(45.5); Assert.assertEquals((int) 51, (int) result.getDays()); Assert.assertEquals(0.0, result.getSeconds(), 0d); }
/** * Tests the Duration.AddSeconds method. */ @Test public final void testAddSeconds() { Duration test = new Duration(5, 43200.0); Duration result = test.addSeconds(45.123); Assert.assertEquals((int) 5, (int) result.getDays()); Assert.assertEquals(43245.123, result.getSeconds(), 0d); }
/** * Tests that {@code MinValue} ({@link Duration#getMinValue get}), {@code MaxValue} ({@link Duration#getMaxValue get}), and {@code Zero} ({@link Duration#getZero get}) can be constructed as claimed. */ @Test public final void testMinValueMaxValueZeroValue() { Duration min = Duration.fromSeconds(Duration.getMinValue().getTotalSeconds()); Assert.assertEquals((int) Integer.MIN_VALUE, (int) min.getDays()); Assert.assertEquals(0.0, min.getSeconds(), 0d); Duration max = Duration.fromSeconds(Duration.getMaxValue().getTotalSeconds()); Assert.assertEquals((int) Integer.MAX_VALUE, (int) max.getDays()); Assert.assertEquals(0.0, max.getSeconds(), 0d); Duration zero = Duration.fromSeconds(Duration.getZero().getTotalSeconds()); Assert.assertEquals(0.0, zero.getDays(), 0d); Assert.assertEquals(0.0, zero.getSeconds(), 0d); }
/** * Tests the addition operation between two {@link Duration} instances with unspecified time standards. */ @Test public final void testAddition() { Duration original = new Duration(5, 1000.0); Duration add = Duration.fromSeconds(50.0); Duration result = Duration.add(original, add); Assert.assertEquals((int) 5, (int) result.getDays()); Assert.assertEquals(1050.0, result.getSeconds(), 0d); original = new Duration(5, 8382.1); add = new Duration(1, 10.0); result = Duration.add(original, add); Assert.assertEquals((int) 6, (int) result.getDays()); Assert.assertEquals(8392.1, result.getSeconds(), 0d); original = new Duration(5, 86000.0); add = Duration.fromSeconds(1000.0); result = Duration.add(original, add); Assert.assertEquals((int) 6, (int) result.getDays()); Assert.assertEquals(600.0, result.getSeconds(), 0d); }
second = new Duration(6, 2000.0); difference = Duration.subtract(second, first); Assert.assertEquals((int) 1, (int) difference.getDays()); Assert.assertEquals(1000.0, difference.getSeconds(), 0d); difference = Duration.subtract(first, second); Assert.assertEquals((int) -1, (int) difference.getDays()); Assert.assertEquals(-1000.0, difference.getSeconds(), 0d); first = new Duration(5, 86000.0); second = new Duration(6, 100.0); difference = Duration.subtract(second, first); Assert.assertEquals((int) 0, (int) difference.getDays()); Assert.assertEquals(500.0, difference.getSeconds(), 0d); difference = Duration.subtract(first, second); Assert.assertEquals((int) 0, (int) difference.getDays()); Assert.assertEquals(-500.0, difference.getSeconds(), 0d);
/** * Tests the subtraction operation between Julian dates. */ @Test public final void testSubtraction() { JulianDate first = new JulianDate(2469477, 1000.0); JulianDate second = new JulianDate(2469477, 2000.0); Duration difference = JulianDate.subtract(second, first); Assert.assertEquals(1000.0, difference.getTotalSeconds(), 0d); difference = JulianDate.subtract(first, second); Assert.assertEquals(-1000.0, difference.getTotalSeconds(), 0d); first = new JulianDate(2469477, 1000.0); second = new JulianDate(2469478, 2000.0); difference = JulianDate.subtract(second, first); Assert.assertEquals((int) 1, (int) difference.getDays()); Assert.assertEquals(1000.0, difference.getSeconds(), 0d); difference = JulianDate.subtract(first, second); Assert.assertEquals((int) -1, (int) difference.getDays()); Assert.assertEquals(-1000.0, difference.getSeconds(), 0d); first = new JulianDate(2469477, 86000.0); second = new JulianDate(2469478, 100.0); difference = JulianDate.subtract(second, first); Assert.assertEquals((int) 0, (int) difference.getDays()); Assert.assertEquals(500.0, difference.getSeconds(), 0d); difference = JulianDate.subtract(first, second); Assert.assertEquals((int) 0, (int) difference.getDays()); Assert.assertEquals(-500.0, difference.getSeconds(), 0d); }
result = Duration.divide(duration, -0.5); Assert.assertEquals(-12 * 3600, result.getSeconds(), 0d); Assert.assertEquals((int) -1, (int) result.getDays()); duration = new Duration(1, 4 * 3600); result = Duration.divide(duration, -2D); Assert.assertEquals(-14 * 3600, result.getSeconds(), 0d); Assert.assertEquals((int) 0, (int) result.getDays());
result = Duration.multiply(duration, -2D); Assert.assertEquals(-12 * 3600, result.getSeconds(), 0d); Assert.assertEquals((int) -1, (int) result.getDays()); duration = new Duration(1, 4 * 3600); result = Duration.multiply(duration, -0.5); Assert.assertEquals(-14 * 3600, result.getSeconds(), 0d); Assert.assertEquals((int) 0, (int) result.getDays());