Skip to content

Commit 1227aeb

Browse files
committed
Add more multipleOf tests
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 conforming.
1 parent 1d5c3c0 commit 1227aeb

File tree

4 files changed

+144
-0
lines changed

4 files changed

+144
-0
lines changed

tests/draft2019-09/multipleOf.json

+36
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,42 @@
4141
}
4242
]
4343
},
44+
{
45+
"description": "by fractional number above 1",
46+
"schema": {"multipleOf": 1.1},
47+
"tests": [
48+
{"description": "zero is multiple of anything", "data": 0, "valid": true},
49+
{"description": "1.1 is multiple of itself", "data": 1.1, "valid": true},
50+
{"description": "3.3 is multiple of 1.1", "data": 3.3, "valid": true},
51+
{"description": "6.6 is multiple of 1.1", "data": 6.6, "valid": true},
52+
{"description": "7.7 is multiple of 1.1", "data": 7.7, "valid": true},
53+
{"description": "1.2 is not multiple of 1.1", "data": 1.2, "valid": false}
54+
]
55+
},
56+
{
57+
"description": "by number below 1",
58+
"schema": {"multipleOf": 0.1},
59+
"tests": [
60+
{"description": "zero is multiple of anything", "data": 0, "valid": true},
61+
{"description": "0.1 is multiple of itself", "data": 0.1, "valid": true},
62+
{"description": "0.3 is multiple of 0.1", "data": 0.3, "valid": true},
63+
{"description": "0.6 is multiple of 0.1", "data": 0.6, "valid": true},
64+
{"description": "0.7 is multiple of 0.1", "data": 0.7, "valid": true},
65+
{"description": "0.35 is not multiple of 0.1", "data": 0.35, "valid": false}
66+
]
67+
},
68+
{
69+
"description": "by another number below 1",
70+
"schema": {"multipleOf": 0.01},
71+
"tests": [
72+
{"description": "zero is multiple of anything", "data": 0, "valid": true},
73+
{"description": "0.01 is multiple of itself", "data": 0.01, "valid": true},
74+
{"description": "0.03 is multiple of 0.01", "data": 0.03, "valid": true},
75+
{"description": "0.06 is multiple of 0.01", "data": 0.06, "valid": true},
76+
{"description": "0.07 is multiple of 0.01", "data": 0.07, "valid": true},
77+
{"description": "0.035 is not multiple of 0.01", "data": 0.035, "valid": false}
78+
]
79+
},
4480
{
4581
"description": "by small number",
4682
"schema": {"multipleOf": 0.0001},

tests/draft4/multipleOf.json

+36
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,42 @@
4141
}
4242
]
4343
},
44+
{
45+
"description": "by fractional number above 1",
46+
"schema": {"multipleOf": 1.1},
47+
"tests": [
48+
{"description": "zero is multiple of anything", "data": 0, "valid": true},
49+
{"description": "1.1 is multiple of itself", "data": 1.1, "valid": true},
50+
{"description": "3.3 is multiple of 1.1", "data": 3.3, "valid": true},
51+
{"description": "6.6 is multiple of 1.1", "data": 6.6, "valid": true},
52+
{"description": "7.7 is multiple of 1.1", "data": 7.7, "valid": true},
53+
{"description": "1.2 is not multiple of 1.1", "data": 1.2, "valid": false}
54+
]
55+
},
56+
{
57+
"description": "by number below 1",
58+
"schema": {"multipleOf": 0.1},
59+
"tests": [
60+
{"description": "zero is multiple of anything", "data": 0, "valid": true},
61+
{"description": "0.1 is multiple of itself", "data": 0.1, "valid": true},
62+
{"description": "0.3 is multiple of 0.1", "data": 0.3, "valid": true},
63+
{"description": "0.6 is multiple of 0.1", "data": 0.6, "valid": true},
64+
{"description": "0.7 is multiple of 0.1", "data": 0.7, "valid": true},
65+
{"description": "0.35 is not multiple of 0.1", "data": 0.35, "valid": false}
66+
]
67+
},
68+
{
69+
"description": "by another number below 1",
70+
"schema": {"multipleOf": 0.01},
71+
"tests": [
72+
{"description": "zero is multiple of anything", "data": 0, "valid": true},
73+
{"description": "0.01 is multiple of itself", "data": 0.01, "valid": true},
74+
{"description": "0.03 is multiple of 0.01", "data": 0.03, "valid": true},
75+
{"description": "0.06 is multiple of 0.01", "data": 0.06, "valid": true},
76+
{"description": "0.07 is multiple of 0.01", "data": 0.07, "valid": true},
77+
{"description": "0.035 is not multiple of 0.01", "data": 0.035, "valid": false}
78+
]
79+
},
4480
{
4581
"description": "by small number",
4682
"schema": {"multipleOf": 0.0001},

tests/draft6/multipleOf.json

+36
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,42 @@
4141
}
4242
]
4343
},
44+
{
45+
"description": "by fractional number above 1",
46+
"schema": {"multipleOf": 1.1},
47+
"tests": [
48+
{"description": "zero is multiple of anything", "data": 0, "valid": true},
49+
{"description": "1.1 is multiple of itself", "data": 1.1, "valid": true},
50+
{"description": "3.3 is multiple of 1.1", "data": 3.3, "valid": true},
51+
{"description": "6.6 is multiple of 1.1", "data": 6.6, "valid": true},
52+
{"description": "7.7 is multiple of 1.1", "data": 7.7, "valid": true},
53+
{"description": "1.2 is not multiple of 1.1", "data": 1.2, "valid": false}
54+
]
55+
},
56+
{
57+
"description": "by number below 1",
58+
"schema": {"multipleOf": 0.1},
59+
"tests": [
60+
{"description": "zero is multiple of anything", "data": 0, "valid": true},
61+
{"description": "0.1 is multiple of itself", "data": 0.1, "valid": true},
62+
{"description": "0.3 is multiple of 0.1", "data": 0.3, "valid": true},
63+
{"description": "0.6 is multiple of 0.1", "data": 0.6, "valid": true},
64+
{"description": "0.7 is multiple of 0.1", "data": 0.7, "valid": true},
65+
{"description": "0.35 is not multiple of 0.1", "data": 0.35, "valid": false}
66+
]
67+
},
68+
{
69+
"description": "by another number below 1",
70+
"schema": {"multipleOf": 0.01},
71+
"tests": [
72+
{"description": "zero is multiple of anything", "data": 0, "valid": true},
73+
{"description": "0.01 is multiple of itself", "data": 0.01, "valid": true},
74+
{"description": "0.03 is multiple of 0.01", "data": 0.03, "valid": true},
75+
{"description": "0.06 is multiple of 0.01", "data": 0.06, "valid": true},
76+
{"description": "0.07 is multiple of 0.01", "data": 0.07, "valid": true},
77+
{"description": "0.035 is not multiple of 0.01", "data": 0.035, "valid": false}
78+
]
79+
},
4480
{
4581
"description": "by small number",
4682
"schema": {"multipleOf": 0.0001},

tests/draft7/multipleOf.json

+36
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,42 @@
4141
}
4242
]
4343
},
44+
{
45+
"description": "by fractional number above 1",
46+
"schema": {"multipleOf": 1.1},
47+
"tests": [
48+
{"description": "zero is multiple of anything", "data": 0, "valid": true},
49+
{"description": "1.1 is multiple of itself", "data": 1.1, "valid": true},
50+
{"description": "3.3 is multiple of 1.1", "data": 3.3, "valid": true},
51+
{"description": "6.6 is multiple of 1.1", "data": 6.6, "valid": true},
52+
{"description": "7.7 is multiple of 1.1", "data": 7.7, "valid": true},
53+
{"description": "1.2 is not multiple of 1.1", "data": 1.2, "valid": false}
54+
]
55+
},
56+
{
57+
"description": "by number below 1",
58+
"schema": {"multipleOf": 0.1},
59+
"tests": [
60+
{"description": "zero is multiple of anything", "data": 0, "valid": true},
61+
{"description": "0.1 is multiple of itself", "data": 0.1, "valid": true},
62+
{"description": "0.3 is multiple of 0.1", "data": 0.3, "valid": true},
63+
{"description": "0.6 is multiple of 0.1", "data": 0.6, "valid": true},
64+
{"description": "0.7 is multiple of 0.1", "data": 0.7, "valid": true},
65+
{"description": "0.35 is not multiple of 0.1", "data": 0.35, "valid": false}
66+
]
67+
},
68+
{
69+
"description": "by another number below 1",
70+
"schema": {"multipleOf": 0.01},
71+
"tests": [
72+
{"description": "zero is multiple of anything", "data": 0, "valid": true},
73+
{"description": "0.01 is multiple of itself", "data": 0.01, "valid": true},
74+
{"description": "0.03 is multiple of 0.01", "data": 0.03, "valid": true},
75+
{"description": "0.06 is multiple of 0.01", "data": 0.06, "valid": true},
76+
{"description": "0.07 is multiple of 0.01", "data": 0.07, "valid": true},
77+
{"description": "0.035 is not multiple of 0.01", "data": 0.035, "valid": false}
78+
]
79+
},
4480
{
4581
"description": "by small number",
4682
"schema": {"multipleOf": 0.0001},

0 commit comments

Comments
 (0)