1   /* Copyright 2002-2025 CS GROUP
2    * Licensed to CS GROUP (CS) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * CS licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *   http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.orekit.forces.gravity.potential;
18  
19  import org.junit.jupiter.api.Assertions;
20  import org.junit.jupiter.api.BeforeEach;
21  import org.junit.jupiter.api.Test;
22  import org.orekit.Utils;
23  import org.orekit.data.DataContext;
24  import org.orekit.errors.OrekitException;
25  import org.orekit.errors.OrekitMessages;
26  
27  import java.util.List;
28  
29  public class FESCnmSnmReaderTest {
30  
31      @Test
32      void testCorruptedNumberFile() {
33          try {
34              OceanTidesReader reader = new FESCnmSnmReader("fes2004-corrupted-line.dat", 1.0e-11);
35              reader.setMaxParseDegree(5);
36              reader.setMaxParseOrder(5);
37               DataContext.getDefault().getDataProvidersManager().feed(reader.getSupportedNames(), reader);
38              Assertions.fail("an exception should have been thrown");
39          } catch (OrekitException oe) {
40              Assertions.assertEquals(OrekitMessages.UNABLE_TO_PARSE_LINE_IN_FILE, oe.getSpecifier());
41              Assertions.assertEquals(9, ((Integer) oe.getParts()[0]).intValue());
42              Assertions.assertEquals(" 56.554 Sa    3   0   0.00###  -0.00050    -0.00000  -0.00000", oe.getParts()[2]);
43          }
44      }
45  
46      @Test
47      void testUnsupportedDegreeFile() {
48          try {
49              OceanTidesReader reader = new FESCnmSnmReader("fes2004_Cnm-Snm-8x8.dat", 1.0e-11);
50              reader.setMaxParseDegree(20);
51              reader.setMaxParseOrder(5);
52              DataContext.getDefault().getDataProvidersManager().feed(reader.getSupportedNames(), reader);
53              Assertions.fail("an exception should have been thrown");
54          } catch (OrekitException oe) {
55              Assertions.assertEquals(OrekitMessages.OCEAN_TIDE_DATA_DEGREE_ORDER_LIMITS, oe.getSpecifier());
56              Assertions.assertEquals(8, ((Integer) oe.getParts()[1]).intValue());
57              Assertions.assertEquals(8, ((Integer) oe.getParts()[2]).intValue());
58          }
59      }
60  
61      @Test
62      void testUnsupportedOrderFile() {
63          try {
64              OceanTidesReader reader = new FESCnmSnmReader("fes2004_Cnm-Snm-8x8.dat", 1.0e-11);
65              reader.setMaxParseDegree(5);
66              reader.setMaxParseOrder(20);
67              DataContext.getDefault().getDataProvidersManager().feed(reader.getSupportedNames(), reader);
68              Assertions.fail("an exception should have been thrown");
69          } catch (OrekitException oe) {
70              Assertions.assertEquals(OrekitMessages.OCEAN_TIDE_DATA_DEGREE_ORDER_LIMITS, oe.getSpecifier());
71              Assertions.assertEquals(8, ((Integer) oe.getParts()[1]).intValue());
72              Assertions.assertEquals(8, ((Integer) oe.getParts()[2]).intValue());
73          }
74      }
75  
76      @Test
77      void testTruncatedModelFile()
78          {
79          OceanTidesReader reader = new FESCnmSnmReader("fes2004_Cnm-Snm-8x8.dat", 1.0e-11);
80          reader.setMaxParseDegree(5);
81          reader.setMaxParseOrder(5);
82          DataContext.getDefault().getDataProvidersManager().feed(reader.getSupportedNames(), reader);
83          List<OceanTidesWave> waves = reader.getWaves();
84          Assertions.assertEquals(18, waves.size());
85          for (OceanTidesWave wave : waves) {
86              switch (wave.getDoodson()) {
87                  case 55565:
88                  case 55575:
89                      Assertions.assertEquals(2, wave.getMaxDegree());
90                      Assertions.assertEquals(0, wave.getMaxOrder());
91                      break;
92                  case 56554:
93                  case 57555:
94                  case 65455:
95                  case 75555:
96                  case 85455:
97                  case 93555:
98                  case 135655:
99                  case 145555:
100                 case 163555:
101                 case 165555:
102                 case 235755:
103                 case 245655:
104                 case 255555:
105                 case 273555:
106                 case 275555:
107                 case 455555:
108                     Assertions.assertEquals(5, wave.getMaxDegree());
109                     Assertions.assertEquals(5, wave.getMaxOrder());
110                     break;
111                 default:
112                     Assertions.fail("unexpected wave " + wave.getDoodson());
113             }
114         }
115     }
116 
117     @BeforeEach
118     public void setUp() {
119         Utils.setDataRoot("regular-data:tides");
120     }
121 
122 }