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