Skip to content

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

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

hudlow
Copy link

@hudlow hudlow commented May 20, 2025

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()).

@hudlow hudlow requested a review from a team as a code owner May 20, 2025 15:09
Copy link
Member

@karenetheridge karenetheridge left a 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.

Comment on lines 40 to 48
"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
},
Copy link
Member

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.

@hudlow hudlow force-pushed the integer-boundary-cases branch from 6affa5c to d319467 Compare May 29, 2025 04:30
@hudlow hudlow force-pushed the integer-boundary-cases branch from d319467 to fe9a287 Compare May 29, 2025 04:31
@hudlow hudlow force-pushed the integer-boundary-cases branch 2 times, most recently from 5f6a91d to cca4442 Compare May 30, 2025 03:45
@hudlow hudlow force-pushed the integer-boundary-cases branch from cca4442 to 1f81212 Compare May 30, 2025 04:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants