Skip to content

Commit d67731a

Browse files
committed
fix: init with NaN
1 parent 8535219 commit d67731a

2 files changed

Lines changed: 32 additions & 5 deletions

File tree

src/main/java/org/apache/datasketches/req/ReqSerDe.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
package org.apache.datasketches.req;
2121

2222
import static java.lang.Math.max;
23-
import static java.lang.Math.min;
2423
import static java.lang.Math.round;
2524

2625
import java.lang.foreign.MemorySegment;
@@ -204,11 +203,17 @@ static final Compactor extractCompactor(final PositionalSegment posSeg, final bo
204203
final int count = posSeg.getInt();
205204
final float[] arr = new float[count];
206205
posSeg.getFloatArray(arr, 0, count);
207-
float minItem = Float.MAX_VALUE;
208-
float maxItem = -Float.MAX_VALUE;
206+
float minItem = Float.NaN;
207+
float maxItem = Float.NaN;
209208
for (int i = 0; i < count; i++) {
210-
minItem = min(minItem, arr[i]);
211-
maxItem = max(maxItem, arr[i]);
209+
final float item = arr[i];
210+
if (Float.isNaN(minItem)) {
211+
minItem = item;
212+
maxItem = item;
213+
} else {
214+
if (item < minItem) { minItem = item; }
215+
if (item > maxItem) { maxItem = item; }
216+
}
212217
}
213218
final int delta = 2 * sectionSize * numSections;
214219
final int nomCap = 2 * delta;

src/test/java/org/apache/datasketches/req/ReqCompactorTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,4 +144,26 @@ private static void checkSerDeMixedImpl(final int k, final boolean hra) {
144144
assertEquals(compactor.minItem, (float) -half);
145145
assertEquals(compactor.maxItem, (float) (half - 1));
146146
}
147+
148+
@Test
149+
public void checkSerDeWithInfiniteValues() {
150+
checkSerDeInfiniteImpl(12, false);
151+
checkSerDeInfiniteImpl(12, true);
152+
}
153+
154+
private static void checkSerDeInfiniteImpl(final int k, final boolean hra) {
155+
final ReqCompactor c1 = new ReqCompactor((byte)0, hra, k, null);
156+
final FloatBuffer fbuf = c1.getBuffer();
157+
158+
fbuf.append(Float.POSITIVE_INFINITY);
159+
fbuf.append(1);
160+
fbuf.append(Float.NEGATIVE_INFINITY);
161+
fbuf.append(-1);
162+
163+
final byte[] c1ser = c1.toByteArray();
164+
final PositionalSegment posSeg = PositionalSegment.wrap(MemorySegment.ofArray(c1ser));
165+
final Compactor compactor = ReqSerDe.extractCompactor(posSeg, fbuf.isSorted(), hra);
166+
assertEquals(compactor.minItem, Float.NEGATIVE_INFINITY);
167+
assertEquals(compactor.maxItem, Float.POSITIVE_INFINITY);
168+
}
147169
}

0 commit comments

Comments
 (0)