-
-
Notifications
You must be signed in to change notification settings - Fork 218
Add boundary cases for integers #774
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
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The "small and large float are integers" tests are not valid. You cannot make any assumptions about the architecture the tests are running on, and the expectation is that all integers, no matter the size, no matter whether they fit into the native integer size for your architecture, will still be treated as integers by JSON Schema.
tests/draft-next/type.json
Outdated
"description": "a small float whose non-zero fractional part is truncated in a binary64 float is an integer", | ||
"data": 1.00000000000001, | ||
"valid": true | ||
}, | ||
{ | ||
"description": "a large float whose non-zero fractional part is truncated in a binary64 float is an integer", | ||
"data": 9007199254740991.5, | ||
"valid": true | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@karenetheridge is correct. These are not integers. JSON Schema uses an object model based on the one defined by the JSON specification, RFC 8259, which does not put limits on numeric values. Range does not matter. See Core 6.2 and Validation 4.2.
We do already have some tests for extremely large numbers. They are in the optional folders as we recognize that they typically are not fully supported and are generally edge-case. An argument could be made that they should not be optional.
6affa5c
to
d319467
Compare
d319467
to
fe9a287
Compare
5f6a91d
to
cca4442
Compare
cca4442
to
1f81212
Compare
I certainly don't like all of these behaviors,
but if we want truly consistent behavior across languages, we'll have to match the least-common-denominator behavior for JSON parsers (particularly ECMAScript's.JSON.parse()
)