From 5e52033a6faf89c38bf5e140fce8fc9521f97353 Mon Sep 17 00:00:00 2001 From: Juan Cruz Viotti Date: Tue, 18 Nov 2025 10:25:15 -0400 Subject: [PATCH] Better exercise arbitrary precision capabilities of XML Schema schemas Signed-off-by: Juan Cruz Viotti --- test/w3c/xmlschema/2001/decimal.test.json | 35 +++++++++++++++++++ test/w3c/xmlschema/2001/integer.test.json | 30 ++++++++++++++++ .../xmlschema/2001/negative-integer.test.json | 20 +++++++++++ .../2001/non-negative-integer.test.json | 20 +++++++++++ .../2001/non-positive-integer.test.json | 20 +++++++++++ .../xmlschema/2001/positive-integer.test.json | 20 +++++++++++ .../xmlschema/2001/unsigned-long.test.json | 30 ++++++++++++++++ .../instance/2003/decimal-item-type.test.json | 20 +++++++++++ .../2003/fraction-item-type.test.json | 30 ++++++++++++++++ .../instance/2003/integer-item-type.test.json | 25 +++++++++++++ .../2003/monetary-item-type.test.json | 32 +++++++++++++++++ .../2003/negative-integer-item-type.test.json | 15 ++++++++ .../non-negative-integer-item-type.test.json | 15 ++++++++ .../non-positive-integer-item-type.test.json | 15 ++++++++ .../2003/positive-integer-item-type.test.json | 15 ++++++++ .../instance/2003/pure-item-type.test.json | 15 ++++++++ .../instance/2003/shares-item-type.test.json | 15 ++++++++ 17 files changed, 372 insertions(+) diff --git a/test/w3c/xmlschema/2001/decimal.test.json b/test/w3c/xmlschema/2001/decimal.test.json index c7b58a46..a92afff6 100644 --- a/test/w3c/xmlschema/2001/decimal.test.json +++ b/test/w3c/xmlschema/2001/decimal.test.json @@ -77,6 +77,41 @@ "data": 1e-06, "valid": true }, + { + "description": "Valid - arbitrary precision 18 digits integer", + "data": 123456789012345678, + "valid": true + }, + { + "description": "Valid - arbitrary precision 19 digits integer", + "data": 1234567890123456789, + "valid": true + }, + { + "description": "Valid - arbitrary precision 20 digits integer", + "data": 12345678901234567890, + "valid": true + }, + { + "description": "Valid - arbitrary precision large negative", + "data": -12345678901234567890, + "valid": true + }, + { + "description": "Valid - arbitrary precision 25 digits", + "data": 1234567890123456789012345, + "valid": true + }, + { + "description": "Valid - arbitrary precision with decimals", + "data": 123456789012345680.0, + "valid": true + }, + { + "description": "Valid - arbitrary precision negative with decimals", + "data": -123456789012345680.0, + "valid": true + }, { "description": "Invalid - string type", "data": "123.45", diff --git a/test/w3c/xmlschema/2001/integer.test.json b/test/w3c/xmlschema/2001/integer.test.json index 39ea6829..d40fbe4f 100644 --- a/test/w3c/xmlschema/2001/integer.test.json +++ b/test/w3c/xmlschema/2001/integer.test.json @@ -47,6 +47,36 @@ "data": -1000000, "valid": true }, + { + "description": "Valid - arbitrary precision beyond int64", + "data": 12345678901234567890, + "valid": true + }, + { + "description": "Valid - arbitrary precision large positive", + "data": 99999999999999999999, + "valid": true + }, + { + "description": "Valid - arbitrary precision large negative", + "data": -99999999999999999999, + "valid": true + }, + { + "description": "Valid - arbitrary precision 25 digits positive", + "data": 1234567890123456789012345, + "valid": true + }, + { + "description": "Valid - arbitrary precision 25 digits negative", + "data": -1234567890123456789012345, + "valid": true + }, + { + "description": "Valid - arbitrary precision 30 digits", + "data": 123456789012345678901234567890, + "valid": true + }, { "description": "Invalid - decimal number", "data": 123.45, diff --git a/test/w3c/xmlschema/2001/negative-integer.test.json b/test/w3c/xmlschema/2001/negative-integer.test.json index e9a274de..c088542c 100644 --- a/test/w3c/xmlschema/2001/negative-integer.test.json +++ b/test/w3c/xmlschema/2001/negative-integer.test.json @@ -27,6 +27,26 @@ "data": -1000, "valid": true }, + { + "description": "Valid - arbitrary precision beyond int64", + "data": -12345678901234567890, + "valid": true + }, + { + "description": "Valid - arbitrary precision large negative", + "data": -99999999999999999999, + "valid": true + }, + { + "description": "Valid - arbitrary precision 25 digits negative", + "data": -1234567890123456789012345, + "valid": true + }, + { + "description": "Valid - arbitrary precision 30 digits negative", + "data": -123456789012345678901234567890, + "valid": true + }, { "description": "Invalid - zero", "data": 0, diff --git a/test/w3c/xmlschema/2001/non-negative-integer.test.json b/test/w3c/xmlschema/2001/non-negative-integer.test.json index b72d13d0..add5b6c6 100644 --- a/test/w3c/xmlschema/2001/non-negative-integer.test.json +++ b/test/w3c/xmlschema/2001/non-negative-integer.test.json @@ -27,6 +27,26 @@ "data": 1000, "valid": true }, + { + "description": "Valid - arbitrary precision beyond uint64", + "data": 18446744073709551616, + "valid": true + }, + { + "description": "Valid - arbitrary precision large positive", + "data": 99999999999999999999, + "valid": true + }, + { + "description": "Valid - arbitrary precision 25 digits", + "data": 1234567890123456789012345, + "valid": true + }, + { + "description": "Valid - arbitrary precision 30 digits", + "data": 123456789012345678901234567890, + "valid": true + }, { "description": "Invalid - negative one", "data": -1, diff --git a/test/w3c/xmlschema/2001/non-positive-integer.test.json b/test/w3c/xmlschema/2001/non-positive-integer.test.json index 05fd518a..81db4f42 100644 --- a/test/w3c/xmlschema/2001/non-positive-integer.test.json +++ b/test/w3c/xmlschema/2001/non-positive-integer.test.json @@ -27,6 +27,26 @@ "data": -1000, "valid": true }, + { + "description": "Valid - arbitrary precision beyond int64", + "data": -12345678901234567890, + "valid": true + }, + { + "description": "Valid - arbitrary precision large negative", + "data": -99999999999999999999, + "valid": true + }, + { + "description": "Valid - arbitrary precision 25 digits negative", + "data": -1234567890123456789012345, + "valid": true + }, + { + "description": "Valid - arbitrary precision 30 digits negative", + "data": -123456789012345678901234567890, + "valid": true + }, { "description": "Invalid - positive one", "data": 1, diff --git a/test/w3c/xmlschema/2001/positive-integer.test.json b/test/w3c/xmlschema/2001/positive-integer.test.json index b0383169..f9a99bcf 100644 --- a/test/w3c/xmlschema/2001/positive-integer.test.json +++ b/test/w3c/xmlschema/2001/positive-integer.test.json @@ -27,6 +27,26 @@ "data": 1000, "valid": true }, + { + "description": "Valid - arbitrary precision beyond uint64", + "data": 18446744073709551616, + "valid": true + }, + { + "description": "Valid - arbitrary precision large positive", + "data": 99999999999999999999, + "valid": true + }, + { + "description": "Valid - arbitrary precision 25 digits", + "data": 1234567890123456789012345, + "valid": true + }, + { + "description": "Valid - arbitrary precision 30 digits", + "data": 123456789012345678901234567890, + "valid": true + }, { "description": "Invalid - zero", "data": 0, diff --git a/test/w3c/xmlschema/2001/unsigned-long.test.json b/test/w3c/xmlschema/2001/unsigned-long.test.json index b3cfb707..8b6ea70c 100644 --- a/test/w3c/xmlschema/2001/unsigned-long.test.json +++ b/test/w3c/xmlschema/2001/unsigned-long.test.json @@ -32,6 +32,36 @@ "data": 123456789012345, "valid": true }, + { + "description": "Valid - uint64 maximum", + "data": 18446744073709551615, + "valid": true + }, + { + "description": "Valid - just above int64 max", + "data": 9223372036854775808, + "valid": true + }, + { + "description": "Valid - near uint64 maximum", + "data": 18446744073709551614, + "valid": true + }, + { + "description": "Valid - large mid-range value", + "data": 10000000000000000000, + "valid": true + }, + { + "description": "Invalid - above uint64 maximum", + "data": 18446744073709551616, + "valid": false + }, + { + "description": "Invalid - large above maximum", + "data": 20000000000000000000, + "valid": false + }, { "description": "Invalid - negative one", "data": -1, diff --git a/test/xbrl/instance/2003/decimal-item-type.test.json b/test/xbrl/instance/2003/decimal-item-type.test.json index 35b42a1c..4ee52f46 100644 --- a/test/xbrl/instance/2003/decimal-item-type.test.json +++ b/test/xbrl/instance/2003/decimal-item-type.test.json @@ -22,6 +22,26 @@ "data": 3.14159, "valid": true }, + { + "description": "Valid - arbitrary precision 20 digit integer", + "data": 12345678901234567890, + "valid": true + }, + { + "description": "Valid - arbitrary precision 25 digits", + "data": 1234567890123456789012345, + "valid": true + }, + { + "description": "Valid - arbitrary precision with decimals", + "data": 123456789012345680.0, + "valid": true + }, + { + "description": "Valid - arbitrary precision negative", + "data": -12345678901234567890, + "valid": true + }, { "description": "Invalid - string type", "data": "123.45", diff --git a/test/xbrl/instance/2003/fraction-item-type.test.json b/test/xbrl/instance/2003/fraction-item-type.test.json index f054b531..d71d4e27 100644 --- a/test/xbrl/instance/2003/fraction-item-type.test.json +++ b/test/xbrl/instance/2003/fraction-item-type.test.json @@ -62,6 +62,36 @@ "data": [ 100, -0.001 ], "valid": true }, + { + "description": "Valid - arbitrary precision numerator 20 digits", + "data": [ 12345678901234567890, 1 ], + "valid": true + }, + { + "description": "Valid - arbitrary precision denominator 20 digits", + "data": [ 1, 12345678901234567890 ], + "valid": true + }, + { + "description": "Valid - arbitrary precision both values 25 digits", + "data": [ 1234567890123456789012345, 9876543210987654321098765 ], + "valid": true + }, + { + "description": "Valid - arbitrary precision numerator with decimals", + "data": [ 123456789012345680.0, 1 ], + "valid": true + }, + { + "description": "Valid - arbitrary precision denominator with decimals", + "data": [ 1, 123456789012345680.0 ], + "valid": true + }, + { + "description": "Valid - arbitrary precision negative numerator", + "data": [ -12345678901234567890, 1 ], + "valid": true + }, { "description": "Invalid - zero denominator", "data": [ 1, 0 ], diff --git a/test/xbrl/instance/2003/integer-item-type.test.json b/test/xbrl/instance/2003/integer-item-type.test.json index bbde49e8..178c9cd5 100644 --- a/test/xbrl/instance/2003/integer-item-type.test.json +++ b/test/xbrl/instance/2003/integer-item-type.test.json @@ -22,6 +22,31 @@ "data": 999999999999999, "valid": true }, + { + "description": "Valid - arbitrary precision beyond int64", + "data": 12345678901234567890, + "valid": true + }, + { + "description": "Valid - arbitrary precision large positive", + "data": 99999999999999999999, + "valid": true + }, + { + "description": "Valid - arbitrary precision large negative", + "data": -99999999999999999999, + "valid": true + }, + { + "description": "Valid - arbitrary precision 25 digits positive", + "data": 1234567890123456789012345, + "valid": true + }, + { + "description": "Valid - arbitrary precision 25 digits negative", + "data": -1234567890123456789012345, + "valid": true + }, { "description": "Invalid - decimal value", "data": 123.45, diff --git a/test/xbrl/instance/2003/monetary-item-type.test.json b/test/xbrl/instance/2003/monetary-item-type.test.json index a8d5935c..6e026836 100644 --- a/test/xbrl/instance/2003/monetary-item-type.test.json +++ b/test/xbrl/instance/2003/monetary-item-type.test.json @@ -50,6 +50,38 @@ }, "valid": true }, + { + "description": "Valid - arbitrary precision 20 digits in USD", + "data": { + "value": 12345678901234567890, + "currency": "USD" + }, + "valid": true + }, + { + "description": "Valid - arbitrary precision 25 digits in EUR", + "data": { + "value": 1234567890123456789012345, + "currency": "EUR" + }, + "valid": true + }, + { + "description": "Valid - arbitrary precision with decimals in GBP", + "data": { + "value": 123456789012345680.0, + "currency": "GBP" + }, + "valid": true + }, + { + "description": "Valid - arbitrary precision negative in JPY", + "data": { + "value": -12345678901234567890, + "currency": "JPY" + }, + "valid": true + }, { "description": "Invalid - string type for value instead of number", "data": { diff --git a/test/xbrl/instance/2003/negative-integer-item-type.test.json b/test/xbrl/instance/2003/negative-integer-item-type.test.json index a84ef647..166d7cd5 100644 --- a/test/xbrl/instance/2003/negative-integer-item-type.test.json +++ b/test/xbrl/instance/2003/negative-integer-item-type.test.json @@ -17,6 +17,21 @@ "data": -1, "valid": true }, + { + "description": "Valid - arbitrary precision beyond int64", + "data": -12345678901234567890, + "valid": true + }, + { + "description": "Valid - arbitrary precision 25 digits", + "data": -1234567890123456789012345, + "valid": true + }, + { + "description": "Valid - arbitrary precision 30 digits", + "data": -123456789012345678901234567890, + "valid": true + }, { "description": "Invalid - zero", "data": 0, diff --git a/test/xbrl/instance/2003/non-negative-integer-item-type.test.json b/test/xbrl/instance/2003/non-negative-integer-item-type.test.json index cd8a509b..48f3a8d3 100644 --- a/test/xbrl/instance/2003/non-negative-integer-item-type.test.json +++ b/test/xbrl/instance/2003/non-negative-integer-item-type.test.json @@ -17,6 +17,21 @@ "data": 999999999999999999, "valid": true }, + { + "description": "Valid - arbitrary precision beyond uint64", + "data": 18446744073709551616, + "valid": true + }, + { + "description": "Valid - arbitrary precision 25 digits", + "data": 1234567890123456789012345, + "valid": true + }, + { + "description": "Valid - arbitrary precision 30 digits", + "data": 123456789012345678901234567890, + "valid": true + }, { "description": "Invalid - negative integer", "data": -1, diff --git a/test/xbrl/instance/2003/non-positive-integer-item-type.test.json b/test/xbrl/instance/2003/non-positive-integer-item-type.test.json index a887c693..a51bbcd3 100644 --- a/test/xbrl/instance/2003/non-positive-integer-item-type.test.json +++ b/test/xbrl/instance/2003/non-positive-integer-item-type.test.json @@ -17,6 +17,21 @@ "data": -999999999999999999, "valid": true }, + { + "description": "Valid - arbitrary precision beyond int64", + "data": -12345678901234567890, + "valid": true + }, + { + "description": "Valid - arbitrary precision 25 digits", + "data": -1234567890123456789012345, + "valid": true + }, + { + "description": "Valid - arbitrary precision 30 digits", + "data": -123456789012345678901234567890, + "valid": true + }, { "description": "Invalid - positive integer", "data": 1, diff --git a/test/xbrl/instance/2003/positive-integer-item-type.test.json b/test/xbrl/instance/2003/positive-integer-item-type.test.json index 47e0c390..829dad09 100644 --- a/test/xbrl/instance/2003/positive-integer-item-type.test.json +++ b/test/xbrl/instance/2003/positive-integer-item-type.test.json @@ -17,6 +17,21 @@ "data": 1, "valid": true }, + { + "description": "Valid - arbitrary precision beyond uint64", + "data": 18446744073709551616, + "valid": true + }, + { + "description": "Valid - arbitrary precision 25 digits", + "data": 1234567890123456789012345, + "valid": true + }, + { + "description": "Valid - arbitrary precision 30 digits", + "data": 123456789012345678901234567890, + "valid": true + }, { "description": "Invalid - zero", "data": 0, diff --git a/test/xbrl/instance/2003/pure-item-type.test.json b/test/xbrl/instance/2003/pure-item-type.test.json index b6682400..de000fb7 100644 --- a/test/xbrl/instance/2003/pure-item-type.test.json +++ b/test/xbrl/instance/2003/pure-item-type.test.json @@ -22,6 +22,21 @@ "data": 0.123457, "valid": true }, + { + "description": "Valid - arbitrary precision 20 digit integer", + "data": 12345678901234567890, + "valid": true + }, + { + "description": "Valid - arbitrary precision with decimals", + "data": 123456789012345680.0, + "valid": true + }, + { + "description": "Valid - arbitrary precision negative", + "data": -12345678901234567890, + "valid": true + }, { "description": "Invalid - string type", "data": "0.5", diff --git a/test/xbrl/instance/2003/shares-item-type.test.json b/test/xbrl/instance/2003/shares-item-type.test.json index aed35d2a..66830dff 100644 --- a/test/xbrl/instance/2003/shares-item-type.test.json +++ b/test/xbrl/instance/2003/shares-item-type.test.json @@ -22,6 +22,21 @@ "data": 9876.12, "valid": true }, + { + "description": "Valid - arbitrary precision 20 digit shares", + "data": 12345678901234567890, + "valid": true + }, + { + "description": "Valid - arbitrary precision with decimals", + "data": 123456789012345680.0, + "valid": true + }, + { + "description": "Valid - arbitrary precision 25 digits", + "data": 1234567890123456789012345, + "valid": true + }, { "description": "Invalid - string type", "data": "1000",