1   /* Copyright 2002-2025 Airbus Defence and Space
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    * Airbus Defence and Space 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.utils;
18  
19  import java.io.File;
20  import java.util.HashMap;
21  import java.util.Map;
22  import org.junit.jupiter.api.Assertions;
23  import org.junit.jupiter.api.BeforeEach;
24  import org.junit.jupiter.api.Test;
25  import org.orekit.Utils;
26  
27  public class DataDictionaryTest {
28  
29      @Test
30      public void testEmpty() {
31          Assertions.assertTrue(new DataDictionary().getData().isEmpty());
32      }
33  
34      @Test
35      public void testPutGet() {
36          DataDictionary dictionary = new DataDictionary();
37          dictionary.put("a", new double[]{1.0, 2.0, 3.0});
38          dictionary.put("string", "Lorem Ipsum");
39          dictionary.put("int", 9);
40          File file = new File(".");
41          dictionary.put("object", file);
42  
43          Assertions.assertArrayEquals(new double[]{1.0, 2.0, 3.0}, ((double[]) dictionary.get("a")), 1.0e-15);
44          Assertions.assertEquals("Lorem Ipsum", ((String) dictionary.get("string")));
45          Assertions.assertEquals(9, dictionary.get("int"));
46          Assertions.assertEquals(file, dictionary.get("object"));
47      }
48  
49      @Test
50      public void testGetNotExisting() {
51          DataDictionary dictionary = new DataDictionary();
52          Assertions.assertNull(dictionary.get("not-a-key"));
53      }
54  
55      @Test
56      public void testFromDictionary() {
57          DataDictionary original = new DataDictionary();
58          original.put("string", "Lorem Ipsum");
59  
60          DataDictionary copy = new DataDictionary(original);
61          Assertions.assertEquals("Lorem Ipsum", ((String) copy.get("string")));
62      }
63  
64      @Test
65      public void testArraysAreCopied() {
66          DataDictionary dictionary = new DataDictionary();
67          double[] original = new double[]{1.0, 2.0, 3.0};
68          dictionary.put("a", original);
69          double[] retrieved = ((double[]) dictionary.get("a"));
70          Assertions.assertArrayEquals(original, retrieved, 1.0e-15);
71          Assertions.assertNotSame(original, retrieved);
72      }
73  
74      @Test
75      public void testIncrement() {
76          DataDictionary dictionary = new DataDictionary();
77          dictionary.put("a", new double[]{1.0, 2.0, 3.0});
78          dictionary.getEntry("a").increment(new double[]{2.0, 4.0, 8.0});
79          Assertions.assertArrayEquals(new double[]{3.0, 6.0, 11.0}, ((double[]) dictionary.get("a")), 1.0e-15);
80      }
81  
82      @Test
83      public void testScaledIncrement() {
84          DataDictionary dictionary = new DataDictionary();
85          dictionary.put("a", new double[]{1.0, 2.0, 3.0});
86          DoubleArrayDictionary other = new DoubleArrayDictionary();
87          other.put("aDot", new double[]{3.0, 2.0, 1.0});
88          dictionary.getEntry("a").scaledIncrement(2.0, other.getEntry("aDot"));
89          Assertions.assertArrayEquals(new double[]{7.0, 6.0, 5.0}, ((double[]) dictionary.get("a")), 1.0e-15);
90      }
91  
92      @Test
93      public void testZero() {
94          DataDictionary dictionary = new DataDictionary();
95          dictionary.put("a", new double[]{1.0, 2.0, 3.0});
96          dictionary.getEntry("a").zero();
97          Assertions.assertArrayEquals(new double[]{0.0, 0.0, 0.0}, ((double[]) dictionary.get("a")), 1.0e-15);
98      }
99  
100     @Test
101     public void testDataManagement() {
102         DataDictionary dictionary = new DataDictionary();
103         dictionary.put("a", new double[]{1.0, 2.0, 3.0});
104         dictionary.put("b", new double[]{4.0});
105         dictionary.put("another", new double[]{17.0});
106 
107         Assertions.assertEquals(3, dictionary.size());
108         Assertions.assertEquals("{a[3], b[1], another[1]}", dictionary.toString());
109 
110         Assertions.assertTrue(dictionary.remove("another"));
111         Assertions.assertEquals(2, dictionary.size());
112         Assertions.assertFalse(dictionary.remove("not-a-key"));
113         Assertions.assertEquals(2, dictionary.size());
114 
115         Assertions.assertEquals("a", dictionary.getData().get(0).getKey());
116         Assertions.assertEquals("b", dictionary.getData().get(1).getKey());
117 
118         dictionary.clear();
119         Assertions.assertTrue(dictionary.getData().isEmpty());
120     }
121 
122     @Test
123     public void testReplace() {
124         DataDictionary dictionary = new DataDictionary();
125         dictionary.put("a", new double[]{1.0, 2.0, 3.0});
126         dictionary.put("toreplace", "Lorem Ipsum");
127         dictionary.put("b", 9);
128         Assertions.assertEquals(3, dictionary.size());
129 
130         File file = new File(".");
131         dictionary.put("toreplace", file);
132         Assertions.assertEquals(3, dictionary.size());
133 
134         Assertions.assertArrayEquals(new double[]{1.0, 2.0, 3.0}, ((double[]) dictionary.get("a")), 1.0e-15);
135         Assertions.assertEquals(file, dictionary.get("toreplace"));
136         Assertions.assertEquals(9, dictionary.get("b"));
137         Assertions.assertEquals("a", dictionary.getData().get(0).getKey());
138         Assertions.assertEquals("b", dictionary.getData().get(1).getKey());
139         Assertions.assertEquals("toreplace", dictionary.getData().get(2).getKey());
140     }
141 
142     @Test
143     public void testPutAllDoublesMap() {
144         DataDictionary dictionary = new DataDictionary();
145         dictionary.put("a", new double[]{1.0, 2.0, 3.0});
146         dictionary.put("b", new double[]{4.0});
147         dictionary.put("another", new double[]{17.0});
148         Assertions.assertEquals(3, dictionary.size());
149 
150         final Map<String, double[]> map = new HashMap<>();
151         map.put("f", new double[]{12.0});
152         map.put("g", new double[]{-12.0});
153         map.put("b", new double[]{19.0});
154 
155         dictionary.putAllDoubles(map);
156         Assertions.assertEquals(5, dictionary.size());
157 
158         Assertions.assertArrayEquals(new double[]{1.0, 2.0, 3.0}, ((double[]) dictionary.get("a")), 1.0e-15);
159         Assertions.assertArrayEquals(new double[]{19.0}, ((double[]) dictionary.get("b")), 1.0e-15);
160         Assertions.assertArrayEquals(new double[]{17.0}, ((double[]) dictionary.get("another")), 1.0e-15);
161         Assertions.assertArrayEquals(new double[]{12.0}, ((double[]) dictionary.get("f")), 1.0e-15);
162         Assertions.assertArrayEquals(new double[]{-12.0}, ((double[]) dictionary.get("g")), 1.0e-15);
163     }
164 
165     @Test
166     public void testPutAllDictionary() {
167         DataDictionary dictionary = new DataDictionary();
168         dictionary.put("a", new double[]{1.0, 2.0, 3.0});
169         dictionary.put("b", new double[]{19.0});
170         dictionary.put("another", new double[]{17.0});
171         Assertions.assertEquals(3, dictionary.size());
172 
173         DataDictionary other = new DataDictionary();
174         dictionary.put("d", "Lorem Ipsum");
175         dictionary.put("e", 9);
176         File file = new File(".");
177         dictionary.put("another", file);
178 
179         dictionary.putAll(other);
180         Assertions.assertEquals(5, dictionary.size());
181 
182         Assertions.assertArrayEquals(new double[]{1.0, 2.0, 3.0}, ((double[]) dictionary.get("a")), 1.0e-15);
183         Assertions.assertArrayEquals(new double[]{19.0}, ((double[]) dictionary.get("b")), 1.0e-15);
184         Assertions.assertEquals(file, dictionary.get("another") );
185         Assertions.assertEquals("Lorem Ipsum", dictionary.get("d"));
186         Assertions.assertEquals(9, dictionary.get("e"));
187     }
188 
189     @Test
190     public void testToMap() {
191         DataDictionary dictionary = new DataDictionary();
192         dictionary.put("a", new double[]{1.0, 2.0, 3.0});
193         dictionary.put("d", "Lorem Ipsum");
194         dictionary.put("e", 9);
195         Assertions.assertEquals(3, dictionary.size());
196 
197         Map<String, Object> map = dictionary.toMap();
198         Assertions.assertEquals(3, map.size());
199 
200         Assertions.assertArrayEquals(new double[]{1.0, 2.0, 3.0}, ((double[]) map.get("a")), 1.0e-15);
201         Assertions.assertEquals("Lorem Ipsum", dictionary.get("d"));
202         Assertions.assertEquals(9, dictionary.get("e"));
203 
204         dictionary.clear();
205         Assertions.assertEquals(0, dictionary.size());
206         Assertions.assertEquals(3, map.size());
207         map.put("z", new double[]{});
208         Assertions.assertEquals(4, map.size());
209         Assertions.assertEquals(0, dictionary.size());
210     }
211 
212     @BeforeEach
213     public void setUp() {
214         Utils.setDataRoot("regular-data");
215     }
216 
217 }