fix: std.primitiveEquals(-0.0, 0.0) should return true#912
Closed
He-Pin wants to merge 2 commits into
Closed
Conversation
Motivation: visitLookupSuper (super[key]) silently fell back to self when no superclass existed, while visitSelectSuper (super.name) correctly reported "Attempt to use `super` when there is no super class". This inconsistency could mask bugs in Jsonnet programs and diverged from go-jsonnet and jrsonnet which both error in this case. Modification: Replace the silent `sup = self` fallback in visitLookupSuper with the same error that visitSelectSuper uses. Change `var sup` to `val sup` since it is no longer reassigned. Result: super[key] and super.name now behave identically when there is no superclass, both reporting the same error. This matches go-jsonnet and jrsonnet semantics.
Motivation: std.primitiveEquals(-0.0, 0.0) was returning false instead of true. This is incorrect because IEEE 754 defines -0.0 == 0.0 as true. Modification: Changed TypeModule.scala to use rawDouble == rawDouble for number comparison instead of ev.compare(x, y) == 0 which uses java.lang.Double.compare that treats -0.0 and 0.0 as different. Result: std.primitiveEquals(-0.0, 0.0) now returns true, matching go-jsonnet and C++ jsonnet behavior. References: - go-jsonnet builtins.go:264 uses left.value == right.value - C++ Jsonnet vm.cpp:1436 uses args[0].v.d == args[1].v.d
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
std.primitiveEquals(-0.0, 0.0)was returningfalseinstead oftrue.This is incorrect because IEEE 754 defines
-0.0 == 0.0astrue.Modification
Changed
TypeModule.scalato userawDouble == rawDoublefor number comparison instead ofev.compare(x, y) == 0which usesjava.lang.Double.comparethat treats-0.0and0.0as different.Result
std.primitiveEquals(-0.0, 0.0)now returnstrue, matching go-jsonnet and C++ jsonnet behavior.References
builtins.go:264usesleft.value == right.valuevm.cpp:1436usesargs[0].v.d == args[1].v.d