Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix testing tools NaN comparison and correct new failing tests. #4794

Merged
merged 11 commits into from
Nov 16, 2023
45 changes: 15 additions & 30 deletions engine/function/src/templates/Numeric.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -365,11 +365,9 @@ public class Numeric {
try ( final ${pt.vectorIterator} vi = values.iterator() ) {
while ( vi.hasNext() ) {
final ${pt.primitive} c = vi.${pt.iteratorNext}();
<#if pt.valueType.isFloat >
if (isNaN(c)) {
return Double.NaN;
}
</#if>
if (!isNull(c)) {
sum += c;
count++;
Expand Down Expand Up @@ -421,11 +419,12 @@ public class Numeric {
try ( final ${pt.vectorIterator} vi = values.iterator() ) {
while ( vi.hasNext() ) {
final ${pt.primitive} c = vi.${pt.iteratorNext}();
<#if pt.valueType.isFloat >
if (isNaN(c)) {
lbooker42 marked this conversation as resolved.
Show resolved Hide resolved
return Double.NaN;
}
</#if>
if (isInf(c)) {
return Double.POSITIVE_INFINITY;
}
if (!isNull(c)) {
sum += Math.abs(c);
count++;
Expand Down Expand Up @@ -482,15 +481,13 @@ public class Numeric {

double sum = 0;
double sum2 = 0;
double count = 0;
int count = 0;
lbooker42 marked this conversation as resolved.
Show resolved Hide resolved
try ( final ${pt.vectorIterator} vi = values.iterator() ) {
while ( vi.hasNext() ) {
final ${pt.primitive} c = vi.${pt.iteratorNext}();
<#if pt.valueType.isFloat >
if (isNaN(c)) {
if (isNaN(c) || isInf(c)) {
return Double.NaN;
}
</#if>
if (!isNull(c)) {
sum += (double)c;
sum2 += (double)c * (double)c;
Expand All @@ -506,12 +503,12 @@ public class Numeric {

// Perform the calculation in a way that minimizes the impact of floating point error.
final double eps = Math.ulp(sum2);
final double vs2bar = sum * (sum / count);
final double vs2bar = sum * (sum / (double)count);
final double delta = sum2 - vs2bar;
final double rel_eps = delta / eps;

// Return zero when the sample variance is leq the floating point error.
return Math.abs(rel_eps) > 1.0 ? delta / (count - 1) : 0.0;
return Math.abs(rel_eps) > 1.0 ? delta / ((double)count - 1) : 0.0;
}

<#list primitiveTypes as pt2>
Expand Down Expand Up @@ -604,16 +601,12 @@ public class Numeric {
while (vi.hasNext()) {
final ${pt.primitive} c = vi.${pt.iteratorNext}();
final ${pt2.primitive} w = wi.${pt2.iteratorNext}();
<#if pt.valueType.isFloat >
if (isNaN(c)) {
if (isNaN(c) || isInf(c)) {
return Double.NaN;
}
</#if>
<#if pt2.valueType.isFloat >
if (isNaN(w)) {
if (isNaN(w) || isInf(w)) {
return Double.NaN;
}
</#if>
if (!isNull(c) && !isNull(w)) {
sum += w * c;
sum2 += w * c * c;
Expand Down Expand Up @@ -1356,16 +1349,12 @@ public class Numeric {
while (v0i.hasNext()) {
final ${pt.primitive} v0 = v0i.${pt.iteratorNext}();
final ${pt2.primitive} v1 = v1i.${pt2.iteratorNext}();
<#if pt.valueType.isFloat >
if (isNaN(v0)) {
if (isNaN(v0) || isInf(v0)) {
return Double.NaN;
}
</#if>
<#if pt2.valueType.isFloat >
if (isNaN(v1)) {
if (isNaN(v1) || isInf(v1)) {
return Double.NaN;
}
</#if>

if (!isNull(v0) && !isNull(v1)) {
sum0 += v0;
Expand Down Expand Up @@ -1454,16 +1443,12 @@ public class Numeric {
while (v0i.hasNext()) {
final ${pt.primitive} v0 = v0i.${pt.iteratorNext}();
final ${pt2.primitive} v1 = v1i.${pt2.iteratorNext}();
<#if pt.valueType.isFloat >
if (isNaN(v0)) {
if (isNaN(v0) || isInf(v0)) {
return Double.NaN;
}
</#if>
<#if pt2.valueType.isFloat >
if (isNaN(v1)) {
if (isNaN(v1) || isInf(v1)) {
return Double.NaN;
}
</#if>

if (!isNull(v0) && !isNull(v1)) {
sum0 += v0;
Expand Down Expand Up @@ -1545,8 +1530,8 @@ public class Numeric {
${pt.primitive} prod = 1;
int count = 0;
<#if pt.valueType.isFloat >
double zeroCount = 0;
double infCount = 0;
int zeroCount = 0;
int infCount = 0;
lbooker42 marked this conversation as resolved.
Show resolved Hide resolved
</#if>

try ( final ${pt.vectorIterator} vi = values.iterator() ) {
Expand Down
3 changes: 0 additions & 3 deletions engine/function/src/templates/TestNumeric.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@ import io.deephaven.base.testing.BaseArrayTestCase;
import io.deephaven.vector.*;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import static io.deephaven.util.QueryConstants.*;
import static io.deephaven.function.Basic.count;
Expand Down
Loading
You are viewing a condensed version of this merge commit. You can view the full changes here.