Skip to content

Commit

Permalink
Make NestedNumberAsFloat64 accuracy test architecture-neutral.
Browse files Browse the repository at this point in the history
NestedNumberAsFloat64 will convert int64s to float64 only if the int64 value can be represented
exactly by a float64. The original test for this property used a roundtrip conversion from int64 to
float64 and back, and the behavior of these conversions is inconsistent across architectures.

Kubernetes-commit: e413e026a3949bdf1a83c762bb6d9275aed61f57
  • Loading branch information
benluddy authored and k8s-publishing-bot committed Oct 15, 2024
1 parent 2b29434 commit 0612f08
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions pkg/apis/meta/v1/unstructured/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
gojson "encoding/json"
"fmt"
"io"
"math/big"
"strings"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand Down Expand Up @@ -136,10 +137,11 @@ func NestedNumberAsFloat64(obj map[string]interface{}, fields ...string) (float6
}
switch x := val.(type) {
case int64:
if x != int64(float64(x)) {
f, accuracy := big.NewInt(x).Float64()
if accuracy != big.Exact {
return 0, false, fmt.Errorf("%v accessor error: int64 value %v cannot be losslessly converted to float64", jsonPath(fields), x)
}
return float64(x), true, nil
return f, true, nil
case float64:
return x, true, nil
default:
Expand Down

0 comments on commit 0612f08

Please sign in to comment.