public static double parseBytesToDouble(List data) {
        return parseBytesToDouble(data, 0);
    }
@Test
    public void parseBytesToDouble() {
        byte[] doubleValByte = {0x0A};
        Assertions.assertEquals(0, Double.compare(4.9E-323, TbUtils.parseBytesToDouble(doubleValByte)));

        doubleValByte = new byte[]{64, -101, 4, -79, 12, -78, -107, -22};
        Assertions.assertEquals(0, Double.compare(doubleVal, TbUtils.parseBytesToDouble(doubleValByte, 0)));
        Assertions.assertEquals(0, Double.compare(doubleValRev, TbUtils.parseBytesToDouble(doubleValByte, 0, 8, false)));

        List<Byte> doubleValList = Bytes.asList(doubleValByte);
        Assertions.assertEquals(0, Double.compare(doubleVal, TbUtils.parseBytesToDouble(doubleValList, 0)));
        Assertions.assertEquals(0, Double.compare(doubleValRev, TbUtils.parseBytesToDouble(doubleValList, 0, 8, false)));

        doubleValByte = new byte[]{0x7F, (byte) 0xC0, (byte) 0xFF, 0x00, 0x7F, (byte) 0xC0, (byte) 0xFF, 0x00};
        double doubleExpectedBe = 2387013.651780523d;
        double doubleExpectedLe = 7.234601680440024E-304d;
        double actualBe = TbUtils.parseBytesToDouble(doubleValByte, 0, 8, true);
        BigDecimal bigDecimal = new BigDecimal(actualBe);
        // We move the decimal point to the left by 301 positions
        actualBe = bigDecimal.movePointLeft(301).doubleValue();
        Assertions.assertEquals(0, Double.compare(doubleExpectedBe, actualBe));
        Assertions.assertEquals(0, Double.compare(doubleExpectedLe, TbUtils.parseBytesToDouble(doubleValByte, 0, 8, false)));

        doubleValList = Bytes.asList(doubleValByte);
        actualBe = TbUtils.parseBytesToDouble(doubleValList, 0);
        bigDecimal = new BigDecimal(actualBe);
        actualBe = bigDecimal.movePointLeft(301).doubleValue();
        Assertions.assertEquals(0, Double.compare(doubleExpectedBe, actualBe));
        doubleExpectedLe = 26950.174646662283d;
        double actualLe = TbUtils.parseBytesToDouble(doubleValList, 0, 5, false);
        bigDecimal = new BigDecimal(actualLe);
        actualLe = bigDecimal.movePointRight(316).doubleValue();
        Assertions.assertEquals(0, Double.compare(doubleExpectedLe, actualLe));

        // 4 294 967 295L == {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}
        doubleValByte = new byte[]{-1, -1, -1, -1, -1, -1, -1, -1};
        String message = "is a Not-a-Number (NaN) value";
        try {
            TbUtils.parseBytesToDouble(doubleValByte, 0, 8, true);
            Assertions.fail("Should throw NumberFormatException");
        } catch (RuntimeException e) {
            Assertions.assertTrue(e.getMessage().contains(message));
        }
    }