Skip to content

Commit ac72ee1

Browse files
committed
update Java version
1 parent 97b1528 commit ac72ee1

File tree

3 files changed

+63
-3
lines changed

3 files changed

+63
-3
lines changed

src/main/java/com/upokecenter/cbor/CBORObject.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5837,7 +5837,9 @@ public static int WriteFloatingPointBits(
58375837
}
58385838
} else if (byteCount == 4) {
58395839
int bits =
5840-
CBORUtilities.SingleToHalfPrecisionIfSameValue(floatingBits);
5840+
5841+
CBORUtilities.SingleToHalfPrecisionIfSameValue(
5842+
((int)floatingBits));
58415843
if (bits != -1) {
58425844
return WriteFloatingPointBits(outputStream, bits, 2, false);
58435845
}

src/main/java/com/upokecenter/cbor/CBORUtilities.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1604,8 +1604,7 @@ public static int DoubleToRoundedSinglePrecision(long bits) {
16041604
}
16051605
}
16061606

1607-
public static int SingleToHalfPrecisionIfSameValue(float f) {
1608-
int bits = Float.floatToRawIntBits(f);
1607+
public static int SingleToHalfPrecisionIfSameValue(int bits) {
16091608
int exp = (bits >> 23) & 0xff;
16101609
int mant = bits & 0x7fffff;
16111610
int sign = (bits >> 16) & 0x8000;

src/test/java/com/upokecenter/test/CBORObjectTest.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7800,6 +7800,65 @@ public static void TestWriteExtraOne(long longValue) {
78007800
}
78017801
}
78027802

7803+
private void TestWriteUnchangedFloatBits(int bits) {
7804+
{
7805+
java.io.ByteArrayOutputStream ms = null;
7806+
try {
7807+
ms = new java.io.ByteArrayOutputStream();
7808+
7809+
byte[] expectedBytes = {
7810+
(byte)0xfa,
7811+
(byte)((bits >> 24) & 0xff),
7812+
(byte)((bits >> 16) & 0xff),
7813+
(byte)((bits >> 8) & 0xff),
7814+
(byte)(bits & 0xff)
7815+
};
7816+
CBORObject.WriteFloatingPointBits(ms, bits, 4, true);
7817+
TestCommon.AssertByteArraysEqual(expectedBytes, ms.toByteArray());
7818+
}
7819+
finally {
7820+
try { if (ms != null) { ms.close(); } } catch (java.io.IOException ex) {}
7821+
}
7822+
}
7823+
}
7824+
7825+
private void TestWriteUnchangedDoubleBits(long bits) {
7826+
{
7827+
java.io.ByteArrayOutputStream ms = null;
7828+
try {
7829+
ms = new java.io.ByteArrayOutputStream();
7830+
7831+
byte[] expectedBytes = {
7832+
(byte)0xfb,
7833+
(byte)((bits >> 56) & 0xffL),
7834+
(byte)((bits >> 48) & 0xffL),
7835+
(byte)((bits >> 40) & 0xffL),
7836+
(byte)((bits >> 32) & 0xffL),
7837+
(byte)((bits >> 24) & 0xffL),
7838+
(byte)((bits >> 16) & 0xffL),
7839+
(byte)((bits >> 8) & 0xffL),
7840+
(byte)(bits & 0xffL)
7841+
};
7842+
CBORObject.WriteFloatingPointBits(ms, bits, 8, true);
7843+
TestCommon.AssertByteArraysEqual(expectedBytes, ms.toByteArray());
7844+
}
7845+
finally {
7846+
try { if (ms != null) { ms.close(); } } catch (java.io.IOException ex) {}
7847+
}
7848+
}
7849+
}
7850+
7851+
@Test
7852+
public void TestWriteSubnormalFloat() {
7853+
for (int i = 1; i <= 0x1fff; ++i) {
7854+
this.TestWriteUnchangedFloatBits(i);
7855+
this.TestWriteUnchangedFloatBits(0x2000 + i);
7856+
this.TestWriteUnchangedFloatBits(0x4000 + i);
7857+
this.TestWriteUnchangedFloatBits(0x8000 + i);
7858+
this.TestWriteUnchangedDoubleBits((long)i);
7859+
}
7860+
}
7861+
78037862
@Test
78047863
public void TestWriteExtra() {
78057864
try {

0 commit comments

Comments
 (0)