Skip to content

Commit

Permalink
Add more multipleOf tests
Browse files Browse the repository at this point in the history
There were already some tests for fractional multipleOf values,
but while writing an implementation I discovered that those were
not enough to catch a certain kind of poor implementations.

As JSON encodes arbitrary numbers in decimal form, the correct
implementation should either use lossless decimal presentation, or at
least operate in "shortest decimal which is presented as A is multiple
of shortest decimal which is presented as B" to be not fail here.
  • Loading branch information
ChALkeR committed Jul 8, 2020
1 parent 1d5c3c0 commit 3546015
Show file tree
Hide file tree
Showing 4 changed files with 144 additions and 0 deletions.
36 changes: 36 additions & 0 deletions tests/draft2019-09/multipleOf.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,42 @@
}
]
},
{
"description": "by fractional number above 1",
"schema": {"multipleOf": 1.1},
"tests": [
{"description": "zero is multiple of anything", "data": 0, "valid": true},
{"description": "1.1 is multiple of itself", "data": 1.1, "valid": true},
{"description": "3.3 is multiple of 1.1", "data": 3.3, "valid": true},
{"description": "6.6 is multiple of 1.1", "data": 6.6, "valid": true},
{"description": "7.7 is multiple of 1.1", "data": 7.7, "valid": true},
{"description": "1.2 is not multiple of 1.1", "data": 1.2, "valid": false}
]
},
{
"description": "by number below 1",
"schema": {"multipleOf": 0.1},
"tests": [
{"description": "zero is multiple of anything", "data": 0, "valid": true},
{"description": "0.1 is multiple of itself", "data": 0.1, "valid": true},
{"description": "0.3 is multiple of 0.1", "data": 0.3, "valid": true},
{"description": "0.6 is multiple of 0.1", "data": 0.6, "valid": true},
{"description": "0.7 is multiple of 0.1", "data": 0.7, "valid": true},
{"description": "0.35 is not multiple of 0.1", "data": 0.35, "valid": false}
]
},
{
"description": "by another number below 1",
"schema": {"multipleOf": 0.01},
"tests": [
{"description": "zero is multiple of anything", "data": 0, "valid": true},
{"description": "0.01 is multiple of itself", "data": 0.01, "valid": true},
{"description": "0.03 is multiple of 0.01", "data": 0.03, "valid": true},
{"description": "0.06 is multiple of 0.01", "data": 0.06, "valid": true},
{"description": "0.07 is multiple of 0.01", "data": 0.07, "valid": true},
{"description": "0.035 is not multiple of 0.01", "data": 0.035, "valid": false}
]
},
{
"description": "by small number",
"schema": {"multipleOf": 0.0001},
Expand Down
36 changes: 36 additions & 0 deletions tests/draft4/multipleOf.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,42 @@
}
]
},
{
"description": "by fractional number above 1",
"schema": {"multipleOf": 1.1},
"tests": [
{"description": "zero is multiple of anything", "data": 0, "valid": true},
{"description": "1.1 is multiple of itself", "data": 1.1, "valid": true},
{"description": "3.3 is multiple of 1.1", "data": 3.3, "valid": true},
{"description": "6.6 is multiple of 1.1", "data": 6.6, "valid": true},
{"description": "7.7 is multiple of 1.1", "data": 7.7, "valid": true},
{"description": "1.2 is not multiple of 1.1", "data": 1.2, "valid": false}
]
},
{
"description": "by number below 1",
"schema": {"multipleOf": 0.1},
"tests": [
{"description": "zero is multiple of anything", "data": 0, "valid": true},
{"description": "0.1 is multiple of itself", "data": 0.1, "valid": true},
{"description": "0.3 is multiple of 0.1", "data": 0.3, "valid": true},
{"description": "0.6 is multiple of 0.1", "data": 0.6, "valid": true},
{"description": "0.7 is multiple of 0.1", "data": 0.7, "valid": true},
{"description": "0.35 is not multiple of 0.1", "data": 0.35, "valid": false}
]
},
{
"description": "by another number below 1",
"schema": {"multipleOf": 0.01},
"tests": [
{"description": "zero is multiple of anything", "data": 0, "valid": true},
{"description": "0.01 is multiple of itself", "data": 0.01, "valid": true},
{"description": "0.03 is multiple of 0.01", "data": 0.03, "valid": true},
{"description": "0.06 is multiple of 0.01", "data": 0.06, "valid": true},
{"description": "0.07 is multiple of 0.01", "data": 0.07, "valid": true},
{"description": "0.035 is not multiple of 0.01", "data": 0.035, "valid": false}
]
},
{
"description": "by small number",
"schema": {"multipleOf": 0.0001},
Expand Down
36 changes: 36 additions & 0 deletions tests/draft6/multipleOf.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,42 @@
}
]
},
{
"description": "by fractional number above 1",
"schema": {"multipleOf": 1.1},
"tests": [
{"description": "zero is multiple of anything", "data": 0, "valid": true},
{"description": "1.1 is multiple of itself", "data": 1.1, "valid": true},
{"description": "3.3 is multiple of 1.1", "data": 3.3, "valid": true},
{"description": "6.6 is multiple of 1.1", "data": 6.6, "valid": true},
{"description": "7.7 is multiple of 1.1", "data": 7.7, "valid": true},
{"description": "1.2 is not multiple of 1.1", "data": 1.2, "valid": false}
]
},
{
"description": "by number below 1",
"schema": {"multipleOf": 0.1},
"tests": [
{"description": "zero is multiple of anything", "data": 0, "valid": true},
{"description": "0.1 is multiple of itself", "data": 0.1, "valid": true},
{"description": "0.3 is multiple of 0.1", "data": 0.3, "valid": true},
{"description": "0.6 is multiple of 0.1", "data": 0.6, "valid": true},
{"description": "0.7 is multiple of 0.1", "data": 0.7, "valid": true},
{"description": "0.35 is not multiple of 0.1", "data": 0.35, "valid": false}
]
},
{
"description": "by another number below 1",
"schema": {"multipleOf": 0.01},
"tests": [
{"description": "zero is multiple of anything", "data": 0, "valid": true},
{"description": "0.01 is multiple of itself", "data": 0.01, "valid": true},
{"description": "0.03 is multiple of 0.01", "data": 0.03, "valid": true},
{"description": "0.06 is multiple of 0.01", "data": 0.06, "valid": true},
{"description": "0.07 is multiple of 0.01", "data": 0.07, "valid": true},
{"description": "0.035 is not multiple of 0.01", "data": 0.035, "valid": false}
]
},
{
"description": "by small number",
"schema": {"multipleOf": 0.0001},
Expand Down
36 changes: 36 additions & 0 deletions tests/draft7/multipleOf.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,42 @@
}
]
},
{
"description": "by fractional number above 1",
"schema": {"multipleOf": 1.1},
"tests": [
{"description": "zero is multiple of anything", "data": 0, "valid": true},
{"description": "1.1 is multiple of itself", "data": 1.1, "valid": true},
{"description": "3.3 is multiple of 1.1", "data": 3.3, "valid": true},
{"description": "6.6 is multiple of 1.1", "data": 6.6, "valid": true},
{"description": "7.7 is multiple of 1.1", "data": 7.7, "valid": true},
{"description": "1.2 is not multiple of 1.1", "data": 1.2, "valid": false}
]
},
{
"description": "by number below 1",
"schema": {"multipleOf": 0.1},
"tests": [
{"description": "zero is multiple of anything", "data": 0, "valid": true},
{"description": "0.1 is multiple of itself", "data": 0.1, "valid": true},
{"description": "0.3 is multiple of 0.1", "data": 0.3, "valid": true},
{"description": "0.6 is multiple of 0.1", "data": 0.6, "valid": true},
{"description": "0.7 is multiple of 0.1", "data": 0.7, "valid": true},
{"description": "0.35 is not multiple of 0.1", "data": 0.35, "valid": false}
]
},
{
"description": "by another number below 1",
"schema": {"multipleOf": 0.01},
"tests": [
{"description": "zero is multiple of anything", "data": 0, "valid": true},
{"description": "0.01 is multiple of itself", "data": 0.01, "valid": true},
{"description": "0.03 is multiple of 0.01", "data": 0.03, "valid": true},
{"description": "0.06 is multiple of 0.01", "data": 0.06, "valid": true},
{"description": "0.07 is multiple of 0.01", "data": 0.07, "valid": true},
{"description": "0.035 is not multiple of 0.01", "data": 0.035, "valid": false}
]
},
{
"description": "by small number",
"schema": {"multipleOf": 0.0001},
Expand Down

0 comments on commit 3546015

Please sign in to comment.