This is an automated email from the ASF dual-hosted git repository.
fokko pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/avro.git
The following commit(s) were added to refs/heads/main by this push:
new fe0261dee AVRO-2108: [Java] DoubleArray converts double to float
(#3285)
fe0261dee is described below
commit fe0261deecf22234bbd09251764152d4bf9a9c4a
Author: Sarthak Singh <[email protected]>
AuthorDate: Tue Jan 21 13:41:29 2025 -0600
AVRO-2108: [Java] DoubleArray converts double to float (#3285)
* fixing DoubleArray float cast
* add new line
* preventing boxing
---------
Co-authored-by: Martin Grigorov <[email protected]>
---
.../java/org/apache/avro/generic/PrimitivesArrays.java | 12 ++++++------
.../java/org/apache/avro/generic/PrimitivesArraysTest.java | 14 ++++++++++++++
2 files changed, 20 insertions(+), 6 deletions(-)
diff --git
a/lang/java/avro/src/main/java/org/apache/avro/generic/PrimitivesArrays.java
b/lang/java/avro/src/main/java/org/apache/avro/generic/PrimitivesArrays.java
index d34ce0f5b..91540005a 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/generic/PrimitivesArrays.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/generic/PrimitivesArrays.java
@@ -58,7 +58,7 @@ public class PrimitivesArrays {
/**
* Direct primitive int access.
- *
+ *
* @param i : index.
* @return value at index.
*/
@@ -162,7 +162,7 @@ public class PrimitivesArrays {
/**
* Direct primitive int access.
- *
+ *
* @param i : index.
* @return value at index.
*/
@@ -273,7 +273,7 @@ public class PrimitivesArrays {
/**
* Direct primitive int access.
- *
+ *
* @param i : index.
* @return value at index.
*/
@@ -431,7 +431,7 @@ public class PrimitivesArrays {
/**
* Direct primitive int access.
- *
+ *
* @param i : index.
* @return value at index.
*/
@@ -535,7 +535,7 @@ public class PrimitivesArrays {
/**
* Direct primitive int access.
- *
+ *
* @param i : index.
* @return value at index.
*/
@@ -550,7 +550,7 @@ public class PrimitivesArrays {
if (o == null) {
return;
}
- this.add(location, o.floatValue());
+ this.add(location, o.doubleValue());
}
public void add(int location, double o) {
diff --git
a/lang/java/avro/src/test/java/org/apache/avro/generic/PrimitivesArraysTest.java
b/lang/java/avro/src/test/java/org/apache/avro/generic/PrimitivesArraysTest.java
index 7d199bf92..c801168c0 100644
---
a/lang/java/avro/src/test/java/org/apache/avro/generic/PrimitivesArraysTest.java
+++
b/lang/java/avro/src/test/java/org/apache/avro/generic/PrimitivesArraysTest.java
@@ -277,4 +277,18 @@ class PrimitivesArraysTest {
Assertions.assertEquals((101 - i) * 3.0d, doubleArray.get(i - 1));
}
}
+
+ @Test
+ void testDoubleArrayPreservesPrecisionForNonFloatRepresentableValues() {
+ final PrimitivesArrays.DoubleArray doubleArray = new
PrimitivesArrays.DoubleArray(1,
+ Schema.createArray(Schema.create(Schema.Type.DOUBLE)));
+
+ // This value cannot be represented as a float
+ Double nonFloatDouble = .9;
+ Assertions.assertNotEquals(.9, nonFloatDouble.floatValue());
+
+ // Assert that the double array does not lose precision when adding
+ doubleArray.add(nonFloatDouble);
+ Assertions.assertEquals(nonFloatDouble, doubleArray.get(0));
+ }
}