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