From fd62eaa814609835c87df5f24633760552ce64ea Mon Sep 17 00:00:00 2001 From: pommicket Date: Tue, 9 Sep 2025 11:42:42 -0400 Subject: Add interpretation tests for (u)int, disallow -2^63 as an int --- site/spec.html | 16 ++++++++++---- tests/interpretation/README.md | 11 ++++++++++ tests/interpretation/int.pom | 47 ++++++++++++++++++++++++++++++++++++++++++ tests/interpretation/uint.pom | 38 ++++++++++++++++++++++++++++++++++ 4 files changed, 108 insertions(+), 4 deletions(-) create mode 100644 tests/interpretation/int.pom create mode 100644 tests/interpretation/uint.pom diff --git a/site/spec.html b/site/spec.html index 7dcc957..f3178fd 100644 --- a/site/spec.html +++ b/site/spec.html @@ -471,18 +471,26 @@ and for my.nephews.car.id is String (no schema key matches, so the default of St
  • None — accepts an unset value (special—see below)
  • Empty — accepts an empty value
  • Bool — accepts true, on, yes, - false, off, no (case-sensitive).
  • -
  • UInt — accepts any unsigned integer that fits in 63 [sic] bits, - written in decimal or 0x or 0X-prefixed hexadecimal. + false, off, no (case- and white space- sensitive).
  • +
  • UInt — accepts any unsigned integer strictly less than 263, + written in decimal or 0x or 0X-prefixed hexadecimal. A leading + is permitted, but -0 is not. + Leading zeroes are not permitted for decimal integers. + White space around the integer is not permitted. Only 63 bits are allowed to support languages (Java) with no 64-bit unsigned integers.
  • -
  • Int — accepts any (two’s complement) signed integer that fits in 64 bits, +
  • Int — accepts any (two’s complement) signed integer whose absolute value + is strictly less than 263 + (NB: INT64_MIN/−263 is not allowed), written in decimal or 0x or 0X-prefixed hexadecimal. + Leading zeroes are not permitted for decimal integers. + White space around the integer is not permitted. A leading + (or, of course, -) is permitted.
  • Float — A floating-point number, written in ordinary decimal (e.g. -1.234, 7., 265) or in scientific notation (e.g. 3e5, 3.E-5, -3.7e+5). + Excessive leading zeroes are not permitted (0.0 is allowed, but not 00.0). + White space around the number is not permitted. A leading + (or, of course, -) is permitted.
  • 'value' — diff --git a/tests/interpretation/README.md b/tests/interpretation/README.md index ad18e09..b263e05 100644 --- a/tests/interpretation/README.md +++ b/tests/interpretation/README.md @@ -1,3 +1,14 @@ # Interpretation tests These tests check that booleans, numbers, floats, and lists are interpreted correctly. + +`int.pom`, `uint.pom`, `float.pom`, `boolean.pom` — These files contain two sections, +`[good]` and `[bad]`. The keys in `good` are in pairs `k.a` and `k.b`. Their values must +parse to the same int/uint/float/boolean as each other. +The values in `bad` are all invalid int/uint/float/booleans, and parsing them should +return an error. + +`list.pom` — The keys in this file are in pairs `k.list` and `k.sep`. +`k.list` is a POM list, and `k.sep` is the concatenation of `x;` for each entry +`x` in the list (none of the entries have `;` in them, so this representation is +unambiguous). diff --git a/tests/interpretation/int.pom b/tests/interpretation/int.pom new file mode 100644 index 0000000..7158dc2 --- /dev/null +++ b/tests/interpretation/int.pom @@ -0,0 +1,47 @@ +[good] + +three.a = 3 +three.b = 0x3 + +quote_three.a = "3" +quote_three.b = `3` + +plus_three.a = +3 +plus_three.b = +0x3 + +negative_three.a = -3 +negative_three.b = -0x3 + +zero.a = 0 +zero.b = 0x0000000000000000000000000000 + +sign_zero.a = +0 +sign_zero.b = -0 + +hex.a = 0x0123fF +hex.b = 74751 + +negative_hex.a = -0Xfade +negative_hex.b = -64222 + +largest.a = 9223372036854775807 +largest.b = 0x7fffffffffffffff + +smallest.a = -9223372036854775807 +smallest.b = -0x7fffffffffffffff + +[bad] +space_three = " 3" +leading_zero = 03 +negative_leading_zero = -03 +trailing_dec = 35a +trailing_hex = 0x35g +decimal = 3.0 +multi_sign = -+3 +multi_sign2 = +-3 +multi_sign3 = ++3 +multi_sign4 = --3 +too_large = 9223372036854775808 +too_large_hex = 0x8000000000000000 +too_small = -9223372036854775808 +too_small_hex = -0x8000000000000000 diff --git a/tests/interpretation/uint.pom b/tests/interpretation/uint.pom new file mode 100644 index 0000000..be15211 --- /dev/null +++ b/tests/interpretation/uint.pom @@ -0,0 +1,38 @@ +[good] + +three.a = 3 +three.b = 0x3 + +quote_three.a = "3" +quote_three.b = `3` + +plus_three.a = +3 +plus_three.b = +0x3 + +zero.a = 0 +zero.b = 0x0000000000000000000000000000 + +sign_zero.a = +0 +sign_zero.b = 0 + +hex.a = 0x0123fF +hex.b = 74751 + +hex2.a = 0Xfade +hex2.b = 64222 + +largest.a = 9223372036854775807 +largest.b = 0x7fffffffffffffff + +[bad] +space_three = " 3" +leading_zero = 03 +negative = -3 +negative_hex = -0x3 +trailing_dec = 35a +trailing_hex = 0x35g +decimal = 3.0 +multi_sign = ++3 +too_large = 9223372036854775808 +too_large_hex = 0x8000000000000000 +negative_zero = -0 -- cgit v1.2.3