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