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