From 82b27d87989fe9dfd8149cc7955e9fbe5a3b996d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BA=D0=BE=D0=B2=D0=BE=D1=80=D0=BE=D0=B4=D0=B0=20?= =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=B8=D1=82=D0=B0=20=D0=90=D0=BD=D0=B4=D1=80?= =?UTF-8?q?=D0=B5=D0=B5=D0=B2=D0=B8=D1=87?= Date: Wed, 8 Jul 2020 16:58:15 +0300 Subject: [PATCH] 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 confirming. --- tests/draft2019-09/multipleOf.json | 36 ++++++++++++++++++++++++++++++ tests/draft4/multipleOf.json | 36 ++++++++++++++++++++++++++++++ tests/draft6/multipleOf.json | 36 ++++++++++++++++++++++++++++++ tests/draft7/multipleOf.json | 36 ++++++++++++++++++++++++++++++ 4 files changed, 144 insertions(+) diff --git a/tests/draft2019-09/multipleOf.json b/tests/draft2019-09/multipleOf.json index ca3b7618..c4f22c40 100644 --- a/tests/draft2019-09/multipleOf.json +++ b/tests/draft2019-09/multipleOf.json @@ -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}, diff --git a/tests/draft4/multipleOf.json b/tests/draft4/multipleOf.json index ca3b7618..c4f22c40 100644 --- a/tests/draft4/multipleOf.json +++ b/tests/draft4/multipleOf.json @@ -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}, diff --git a/tests/draft6/multipleOf.json b/tests/draft6/multipleOf.json index ca3b7618..c4f22c40 100644 --- a/tests/draft6/multipleOf.json +++ b/tests/draft6/multipleOf.json @@ -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}, diff --git a/tests/draft7/multipleOf.json b/tests/draft7/multipleOf.json index ca3b7618..c4f22c40 100644 --- a/tests/draft7/multipleOf.json +++ b/tests/draft7/multipleOf.json @@ -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},