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));
+  }
 }

Reply via email to