/* Copyright 2002-2017 CS Systèmes d'Information
* Licensed to CS Systèmes d'Information (CS) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* CS 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.orekit.time;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.orekit.Utils;
import org.orekit.errors.OrekitException;
import org.orekit.utils.Constants;
import org.orekit.utils.IERSConventions;
public class GMSTScaleTest {
@Test
// reference: http://www.astro.umd.edu/~jph/GST_eqn.pdf
public void testReference() throws OrekitException {
Assert.assertEquals("GMST", gmst.toString());
AbsoluteDate date = new AbsoluteDate(2001, 10, 3, 6, 30, 0.0,
TimeScalesFactory.getUT1(IERSConventions.IERS_2010, true));
DateTimeComponents gmstComponents = date.getComponents(gmst);
Assert.assertEquals(2001, gmstComponents.getDate().getYear());
Assert.assertEquals( 10, gmstComponents.getDate().getMonth());
Assert.assertEquals( 3, gmstComponents.getDate().getDay());
Assert.assertEquals( 7, gmstComponents.getTime().getHour());
Assert.assertEquals( 18, gmstComponents.getTime().getMinute());
Assert.assertEquals(8.329, gmstComponents.getTime().getSecond(), 4.0e-4);
}
@Test
public void testSymmetry() {
for (double dt = -10000; dt < 10000; dt += 123.456789) {
AbsoluteDate date = AbsoluteDate.J2000_EPOCH.shiftedBy(dt * Constants.JULIAN_DAY);
double dt1 = gmst.offsetFromTAI(date);
DateTimeComponents components = date.getComponents(gmst);
double dt2 = gmst.offsetToTAI(components.getDate(), components.getTime());
Assert.assertEquals( 0.0, dt1 + dt2, 1.0e-10);
}
}
@Test
public void testDuringLeap() throws OrekitException {
final TimeScale utc = TimeScalesFactory.getUTC();
final TimeScale scale = gmst;
final AbsoluteDate before = new AbsoluteDate(new DateComponents(1983, 06, 30),
new TimeComponents(23, 59, 59),
utc);
final AbsoluteDate during = before.shiftedBy(1.25);
Assert.assertEquals(61, utc.minuteDuration(during));
Assert.assertEquals(1.0, utc.getLeap(during), 1.0e-10);
Assert.assertEquals(60, scale.minuteDuration(during));
Assert.assertEquals(0.0, scale.getLeap(during), 1.0e-10);
}
@Before
public void setUp() throws OrekitException {
Utils.setDataRoot("regular-data");
gmst = TimeScalesFactory.getGMST(IERSConventions.IERS_2010, false);
}
@After
public void tearDown() {
gmst = null;
}
private TimeScale gmst;
}