1   package org.orekit.time;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   import org.junit.Assert;
7   import org.junit.Before;
8   import org.junit.Test;
9   import org.orekit.Utils;
10  import org.orekit.data.LazyLoadedDataContext;
11  import org.orekit.utils.IERSConventions;
12  
13  /**
14   * Unit tests for {@link LazyLoadedTimeScales}.
15   *
16   * @author Evan Ward
17   */
18  public class LazyLoadedTimeScalesTest {
19  
20      /** Subject under test. */
21      private LazyLoadedTimeScales timeScales;
22  
23      /** Create subject under test. */
24      @Before
25      public void setUp() {
26          LazyLoadedDataContext defaultContext =
27                  (LazyLoadedDataContext) Utils.setDataRoot("regular-data");
28          timeScales = defaultContext.getTimeScales();
29      }
30  
31      /**
32       * Check {@link LazyLoadedTimeScales#getGMST(IERSConventions, boolean)} uses it's
33       * parameters. See issue #627.
34       */
35      @Test
36      public void testGetGMST() {
37          DateTimeComponents reference = new DateTimeComponents(2000, 1, 1, 12, 0, 0.0);
38          List<TimeScale> scales = new ArrayList<>();
39  
40          for (IERSConventions conventions : IERSConventions.values()) {
41              for (boolean simpleEop : new boolean[]{true, false}) {
42                  // setup
43                  GMSTScale gmst = timeScales.getGMST(conventions, simpleEop);
44                  UT1Scale ut1 = timeScales.getUT1(conventions, simpleEop);
45                  AbsoluteDate date = new AbsoluteDate(reference, ut1);
46                  String message = conventions + " " + simpleEop;
47  
48                  // verify
49                  Assert.assertSame(message, gmst, timeScales.getGMST(conventions, simpleEop));
50                  double expected = 24110.54841 + ut1.offsetFromTAI(date);
51                  Assert.assertEquals(message, expected, gmst.offsetFromTAI(date), 0);
52                  Assert.assertTrue(message + " " + scales, !scales.contains(gmst));
53                  scales.add(gmst);
54              }
55          }
56      }
57  
58      /** Check {@link LazyLoadedTimeScales#getUT1(IERSConventions, boolean)}. */
59      @Test
60      public void testGetUt1() {
61          UTCScale utc = timeScales.getUTC();
62          DateTimeComponents reference = new DateTimeComponents(2004, 2, 1);
63          AbsoluteDate date = new AbsoluteDate(reference, utc);
64          List<TimeScale> scales = new ArrayList<>();
65  
66          for (IERSConventions conventions : IERSConventions.values()) {
67              for (boolean simpleEop : new boolean[]{true, false}) {
68                  // setup
69                  UT1Scale ut1 = timeScales.getUT1(conventions, simpleEop);
70                  String message = conventions + " " + simpleEop;
71  
72                  // verify
73                  Assert.assertSame(message, ut1, timeScales.getUT1(conventions, simpleEop));
74                  Assert.assertSame(ut1.getEOPHistory().getConventions(), conventions);
75                  double expected = utc.offsetFromTAI(date);
76                  if (conventions != IERSConventions.IERS_1996) {
77                      expected += -0.4051590;
78                  }
79                  if (!simpleEop) {
80                      expected += conventions.getEOPTidalCorrection(timeScales).value(date)[2];
81                  }
82                  Assert.assertEquals(message, expected, ut1.offsetFromTAI(date), 0);
83                  Assert.assertTrue(message + " " + scales, !scales.contains(ut1));
84                  scales.add(ut1);
85              }
86          }
87      }
88  
89  }