View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF 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.apache.commons.lang3;
18  
19  import static org.junit.jupiter.api.Assertions.assertArrayEquals;
20  import static org.junit.jupiter.api.Assertions.assertEquals;
21  import static org.junit.jupiter.api.Assertions.assertThrows;
22  
23  import java.util.Arrays;
24  import java.util.SplittableRandom;
25  import java.util.UUID;
26  
27  import org.junit.jupiter.api.Test;
28  import org.junit.jupiter.params.ParameterizedTest;
29  import org.junit.jupiter.params.provider.ValueSource;
30  
31  /**
32   * Unit tests {@link Conversion}.
33   */
34  public class ConversionTest extends AbstractLangTest {
35  
36      static String dbgPrint(final boolean[] src) {
37          final StringBuilder sb = new StringBuilder();
38          for (final boolean e : src) {
39              if (e) {
40                  sb.append("1, ");
41              } else {
42                  sb.append("0, ");
43              }
44          }
45          final String out = sb.toString();
46          return out.substring(0, out.length() - 1);
47      }
48  
49      @ParameterizedTest
50      @ValueSource(ints = {-1, 8, 99})
51      public void binaryBeMsb0ToHexDigitPosOutsideArray(final int index) {
52          assertThrows(IndexOutOfBoundsException.class,
53              () -> Conversion.binaryBeMsb0ToHexDigit(new boolean[8], index));
54      }
55  
56      /**
57       * Tests {@link Conversion#binaryToHexDigit(boolean[])}.
58       */
59      @Test
60      public void testBinaryBeMsb0ToHexDigit() {
61          assertEquals(
62              '0', Conversion.binaryBeMsb0ToHexDigit(new boolean[]{false, false, false, false}));
63          assertEquals(
64              '1', Conversion.binaryBeMsb0ToHexDigit(new boolean[]{false, false, false, true}));
65          assertEquals(
66              '2', Conversion.binaryBeMsb0ToHexDigit(new boolean[]{false, false, true, false}));
67          assertEquals(
68              '3', Conversion.binaryBeMsb0ToHexDigit(new boolean[]{false, false, true, true}));
69          assertEquals(
70              '4', Conversion.binaryBeMsb0ToHexDigit(new boolean[]{false, true, false, false}));
71          assertEquals(
72              '5', Conversion.binaryBeMsb0ToHexDigit(new boolean[]{false, true, false, true}));
73          assertEquals(
74              '6', Conversion.binaryBeMsb0ToHexDigit(new boolean[]{false, true, true, false}));
75          assertEquals(
76              '7', Conversion.binaryBeMsb0ToHexDigit(new boolean[]{false, true, true, true}));
77          assertEquals(
78              '8', Conversion.binaryBeMsb0ToHexDigit(new boolean[]{true, false, false, false}));
79          assertEquals(
80              '9', Conversion.binaryBeMsb0ToHexDigit(new boolean[]{true, false, false, true}));
81          assertEquals(
82              'a', Conversion.binaryBeMsb0ToHexDigit(new boolean[]{true, false, true, false}));
83          assertEquals(
84              'b', Conversion.binaryBeMsb0ToHexDigit(new boolean[]{true, false, true, true}));
85          assertEquals(
86              'c', Conversion.binaryBeMsb0ToHexDigit(new boolean[]{true, true, false, false}));
87          assertEquals(
88              'd', Conversion.binaryBeMsb0ToHexDigit(new boolean[]{true, true, false, true}));
89          assertEquals(
90              'e', Conversion.binaryBeMsb0ToHexDigit(new boolean[]{true, true, true, false}));
91          assertEquals(
92              'f', Conversion.binaryBeMsb0ToHexDigit(new boolean[]{true, true, true, true}));
93          assertEquals(
94              '4',
95              Conversion.binaryBeMsb0ToHexDigit(new boolean[]{
96                  true, false, false, false, false, false, false, false, false, false, false,
97                  false, false, true, false, false}));
98          assertThrows(IllegalArgumentException.class, () -> Conversion.binaryBeMsb0ToHexDigit(new boolean[]{}));
99      }
100 
101     /**
102      * Tests {@link Conversion#binaryToHexDigit(boolean[], int)}.
103      */
104     @Test
105     public void testBinaryBeMsb0ToHexDigit_2args() {
106         assertEquals(
107             '5',
108             Conversion.binaryBeMsb0ToHexDigit(new boolean[]{
109                 true, false, false, false, false, false, false, false, false, false, false,
110                 true, false, true, false, false}, 2));
111 
112         final boolean[] shortArray = {true, true, false};
113         assertEquals('6', Conversion.binaryBeMsb0ToHexDigit(shortArray, 0));
114         assertEquals('3', Conversion.binaryBeMsb0ToHexDigit(shortArray, 1));
115         assertEquals('1', Conversion.binaryBeMsb0ToHexDigit(shortArray, 2));
116         final boolean[] shortArray2 = {true, true, true, false, false, true, false, true};
117         assertEquals('5', Conversion.binaryBeMsb0ToHexDigit(shortArray2, 0));
118         assertEquals('2', Conversion.binaryBeMsb0ToHexDigit(shortArray2, 1));
119         assertEquals('9', Conversion.binaryBeMsb0ToHexDigit(shortArray2, 2));
120         assertEquals('c', Conversion.binaryBeMsb0ToHexDigit(shortArray2, 3));
121         assertEquals('e', Conversion.binaryBeMsb0ToHexDigit(shortArray2, 4));
122         assertEquals('7', Conversion.binaryBeMsb0ToHexDigit(shortArray2, 5));
123         assertEquals('3', Conversion.binaryBeMsb0ToHexDigit(shortArray2, 6));
124         assertEquals('1', Conversion.binaryBeMsb0ToHexDigit(shortArray2, 7));
125         final boolean[] multiBytesArray = {
126             true, true, false, false, true, false, true, false, true, true, true, false, false,
127             true, false, true};
128         assertEquals('5', Conversion.binaryBeMsb0ToHexDigit(multiBytesArray, 0));
129         assertEquals('2', Conversion.binaryBeMsb0ToHexDigit(multiBytesArray, 1));
130         assertEquals('9', Conversion.binaryBeMsb0ToHexDigit(multiBytesArray, 2));
131         assertEquals('c', Conversion.binaryBeMsb0ToHexDigit(multiBytesArray, 3));
132         assertEquals('e', Conversion.binaryBeMsb0ToHexDigit(multiBytesArray, 4));
133         assertEquals('7', Conversion.binaryBeMsb0ToHexDigit(multiBytesArray, 5));
134         assertEquals('b', Conversion.binaryBeMsb0ToHexDigit(multiBytesArray, 6));
135         assertEquals('5', Conversion.binaryBeMsb0ToHexDigit(multiBytesArray, 7));
136 
137         assertEquals('a', Conversion.binaryBeMsb0ToHexDigit(multiBytesArray, 8));
138         assertEquals('5', Conversion.binaryBeMsb0ToHexDigit(multiBytesArray, 9));
139         assertEquals('2', Conversion.binaryBeMsb0ToHexDigit(multiBytesArray, 10));
140         assertEquals('9', Conversion.binaryBeMsb0ToHexDigit(multiBytesArray, 11));
141         assertEquals('c', Conversion.binaryBeMsb0ToHexDigit(multiBytesArray, 12));
142         assertEquals('6', Conversion.binaryBeMsb0ToHexDigit(multiBytesArray, 13));
143         assertEquals('3', Conversion.binaryBeMsb0ToHexDigit(multiBytesArray, 14));
144         assertEquals('1', Conversion.binaryBeMsb0ToHexDigit(multiBytesArray, 15));
145 
146     }
147 
148     /**
149      * Tests {@link Conversion#binaryToByte(boolean[], int, byte, int, int)}.
150      */
151     @Test
152     public void testBinaryToByte() {
153         final boolean[] src = {
154             false, false, true, true, true, false, true, true, true, true, true, true, true,
155             false, false, false, true, true, true, true, false, false, false, false, false,
156             false, true, true, true, false, false, false, false, false, false, false, true,
157             true, true, true, true, false, false, false, false, true, false, false, true, true,
158             false, false, false, false, true, false, true, false, true, false, false, true,
159             true, false, true, true, true, false, false, false, false, true};
160         // conversion of "CDF1F0C10F12345678" by HexToBinary
161         assertEquals((byte) 0x00, Conversion.binaryToByte(src, 0 * 4, (byte) 0, 0, 0 * 4));
162         assertEquals((byte) 0x0C, Conversion.binaryToByte(src, 0 * 4, (byte) 0, 0, 1 * 4));
163         assertEquals((byte) 0xDC, Conversion.binaryToByte(src, 0 * 4, (byte) 0, 0, 2 * 4));
164         assertEquals((byte) 0xFD, Conversion.binaryToByte(src, 1 * 4, (byte) 0, 0, 2 * 4));
165         assertEquals((byte) 0x34, Conversion.binaryToByte(src, 0 * 4, (byte) 0x34, 0, 0 * 4));
166         assertEquals((byte) 0x84, Conversion.binaryToByte(src, 17 * 4, (byte) 0x34, 4, 1 * 4));
167     }
168 
169     /**
170      * Tests {@link Conversion#binaryToHexDigit(boolean[])}.
171      */
172     @Test
173     public void testBinaryToHexDigit() {
174         assertEquals(
175             '0', Conversion.binaryToHexDigit(new boolean[]{false, false, false, false}));
176         assertEquals('1', Conversion.binaryToHexDigit(new boolean[]{true, false, false, false}));
177         assertEquals('2', Conversion.binaryToHexDigit(new boolean[]{false, true, false, false}));
178         assertEquals('3', Conversion.binaryToHexDigit(new boolean[]{true, true, false, false}));
179         assertEquals('4', Conversion.binaryToHexDigit(new boolean[]{false, false, true, false}));
180         assertEquals('5', Conversion.binaryToHexDigit(new boolean[]{true, false, true, false}));
181         assertEquals('6', Conversion.binaryToHexDigit(new boolean[]{false, true, true, false}));
182         assertEquals('7', Conversion.binaryToHexDigit(new boolean[]{true, true, true, false}));
183         assertEquals('8', Conversion.binaryToHexDigit(new boolean[]{false, false, false, true}));
184         assertEquals('9', Conversion.binaryToHexDigit(new boolean[]{true, false, false, true}));
185         assertEquals('a', Conversion.binaryToHexDigit(new boolean[]{false, true, false, true}));
186         assertEquals('b', Conversion.binaryToHexDigit(new boolean[]{true, true, false, true}));
187         assertEquals('c', Conversion.binaryToHexDigit(new boolean[]{false, false, true, true}));
188         assertEquals('d', Conversion.binaryToHexDigit(new boolean[]{true, false, true, true}));
189         assertEquals('e', Conversion.binaryToHexDigit(new boolean[]{false, true, true, true}));
190         assertEquals('f', Conversion.binaryToHexDigit(new boolean[]{true, true, true, true}));
191         assertEquals('1', Conversion.binaryToHexDigit(new boolean[]{true}));
192         assertEquals(
193             'f', Conversion.binaryToHexDigit(new boolean[]{true, true, true, true, true}));
194         assertThrows(IllegalArgumentException.class, () -> Conversion.binaryToHexDigit(new boolean[]{}));
195     }
196 
197     /**
198      * Tests {@link Conversion#binaryBeMsb0ToHexDigit(boolean[], int)}.
199      */
200     @Test
201     public void testBinaryToHexDigit_2args() {
202         final boolean[] shortArray = {false, true, true};
203         assertEquals('6', Conversion.binaryToHexDigit(shortArray, 0));
204         assertEquals('3', Conversion.binaryToHexDigit(shortArray, 1));
205         assertEquals('1', Conversion.binaryToHexDigit(shortArray, 2));
206         final boolean[] longArray = {true, false, true, false, false, true, true};
207         assertEquals('5', Conversion.binaryToHexDigit(longArray, 0));
208         assertEquals('2', Conversion.binaryToHexDigit(longArray, 1));
209         assertEquals('9', Conversion.binaryToHexDigit(longArray, 2));
210         assertEquals('c', Conversion.binaryToHexDigit(longArray, 3));
211         assertEquals('6', Conversion.binaryToHexDigit(longArray, 4));
212         assertEquals('3', Conversion.binaryToHexDigit(longArray, 5));
213         assertEquals('1', Conversion.binaryToHexDigit(longArray, 6));
214     }
215 
216     /**
217      * Tests {@link Conversion#binaryToHexDigitMsb0_4bits(boolean[], int)}.
218      */
219     @Test
220     public void testBinaryToHexDigitMsb0_4bits_2args() {
221         // boolean[] shortArray = new boolean[]{true, true, false};
222         // assertEquals('6', Conversion.BinaryToHexDigitMsb0(shortArray, 0));
223         // assertEquals('3', Conversion.BinaryToHexDigitMsb0(shortArray, 1));
224         // assertEquals('1', Conversion.BinaryToHexDigitMsb0(shortArray, 2));
225         final boolean[] shortArray = {true, true, false, true};
226         assertEquals('d', Conversion.binaryToHexDigitMsb0_4bits(shortArray, 0));
227         final boolean[] longArray = {true, false, true, false, false, true, true};
228         assertEquals('a', Conversion.binaryToHexDigitMsb0_4bits(longArray, 0));
229         assertEquals('4', Conversion.binaryToHexDigitMsb0_4bits(longArray, 1));
230         assertEquals('9', Conversion.binaryToHexDigitMsb0_4bits(longArray, 2));
231         assertEquals('3', Conversion.binaryToHexDigitMsb0_4bits(longArray, 3));
232         // assertEquals('6', Conversion.BinaryToHexDigitMsb0(longArray, 4));
233         // assertEquals('3', Conversion.BinaryToHexDigitMsb0(longArray, 5));
234         // assertEquals('1', Conversion.BinaryToHexDigitMsb0(longArray, 6));
235         final boolean[] maxLengthArray = {
236             true, false, true, false, false, true, true, true};
237         assertEquals('a', Conversion.binaryToHexDigitMsb0_4bits(maxLengthArray, 0));
238         assertEquals('4', Conversion.binaryToHexDigitMsb0_4bits(maxLengthArray, 1));
239         assertEquals('9', Conversion.binaryToHexDigitMsb0_4bits(maxLengthArray, 2));
240         assertEquals('3', Conversion.binaryToHexDigitMsb0_4bits(maxLengthArray, 3));
241         assertEquals('7', Conversion.binaryToHexDigitMsb0_4bits(maxLengthArray, 4));
242         // assertEquals('7', Conversion.BinaryToHexDigitMsb0(longArray, 5));
243         // assertEquals('3', Conversion.BinaryToHexDigitMsb0(longArray, 6));
244         // assertEquals('1', Conversion.BinaryToHexDigitMsb0(longArray, 7));
245         final boolean[] javaDocCheck = {
246             true, false, false, true, true, false, true, false};
247         assertEquals('d', Conversion.binaryToHexDigitMsb0_4bits(javaDocCheck, 3));
248 
249     }
250 
251     /**
252      * Tests {@link Conversion#binaryToHexDigitMsb0_4bits(boolean[])}.
253      */
254     @Test
255     public void testBinaryToHexDigitMsb0_bits() {
256         assertEquals(
257             '0',
258             Conversion.binaryToHexDigitMsb0_4bits(new boolean[]{false, false, false, false}));
259         assertEquals(
260             '1',
261             Conversion.binaryToHexDigitMsb0_4bits(new boolean[]{false, false, false, true}));
262         assertEquals(
263             '2',
264             Conversion.binaryToHexDigitMsb0_4bits(new boolean[]{false, false, true, false}));
265         assertEquals(
266             '3', Conversion.binaryToHexDigitMsb0_4bits(new boolean[]{false, false, true, true}));
267         assertEquals(
268             '4',
269             Conversion.binaryToHexDigitMsb0_4bits(new boolean[]{false, true, false, false}));
270         assertEquals(
271             '5', Conversion.binaryToHexDigitMsb0_4bits(new boolean[]{false, true, false, true}));
272         assertEquals(
273             '6', Conversion.binaryToHexDigitMsb0_4bits(new boolean[]{false, true, true, false}));
274         assertEquals(
275             '7', Conversion.binaryToHexDigitMsb0_4bits(new boolean[]{false, true, true, true}));
276         assertEquals(
277             '8',
278             Conversion.binaryToHexDigitMsb0_4bits(new boolean[]{true, false, false, false}));
279         assertEquals(
280             '9', Conversion.binaryToHexDigitMsb0_4bits(new boolean[]{true, false, false, true}));
281         assertEquals(
282             'a', Conversion.binaryToHexDigitMsb0_4bits(new boolean[]{true, false, true, false}));
283         assertEquals(
284             'b', Conversion.binaryToHexDigitMsb0_4bits(new boolean[]{true, false, true, true}));
285         assertEquals(
286             'c', Conversion.binaryToHexDigitMsb0_4bits(new boolean[]{true, true, false, false}));
287         assertEquals(
288             'd', Conversion.binaryToHexDigitMsb0_4bits(new boolean[]{true, true, false, true}));
289         assertEquals(
290             'e', Conversion.binaryToHexDigitMsb0_4bits(new boolean[]{true, true, true, false}));
291         assertEquals(
292             'f', Conversion.binaryToHexDigitMsb0_4bits(new boolean[]{true, true, true, true}));
293         assertThrows(IllegalArgumentException.class, () -> Conversion.binaryToHexDigitMsb0_4bits(new boolean[]{}));
294     }
295 
296     @Test
297     public void testBinaryToHexDigitReverse() {
298         final SplittableRandom rng = new SplittableRandom();
299         final boolean[] x = new boolean[8];
300         for (int i = 0; i < 100; i++) {
301             Conversion.longToBinary(rng.nextLong(), 0, x, 0, 8);
302             for (int j = 1; j <= 8; j++) {
303                 final boolean[] a = Arrays.copyOf(x, j);
304                 final boolean[] b = a.clone();
305                 ArrayUtils.reverse(b);
306                 for (int k = 0; k < j; k++) {
307                     assertEquals(Conversion.binaryToHexDigit(a, k),
308                                  Conversion.binaryBeMsb0ToHexDigit(b, k));
309                 }
310             }
311         }
312     }
313 
314     /**
315      * Tests {@link Conversion#binaryToInt(boolean[], int, int, int, int)}.
316      */
317     @Test
318     public void testBinaryToInt() {
319         final boolean[] src = {
320             false, false, true, true, true, false, true, true, true, true, true, true, true,
321             false, false, false, true, true, true, true, false, false, false, false, false,
322             false, true, true, true, false, false, false, false, false, false, false, true,
323             true, true, true, true, false, false, false, false, true, false, false, true, true,
324             false, false, false, false, true, false, true, false, true, false, false, true,
325             true, false, true, true, true, false, false, false, false, true};
326         // conversion of "CDF1F0C10F12345678" by HexToBinary
327         assertEquals(0x00000000, Conversion.binaryToInt(src, 0 * 4, 0, 0, 0 * 4));
328         assertEquals(0x0000000C, Conversion.binaryToInt(src, 0 * 4, 0, 0, 1 * 4));
329         assertEquals(0x1C0F1FDC, Conversion.binaryToInt(src, 0 * 4, 0, 0, 8 * 4));
330         assertEquals(0x01C0F1FD, Conversion.binaryToInt(src, 1 * 4, 0, 0, 8 * 4));
331         assertEquals(0x12345679, Conversion.binaryToInt(src, 0 * 4, 0x12345679, 0, 0 * 4));
332         assertEquals(0x87645679, Conversion.binaryToInt(src, 15 * 4, 0x12345679, 20, 3 * 4));
333     }
334 
335     /**
336      * Tests {@link Conversion#binaryToLong(boolean[], int, long, int, int)}.
337      */
338     @Test
339     public void testBinaryToLong() {
340         final boolean[] src = {
341             false, false, true, true, true, false, true, true, true, true, true, true, true,
342             false, false, false, true, true, true, true, false, false, false, false, false,
343             false, true, true, true, false, false, false, false, false, false, false, true,
344             true, true, true, true, false, false, false, false, true, false, false, true, true,
345             false, false, false, false, true, false, true, false, true, false, false, true,
346             true, false, true, true, true, false, false, false, false, true};
347         // conversion of "CDF1F0C10F12345678" by HexToBinary
348         assertEquals(0x0000000000000000L, Conversion.binaryToLong(src, 0, 0L, 0, 0));
349         assertEquals(0x000000000000000CL, Conversion.binaryToLong(src, 0, 0L, 0, 1 * 4));
350         assertEquals(0x000000001C0F1FDCL, Conversion.binaryToLong(src, 0, 0L, 0, 8 * 4));
351         assertEquals(0x0000000001C0F1FDL, Conversion.binaryToLong(src, 1 * 4, 0L, 0, 8 * 4));
352         assertEquals(
353             0x123456798ABCDEF0L, Conversion.binaryToLong(src, 0, 0x123456798ABCDEF0L, 0, 0));
354         assertEquals(
355             0x1234567876BCDEF0L,
356             Conversion.binaryToLong(src, 15 * 4, 0x123456798ABCDEF0L, 24, 3 * 4));
357     }
358 
359     /**
360      * Tests {@link Conversion#binaryToShort(boolean[], int, short, int, int)}.
361      */
362     @Test
363     public void testBinaryToShort() {
364         final boolean[] src = {
365             false, false, true, true, true, false, true, true, true, true, true, true, true,
366             false, false, false, true, true, true, true, false, false, false, false, false,
367             false, true, true, true, false, false, false, false, false, false, false, true,
368             true, true, true, true, false, false, false, false, true, false, false, true, true,
369             false, false, false, false, true, false, true, false, true, false, false, true,
370             true, false, true, true, true, false, false, false, false, true};
371         // conversion of "CDF1F0C10F12345678" by HexToBinary
372         assertEquals((short) 0x0000, Conversion.binaryToShort(src, 0 * 4, (short) 0, 0, 0 * 4));
373         assertEquals((short) 0x000C, Conversion.binaryToShort(src, 0 * 4, (short) 0, 0, 1 * 4));
374         assertEquals((short) 0x1FDC, Conversion.binaryToShort(src, 0 * 4, (short) 0, 0, 4 * 4));
375         assertEquals((short) 0xF1FD, Conversion.binaryToShort(src, 1 * 4, (short) 0, 0, 4 * 4));
376         assertEquals(
377             (short) 0x1234, Conversion.binaryToShort(src, 0 * 4, (short) 0x1234, 0, 0 * 4));
378         assertEquals(
379             (short) 0x8764, Conversion.binaryToShort(src, 15 * 4, (short) 0x1234, 4, 3 * 4));
380     }
381 
382     /**
383      * Tests {@link Conversion#byteArrayToInt(byte[], int, int, int, int)}.
384      */
385     @Test
386     public void testByteArrayToInt() {
387         final byte[] src = {
388             (byte) 0xCD, (byte) 0xF1, (byte) 0xF0, (byte) 0xC1, (byte) 0x0F, (byte) 0x12, (byte) 0x34,
389             (byte) 0x56, (byte) 0x78};
390         assertEquals(0x00000000, Conversion.byteArrayToInt(src, 0, 0, 0, 0));
391         assertEquals(0x000000CD, Conversion.byteArrayToInt(src, 0, 0, 0, 1));
392         assertEquals(0xC1F0F1CD, Conversion.byteArrayToInt(src, 0, 0, 0, 4));
393         assertEquals(0x0FC1F0F1, Conversion.byteArrayToInt(src, 1, 0, 0, 4));
394         assertEquals(0x12345678, Conversion.byteArrayToInt(src, 0, 0x12345678, 0, 0));
395         assertEquals(0xCD345678, Conversion.byteArrayToInt(src, 0, 0x12345678, 24, 1));
396         // assertEquals(0x56341278, Conversion.ByteArrayToInt(src, 5, 0x01234567, 8, 4));
397     }
398 
399     /**
400      * Tests {@link Conversion#byteArrayToLong(byte[], int, long, int, int)}.
401      */
402     @Test
403     public void testByteArrayToLong() {
404         final byte[] src = {
405             (byte) 0xCD, (byte) 0xF1, (byte) 0xF0, (byte) 0xC1, (byte) 0x0F, (byte) 0x12, (byte) 0x34,
406             (byte) 0x56, (byte) 0x78};
407         assertEquals(0x0000000000000000L, Conversion.byteArrayToLong(src, 0, 0L, 0, 0));
408         assertEquals(0x00000000000000CDL, Conversion.byteArrayToLong(src, 0, 0L, 0, 1));
409         assertEquals(0x00000000C1F0F1CDL, Conversion.byteArrayToLong(src, 0, 0L, 0, 4));
410         assertEquals(0x000000000FC1F0F1L, Conversion.byteArrayToLong(src, 1, 0L, 0, 4));
411         assertEquals(
412             0x123456789ABCDEF0L, Conversion.byteArrayToLong(src, 0, 0x123456789ABCDEF0L, 0, 0));
413         assertEquals(
414             0x12345678CDBCDEF0L, Conversion.byteArrayToLong(src, 0, 0x123456789ABCDEF0L, 24, 1));
415         assertEquals(
416             0x123456789A7856F0L, Conversion.byteArrayToLong(src, 7, 0x123456789ABCDEF0L, 8, 2));
417     }
418 
419     /**
420      * Tests {@link Conversion#byteArrayToShort(byte[], int, short, int, int)}.
421      */
422     @Test
423     public void testByteArrayToShort() {
424         final byte[] src = {
425             (byte) 0xCD, (byte) 0xF1, (byte) 0xF0, (byte) 0xC1, (byte) 0x0F, (byte) 0x12, (byte) 0x34,
426             (byte) 0x56, (byte) 0x78};
427         assertEquals((short) 0x0000, Conversion.byteArrayToShort(src, 0, (short) 0, 0, 0));
428         assertEquals((short) 0x00CD, Conversion.byteArrayToShort(src, 0, (short) 0, 0, 1));
429         assertEquals((short) 0xF1CD, Conversion.byteArrayToShort(src, 0, (short) 0, 0, 2));
430         assertEquals((short) 0xF0F1, Conversion.byteArrayToShort(src, 1, (short) 0, 0, 2));
431         assertEquals((short) 0x1234, Conversion.byteArrayToShort(src, 0, (short) 0x1234, 0, 0));
432         assertEquals((short) 0xCD34, Conversion.byteArrayToShort(src, 0, (short) 0x1234, 8, 1));
433         // assertEquals((short) 0x5678, Conversion.ByteArrayToShort(src, 7, (short) 0x0123, 8,
434         // 2));
435     }
436 
437     /**
438      * Tests {@link Conversion#byteArrayToUuid(byte[], int)}.
439      */
440     @Test
441     public void testByteArrayToUuid() {
442         assertEquals(
443             new UUID(0xFFFFFFFFFFFFFFFFL, 0xFFFFFFFFFFFFFFFFL),
444             Conversion.byteArrayToUuid(new byte[]{
445                 (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
446                 (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
447                 (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff}, 0));
448         assertEquals(
449             new UUID(0xFFEEDDCCBBAA9988L, 0x7766554433221100L),
450             Conversion.byteArrayToUuid(new byte[]{
451                 (byte) 0x88, (byte) 0x99, (byte) 0xaa, (byte) 0xbb, (byte) 0xcc, (byte) 0xdd,
452                 (byte) 0xee, (byte) 0xff, (byte) 0x00, (byte) 0x11, (byte) 0x22, (byte) 0x33,
453                 (byte) 0x44, (byte) 0x55, (byte) 0x66, (byte) 0x77}, 0));
454         assertEquals(
455             new UUID(0xFFEEDDCCBBAA9988L, 0x7766554433221100L),
456             Conversion.byteArrayToUuid(new byte[]{
457                 0, 0, (byte) 0x88, (byte) 0x99, (byte) 0xaa, (byte) 0xbb, (byte) 0xcc, (byte) 0xdd,
458                 (byte) 0xee, (byte) 0xff, (byte) 0x00, (byte) 0x11, (byte) 0x22, (byte) 0x33,
459                 (byte) 0x44, (byte) 0x55, (byte) 0x66, (byte) 0x77}, 2));
460     }
461 
462     /**
463      * Tests {@link Conversion#byteToBinary(byte, int, boolean[], int, int)}.
464      */
465     @Test
466     public void testByteToBinary() {
467         assertArrayEquals(
468             new boolean[]{}, Conversion.byteToBinary((byte) 0x00, 0, new boolean[]{}, 0, 0));
469         assertArrayEquals(
470             new boolean[]{}, Conversion.byteToBinary((byte) 0x00, 100, new boolean[]{}, 0, 0));
471         assertArrayEquals(
472             new boolean[]{}, Conversion.byteToBinary((byte) 0x00, 0, new boolean[]{}, 100, 0));
473         assertArrayEquals(
474             new boolean[69], Conversion.byteToBinary((byte) 0xEF, 0, new boolean[69], 0, 0));
475         assertArrayEquals(new boolean[]{
476             true, false, false, false, false, false, false, false, false, false, false, false,
477             false}, Conversion.byteToBinary((byte) 0x95, 0, new boolean[13], 0, 1));
478         assertArrayEquals(new boolean[]{
479             true, false, false, false, false, false, false, false, false, false, false, false,
480             false}, Conversion.byteToBinary((byte) 0x95, 0, new boolean[13], 0, 2));
481         assertArrayEquals(new boolean[]{
482             true, false, true, false, false, false, false, false, false, false, false, false,
483             false}, Conversion.byteToBinary((byte) 0x95, 0, new boolean[13], 0, 3));
484         assertArrayEquals(new boolean[]{
485             true, false, true, false, true, false, false, false, false, false, false, false,
486             false}, Conversion.byteToBinary((byte) 0x95, 0, new boolean[13], 0, 7));
487         assertArrayEquals(new boolean[]{
488             true, false, true, false, true, false, false, true, false, false, false, false,
489             false}, Conversion.byteToBinary((byte) 0x95, 0, new boolean[13], 0, 8));
490         assertArrayEquals(new boolean[]{
491             false, false, true, false, false, false, false, false, false, false, false, false,
492             false}, Conversion.byteToBinary((byte) 0x95, 0, new boolean[13], 2, 1));
493         assertArrayEquals(new boolean[]{
494             false, false, true, false, true, false, true, false, false, true, false, false,
495             false}, Conversion.byteToBinary((byte) 0x95, 0, new boolean[13], 2, 8));
496         assertArrayEquals(new boolean[]{
497             false, true, false, true, false, false, true, false, false, false, false, false,
498             false}, Conversion.byteToBinary((byte) 0x95, 1, new boolean[13], 0, 7));
499         assertArrayEquals(new boolean[]{
500             true, false, true, false, false, true, false, false, false, false, false, false,
501             false}, Conversion.byteToBinary((byte) 0x95, 2, new boolean[13], 0, 6));
502         // assertArrayEquals(new boolean[]{false, false, false, true, true, false, true, true,
503         // false, false, false, false, false}, Conversion.byteToBinary((byte) 0x95, 2, new
504         // boolean[13], 3, 7)); //rejected by assertion
505         assertArrayEquals(new boolean[]{
506             false, false, false, true, false, true, false, false, true, false, false, false,
507             false}, Conversion.byteToBinary((byte) 0x95, 2, new boolean[13], 3, 6));
508     }
509 
510     /**
511      * Tests {@link Conversion#byteToHex(byte, int, String, int, int)}.
512      */
513     @Test
514     public void testByteToHex() {
515         assertEquals("", Conversion.byteToHex((byte) 0x00, 0, "", 0, 0));
516         assertEquals("", Conversion.byteToHex((byte) 0x00, 100, "", 0, 0));
517         assertEquals("", Conversion.byteToHex((byte) 0x00, 0, "", 100, 0));
518         assertEquals("00000", Conversion.byteToHex((byte) 0xEF, 0, "00000", 0, 0));
519         assertEquals("f0000", Conversion.byteToHex((byte) 0xEF, 0, "00000", 0, 1));
520         assertEquals("fe000", Conversion.byteToHex((byte) 0xEF, 0, "00000", 0, 2));
521         assertEquals("000f0", Conversion.byteToHex((byte) 0xEF, 0, "00000", 3, 1));
522         assertEquals("000fe", Conversion.byteToHex((byte) 0xEF, 0, "00000", 3, 2));
523         assertEquals("70000", Conversion.byteToHex((byte) 0xEF, 1, "00000", 0, 1));
524         assertEquals("b0000", Conversion.byteToHex((byte) 0xEF, 2, "00000", 0, 1));
525         assertEquals("000df", Conversion.byteToHex((byte) 0xEF, 3, "00000", 3, 2));
526         // assertEquals("00000", Conversion.byteToHex((byte) 0xEF, 4, "00000", 3, 2)); //rejected by
527         // assertion
528         assertEquals("000e0", Conversion.byteToHex((byte) 0xEF, 4, "00000", 3, 1));
529         assertEquals("fe", Conversion.byteToHex((byte) 0xEF, 0, "", 0, 2));
530         assertThrows(StringIndexOutOfBoundsException.class, () -> Conversion.byteToHex((byte) 0xEF, 0, "", 1, 2));
531     }
532 
533     /**
534      * Tests {@link Conversion#hexDigitMsb0ToBinary(char)}.
535      */
536     @Test
537     public void testHexDigitMsb0ToBinary() {
538         assertArrayEquals(
539             new boolean[]{false, false, false, false}, Conversion.hexDigitMsb0ToBinary('0'));
540         assertArrayEquals(
541             new boolean[]{false, false, false, true}, Conversion.hexDigitMsb0ToBinary('1'));
542         assertArrayEquals(
543             new boolean[]{false, false, true, false}, Conversion.hexDigitMsb0ToBinary('2'));
544         assertArrayEquals(
545             new boolean[]{false, false, true, true}, Conversion.hexDigitMsb0ToBinary('3'));
546         assertArrayEquals(
547             new boolean[]{false, true, false, false}, Conversion.hexDigitMsb0ToBinary('4'));
548         assertArrayEquals(
549             new boolean[]{false, true, false, true}, Conversion.hexDigitMsb0ToBinary('5'));
550         assertArrayEquals(
551             new boolean[]{false, true, true, false}, Conversion.hexDigitMsb0ToBinary('6'));
552         assertArrayEquals(
553             new boolean[]{false, true, true, true}, Conversion.hexDigitMsb0ToBinary('7'));
554         assertArrayEquals(
555             new boolean[]{true, false, false, false}, Conversion.hexDigitMsb0ToBinary('8'));
556         assertArrayEquals(
557             new boolean[]{true, false, false, true}, Conversion.hexDigitMsb0ToBinary('9'));
558         assertArrayEquals(
559             new boolean[]{true, false, true, false}, Conversion.hexDigitMsb0ToBinary('A'));
560         assertArrayEquals(
561             new boolean[]{true, false, true, false}, Conversion.hexDigitMsb0ToBinary('a'));
562         assertArrayEquals(
563             new boolean[]{true, false, true, true}, Conversion.hexDigitMsb0ToBinary('B'));
564         assertArrayEquals(
565             new boolean[]{true, false, true, true}, Conversion.hexDigitMsb0ToBinary('b'));
566         assertArrayEquals(
567             new boolean[]{true, true, false, false}, Conversion.hexDigitMsb0ToBinary('C'));
568         assertArrayEquals(
569             new boolean[]{true, true, false, false}, Conversion.hexDigitMsb0ToBinary('c'));
570         assertArrayEquals(
571             new boolean[]{true, true, false, true}, Conversion.hexDigitMsb0ToBinary('D'));
572         assertArrayEquals(
573             new boolean[]{true, true, false, true}, Conversion.hexDigitMsb0ToBinary('d'));
574         assertArrayEquals(
575             new boolean[]{true, true, true, false}, Conversion.hexDigitMsb0ToBinary('E'));
576         assertArrayEquals(
577             new boolean[]{true, true, true, false}, Conversion.hexDigitMsb0ToBinary('e'));
578         assertArrayEquals(
579             new boolean[]{true, true, true, true}, Conversion.hexDigitMsb0ToBinary('F'));
580         assertArrayEquals(
581             new boolean[]{true, true, true, true}, Conversion.hexDigitMsb0ToBinary('f'));
582         assertThrows(IllegalArgumentException.class, () -> Conversion.hexDigitMsb0ToBinary('G'));
583     }
584 
585     /**
586      * Tests {@link Conversion#hexDigitMsb0ToInt(char)}.
587      */
588     @Test
589     public void testHexDigitMsb0ToInt() {
590         assertEquals(0x0, Conversion.hexDigitMsb0ToInt('0'));
591         assertEquals(0x8, Conversion.hexDigitMsb0ToInt('1'));
592         assertEquals(0x4, Conversion.hexDigitMsb0ToInt('2'));
593         assertEquals(0xC, Conversion.hexDigitMsb0ToInt('3'));
594         assertEquals(0x2, Conversion.hexDigitMsb0ToInt('4'));
595         assertEquals(0xA, Conversion.hexDigitMsb0ToInt('5'));
596         assertEquals(0x6, Conversion.hexDigitMsb0ToInt('6'));
597         assertEquals(0xE, Conversion.hexDigitMsb0ToInt('7'));
598         assertEquals(0x1, Conversion.hexDigitMsb0ToInt('8'));
599         assertEquals(0x9, Conversion.hexDigitMsb0ToInt('9'));
600         assertEquals(0x5, Conversion.hexDigitMsb0ToInt('A'));
601         assertEquals(0x5, Conversion.hexDigitMsb0ToInt('a'));
602         assertEquals(0xD, Conversion.hexDigitMsb0ToInt('B'));
603         assertEquals(0xD, Conversion.hexDigitMsb0ToInt('b'));
604         assertEquals(0x3, Conversion.hexDigitMsb0ToInt('C'));
605         assertEquals(0x3, Conversion.hexDigitMsb0ToInt('c'));
606         assertEquals(0xB, Conversion.hexDigitMsb0ToInt('D'));
607         assertEquals(0xB, Conversion.hexDigitMsb0ToInt('d'));
608         assertEquals(0x7, Conversion.hexDigitMsb0ToInt('E'));
609         assertEquals(0x7, Conversion.hexDigitMsb0ToInt('e'));
610         assertEquals(0xF, Conversion.hexDigitMsb0ToInt('F'));
611         assertEquals(0xF, Conversion.hexDigitMsb0ToInt('f'));
612         assertThrows(IllegalArgumentException.class, () -> Conversion.hexDigitMsb0ToInt('G'));
613     }
614 
615     /**
616      * Tests {@link Conversion#hexDigitToBinary(char)}.
617      */
618     @Test
619     public void testHexDigitToBinary() {
620         assertArrayEquals(
621             new boolean[]{false, false, false, false}, Conversion.hexDigitToBinary('0'));
622         assertArrayEquals(
623             new boolean[]{true, false, false, false}, Conversion.hexDigitToBinary('1'));
624         assertArrayEquals(
625             new boolean[]{false, true, false, false}, Conversion.hexDigitToBinary('2'));
626         assertArrayEquals(
627             new boolean[]{true, true, false, false}, Conversion.hexDigitToBinary('3'));
628         assertArrayEquals(
629             new boolean[]{false, false, true, false}, Conversion.hexDigitToBinary('4'));
630         assertArrayEquals(
631             new boolean[]{true, false, true, false}, Conversion.hexDigitToBinary('5'));
632         assertArrayEquals(
633             new boolean[]{false, true, true, false}, Conversion.hexDigitToBinary('6'));
634         assertArrayEquals(
635             new boolean[]{true, true, true, false}, Conversion.hexDigitToBinary('7'));
636         assertArrayEquals(
637             new boolean[]{false, false, false, true}, Conversion.hexDigitToBinary('8'));
638         assertArrayEquals(
639             new boolean[]{true, false, false, true}, Conversion.hexDigitToBinary('9'));
640         assertArrayEquals(
641             new boolean[]{false, true, false, true}, Conversion.hexDigitToBinary('A'));
642         assertArrayEquals(
643             new boolean[]{false, true, false, true}, Conversion.hexDigitToBinary('a'));
644         assertArrayEquals(
645             new boolean[]{true, true, false, true}, Conversion.hexDigitToBinary('B'));
646         assertArrayEquals(
647             new boolean[]{true, true, false, true}, Conversion.hexDigitToBinary('b'));
648         assertArrayEquals(
649             new boolean[]{false, false, true, true}, Conversion.hexDigitToBinary('C'));
650         assertArrayEquals(
651             new boolean[]{false, false, true, true}, Conversion.hexDigitToBinary('c'));
652         assertArrayEquals(
653             new boolean[]{true, false, true, true}, Conversion.hexDigitToBinary('D'));
654         assertArrayEquals(
655             new boolean[]{true, false, true, true}, Conversion.hexDigitToBinary('d'));
656         assertArrayEquals(
657             new boolean[]{false, true, true, true}, Conversion.hexDigitToBinary('E'));
658         assertArrayEquals(
659             new boolean[]{false, true, true, true}, Conversion.hexDigitToBinary('e'));
660         assertArrayEquals(
661             new boolean[]{true, true, true, true}, Conversion.hexDigitToBinary('F'));
662         assertArrayEquals(
663             new boolean[]{true, true, true, true}, Conversion.hexDigitToBinary('f'));
664         assertThrows(IllegalArgumentException.class, () -> Conversion.hexDigitToBinary('G'));
665     }
666 
667     /**
668      * Tests {@link Conversion#hexDigitToInt(char)}.
669      */
670     @Test
671     public void testHexDigitToInt() {
672         assertEquals(0, Conversion.hexDigitToInt('0'));
673         assertEquals(1, Conversion.hexDigitToInt('1'));
674         assertEquals(2, Conversion.hexDigitToInt('2'));
675         assertEquals(3, Conversion.hexDigitToInt('3'));
676         assertEquals(4, Conversion.hexDigitToInt('4'));
677         assertEquals(5, Conversion.hexDigitToInt('5'));
678         assertEquals(6, Conversion.hexDigitToInt('6'));
679         assertEquals(7, Conversion.hexDigitToInt('7'));
680         assertEquals(8, Conversion.hexDigitToInt('8'));
681         assertEquals(9, Conversion.hexDigitToInt('9'));
682         assertEquals(10, Conversion.hexDigitToInt('A'));
683         assertEquals(10, Conversion.hexDigitToInt('a'));
684         assertEquals(11, Conversion.hexDigitToInt('B'));
685         assertEquals(11, Conversion.hexDigitToInt('b'));
686         assertEquals(12, Conversion.hexDigitToInt('C'));
687         assertEquals(12, Conversion.hexDigitToInt('c'));
688         assertEquals(13, Conversion.hexDigitToInt('D'));
689         assertEquals(13, Conversion.hexDigitToInt('d'));
690         assertEquals(14, Conversion.hexDigitToInt('E'));
691         assertEquals(14, Conversion.hexDigitToInt('e'));
692         assertEquals(15, Conversion.hexDigitToInt('F'));
693         assertEquals(15, Conversion.hexDigitToInt('f'));
694         assertThrows(IllegalArgumentException.class, () -> Conversion.hexDigitToInt('G'));
695     }
696 
697     /**
698      * Tests {@link Conversion#hexToByte(String, int, byte, int, int)}.
699      */
700     @Test
701     public void testHexToByte() {
702         final String src = "CDF1F0C10F12345678";
703         assertEquals((byte) 0x00, Conversion.hexToByte(src, 0, (byte) 0, 0, 0));
704         assertEquals((byte) 0x0C, Conversion.hexToByte(src, 0, (byte) 0, 0, 1));
705         assertEquals((byte) 0xDC, Conversion.hexToByte(src, 0, (byte) 0, 0, 2));
706         assertEquals((byte) 0xFD, Conversion.hexToByte(src, 1, (byte) 0, 0, 2));
707         assertEquals((byte) 0x34, Conversion.hexToByte(src, 0, (byte) 0x34, 0, 0));
708         assertEquals((byte) 0x84, Conversion.hexToByte(src, 17, (byte) 0x34, 4, 1));
709     }
710 
711     /**
712      * Tests {@link Conversion#hexToInt(String, int, int, int, int)}.
713      */
714     @Test
715     public void testHexToInt() {
716         final String src = "CDF1F0C10F12345678";
717         assertEquals(0x00000000, Conversion.hexToInt(src, 0, 0, 0, 0));
718         assertEquals(0x0000000C, Conversion.hexToInt(src, 0, 0, 0, 1));
719         assertEquals(0x1C0F1FDC, Conversion.hexToInt(src, 0, 0, 0, 8));
720         assertEquals(0x01C0F1FD, Conversion.hexToInt(src, 1, 0, 0, 8));
721         assertEquals(0x12345679, Conversion.hexToInt(src, 0, 0x12345679, 0, 0));
722         assertEquals(0x87645679, Conversion.hexToInt(src, 15, 0x12345679, 20, 3));
723     }
724 
725     /**
726      * Tests {@link Conversion#hexToLong(String, int, long, int, int)}.
727      */
728     @Test
729     public void testHexToLong() {
730         final String src = "CDF1F0C10F12345678";
731         assertEquals(0x0000000000000000L, Conversion.hexToLong(src, 0, 0L, 0, 0));
732         assertEquals(0x000000000000000CL, Conversion.hexToLong(src, 0, 0L, 0, 1));
733         assertEquals(0x000000001C0F1FDCL, Conversion.hexToLong(src, 0, 0L, 0, 8));
734         assertEquals(0x0000000001C0F1FDL, Conversion.hexToLong(src, 1, 0L, 0, 8));
735         assertEquals(
736             0x123456798ABCDEF0L, Conversion.hexToLong(src, 0, 0x123456798ABCDEF0L, 0, 0));
737         assertEquals(
738             0x1234567876BCDEF0L, Conversion.hexToLong(src, 15, 0x123456798ABCDEF0L, 24, 3));
739     }
740 
741     /**
742      * Tests {@link Conversion#hexToShort(String, int, short, int, int)}.
743      */
744     @Test
745     public void testHexToShort() {
746         final String src = "CDF1F0C10F12345678";
747         assertEquals((short) 0x0000, Conversion.hexToShort(src, 0, (short) 0, 0, 0));
748         assertEquals((short) 0x000C, Conversion.hexToShort(src, 0, (short) 0, 0, 1));
749         assertEquals((short) 0x1FDC, Conversion.hexToShort(src, 0, (short) 0, 0, 4));
750         assertEquals((short) 0xF1FD, Conversion.hexToShort(src, 1, (short) 0, 0, 4));
751         assertEquals((short) 0x1234, Conversion.hexToShort(src, 0, (short) 0x1234, 0, 0));
752         assertEquals((short) 0x8764, Conversion.hexToShort(src, 15, (short) 0x1234, 4, 3));
753     }
754 
755     /**
756      * Tests {@link Conversion#intArrayToLong(int[], int, long, int, int)}.
757      */
758     @Test
759     public void testIntArrayToLong() {
760         final int[] src = {0xCDF1F0C1, 0x0F123456, 0x78000000};
761         assertEquals(0x0000000000000000L, Conversion.intArrayToLong(src, 0, 0L, 0, 0));
762         assertEquals(0x0000000000000000L, Conversion.intArrayToLong(src, 1, 0L, 0, 0));
763         assertEquals(0x00000000CDF1F0C1L, Conversion.intArrayToLong(src, 0, 0L, 0, 1));
764         assertEquals(0x0F123456CDF1F0C1L, Conversion.intArrayToLong(src, 0, 0L, 0, 2));
765         assertEquals(0x000000000F123456L, Conversion.intArrayToLong(src, 1, 0L, 0, 1));
766         assertEquals(
767             0x123456789ABCDEF0L, Conversion.intArrayToLong(src, 0, 0x123456789ABCDEF0L, 0, 0));
768         assertEquals(
769             0x1234567878000000L, Conversion.intArrayToLong(src, 2, 0x123456789ABCDEF0L, 0, 1));
770         // assertEquals(0x0F12345678000000L, Conversion.intsToLong(src, 1, 0x123456789ABCDEF0L, 32, 2));
771     }
772 
773     /**
774      * Tests {@link Conversion#intToBinary(int, int, boolean[], int, int)}.
775      */
776     @Test
777     public void testIntToBinary() {
778         assertArrayEquals(
779             new boolean[]{}, Conversion.intToBinary(0x00000000, 0, new boolean[]{}, 0, 0));
780         assertArrayEquals(
781             new boolean[]{}, Conversion.intToBinary(0x00000000, 100, new boolean[]{}, 0, 0));
782         assertArrayEquals(
783             new boolean[]{}, Conversion.intToBinary(0x00000000, 0, new boolean[]{}, 100, 0));
784         assertArrayEquals(
785             new boolean[69], Conversion.intToBinary(0x90ABCDEF, 0, new boolean[69], 0, 0));
786         assertArrayEquals(new boolean[]{
787             true, false, false, false, false, false, false, false, false, false, false, false,
788             false, false, false, false, false, false, false, false, false, false, false, false,
789             false, false, false, false, false, false, false, false, false, false, false, false,
790             false}, Conversion.intToBinary(0x90ABCDEF, 0, new boolean[37], 0, 1));
791         assertArrayEquals(new boolean[]{
792             true, true, false, false, false, false, false, false, false, false, false, false,
793             false, false, false, false, false, false, false, false, false, false, false, false,
794             false, false, false, false, false, false, false, false, false, false, false, false,
795             false}, Conversion.intToBinary(0x90ABCDEF, 0, new boolean[37], 0, 2));
796         assertArrayEquals(new boolean[]{
797             true, true, true, false, false, false, false, false, false, false, false, false,
798             false, false, false, false, false, false, false, false, false, false, false, false,
799             false, false, false, false, false, false, false, false, false, false, false, false,
800             false}, Conversion.intToBinary(0x90ABCDEF, 0, new boolean[37], 0, 3));
801         assertArrayEquals(
802             new boolean[]{
803                 true, true, true, true, false, true, true, true, true, false, true, true,
804                 false, false, true, true, true, true, false, true, false, true, false, true,
805                 false, false, false, false, true, false, false, false, false, false, false,
806                 false, false}, Conversion.intToBinary(0x90ABCDEF, 0, new boolean[37], 0, 31));
807         assertArrayEquals(
808             new boolean[]{
809                 true, true, true, true, false, true, true, true, true, false, true, true,
810                 false, false, true, true, true, true, false, true, false, true, false, true,
811                 false, false, false, false, true, false, false, true, false, false, false,
812                 false, false}, Conversion.intToBinary(0x90ABCDEF, 0, new boolean[37], 0, 32));
813         assertArrayEquals(new boolean[]{
814             false, false, true, false, false, false, false, false, false, false, false, false,
815             false, false, false, false, false, false, false, false, false, false, false, false,
816             false, false, false, false, false, false, false, false, false, false, false, false,
817             false}, Conversion.intToBinary(0x90ABCDEF, 0, new boolean[37], 2, 1));
818         assertArrayEquals(
819             new boolean[]{
820                 false, false, true, true, true, true, false, true, true, true, true, false,
821                 true, true, false, false, true, true, true, true, false, true, false, true,
822                 false, true, false, false, false, false, true, false, false, true, false,
823                 false, false}, Conversion.intToBinary(0x90ABCDEF, 0, new boolean[37], 2, 32));
824         assertArrayEquals(
825             new boolean[]{
826                 true, true, true, false, true, true, true, true, false, true, true, false,
827                 false, true, true, true, true, false, true, false, true, false, true, false,
828                 false, false, false, true, false, false, true, false, false, false, false,
829                 false, false}, Conversion.intToBinary(0x90ABCDEF, 1, new boolean[37], 0, 31));
830         assertArrayEquals(
831             new boolean[]{
832                 true, true, false, true, true, true, true, false, true, true, false, false,
833                 true, true, true, true, false, true, false, true, false, true, false, false,
834                 false, false, true, false, false, true, false, false, false, false, false,
835                 false, false}, Conversion.intToBinary(0x90ABCDEF, 2, new boolean[37], 0, 30));
836         // assertArrayEquals(new boolean[]{false, false, false, true, true, false, true,
837         // true,
838         // true, true, false, true, true, false, false, true, true, true, true, false, true,
839         // false, true, false, true, false, false, false, false, true, false, false, false,
840         // false, false, false, false}, Conversion.intToBinary(0x90ABCDEF, 2, new boolean[37],
841         // 3, 31)); //rejected by assertion
842         assertArrayEquals(
843             new boolean[]{
844                 false, false, false, true, true, false, true, true, true, true, false, true,
845                 true, false, false, true, true, true, true, false, true, false, true, false,
846                 true, false, false, false, false, true, false, false, true, false, false,
847                 false, false}, Conversion.intToBinary(0x90ABCDEF, 2, new boolean[37], 3, 30));
848     }
849 
850     /**
851      * Tests {@link Conversion#intToByteArray(int, int, byte[], int, int)}.
852      */
853     @Test
854     public void testIntToByteArray() {
855         assertArrayEquals(
856             new byte[]{}, Conversion.intToByteArray(0x00000000, 0, new byte[]{}, 0, 0));
857         assertArrayEquals(
858             new byte[]{}, Conversion.intToByteArray(0x00000000, 100, new byte[]{}, 0, 0));
859         assertArrayEquals(
860             new byte[]{}, Conversion.intToByteArray(0x00000000, 0, new byte[]{}, 100, 0));
861         assertArrayEquals(
862             new byte[]{
863                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
864                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
865             Conversion.intToByteArray(0x90ABCDEF, 0, new byte[]{
866                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 0, 0));
867         assertArrayEquals(
868             new byte[]{
869                 (byte) 0xEF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
870                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
871             Conversion.intToByteArray(0x90ABCDEF, 0, new byte[]{
872                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 0, 1));
873         assertArrayEquals(
874             new byte[]{
875                 (byte) 0xEF, (byte) 0xCD, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
876                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
877             Conversion.intToByteArray(0x90ABCDEF, 0, new byte[]{
878                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 0, 2));
879         assertArrayEquals(
880             new byte[]{
881                 (byte) 0xEF, (byte) 0xCD, (byte) 0xAB, (byte) 0x90, (byte) 0xFF, (byte) 0xFF,
882                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
883             Conversion.intToByteArray(0x90ABCDEF, 0, new byte[]{
884                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 0, 4));
885         assertArrayEquals(
886             new byte[]{
887                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xEF, (byte) 0xFF, (byte) 0xFF,
888                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
889             Conversion.intToByteArray(0x90ABCDEF, 0, new byte[]{
890                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 3, 1));
891         assertArrayEquals(
892             new byte[]{
893                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xEF, (byte) 0xCD, (byte) 0xFF,
894                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
895             Conversion.intToByteArray(0x90ABCDEF, 0, new byte[]{
896                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 3, 2));
897         assertArrayEquals(
898             new byte[]{
899                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xEF, (byte) 0xCD, (byte) 0xAB,
900                 (byte) 0x90, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
901             Conversion.intToByteArray(0x90ABCDEF, 0, new byte[]{
902                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 3, 4));
903         assertArrayEquals(
904             new byte[]{
905                 (byte) 0xF7, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
906                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
907             Conversion.intToByteArray(0x90ABCDEF, 1, new byte[]{
908                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 0, 1));
909         assertArrayEquals(
910             new byte[]{
911                 (byte) 0x7B, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
912                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
913             Conversion.intToByteArray(0x90ABCDEF, 2, new byte[]{
914                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 0, 1));
915         assertArrayEquals(
916             new byte[]{
917                 (byte) 0xFF, (byte) 0x00, (byte) 0xFF, (byte) 0x6F, (byte) 0x5E, (byte) 0x85,
918                 (byte) 0xFC, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
919             Conversion.intToByteArray(0x90ABCDEF, 5, new byte[]{
920                 -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 3, 4));
921         // assertArrayEquals(new
922         // byte[]{(byte) 0xFF, (byte) 0x00, (byte) 0xFF, (byte) 0x5E, (byte) 0x85, (byte) 0xFC, (byte) 0x00, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF}, Conversion.intToByteArray(0x90ABCDEF, 13, new
923         // byte[]{-1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 3, 4)); //rejected by assertion
924         assertArrayEquals(
925             new byte[]{
926                 (byte) 0xFF, (byte) 0x00, (byte) 0xFF, (byte) 0x5E, (byte) 0x85, (byte) 0xFC,
927                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
928             Conversion.intToByteArray(0x90ABCDEF, 13, new byte[]{
929                 -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 3, 3));
930     }
931 
932     /**
933      * Tests {@link Conversion#intToHex(int, int, String, int, int)}.
934      */
935     @Test
936     public void testIntToHex() {
937         assertEquals("", Conversion.intToHex(0x00000000, 0, "", 0, 0));
938         assertEquals("", Conversion.intToHex(0x00000000, 100, "", 0, 0));
939         assertEquals("", Conversion.intToHex(0x00000000, 0, "", 100, 0));
940         assertEquals(
941             "ffffffffffffffffffffffff",
942             Conversion.intToHex(0x90ABCDEF, 0, "ffffffffffffffffffffffff", 0, 0));
943         assertEquals(
944             "3fffffffffffffffffffffff",
945             Conversion.intToHex(0x90ABCDE3, 0, "ffffffffffffffffffffffff", 0, 1));
946         assertEquals(
947             "feffffffffffffffffffffff",
948             Conversion.intToHex(0x90ABCDEF, 0, "ffffffffffffffffffffffff", 0, 2));
949         assertEquals(
950             "fedcffffffffffffffffffff",
951             Conversion.intToHex(0x90ABCDEF, 0, "ffffffffffffffffffffffff", 0, 4));
952         assertEquals(
953             "fedcba0fffffffffffffffff",
954             Conversion.intToHex(0x90ABCDEF, 0, "ffffffffffffffffffffffff", 0, 7));
955         assertEquals(
956             "fedcba09ffffffffffffffff",
957             Conversion.intToHex(0x90ABCDEF, 0, "ffffffffffffffffffffffff", 0, 8));
958         assertEquals(
959             "fff3ffffffffffffffffffff",
960             Conversion.intToHex(0x90ABCDE3, 0, "ffffffffffffffffffffffff", 3, 1));
961         assertEquals(
962             "ffffefffffffffffffffffff",
963             Conversion.intToHex(0x90ABCDEF, 0, "ffffffffffffffffffffffff", 3, 2));
964         assertEquals(
965             "ffffedcfffffffffffffffff",
966             Conversion.intToHex(0x90ABCDEF, 0, "ffffffffffffffffffffffff", 3, 4));
967         assertEquals(
968             "ffffedcba0ffffffffffffff",
969             Conversion.intToHex(0x90ABCDEF, 0, "ffffffffffffffffffffffff", 3, 7));
970         assertEquals(
971             "ffffedcba09fffffffffffff",
972             Conversion.intToHex(0x90ABCDEF, 0, "ffffffffffffffffffffffff", 3, 8));
973         assertEquals(
974             "7fffffffffffffffffffffff",
975             Conversion.intToHex(0x90ABCDEF, 1, "ffffffffffffffffffffffff", 0, 1));
976         assertEquals(
977             "bfffffffffffffffffffffff",
978             Conversion.intToHex(0x90ABCDEF, 2, "ffffffffffffffffffffffff", 0, 1));
979         assertEquals(
980             "fffdb97512ffffffffffffff",
981             Conversion.intToHex(0x90ABCDEF, 3, "ffffffffffffffffffffffff", 3, 8));
982         // assertEquals("ffffffffffffffffffffffff", Conversion.intToHex(0x90ABCDEF,
983         // 4, "ffffffffffffffffffffffff", 3, 8)); //rejected by assertion
984         assertEquals(
985             "fffedcba09ffffffffffffff",
986             Conversion.intToHex(0x90ABCDEF, 4, "ffffffffffffffffffffffff", 3, 7));
987         assertEquals("fedcba09", Conversion.intToHex(0x90ABCDEF, 0, "", 0, 8));
988         assertThrows(StringIndexOutOfBoundsException.class, () -> Conversion.intToHex(0x90ABCDEF, 0, "", 1, 8));
989     }
990 
991     /**
992      * Tests {@link Conversion#intToHexDigit(int)}.
993      */
994     @Test
995     public void testIntToHexDigit() {
996         assertEquals('0', Conversion.intToHexDigit(0));
997         assertEquals('1', Conversion.intToHexDigit(1));
998         assertEquals('2', Conversion.intToHexDigit(2));
999         assertEquals('3', Conversion.intToHexDigit(3));
1000         assertEquals('4', Conversion.intToHexDigit(4));
1001         assertEquals('5', Conversion.intToHexDigit(5));
1002         assertEquals('6', Conversion.intToHexDigit(6));
1003         assertEquals('7', Conversion.intToHexDigit(7));
1004         assertEquals('8', Conversion.intToHexDigit(8));
1005         assertEquals('9', Conversion.intToHexDigit(9));
1006         assertEquals('a', Conversion.intToHexDigit(10));
1007         assertEquals('b', Conversion.intToHexDigit(11));
1008         assertEquals('c', Conversion.intToHexDigit(12));
1009         assertEquals('d', Conversion.intToHexDigit(13));
1010         assertEquals('e', Conversion.intToHexDigit(14));
1011         assertEquals('f', Conversion.intToHexDigit(15));
1012         assertThrows(IllegalArgumentException.class, () -> Conversion.intToHexDigit(16));
1013     }
1014 
1015     /**
1016      * Tests {@link Conversion#intToHexDigitMsb0(int)}.
1017      */
1018     @Test
1019     public void testIntToHexDigitMsb0() {
1020         assertEquals('0', Conversion.intToHexDigitMsb0(0));
1021         assertEquals('8', Conversion.intToHexDigitMsb0(1));
1022         assertEquals('4', Conversion.intToHexDigitMsb0(2));
1023         assertEquals('c', Conversion.intToHexDigitMsb0(3));
1024         assertEquals('2', Conversion.intToHexDigitMsb0(4));
1025         assertEquals('a', Conversion.intToHexDigitMsb0(5));
1026         assertEquals('6', Conversion.intToHexDigitMsb0(6));
1027         assertEquals('e', Conversion.intToHexDigitMsb0(7));
1028         assertEquals('1', Conversion.intToHexDigitMsb0(8));
1029         assertEquals('9', Conversion.intToHexDigitMsb0(9));
1030         assertEquals('5', Conversion.intToHexDigitMsb0(10));
1031         assertEquals('d', Conversion.intToHexDigitMsb0(11));
1032         assertEquals('3', Conversion.intToHexDigitMsb0(12));
1033         assertEquals('b', Conversion.intToHexDigitMsb0(13));
1034         assertEquals('7', Conversion.intToHexDigitMsb0(14));
1035         assertEquals('f', Conversion.intToHexDigitMsb0(15));
1036         assertThrows(IllegalArgumentException.class, () -> Conversion.intToHexDigitMsb0(16));
1037     }
1038 
1039     /**
1040      * Tests {@link Conversion#intToShortArray(int, int, short[], int, int)}.
1041      */
1042     @Test
1043     public void testIntToShortArray() {
1044         assertArrayEquals(
1045             new short[]{}, Conversion.intToShortArray(0x00000000, 0, new short[]{}, 0, 0));
1046         assertArrayEquals(
1047             new short[]{}, Conversion.intToShortArray(0x00000000, 100, new short[]{}, 0, 0));
1048         assertArrayEquals(
1049             new short[]{}, Conversion.intToShortArray(0x00000000, 0, new short[]{}, 100, 0));
1050         assertArrayEquals(
1051             new short[]{(short) 0xFFFF, (short) 0xFFFF, (short) 0xFFFF, (short) 0xFFFF},
1052             Conversion.intToShortArray(0x12345678, 0, new short[]{-1, -1, -1, -1}, 0, 0));
1053         assertArrayEquals(
1054             new short[]{(short) 0x5678, (short) 0xFFFF, (short) 0xFFFF, (short) 0xFFFF},
1055             Conversion.intToShortArray(0x12345678, 0, new short[]{-1, -1, -1, -1}, 0, 1));
1056         assertArrayEquals(
1057             new short[]{(short) 0x5678, (short) 0x1234, (short) 0xFFFF, (short) 0xFFFF},
1058             Conversion.intToShortArray(0x12345678, 0, new short[]{-1, -1, -1, -1}, 0, 2));
1059         // assertArrayEquals(new
1060         // short[]{(short) 0x5678, (short) 0x1234, (short) 0x5678, (short) 0xFFFF}, Conversion.intToShortArray(0x12345678,
1061         // 0, new short[]{-1, -1, -1, -1}, 0, 3)); //rejected by assertion
1062         // assertArrayEquals(new
1063         // short[]{(short) 0x5678, (short) 0x1234, (short) 0x5678, (short) 0x1234}, Conversion.intToShortArray(0x12345678,
1064         // 0, new short[]{-1, -1, -1, -1}, 0, 4));
1065         // assertArrayEquals(new
1066         // short[]{(short) 0xFFFF, (short) 0x5678, (short) 0x1234, (short) 0x5678}, Conversion.intToShortArray(0x12345678,
1067         // 0, new short[]{-1, -1, -1, -1}, 1, 3));
1068         assertArrayEquals(
1069             new short[]{(short) 0xFFFF, (short) 0xFFFF, (short) 0x5678, (short) 0x1234},
1070             Conversion.intToShortArray(0x12345678, 0, new short[]{-1, -1, -1, -1}, 2, 2));
1071         assertArrayEquals(
1072             new short[]{(short) 0xFFFF, (short) 0xFFFF, (short) 0x5678, (short) 0xFFFF},
1073             Conversion.intToShortArray(0x12345678, 0, new short[]{-1, -1, -1, -1}, 2, 1));
1074         assertArrayEquals(
1075             new short[]{(short) 0xFFFF, (short) 0xFFFF, (short) 0xFFFF, (short) 0x5678},
1076             Conversion.intToShortArray(0x12345678, 0, new short[]{-1, -1, -1, -1}, 3, 1));
1077         assertArrayEquals(
1078             new short[]{(short) 0xFFFF, (short) 0xFFFF, (short) 0x2B3C, (short) 0xFFFF},
1079             Conversion.intToShortArray(0x12345678, 1, new short[]{-1, -1, -1, -1}, 2, 1));
1080         assertArrayEquals(
1081             new short[]{(short) 0xFFFF, (short) 0xFFFF, (short) 0x159E, (short) 0xFFFF},
1082             Conversion.intToShortArray(0x12345678, 2, new short[]{-1, -1, -1, -1}, 2, 1));
1083         assertArrayEquals(
1084             new short[]{(short) 0xFFFF, (short) 0xFFFF, (short) 0x8ACF, (short) 0xFFFF},
1085             Conversion.intToShortArray(0x12345678, 3, new short[]{-1, -1, -1, -1}, 2, 1));
1086         assertArrayEquals(
1087             new short[]{(short) 0xFFFF, (short) 0xFFFF, (short) 0x4567, (short) 0xFFFF},
1088             Conversion.intToShortArray(0x12345678, 4, new short[]{-1, -1, -1, -1}, 2, 1));
1089         // assertArrayEquals(new
1090         // short[]{(short) 0xE6F7, (short) 0x4855, (short) 0x2B3C, (short) 0x091A}, Conversion.intToShortArray(0x12345678,
1091         // 1, new short[]{-1, -1, -1, -1}, 0, 4)); //rejected by assertion
1092         // assertArrayEquals(new
1093         // short[]{(short) 0x2B3C}, Conversion.intToShortArray(0x12345678, 33, new
1094         // short[]{0}, 0, 1)); //rejected by assertion
1095         assertArrayEquals(
1096             new short[]{(short) 0x091A},
1097             Conversion.intToShortArray(0x12345678, 17, new short[]{0}, 0, 1));
1098     }
1099 
1100     /**
1101      * Tests {@link Conversion#longToBinary(long, int, boolean[], int, int)}.
1102      */
1103     @Test
1104     public void testLongToBinary() {
1105         assertArrayEquals(
1106             new boolean[]{},
1107             Conversion.longToBinary(0x0000000000000000L, 0, new boolean[]{}, 0, 0));
1108         assertArrayEquals(
1109             new boolean[]{},
1110             Conversion.longToBinary(0x0000000000000000L, 100, new boolean[]{}, 0, 0));
1111         assertArrayEquals(
1112             new boolean[]{},
1113             Conversion.longToBinary(0x0000000000000000L, 0, new boolean[]{}, 100, 0));
1114         assertArrayEquals(
1115             new boolean[69],
1116             Conversion.longToBinary(0x1234567890ABCDEFL, 0, new boolean[69], 0, 0));
1117 
1118         assertArrayEquals(
1119             new boolean[]{
1120                 true, false, false, false, false, false, false, false, false, false, false,
1121                 false, false, false, false, false, false, false, false, false, false, false,
1122                 false, false, false, false, false, false, false, false, false, false, false,
1123                 false, false, false, false, false, false, false, false, false, false, false,
1124                 false, false, false, false, false, false, false, false, false, false, false,
1125                 false, false, false, false, false, false, false, false, false, false, false,
1126                 false, false, false},
1127             Conversion.longToBinary(0x1234567890ABCDEFL, 0, new boolean[69], 0, 1));
1128         assertArrayEquals(
1129             new boolean[]{
1130                 true, true, false, false, false, false, false, false, false, false, false,
1131                 false, false, false, false, false, false, false, false, false, false, false,
1132                 false, false, false, false, false, false, false, false, false, false, false,
1133                 false, false, false, false, false, false, false, false, false, false, false,
1134                 false, false, false, false, false, false, false, false, false, false, false,
1135                 false, false, false, false, false, false, false, false, false, false, false,
1136                 false, false, false},
1137             Conversion.longToBinary(0x1234567890ABCDEFL, 0, new boolean[69], 0, 2));
1138         assertArrayEquals(
1139             new boolean[]{
1140                 true, true, true, false, false, false, false, false, false, false, false,
1141                 false, false, false, false, false, false, false, false, false, false, false,
1142                 false, false, false, false, false, false, false, false, false, false, false,
1143                 false, false, false, false, false, false, false, false, false, false, false,
1144                 false, false, false, false, false, false, false, false, false, false, false,
1145                 false, false, false, false, false, false, false, false, false, false, false,
1146                 false, false, false},
1147             Conversion.longToBinary(0x1234567890ABCDEFL, 0, new boolean[69], 0, 3));
1148         assertArrayEquals(
1149             new boolean[]{
1150                 true, true, true, true, false, true, true, true, true, false, true, true,
1151                 false, false, true, true, true, true, false, true, false, true, false, true,
1152                 false, false, false, false, true, false, false, true, false, false, false,
1153                 true, true, true, true, false, false, true, true, false, true, false, true,
1154                 false, false, false, true, false, true, true, false, false, false, true, false,
1155                 false, true, false, false, false, false, false, false, false, false},
1156             Conversion.longToBinary(0x1234567890ABCDEFL, 0, new boolean[69], 0, 63));
1157         assertArrayEquals(
1158             new boolean[]{
1159                 true, true, true, true, false, true, true, true, true, false, true, true,
1160                 false, false, true, true, true, true, false, true, false, true, false, true,
1161                 false, false, false, false, true, false, false, true, false, false, false,
1162                 true, true, true, true, false, false, true, true, false, true, false, true,
1163                 false, false, false, true, false, true, true, false, false, false, true, false,
1164                 false, true, false, false, false, false, false, false, false, false},
1165             Conversion.longToBinary(0x1234567890ABCDEFL, 0, new boolean[69], 0, 64));
1166         assertArrayEquals(
1167             new boolean[]{
1168                 false, false, true, false, false, false, false, false, false, false, false,
1169                 false, false, false, false, false, false, false, false, false, false, false,
1170                 false, false, false, false, false, false, false, false, false, false, false,
1171                 false, false, false, false, false, false, false, false, false, false, false,
1172                 false, false, false, false, false, false, false, false, false, false, false,
1173                 false, false, false, false, false, false, false, false, false, false, false,
1174                 false, false, false},
1175             Conversion.longToBinary(0x1234567890ABCDEFL, 0, new boolean[69], 2, 1));
1176         assertArrayEquals(
1177             new boolean[]{
1178                 false, false, true, true, true, true, false, true, true, true, true, false,
1179                 true, true, false, false, true, true, true, true, false, true, false, true,
1180                 false, true, false, false, false, false, true, false, false, true, false,
1181                 false, false, true, true, true, true, false, false, true, true, false, true,
1182                 false, true, false, false, false, true, false, true, true, false, false, false,
1183                 true, false, false, true, false, false, false, false, false, false},
1184             Conversion.longToBinary(0x1234567890ABCDEFL, 0, new boolean[69], 2, 64));
1185         assertArrayEquals(
1186             new boolean[]{
1187                 true, true, true, false, true, true, true, true, false, true, true, false,
1188                 false, true, true, true, true, false, true, false, true, false, true, false,
1189                 false, false, false, true, false, false, true, false, false, false, true, true,
1190                 true, true, false, false, true, true, false, true, false, true, false, false,
1191                 false, true, false, true, true, false, false, false, true, false, false, true,
1192                 false, false, false, false, false, false, false, false, false},
1193             Conversion.longToBinary(0x1234567890ABCDEFL, 1, new boolean[69], 0, 63));
1194         assertArrayEquals(
1195             new boolean[]{
1196                 true, true, false, true, true, true, true, false, true, true, false, false,
1197                 true, true, true, true, false, true, false, true, false, true, false, false,
1198                 false, false, true, false, false, true, false, false, false, true, true, true,
1199                 true, false, false, true, true, false, true, false, true, false, false, false,
1200                 true, false, true, true, false, false, false, true, false, false, true, false,
1201                 false, false, false, false, false, false, false, false, false},
1202             Conversion.longToBinary(0x1234567890ABCDEFL, 2, new boolean[69], 0, 62));
1203 
1204         // assertArrayEquals(new boolean[]{false, false, false, true, true, false, true, true,
1205         // true, true, false, true, true, false, false, true, true, true, true, false, true,
1206         // false, true, false, true, false, false, false, false, true, false, false, true,
1207         // false, false, false, true, true, true, true, false, false, true, true, false, true,
1208         // false, true, false, false, false, true, false, true, true, false, false, false, true,
1209         // false, false, true, false, false, false
1210         // , false, false, false, false}, Conversion.longToBinary(0x1234567890ABCDEFL, 2, new
1211         // boolean[69], 3, 63)); //rejected by assertion
1212         assertArrayEquals(
1213             new boolean[]{
1214                 false, false, false, true, true, false, true, true, true, true, false, true,
1215                 true, false, false, true, true, true, true, false, true, false, true, false,
1216                 true, false, false, false, false, true, false, false, true, false, false,
1217                 false, true, true, true, true, false, false, true, true, false, true, false,
1218                 true, false, false, false, true, false, true, true, false, false, false, true,
1219                 false, false, true, false, false, false, false, false, false, false},
1220             Conversion.longToBinary(0x1234567890ABCDEFL, 2, new boolean[69], 3, 62));
1221     }
1222 
1223     /**
1224      * Tests {@link Conversion#longToByteArray(long, int, byte[], int, int)}.
1225      */
1226     @Test
1227     public void testLongToByteArray() {
1228         assertArrayEquals(
1229             new byte[]{},
1230             Conversion.longToByteArray(0x0000000000000000L, 0, new byte[]{}, 0, 0));
1231         assertArrayEquals(
1232             new byte[]{},
1233             Conversion.longToByteArray(0x0000000000000000L, 100, new byte[]{}, 0, 0));
1234         assertArrayEquals(
1235             new byte[]{},
1236             Conversion.longToByteArray(0x0000000000000000L, 0, new byte[]{}, 100, 0));
1237         assertArrayEquals(
1238             new byte[]{
1239                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
1240                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
1241             Conversion.longToByteArray(0x1234567890ABCDEFL, 0, new byte[]{
1242                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 0, 0));
1243         assertArrayEquals(
1244             new byte[]{
1245                 (byte) 0xEF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
1246                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
1247             Conversion.longToByteArray(0x1234567890ABCDEFL, 0, new byte[]{
1248                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 0, 1));
1249         assertArrayEquals(
1250             new byte[]{
1251                 (byte) 0xEF, (byte) 0xCD, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
1252                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
1253             Conversion.longToByteArray(0x1234567890ABCDEFL, 0, new byte[]{
1254                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 0, 2));
1255         assertArrayEquals(
1256             new byte[]{
1257                 (byte) 0xEF, (byte) 0xCD, (byte) 0xAB, (byte) 0x90, (byte) 0xFF, (byte) 0xFF,
1258                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
1259             Conversion.longToByteArray(0x1234567890ABCDEFL, 0, new byte[]{
1260                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 0, 4));
1261         assertArrayEquals(
1262             new byte[]{
1263                 (byte) 0xEF, (byte) 0xCD, (byte) 0xAB, (byte) 0x90, (byte) 0x78, (byte) 0x56,
1264                 (byte) 0x34, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
1265             Conversion.longToByteArray(0x1234567890ABCDEFL, 0, new byte[]{
1266                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 0, 7));
1267         assertArrayEquals(
1268             new byte[]{
1269                 (byte) 0xEF, (byte) 0xCD, (byte) 0xAB, (byte) 0x90, (byte) 0x78, (byte) 0x56,
1270                 (byte) 0x34, (byte) 0x12, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
1271             Conversion.longToByteArray(0x1234567890ABCDEFL, 0, new byte[]{
1272                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 0, 8));
1273         assertArrayEquals(
1274             new byte[]{
1275                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xEF, (byte) 0xFF, (byte) 0xFF,
1276                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
1277             Conversion.longToByteArray(0x1234567890ABCDEFL, 0, new byte[]{
1278                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 3, 1));
1279         assertArrayEquals(
1280             new byte[]{
1281                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xEF, (byte) 0xCD, (byte) 0xFF,
1282                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
1283             Conversion.longToByteArray(0x1234567890ABCDEFL, 0, new byte[]{
1284                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 3, 2));
1285         assertArrayEquals(
1286             new byte[]{
1287                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xEF, (byte) 0xCD, (byte) 0xAB,
1288                 (byte) 0x90, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
1289             Conversion.longToByteArray(0x1234567890ABCDEFL, 0, new byte[]{
1290                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 3, 4));
1291         assertArrayEquals(
1292             new byte[]{
1293                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xEF, (byte) 0xCD, (byte) 0xAB,
1294                 (byte) 0x90, (byte) 0x78, (byte) 0x56, (byte) 0x34, (byte) 0xFF},
1295             Conversion.longToByteArray(0x1234567890ABCDEFL, 0, new byte[]{
1296                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 3, 7));
1297         assertArrayEquals(
1298             new byte[]{
1299                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xEF, (byte) 0xCD, (byte) 0xAB,
1300                 (byte) 0x90, (byte) 0x78, (byte) 0x56, (byte) 0x34, (byte) 0x12},
1301             Conversion.longToByteArray(0x1234567890ABCDEFL, 0, new byte[]{
1302                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 3, 8));
1303         assertArrayEquals(
1304             new byte[]{
1305                 (byte) 0xF7, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
1306                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
1307             Conversion.longToByteArray(0x1234567890ABCDEFL, 1, new byte[]{
1308                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 0, 1));
1309         assertArrayEquals(
1310             new byte[]{
1311                 (byte) 0x7B, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
1312                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF},
1313             Conversion.longToByteArray(0x1234567890ABCDEFL, 2, new byte[]{
1314                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 0, 1));
1315         assertArrayEquals(
1316             new byte[]{
1317                 (byte) 0xFF, (byte) 0x00, (byte) 0xFF, (byte) 0x6F, (byte) 0x5E, (byte) 0x85,
1318                 (byte) 0xC4, (byte) 0xB3, (byte) 0xA2, (byte) 0x91, (byte) 0x00},
1319             Conversion.longToByteArray(0x1234567890ABCDEFL, 5, new byte[]{
1320                 -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 3, 8));
1321         // assertArrayEquals(new
1322         // byte[]{(byte) 0xFF, (byte) 0x00, (byte) 0xFF, (byte) 0x5E, (byte) 0x85, (byte) 0xC4, (byte) 0xB3, (byte) 0xA2, (byte) 0x91, (byte) 0x00, (byte) 0x00}, Conversion.longToByteArray(0x1234567890ABCDEFL, 13, new
1323         // byte[]{-1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 3, 8)); //rejected by assertion
1324         assertArrayEquals(
1325             new byte[]{
1326                 (byte) 0xFF, (byte) 0x00, (byte) 0xFF, (byte) 0x5E, (byte) 0x85, (byte) 0xC4,
1327                 (byte) 0xB3, (byte) 0xA2, (byte) 0x91, (byte) 0x00, (byte) 0xFF},
1328             Conversion.longToByteArray(0x1234567890ABCDEFL, 13, new byte[]{
1329                 -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 3, 7));
1330     }
1331 
1332     /**
1333      * Tests {@link Conversion#longToHex(long, int, String, int, int)}.
1334      */
1335     @Test
1336     public void testLongToHex() {
1337         assertEquals("", Conversion.longToHex(0x0000000000000000L, 0, "", 0, 0));
1338         assertEquals("", Conversion.longToHex(0x0000000000000000L, 100, "", 0, 0));
1339         assertEquals("", Conversion.longToHex(0x0000000000000000L, 0, "", 100, 0));
1340         assertEquals(
1341             "ffffffffffffffffffffffff",
1342             Conversion.longToHex(0x1234567890ABCDEFL, 0, "ffffffffffffffffffffffff", 0, 0));
1343         assertEquals(
1344             "3fffffffffffffffffffffff",
1345             Conversion.longToHex(0x1234567890ABCDE3L, 0, "ffffffffffffffffffffffff", 0, 1));
1346         assertEquals(
1347             "feffffffffffffffffffffff",
1348             Conversion.longToHex(0x1234567890ABCDEFL, 0, "ffffffffffffffffffffffff", 0, 2));
1349         assertEquals(
1350             "fedcffffffffffffffffffff",
1351             Conversion.longToHex(0x1234567890ABCDEFL, 0, "ffffffffffffffffffffffff", 0, 4));
1352         assertEquals(
1353             "fedcba098765432fffffffff",
1354             Conversion.longToHex(0x1234567890ABCDEFL, 0, "ffffffffffffffffffffffff", 0, 15));
1355         assertEquals(
1356             "fedcba0987654321ffffffff",
1357             Conversion.longToHex(0x1234567890ABCDEFL, 0, "ffffffffffffffffffffffff", 0, 16));
1358         assertEquals(
1359             "fff3ffffffffffffffffffff",
1360             Conversion.longToHex(0x1234567890ABCDE3L, 0, "ffffffffffffffffffffffff", 3, 1));
1361         assertEquals(
1362             "ffffefffffffffffffffffff",
1363             Conversion.longToHex(0x1234567890ABCDEFL, 0, "ffffffffffffffffffffffff", 3, 2));
1364         assertEquals(
1365             "ffffedcfffffffffffffffff",
1366             Conversion.longToHex(0x1234567890ABCDEFL, 0, "ffffffffffffffffffffffff", 3, 4));
1367         assertEquals(
1368             "ffffedcba098765432ffffff",
1369             Conversion.longToHex(0x1234567890ABCDEFL, 0, "ffffffffffffffffffffffff", 3, 15));
1370         assertEquals(
1371             "ffffedcba0987654321fffff",
1372             Conversion.longToHex(0x1234567890ABCDEFL, 0, "ffffffffffffffffffffffff", 3, 16));
1373         assertEquals(
1374             "7fffffffffffffffffffffff",
1375             Conversion.longToHex(0x1234567890ABCDEFL, 1, "ffffffffffffffffffffffff", 0, 1));
1376         assertEquals(
1377             "bfffffffffffffffffffffff",
1378             Conversion.longToHex(0x1234567890ABCDEFL, 2, "ffffffffffffffffffffffff", 0, 1));
1379         assertEquals(
1380             "fffdb975121fca86420fffff",
1381             Conversion.longToHex(0x1234567890ABCDEFL, 3, "ffffffffffffffffffffffff", 3, 16));
1382         // assertEquals("ffffffffffffffffffffffff", Conversion.longToHex(0x1234567890ABCDEFL, 4, "ffffffffffffffffffffffff", 3, 16)); //rejected
1383         // by assertion
1384         assertEquals(
1385             "fffedcba0987654321ffffff",
1386             Conversion.longToHex(0x1234567890ABCDEFL, 4, "ffffffffffffffffffffffff", 3, 15));
1387         assertEquals(
1388             "fedcba0987654321", Conversion.longToHex(0x1234567890ABCDEFL, 0, "", 0, 16));
1389         assertThrows(StringIndexOutOfBoundsException.class, () -> Conversion.longToHex(0x1234567890ABCDEFL, 0, "", 1, 8));
1390     }
1391 
1392     /**
1393      * Tests {@link Conversion#longToIntArray(long, int, int[], int, int)}.
1394      */
1395     @Test
1396     public void testLongToIntArray() {
1397         assertArrayEquals(
1398             new int[]{}, Conversion.longToIntArray(0x0000000000000000L, 0, new int[]{}, 0, 0));
1399         assertArrayEquals(
1400             new int[]{}, Conversion.longToIntArray(0x0000000000000000L, 100, new int[]{}, 0, 0));
1401         assertArrayEquals(
1402             new int[]{}, Conversion.longToIntArray(0x0000000000000000L, 0, new int[]{}, 100, 0));
1403         assertArrayEquals(
1404             new int[]{0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF},
1405             Conversion.longToIntArray(0x1234567890ABCDEFL, 0, new int[]{-1, -1, -1, -1}, 0, 0));
1406         assertArrayEquals(
1407             new int[]{0x90ABCDEF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF},
1408             Conversion.longToIntArray(0x1234567890ABCDEFL, 0, new int[]{-1, -1, -1, -1}, 0, 1));
1409         assertArrayEquals(
1410             new int[]{0x90ABCDEF, 0x12345678, 0xFFFFFFFF, 0xFFFFFFFF},
1411             Conversion.longToIntArray(0x1234567890ABCDEFL, 0, new int[]{-1, -1, -1, -1}, 0, 2));
1412         // assertArrayEquals(new
1413         // int[]{0x90ABCDEF, 0x12345678, 0x90ABCDEF, 0x12345678}, Conversion.longToIntArray(0x1234567890ABCDEFL,
1414         // 0, new int[]{-1, -1, -1, -1}, 0, 4)); //rejected by assertion
1415         // assertArrayEquals(new
1416         // int[]{0xFFFFFFFF, 0x90ABCDEF, 0x12345678, 0x90ABCDEF}, Conversion.longToIntArray(0x1234567890ABCDEFL,
1417         // 0, new int[]{-1, -1, -1, -1}, 1, 3));
1418         assertArrayEquals(
1419             new int[]{0xFFFFFFFF, 0xFFFFFFFF, 0x90ABCDEF, 0x12345678},
1420             Conversion.longToIntArray(0x1234567890ABCDEFL, 0, new int[]{-1, -1, -1, -1}, 2, 2));
1421         assertArrayEquals(
1422             new int[]{0xFFFFFFFF, 0xFFFFFFFF, 0x90ABCDEF, 0xFFFFFFFF},
1423             Conversion.longToIntArray(0x1234567890ABCDEFL, 0, new int[]{-1, -1, -1, -1}, 2, 1));
1424         assertArrayEquals(
1425             new int[]{0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x90ABCDEF},
1426             Conversion.longToIntArray(0x1234567890ABCDEFL, 0, new int[]{-1, -1, -1, -1}, 3, 1));
1427         assertArrayEquals(
1428             new int[]{0xFFFFFFFF, 0xFFFFFFFF, 0x4855E6F7, 0xFFFFFFFF},
1429             Conversion.longToIntArray(0x1234567890ABCDEFL, 1, new int[]{-1, -1, -1, -1}, 2, 1));
1430         assertArrayEquals(
1431             new int[]{0xFFFFFFFF, 0xFFFFFFFF, 0x242AF37B, 0xFFFFFFFF},
1432             Conversion.longToIntArray(0x1234567890ABCDEFL, 2, new int[]{-1, -1, -1, -1}, 2, 1));
1433         assertArrayEquals(
1434             new int[]{0xFFFFFFFF, 0xFFFFFFFF, 0x121579BD, 0xFFFFFFFF},
1435             Conversion.longToIntArray(0x1234567890ABCDEFL, 3, new int[]{-1, -1, -1, -1}, 2, 1));
1436         assertArrayEquals(
1437             new int[]{0xFFFFFFFF, 0xFFFFFFFF, 0x890ABCDE, 0xFFFFFFFF},
1438             Conversion.longToIntArray(0x1234567890ABCDEFL, 4, new int[]{-1, -1, -1, -1}, 2, 1));
1439         // assertArrayEquals(new
1440         // int[]{0x4855E6F7, 0x091A2B3C, 0x4855E6F7, 0x091A2B3C}, Conversion.longToIntArray(0x1234567890ABCDEFL,
1441         // 1, new int[]{-1, -1, -1, -1}, 0, 4)); //rejected by assertion
1442         assertArrayEquals(
1443             new int[]{0x091A2B3C},
1444             Conversion.longToIntArray(0x1234567890ABCDEFL, 33, new int[]{0}, 0, 1));
1445     }
1446 
1447     /**
1448      * Tests {@link Conversion#longToShortArray(long, int, short[], int, int)}.
1449      */
1450     @Test
1451     public void testLongToShortArray() {
1452         assertArrayEquals(
1453             new short[]{},
1454             Conversion.longToShortArray(0x0000000000000000L, 0, new short[]{}, 0, 0));
1455         assertArrayEquals(
1456             new short[]{},
1457             Conversion.longToShortArray(0x0000000000000000L, 100, new short[]{}, 0, 0));
1458         assertArrayEquals(
1459             new short[]{},
1460             Conversion.longToShortArray(0x0000000000000000L, 0, new short[]{}, 100, 0));
1461         assertArrayEquals(
1462             new short[]{(short) 0xFFFF, (short) 0xFFFF, (short) 0xFFFF, (short) 0xFFFF},
1463             Conversion.longToShortArray(
1464                 0x1234567890ABCDEFL, 0, new short[]{-1, -1, -1, -1}, 0, 0));
1465         assertArrayEquals(
1466             new short[]{(short) 0xCDEF, (short) 0xFFFF, (short) 0xFFFF, (short) 0xFFFF},
1467             Conversion.longToShortArray(
1468                 0x1234567890ABCDEFL, 0, new short[]{-1, -1, -1, -1}, 0, 1));
1469         assertArrayEquals(
1470             new short[]{(short) 0xCDEF, (short) 0x90AB, (short) 0xFFFF, (short) 0xFFFF},
1471             Conversion.longToShortArray(
1472                 0x1234567890ABCDEFL, 0, new short[]{-1, -1, -1, -1}, 0, 2));
1473         assertArrayEquals(
1474             new short[]{(short) 0xCDEF, (short) 0x90AB, (short) 0x5678, (short) 0xFFFF},
1475             Conversion.longToShortArray(
1476                 0x1234567890ABCDEFL, 0, new short[]{-1, -1, -1, -1}, 0, 3));
1477         assertArrayEquals(
1478             new short[]{(short) 0xCDEF, (short) 0x90AB, (short) 0x5678, (short) 0x1234},
1479             Conversion.longToShortArray(
1480                 0x1234567890ABCDEFL, 0, new short[]{-1, -1, -1, -1}, 0, 4));
1481         assertArrayEquals(
1482             new short[]{(short) 0xFFFF, (short) 0xCDEF, (short) 0x90AB, (short) 0x5678},
1483             Conversion.longToShortArray(
1484                 0x1234567890ABCDEFL, 0, new short[]{-1, -1, -1, -1}, 1, 3));
1485         assertArrayEquals(
1486             new short[]{(short) 0xFFFF, (short) 0xFFFF, (short) 0xCDEF, (short) 0x90AB},
1487             Conversion.longToShortArray(
1488                 0x1234567890ABCDEFL, 0, new short[]{-1, -1, -1, -1}, 2, 2));
1489         assertArrayEquals(
1490             new short[]{(short) 0xFFFF, (short) 0xFFFF, (short) 0xCDEF, (short) 0xFFFF},
1491             Conversion.longToShortArray(
1492                 0x1234567890ABCDEFL, 0, new short[]{-1, -1, -1, -1}, 2, 1));
1493         assertArrayEquals(
1494             new short[]{(short) 0xFFFF, (short) 0xFFFF, (short) 0xFFFF, (short) 0xCDEF},
1495             Conversion.longToShortArray(
1496                 0x1234567890ABCDEFL, 0, new short[]{-1, -1, -1, -1}, 3, 1));
1497         assertArrayEquals(
1498             new short[]{(short) 0xFFFF, (short) 0xFFFF, (short) 0xE6F7, (short) 0xFFFF},
1499             Conversion.longToShortArray(
1500                 0x1234567890ABCDEFL, 1, new short[]{-1, -1, -1, -1}, 2, 1));
1501         assertArrayEquals(
1502             new short[]{(short) 0xFFFF, (short) 0xFFFF, (short) 0xF37B, (short) 0xFFFF},
1503             Conversion.longToShortArray(
1504                 0x1234567890ABCDEFL, 2, new short[]{-1, -1, -1, -1}, 2, 1));
1505         assertArrayEquals(
1506             new short[]{(short) 0xFFFF, (short) 0xFFFF, (short) 0x79BD, (short) 0xFFFF},
1507             Conversion.longToShortArray(
1508                 0x1234567890ABCDEFL, 3, new short[]{-1, -1, -1, -1}, 2, 1));
1509         assertArrayEquals(
1510             new short[]{(short) 0xFFFF, (short) 0xFFFF, (short) 0xBCDE, (short) 0xFFFF},
1511             Conversion.longToShortArray(
1512                 0x1234567890ABCDEFL, 4, new short[]{-1, -1, -1, -1}, 2, 1));
1513         assertArrayEquals(
1514             new short[]{(short) 0xE6F7, (short) 0x4855, (short) 0x2B3C, (short) 0x091A},
1515             Conversion.longToShortArray(
1516                 0x1234567890ABCDEFL, 1, new short[]{-1, -1, -1, -1}, 0, 4));
1517         assertArrayEquals(
1518             new short[]{(short) 0x2B3C},
1519             Conversion.longToShortArray(0x1234567890ABCDEFL, 33, new short[]{0}, 0, 1));
1520     }
1521 
1522     /**
1523      * Tests {@link Conversion#shortArrayToInt(short[], int, int, int, int)}.
1524      */
1525     @Test
1526     public void testShortArrayToInt() {
1527         final short[] src = {
1528             (short) 0xCDF1, (short) 0xF0C1, (short) 0x0F12, (short) 0x3456, (short) 0x7800};
1529         assertEquals(0x00000000, Conversion.shortArrayToInt(src, 0, 0, 0, 0));
1530         assertEquals(0x0000CDF1, Conversion.shortArrayToInt(src, 0, 0, 0, 1));
1531         assertEquals(0xF0C1CDF1, Conversion.shortArrayToInt(src, 0, 0, 0, 2));
1532         assertEquals(0x0F12F0C1, Conversion.shortArrayToInt(src, 1, 0, 0, 2));
1533         assertEquals(0x12345678, Conversion.shortArrayToInt(src, 0, 0x12345678, 0, 0));
1534         assertEquals(0xCDF15678, Conversion.shortArrayToInt(src, 0, 0x12345678, 16, 1));
1535         // assertEquals(0x34567800, Conversion.ShortArrayToInt(src, 3, 0x12345678, 16, 2));
1536     }
1537 
1538     /**
1539      * Tests {@link Conversion#shortArrayToLong(short[], int, long, int, int)}.
1540      */
1541     @Test
1542     public void testShortArrayToLong() {
1543         final short[] src = {
1544             (short) 0xCDF1, (short) 0xF0C1, (short) 0x0F12, (short) 0x3456, (short) 0x7800};
1545         assertEquals(0x0000000000000000L, Conversion.shortArrayToLong(src, 0, 0L, 0, 0));
1546         assertEquals(0x000000000000CDF1L, Conversion.shortArrayToLong(src, 0, 0L, 0, 1));
1547         assertEquals(0x00000000F0C1CDF1L, Conversion.shortArrayToLong(src, 0, 0L, 0, 2));
1548         assertEquals(0x780034560F12F0C1L, Conversion.shortArrayToLong(src, 1, 0L, 0, 4));
1549         assertEquals(
1550             0x123456789ABCDEF0L, Conversion.shortArrayToLong(src, 0, 0x123456789ABCDEF0L, 0, 0));
1551         assertEquals(
1552             0x123456CDF1BCDEF0L,
1553             Conversion.shortArrayToLong(src, 0, 0x123456789ABCDEF0L, 24, 1));
1554         assertEquals(
1555             0x123478003456DEF0L,
1556             Conversion.shortArrayToLong(src, 3, 0x123456789ABCDEF0L, 16, 2));
1557     }
1558 
1559     /**
1560      * Tests {@link Conversion#shortToBinary(short, int, boolean[], int, int)}.
1561      */
1562     @Test
1563     public void testShortToBinary() {
1564         assertArrayEquals(
1565             new boolean[]{}, Conversion.shortToBinary((short) 0x0000, 0, new boolean[]{}, 0, 0));
1566         assertArrayEquals(
1567             new boolean[]{},
1568             Conversion.shortToBinary((short) 0x0000, 100, new boolean[]{}, 0, 0));
1569         assertArrayEquals(
1570             new boolean[]{},
1571             Conversion.shortToBinary((short) 0x0000, 0, new boolean[]{}, 100, 0));
1572         assertArrayEquals(
1573             new boolean[69], Conversion.shortToBinary((short) 0xCDEF, 0, new boolean[69], 0, 0));
1574         assertArrayEquals(
1575             new boolean[]{
1576                 true, false, false, false, false, false, false, false, false, false, false,
1577                 false, false, false, false, false, false, false, false, false, false},
1578             Conversion.shortToBinary((short) 0xCDEF, 0, new boolean[21], 0, 1));
1579         assertArrayEquals(
1580             new boolean[]{
1581                 true, true, false, false, false, false, false, false, false, false, false,
1582                 false, false, false, false, false, false, false, false, false, false},
1583             Conversion.shortToBinary((short) 0xCDEF, 0, new boolean[21], 0, 2));
1584         assertArrayEquals(
1585             new boolean[]{
1586                 true, true, true, false, false, false, false, false, false, false, false,
1587                 false, false, false, false, false, false, false, false, false, false},
1588             Conversion.shortToBinary((short) 0xCDEF, 0, new boolean[21], 0, 3));
1589         assertArrayEquals(
1590             new boolean[]{
1591                 true, true, true, true, false, true, true, true, true, false, true, true,
1592                 false, false, true, false, false, false, false, false, false},
1593             Conversion.shortToBinary((short) 0xCDEF, 0, new boolean[21], 0, 15));
1594         assertArrayEquals(
1595             new boolean[]{
1596                 true, true, true, true, false, true, true, true, true, false, true, true,
1597                 false, false, true, true, false, false, false, false, false},
1598             Conversion.shortToBinary((short) 0xCDEF, 0, new boolean[21], 0, 16));
1599         assertArrayEquals(
1600             new boolean[]{
1601                 false, false, true, false, false, false, false, false, false, false, false,
1602                 false, false, false, false, false, false, false, false, false, false},
1603             Conversion.shortToBinary((short) 0xCDEF, 0, new boolean[21], 2, 1));
1604         assertArrayEquals(
1605             new boolean[]{
1606                 false, false, true, true, true, true, false, true, true, true, true, false,
1607                 true, true, false, false, true, true, false, false, false},
1608             Conversion.shortToBinary((short) 0xCDEF, 0, new boolean[21], 2, 16));
1609         assertArrayEquals(
1610             new boolean[]{
1611                 true, true, true, false, true, true, true, true, false, true, true, false,
1612                 false, true, true, false, false, false, false, false, false},
1613             Conversion.shortToBinary((short) 0xCDEF, 1, new boolean[21], 0, 15));
1614         assertArrayEquals(
1615             new boolean[]{
1616                 true, true, false, true, true, true, true, false, true, true, false, false,
1617                 true, true, false, false, false, false, false, false, false},
1618             Conversion.shortToBinary((short) 0xCDEF, 2, new boolean[21], 0, 14));
1619         // assertArrayEquals(new boolean[]{false, false, false, true, true, false, true, true,
1620         // true, true, false, true, true, false, false, true, false, false, false, false,
1621         // false}, Conversion.shortToBinary((short) 0xCDEF, 2, new boolean[21],
1622         // 3, 15)); //rejected by
1623         // assertion
1624         assertArrayEquals(
1625             new boolean[]{
1626                 false, false, false, true, true, false, true, true, true, true, false, true,
1627                 true, false, false, true, true, false, false, false, false},
1628             Conversion.shortToBinary((short) 0xCDEF, 2, new boolean[21], 3, 14));
1629     }
1630 
1631     /**
1632      * Tests {@link Conversion#shortToByteArray(short, int, byte[], int, int)}.
1633      */
1634     @Test
1635     public void testShortToByteArray() {
1636         assertArrayEquals(
1637             new byte[]{}, Conversion.shortToByteArray((short) 0x0000, 0, new byte[]{}, 0, 0));
1638         assertArrayEquals(
1639             new byte[]{}, Conversion.shortToByteArray((short) 0x0000, 100, new byte[]{}, 0, 0));
1640         assertArrayEquals(
1641             new byte[]{}, Conversion.shortToByteArray((short) 0x0000, 0, new byte[]{}, 100, 0));
1642         assertArrayEquals(
1643             new byte[]{
1644                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
1645                 (byte) 0xFF}, Conversion.shortToByteArray((short) 0xCDEF, 0, new byte[]{
1646                 -1, -1, -1, -1, -1, -1, -1}, 0, 0));
1647         assertArrayEquals(
1648             new byte[]{
1649                 (byte) 0xEF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
1650                 (byte) 0xFF}, Conversion.shortToByteArray((short) 0xCDEF, 0, new byte[]{
1651                 -1, -1, -1, -1, -1, -1, -1}, 0, 1));
1652         assertArrayEquals(
1653             new byte[]{
1654                 (byte) 0xEF, (byte) 0xCD, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
1655                 (byte) 0xFF}, Conversion.shortToByteArray((short) 0xCDEF, 0, new byte[]{
1656                 -1, -1, -1, -1, -1, -1, -1}, 0, 2));
1657         assertArrayEquals(
1658             new byte[]{
1659                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xEF, (byte) 0xFF, (byte) 0xFF,
1660                 (byte) 0xFF}, Conversion.shortToByteArray((short) 0xCDEF, 0, new byte[]{
1661                 -1, -1, -1, -1, -1, -1, -1}, 3, 1));
1662         assertArrayEquals(
1663             new byte[]{
1664                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xEF, (byte) 0xCD, (byte) 0xFF,
1665                 (byte) 0xFF}, Conversion.shortToByteArray((short) 0xCDEF, 0, new byte[]{
1666                 -1, -1, -1, -1, -1, -1, -1}, 3, 2));
1667         assertArrayEquals(
1668             new byte[]{
1669                 (byte) 0xF7, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
1670                 (byte) 0xFF}, Conversion.shortToByteArray((short) 0xCDEF, 1, new byte[]{
1671                 -1, -1, -1, -1, -1, -1, -1}, 0, 1));
1672         assertArrayEquals(
1673             new byte[]{
1674                 (byte) 0x7B, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
1675                 (byte) 0xFF}, Conversion.shortToByteArray((short) 0xCDEF, 2, new byte[]{
1676                 -1, -1, -1, -1, -1, -1, -1}, 0, 1));
1677         assertArrayEquals(
1678             new byte[]{
1679                 (byte) 0xFF, (byte) 0x00, (byte) 0xFF, (byte) 0x6F, (byte) 0xFE, (byte) 0xFF,
1680                 (byte) 0xFF}, Conversion.shortToByteArray((short) 0xCDEF, 5, new byte[]{
1681                 -1, 0, -1, -1, -1, -1, -1}, 3, 2));
1682         // assertArrayEquals(new
1683         // byte[]{(byte) 0xFF, (byte) 0x00, (byte) 0xFF, (byte) 0x5E, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF}, Conversion.shortToByteArray((short) 0xCDEF, 13, new
1684         // byte[]{-1, 0, -1, -1, -1, -1, -1}, 3, 2)); //rejected by assertion
1685         assertArrayEquals(
1686             new byte[]{
1687                 (byte) 0xFF, (byte) 0x00, (byte) 0xFF, (byte) 0xFE, (byte) 0xFF, (byte) 0xFF,
1688                 (byte) 0xFF}, Conversion.shortToByteArray((short) 0xCDEF, 13, new byte[]{
1689                 -1, 0, -1, -1, -1, -1, -1}, 3, 1));
1690     }
1691 
1692     /**
1693      * Tests {@link Conversion#shortToHex(short, int, String, int, int)}.
1694      */
1695     @Test
1696     public void testShortToHex() {
1697         assertEquals("", Conversion.shortToHex((short) 0x0000, 0, "", 0, 0));
1698         assertEquals("", Conversion.shortToHex((short) 0x0000, 100, "", 0, 0));
1699         assertEquals("", Conversion.shortToHex((short) 0x0000, 0, "", 100, 0));
1700         assertEquals(
1701             "ffffffffffffffffffffffff",
1702             Conversion.shortToHex((short) 0xCDEF, 0, "ffffffffffffffffffffffff", 0, 0));
1703         assertEquals(
1704             "3fffffffffffffffffffffff",
1705             Conversion.shortToHex((short) 0xCDE3, 0, "ffffffffffffffffffffffff", 0, 1));
1706         assertEquals(
1707             "feffffffffffffffffffffff",
1708             Conversion.shortToHex((short) 0xCDEF, 0, "ffffffffffffffffffffffff", 0, 2));
1709         assertEquals(
1710             "fedfffffffffffffffffffff",
1711             Conversion.shortToHex((short) 0xCDEF, 0, "ffffffffffffffffffffffff", 0, 3));
1712         assertEquals(
1713             "fedcffffffffffffffffffff",
1714             Conversion.shortToHex((short) 0xCDEF, 0, "ffffffffffffffffffffffff", 0, 4));
1715         assertEquals(
1716             "fff3ffffffffffffffffffff",
1717             Conversion.shortToHex((short) 0xCDE3, 0, "ffffffffffffffffffffffff", 3, 1));
1718         assertEquals(
1719             "ffffefffffffffffffffffff",
1720             Conversion.shortToHex((short) 0xCDEF, 0, "ffffffffffffffffffffffff", 3, 2));
1721         assertEquals(
1722             "7fffffffffffffffffffffff",
1723             Conversion.shortToHex((short) 0xCDEF, 1, "ffffffffffffffffffffffff", 0, 1));
1724         assertEquals(
1725             "bfffffffffffffffffffffff",
1726             Conversion.shortToHex((short) 0xCDEF, 2, "ffffffffffffffffffffffff", 0, 1));
1727         assertEquals(
1728             "fffdb9ffffffffffffffffff",
1729             Conversion.shortToHex((short) 0xCDEF, 3, "ffffffffffffffffffffffff", 3, 4));
1730         // assertEquals("ffffffffffffffffffffffff", Conversion.shortToHex((short) 0xCDEF,
1731         // 4, "ffffffffffffffffffffffff", 3, 4)); //rejected by assertion
1732         assertEquals(
1733             "fffedcffffffffffffffffff",
1734             Conversion.shortToHex((short) 0xCDEF, 4, "ffffffffffffffffffffffff", 3, 3));
1735         assertEquals("fedc", Conversion.shortToHex((short) 0xCDEF, 0, "", 0, 4));
1736         assertThrows(StringIndexOutOfBoundsException.class, () -> Conversion.shortToHex((short) 0xCDEF, 0, "", 1, 4));
1737     }
1738 
1739     /**
1740      * Tests {@link Conversion#uuidToByteArray(UUID, byte[], int, int)}.
1741      */
1742     @Test
1743     public void testUuidToByteArray() {
1744         assertArrayEquals(new byte[]{
1745             (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
1746             (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
1747             (byte) 0xff, (byte) 0xff}, Conversion.uuidToByteArray(new UUID(
1748             0xFFFFFFFFFFFFFFFFL, 0xFFFFFFFFFFFFFFFFL), new byte[16], 0, 16));
1749         assertArrayEquals(new byte[]{
1750             (byte) 0x88, (byte) 0x99, (byte) 0xaa, (byte) 0xbb, (byte) 0xcc, (byte) 0xdd, (byte) 0xee,
1751             (byte) 0xff, (byte) 0x00, (byte) 0x11, (byte) 0x22, (byte) 0x33, (byte) 0x44, (byte) 0x55,
1752             (byte) 0x66, (byte) 0x77}, Conversion.uuidToByteArray(new UUID(
1753             0xFFEEDDCCBBAA9988L, 0x7766554433221100L), new byte[16], 0, 16));
1754         assertArrayEquals(new byte[]{
1755             (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x88, (byte) 0x99, (byte) 0xaa,
1756             (byte) 0xbb, (byte) 0xcc, (byte) 0xdd, (byte) 0xee, (byte) 0xff, (byte) 0x00, (byte) 0x00,
1757             (byte) 0x00, (byte) 0x00}, Conversion.uuidToByteArray(new UUID(
1758             0xFFEEDDCCBBAA9988L, 0x7766554433221100L), new byte[16], 4, 8));
1759         assertArrayEquals(new byte[]{
1760             (byte) 0x00, (byte) 0x00, (byte) 0x88, (byte) 0x99, (byte) 0xaa, (byte) 0xbb, (byte) 0xcc,
1761             (byte) 0xdd, (byte) 0xee, (byte) 0xff, (byte) 0x00, (byte) 0x11, (byte) 0x22, (byte) 0x33,
1762             (byte) 0x00, (byte) 0x00}, Conversion.uuidToByteArray(new UUID(
1763             0xFFEEDDCCBBAA9988L, 0x7766554433221100L), new byte[16], 2, 12));
1764     }
1765 }