diff --git a/tests/draft-next/optional/bignum.json b/tests/draft-next/optional/bignum.json index 9f4f7079..90b40001 100644 --- a/tests/draft-next/optional/bignum.json +++ b/tests/draft-next/optional/bignum.json @@ -15,6 +15,11 @@ "description": "a negative bignum is an integer", "data": -12345678910111213141516171819202122232425262728293031, "valid": true + }, + { + "description": "a bignum with a nonzero-value fractional part is not an integer", + "data": 12345678910111213141516171819202122232425262728293031.5, + "valid": false } ] }, diff --git a/tests/draft-next/optional/integer.json b/tests/draft-next/optional/integer.json new file mode 100644 index 00000000..b70d6a7f --- /dev/null +++ b/tests/draft-next/optional/integer.json @@ -0,0 +1,201 @@ +[ + { + "description": "binary64 float (double) truncation", + "schema": { + "$schema": "https://json-schema.org/draft/next/schema", + "type": "integer" + }, + "tests": [ + { + "description": "a small float whose fractional part is truncated is not an integer", + "data": 1.00000000000001, + "valid": false + }, + { + "description": "a large float whose fractional part is truncated is not an integer", + "data": 9007199254740991.5, + "valid": false + } + ] + }, + { + "description": "maximum signed 32-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/next/schema", + "minimum": 2147483647, + "maximum": 2147483647 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 2147483647, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 2147483646, + "valid": false + } + ] + }, + { + "description": "minimum signed 32-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/next/schema", + "minimum": -2147483648, + "maximum": -2147483648 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -2147483648, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -2147483647, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 32-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/next/schema", + "minimum": 4294967295, + "maximum": 4294967295 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 4294967295, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 4294967294, + "valid": false + } + ] + }, + { + "description": "ECMAScript Number.MAX_SAFE_INTEGER (2^53-1) comparison", + "schema": { + "$schema": "https://json-schema.org/draft/next/schema", + "minimum": 9007199254740991, + "maximum": 9007199254740991 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 9007199254740991, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 9007199254740990, + "valid": false + } + ] + }, + { + "description": "ECMAScript Number.MIN_SAFE_INTEGER (-2^53-1) comparison", + "schema": { + "$schema": "https://json-schema.org/draft/next/schema", + "minimum": -9007199254740991, + "maximum": -9007199254740991 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -9007199254740991, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -9007199254740990, + "valid": false + } + ] + }, + { + "description": "maximum signed 64-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/next/schema", + "minimum": 9223372036854775807, + "maximum": 9223372036854775807 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 9223372036854775807, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 9223372036854775806, + "valid": false + } + ] + }, + { + "description": "minimum signed 64-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/next/schema", + "minimum": -9223372036854775808, + "maximum": -9223372036854775808 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -9223372036854775808, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -9223372036854775807, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 64-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/next/schema", + "minimum": 18446744073709551615, + "maximum": 18446744073709551615 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 18446744073709551615, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 18446744073709551614, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 128-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/next/schema", + "minimum": 340282366920938463463374607431768211455, + "maximum": 340282366920938463463374607431768211455 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 340282366920938463463374607431768211455, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 340282366920938463463374607431768211454, + "valid": false + } + ] + } +] diff --git a/tests/draft-next/type.json b/tests/draft-next/type.json index 86e551c7..c9911878 100644 --- a/tests/draft-next/type.json +++ b/tests/draft-next/type.json @@ -12,12 +12,32 @@ "valid": true }, { - "description": "a float with zero fractional part is an integer", + "description": "a negative integer is an integer", + "data": -1, + "valid": true + }, + { + "description": "zero is an integer", + "data": 0, + "valid": true + }, + { + "description": "negative zero is an integer", + "data": -0, + "valid": true + }, + { + "description": "a float with a zero-value fractional part is an integer", "data": 1.0, "valid": true }, { - "description": "a float is not an integer", + "description": "a float with an exponent and zero-value fractional part is an integer", + "data": 1.1e1, + "valid": true + }, + { + "description": "a float with a nonzero-value fractional part is not an integer", "data": 1.1, "valid": false }, diff --git a/tests/draft2019-09/optional/bignum.json b/tests/draft2019-09/optional/bignum.json index 8b064677..3fd6699e 100644 --- a/tests/draft2019-09/optional/bignum.json +++ b/tests/draft2019-09/optional/bignum.json @@ -15,6 +15,11 @@ "description": "a negative bignum is an integer", "data": -12345678910111213141516171819202122232425262728293031, "valid": true + }, + { + "description": "a bignum with a nonzero-value fractional part is not an integer", + "data": 12345678910111213141516171819202122232425262728293031.5, + "valid": false } ] }, diff --git a/tests/draft2019-09/optional/integer.json b/tests/draft2019-09/optional/integer.json new file mode 100644 index 00000000..5749cba8 --- /dev/null +++ b/tests/draft2019-09/optional/integer.json @@ -0,0 +1,201 @@ +[ + { + "description": "binary64 float (double) truncation", + "schema": { + "$schema": "https://json-schema.org/draft/2019-09/schema", + "type": "integer" + }, + "tests": [ + { + "description": "a small float whose fractional part is truncated is not an integer", + "data": 1.00000000000001, + "valid": false + }, + { + "description": "a large float whose fractional part is truncated is not an integer", + "data": 9007199254740991.5, + "valid": false + } + ] + }, + { + "description": "maximum signed 32-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2019-09/schema", + "minimum": 2147483647, + "maximum": 2147483647 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 2147483647, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 2147483646, + "valid": false + } + ] + }, + { + "description": "minimum signed 32-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2019-09/schema", + "minimum": -2147483648, + "maximum": -2147483648 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -2147483648, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -2147483647, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 32-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2019-09/schema", + "minimum": 4294967295, + "maximum": 4294967295 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 4294967295, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 4294967294, + "valid": false + } + ] + }, + { + "description": "ECMAScript Number.MAX_SAFE_INTEGER (2^53-1) comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2019-09/schema", + "minimum": 9007199254740991, + "maximum": 9007199254740991 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 9007199254740991, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 9007199254740990, + "valid": false + } + ] + }, + { + "description": "ECMAScript Number.MIN_SAFE_INTEGER (-2^53-1) comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2019-09/schema", + "minimum": -9007199254740991, + "maximum": -9007199254740991 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -9007199254740991, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -9007199254740990, + "valid": false + } + ] + }, + { + "description": "maximum signed 64-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2019-09/schema", + "minimum": 9223372036854775807, + "maximum": 9223372036854775807 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 9223372036854775807, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 9223372036854775806, + "valid": false + } + ] + }, + { + "description": "minimum signed 64-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2019-09/schema", + "minimum": -9223372036854775808, + "maximum": -9223372036854775808 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -9223372036854775808, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -9223372036854775807, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 64-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2019-09/schema", + "minimum": 18446744073709551615, + "maximum": 18446744073709551615 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 18446744073709551615, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 18446744073709551614, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 128-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2019-09/schema", + "minimum": 340282366920938463463374607431768211455, + "maximum": 340282366920938463463374607431768211455 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 340282366920938463463374607431768211455, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 340282366920938463463374607431768211454, + "valid": false + } + ] + } +] diff --git a/tests/draft2019-09/type.json b/tests/draft2019-09/type.json index 92c6be89..829d3294 100644 --- a/tests/draft2019-09/type.json +++ b/tests/draft2019-09/type.json @@ -12,12 +12,32 @@ "valid": true }, { - "description": "a float with zero fractional part is an integer", + "description": "a negative integer is an integer", + "data": -1, + "valid": true + }, + { + "description": "zero is an integer", + "data": 0, + "valid": true + }, + { + "description": "negative zero is an integer", + "data": -0, + "valid": true + }, + { + "description": "a float with zero-value fractional part is an integer", "data": 1.0, "valid": true }, { - "description": "a float is not an integer", + "description": "a float with an exponent and zero-value fractional part is an integer", + "data": 1.1e1, + "valid": true + }, + { + "description": "a float with a nonzero-value fractional part is not an integer", "data": 1.1, "valid": false }, diff --git a/tests/draft2020-12/optional/bignum.json b/tests/draft2020-12/optional/bignum.json index d69b29e8..cd759547 100644 --- a/tests/draft2020-12/optional/bignum.json +++ b/tests/draft2020-12/optional/bignum.json @@ -15,6 +15,11 @@ "description": "a negative bignum is an integer", "data": -12345678910111213141516171819202122232425262728293031, "valid": true + }, + { + "description": "a bignum with a nonzero-value fractional part is not an integer", + "data": 12345678910111213141516171819202122232425262728293031.5, + "valid": false } ] }, diff --git a/tests/draft2020-12/optional/integer.json b/tests/draft2020-12/optional/integer.json new file mode 100644 index 00000000..5cd480ec --- /dev/null +++ b/tests/draft2020-12/optional/integer.json @@ -0,0 +1,201 @@ +[ + { + "description": "binary64 float (double) truncation", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "integer" + }, + "tests": [ + { + "description": "a small float whose fractional part is truncated is not an integer", + "data": 1.00000000000001, + "valid": false + }, + { + "description": "a large float whose fractional part is truncated is not an integer", + "data": 9007199254740991.5, + "valid": false + } + ] + }, + { + "description": "maximum signed 32-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "minimum": 2147483647, + "maximum": 2147483647 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 2147483647, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 2147483646, + "valid": false + } + ] + }, + { + "description": "minimum signed 32-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "minimum": -2147483648, + "maximum": -2147483648 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -2147483648, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -2147483647, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 32-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "minimum": 4294967295, + "maximum": 4294967295 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 4294967295, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 4294967294, + "valid": false + } + ] + }, + { + "description": "ECMAScript Number.MAX_SAFE_INTEGER (2^53-1) comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "minimum": 9007199254740991, + "maximum": 9007199254740991 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 9007199254740991, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 9007199254740990, + "valid": false + } + ] + }, + { + "description": "ECMAScript Number.MIN_SAFE_INTEGER (-2^53-1) comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "minimum": -9007199254740991, + "maximum": -9007199254740991 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -9007199254740991, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -9007199254740990, + "valid": false + } + ] + }, + { + "description": "maximum signed 64-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "minimum": 9223372036854775807, + "maximum": 9223372036854775807 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 9223372036854775807, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 9223372036854775806, + "valid": false + } + ] + }, + { + "description": "minimum signed 64-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "minimum": -9223372036854775808, + "maximum": -9223372036854775808 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -9223372036854775808, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -9223372036854775807, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 64-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "minimum": 18446744073709551615, + "maximum": 18446744073709551615 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 18446744073709551615, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 18446744073709551614, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 128-bit integer comparison", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "minimum": 340282366920938463463374607431768211455, + "maximum": 340282366920938463463374607431768211455 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 340282366920938463463374607431768211455, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 340282366920938463463374607431768211454, + "valid": false + } + ] + } +] diff --git a/tests/draft2020-12/type.json b/tests/draft2020-12/type.json index 2123c408..dbc3a293 100644 --- a/tests/draft2020-12/type.json +++ b/tests/draft2020-12/type.json @@ -12,12 +12,32 @@ "valid": true }, { - "description": "a float with zero fractional part is an integer", + "description": "a negative integer is an integer", + "data": -1, + "valid": true + }, + { + "description": "zero is an integer", + "data": 0, + "valid": true + }, + { + "description": "negative zero is an integer", + "data": -0, + "valid": true + }, + { + "description": "a float with zero-value fractional part is an integer", "data": 1.0, "valid": true }, { - "description": "a float is not an integer", + "description": "a float with an exponent and zero-value fractional part is an integer", + "data": 1.1e1, + "valid": true + }, + { + "description": "a float with a nonzero-value fractional part is not an integer", "data": 1.1, "valid": false }, diff --git a/tests/draft3/optional/bignum.json b/tests/draft3/optional/bignum.json index 1bc8eb21..1b6644c7 100644 --- a/tests/draft3/optional/bignum.json +++ b/tests/draft3/optional/bignum.json @@ -12,6 +12,11 @@ "description": "a negative bignum is an integer", "data": -12345678910111213141516171819202122232425262728293031, "valid": true + }, + { + "description": "a bignum with a nonzero-value fractional part is not an integer", + "data": 12345678910111213141516171819202122232425262728293031.5, + "valid": false } ] }, diff --git a/tests/draft3/optional/integer.json b/tests/draft3/optional/integer.json new file mode 100644 index 00000000..9488e450 --- /dev/null +++ b/tests/draft3/optional/integer.json @@ -0,0 +1,191 @@ +[ + { + "description": "binary64 float (double) truncation", + "schema": { + "type": "integer" + }, + "tests": [ + { + "description": "a small float whose fractional part is truncated is not an integer", + "data": 1.00000000000001, + "valid": false + }, + { + "description": "a large float whose fractional part is truncated is not an integer", + "data": 9007199254740991.5, + "valid": false + } + ] + }, + { + "description": "maximum signed 32-bit integer comparison", + "schema": { + "minimum": 2147483647, + "maximum": 2147483647 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 2147483647, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 2147483646, + "valid": false + } + ] + }, + { + "description": "minimum signed 32-bit integer comparison", + "schema": { + "minimum": -2147483648, + "maximum": -2147483648 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -2147483648, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -2147483647, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 32-bit integer comparison", + "schema": { + "minimum": 4294967295, + "maximum": 4294967295 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 4294967295, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 4294967294, + "valid": false + } + ] + }, + { + "description": "ECMAScript Number.MAX_SAFE_INTEGER (2^53-1) comparison", + "schema": { + "minimum": 9007199254740991, + "maximum": 9007199254740991 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 9007199254740991, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 9007199254740990, + "valid": false + } + ] + }, + { + "description": "ECMAScript Number.MIN_SAFE_INTEGER (-2^53-1) comparison", + "schema": { + "minimum": -9007199254740991, + "maximum": -9007199254740991 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -9007199254740991, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -9007199254740990, + "valid": false + } + ] + }, + { + "description": "maximum signed 64-bit integer comparison", + "schema": { + "minimum": 9223372036854775807, + "maximum": 9223372036854775807 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 9223372036854775807, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 9223372036854775806, + "valid": false + } + ] + }, + { + "description": "minimum signed 64-bit integer comparison", + "schema": { + "minimum": -9223372036854775808, + "maximum": -9223372036854775808 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -9223372036854775808, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -9223372036854775807, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 64-bit integer comparison", + "schema": { + "minimum": 18446744073709551615, + "maximum": 18446744073709551615 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 18446744073709551615, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 18446744073709551614, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 128-bit integer comparison", + "schema": { + "minimum": 340282366920938463463374607431768211455, + "maximum": 340282366920938463463374607431768211455 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 340282366920938463463374607431768211455, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 340282366920938463463374607431768211454, + "valid": false + } + ] + } +] diff --git a/tests/draft3/optional/zeroTerminatedFloats.json b/tests/draft3/optional/zeroTerminatedFloats.json index 9b50ea27..bb6484fe 100644 --- a/tests/draft3/optional/zeroTerminatedFloats.json +++ b/tests/draft3/optional/zeroTerminatedFloats.json @@ -6,9 +6,14 @@ }, "tests": [ { - "description": "a float is not an integer even without fractional part", + "description": "a float with zero-value fractional part isn't an integer", "data": 1.0, "valid": false + }, + { + "description": "a float with exponent and zero-value fractional part isn't an integer", + "data": 1.1e1, + "valid": false } ] } diff --git a/tests/draft3/type.json b/tests/draft3/type.json index 8447bc8e..6d32f827 100644 --- a/tests/draft3/type.json +++ b/tests/draft3/type.json @@ -9,7 +9,22 @@ "valid": true }, { - "description": "a float is not an integer", + "description": "a negative integer is an integer", + "data": -1, + "valid": true + }, + { + "description": "zero is an integer", + "data": 0, + "valid": true + }, + { + "description": "negative zero is an integer", + "data": -0, + "valid": true + }, + { + "description": "a float with a nonzero-value fractional part is not an integer", "data": 1.1, "valid": false }, diff --git a/tests/draft4/optional/bignum.json b/tests/draft4/optional/bignum.json index 1bc8eb21..1b6644c7 100644 --- a/tests/draft4/optional/bignum.json +++ b/tests/draft4/optional/bignum.json @@ -12,6 +12,11 @@ "description": "a negative bignum is an integer", "data": -12345678910111213141516171819202122232425262728293031, "valid": true + }, + { + "description": "a bignum with a nonzero-value fractional part is not an integer", + "data": 12345678910111213141516171819202122232425262728293031.5, + "valid": false } ] }, diff --git a/tests/draft4/optional/integer.json b/tests/draft4/optional/integer.json new file mode 100644 index 00000000..9488e450 --- /dev/null +++ b/tests/draft4/optional/integer.json @@ -0,0 +1,191 @@ +[ + { + "description": "binary64 float (double) truncation", + "schema": { + "type": "integer" + }, + "tests": [ + { + "description": "a small float whose fractional part is truncated is not an integer", + "data": 1.00000000000001, + "valid": false + }, + { + "description": "a large float whose fractional part is truncated is not an integer", + "data": 9007199254740991.5, + "valid": false + } + ] + }, + { + "description": "maximum signed 32-bit integer comparison", + "schema": { + "minimum": 2147483647, + "maximum": 2147483647 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 2147483647, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 2147483646, + "valid": false + } + ] + }, + { + "description": "minimum signed 32-bit integer comparison", + "schema": { + "minimum": -2147483648, + "maximum": -2147483648 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -2147483648, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -2147483647, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 32-bit integer comparison", + "schema": { + "minimum": 4294967295, + "maximum": 4294967295 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 4294967295, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 4294967294, + "valid": false + } + ] + }, + { + "description": "ECMAScript Number.MAX_SAFE_INTEGER (2^53-1) comparison", + "schema": { + "minimum": 9007199254740991, + "maximum": 9007199254740991 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 9007199254740991, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 9007199254740990, + "valid": false + } + ] + }, + { + "description": "ECMAScript Number.MIN_SAFE_INTEGER (-2^53-1) comparison", + "schema": { + "minimum": -9007199254740991, + "maximum": -9007199254740991 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -9007199254740991, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -9007199254740990, + "valid": false + } + ] + }, + { + "description": "maximum signed 64-bit integer comparison", + "schema": { + "minimum": 9223372036854775807, + "maximum": 9223372036854775807 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 9223372036854775807, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 9223372036854775806, + "valid": false + } + ] + }, + { + "description": "minimum signed 64-bit integer comparison", + "schema": { + "minimum": -9223372036854775808, + "maximum": -9223372036854775808 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -9223372036854775808, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -9223372036854775807, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 64-bit integer comparison", + "schema": { + "minimum": 18446744073709551615, + "maximum": 18446744073709551615 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 18446744073709551615, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 18446744073709551614, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 128-bit integer comparison", + "schema": { + "minimum": 340282366920938463463374607431768211455, + "maximum": 340282366920938463463374607431768211455 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 340282366920938463463374607431768211455, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 340282366920938463463374607431768211454, + "valid": false + } + ] + } +] diff --git a/tests/draft4/optional/zeroTerminatedFloats.json b/tests/draft4/optional/zeroTerminatedFloats.json index 9b50ea27..bb6484fe 100644 --- a/tests/draft4/optional/zeroTerminatedFloats.json +++ b/tests/draft4/optional/zeroTerminatedFloats.json @@ -6,9 +6,14 @@ }, "tests": [ { - "description": "a float is not an integer even without fractional part", + "description": "a float with zero-value fractional part isn't an integer", "data": 1.0, "valid": false + }, + { + "description": "a float with exponent and zero-value fractional part isn't an integer", + "data": 1.1e1, + "valid": false } ] } diff --git a/tests/draft4/type.json b/tests/draft4/type.json index df46677b..fb8cd74c 100644 --- a/tests/draft4/type.json +++ b/tests/draft4/type.json @@ -9,7 +9,22 @@ "valid": true }, { - "description": "a float is not an integer", + "description": "a negative integer is an integer", + "data": -1, + "valid": true + }, + { + "description": "zero is an integer", + "data": 0, + "valid": true + }, + { + "description": "negative zero is an integer", + "data": -0, + "valid": true + }, + { + "description": "a float with a nonzero-value fractional part is not an integer", "data": 1.1, "valid": false }, diff --git a/tests/draft6/optional/bignum.json b/tests/draft6/optional/bignum.json index 94b4a4e6..cfda7732 100644 --- a/tests/draft6/optional/bignum.json +++ b/tests/draft6/optional/bignum.json @@ -12,6 +12,11 @@ "description": "a negative bignum is an integer", "data": -12345678910111213141516171819202122232425262728293031, "valid": true + }, + { + "description": "a bignum with a nonzero-value fractional part is not an integer", + "data": 12345678910111213141516171819202122232425262728293031.5, + "valid": false } ] }, diff --git a/tests/draft6/optional/integer.json b/tests/draft6/optional/integer.json new file mode 100644 index 00000000..9488e450 --- /dev/null +++ b/tests/draft6/optional/integer.json @@ -0,0 +1,191 @@ +[ + { + "description": "binary64 float (double) truncation", + "schema": { + "type": "integer" + }, + "tests": [ + { + "description": "a small float whose fractional part is truncated is not an integer", + "data": 1.00000000000001, + "valid": false + }, + { + "description": "a large float whose fractional part is truncated is not an integer", + "data": 9007199254740991.5, + "valid": false + } + ] + }, + { + "description": "maximum signed 32-bit integer comparison", + "schema": { + "minimum": 2147483647, + "maximum": 2147483647 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 2147483647, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 2147483646, + "valid": false + } + ] + }, + { + "description": "minimum signed 32-bit integer comparison", + "schema": { + "minimum": -2147483648, + "maximum": -2147483648 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -2147483648, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -2147483647, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 32-bit integer comparison", + "schema": { + "minimum": 4294967295, + "maximum": 4294967295 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 4294967295, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 4294967294, + "valid": false + } + ] + }, + { + "description": "ECMAScript Number.MAX_SAFE_INTEGER (2^53-1) comparison", + "schema": { + "minimum": 9007199254740991, + "maximum": 9007199254740991 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 9007199254740991, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 9007199254740990, + "valid": false + } + ] + }, + { + "description": "ECMAScript Number.MIN_SAFE_INTEGER (-2^53-1) comparison", + "schema": { + "minimum": -9007199254740991, + "maximum": -9007199254740991 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -9007199254740991, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -9007199254740990, + "valid": false + } + ] + }, + { + "description": "maximum signed 64-bit integer comparison", + "schema": { + "minimum": 9223372036854775807, + "maximum": 9223372036854775807 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 9223372036854775807, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 9223372036854775806, + "valid": false + } + ] + }, + { + "description": "minimum signed 64-bit integer comparison", + "schema": { + "minimum": -9223372036854775808, + "maximum": -9223372036854775808 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -9223372036854775808, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -9223372036854775807, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 64-bit integer comparison", + "schema": { + "minimum": 18446744073709551615, + "maximum": 18446744073709551615 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 18446744073709551615, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 18446744073709551614, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 128-bit integer comparison", + "schema": { + "minimum": 340282366920938463463374607431768211455, + "maximum": 340282366920938463463374607431768211455 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 340282366920938463463374607431768211455, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 340282366920938463463374607431768211454, + "valid": false + } + ] + } +] diff --git a/tests/draft6/type.json b/tests/draft6/type.json index 83046470..b2155f1b 100644 --- a/tests/draft6/type.json +++ b/tests/draft6/type.json @@ -9,12 +9,32 @@ "valid": true }, { - "description": "a float with zero fractional part is an integer", + "description": "a negative integer is an integer", + "data": -1, + "valid": true + }, + { + "description": "zero is an integer", + "data": 0, + "valid": true + }, + { + "description": "negative zero is an integer", + "data": -0, + "valid": true + }, + { + "description": "a float with zero-value fractional part is an integer", "data": 1.0, "valid": true }, { - "description": "a float is not an integer", + "description": "a float with an exponent and zero-value fractional part is an integer", + "data": 1.1e1, + "valid": true + }, + { + "description": "a float with a nonzero-value fractional part is not an integer", "data": 1.1, "valid": false }, diff --git a/tests/draft7/optional/bignum.json b/tests/draft7/optional/bignum.json index 94b4a4e6..cfda7732 100644 --- a/tests/draft7/optional/bignum.json +++ b/tests/draft7/optional/bignum.json @@ -12,6 +12,11 @@ "description": "a negative bignum is an integer", "data": -12345678910111213141516171819202122232425262728293031, "valid": true + }, + { + "description": "a bignum with a nonzero-value fractional part is not an integer", + "data": 12345678910111213141516171819202122232425262728293031.5, + "valid": false } ] }, diff --git a/tests/draft7/optional/integer.json b/tests/draft7/optional/integer.json new file mode 100644 index 00000000..9488e450 --- /dev/null +++ b/tests/draft7/optional/integer.json @@ -0,0 +1,191 @@ +[ + { + "description": "binary64 float (double) truncation", + "schema": { + "type": "integer" + }, + "tests": [ + { + "description": "a small float whose fractional part is truncated is not an integer", + "data": 1.00000000000001, + "valid": false + }, + { + "description": "a large float whose fractional part is truncated is not an integer", + "data": 9007199254740991.5, + "valid": false + } + ] + }, + { + "description": "maximum signed 32-bit integer comparison", + "schema": { + "minimum": 2147483647, + "maximum": 2147483647 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 2147483647, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 2147483646, + "valid": false + } + ] + }, + { + "description": "minimum signed 32-bit integer comparison", + "schema": { + "minimum": -2147483648, + "maximum": -2147483648 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -2147483648, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -2147483647, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 32-bit integer comparison", + "schema": { + "minimum": 4294967295, + "maximum": 4294967295 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 4294967295, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 4294967294, + "valid": false + } + ] + }, + { + "description": "ECMAScript Number.MAX_SAFE_INTEGER (2^53-1) comparison", + "schema": { + "minimum": 9007199254740991, + "maximum": 9007199254740991 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 9007199254740991, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 9007199254740990, + "valid": false + } + ] + }, + { + "description": "ECMAScript Number.MIN_SAFE_INTEGER (-2^53-1) comparison", + "schema": { + "minimum": -9007199254740991, + "maximum": -9007199254740991 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -9007199254740991, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -9007199254740990, + "valid": false + } + ] + }, + { + "description": "maximum signed 64-bit integer comparison", + "schema": { + "minimum": 9223372036854775807, + "maximum": 9223372036854775807 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 9223372036854775807, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 9223372036854775806, + "valid": false + } + ] + }, + { + "description": "minimum signed 64-bit integer comparison", + "schema": { + "minimum": -9223372036854775808, + "maximum": -9223372036854775808 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": -9223372036854775808, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": -9223372036854775807, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 64-bit integer comparison", + "schema": { + "minimum": 18446744073709551615, + "maximum": 18446744073709551615 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 18446744073709551615, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 18446744073709551614, + "valid": false + } + ] + }, + { + "description": "maximum unsigned 128-bit integer comparison", + "schema": { + "minimum": 340282366920938463463374607431768211455, + "maximum": 340282366920938463463374607431768211455 + }, + "tests": [ + { + "description": "comparison is true for equal numbers", + "data": 340282366920938463463374607431768211455, + "valid": true + }, + { + "description": "comparison is false for inequal numbers", + "data": 340282366920938463463374607431768211454, + "valid": false + } + ] + } +] diff --git a/tests/draft7/type.json b/tests/draft7/type.json index 83046470..b2155f1b 100644 --- a/tests/draft7/type.json +++ b/tests/draft7/type.json @@ -9,12 +9,32 @@ "valid": true }, { - "description": "a float with zero fractional part is an integer", + "description": "a negative integer is an integer", + "data": -1, + "valid": true + }, + { + "description": "zero is an integer", + "data": 0, + "valid": true + }, + { + "description": "negative zero is an integer", + "data": -0, + "valid": true + }, + { + "description": "a float with zero-value fractional part is an integer", "data": 1.0, "valid": true }, { - "description": "a float is not an integer", + "description": "a float with an exponent and zero-value fractional part is an integer", + "data": 1.1e1, + "valid": true + }, + { + "description": "a float with a nonzero-value fractional part is not an integer", "data": 1.1, "valid": false },