json: fix negative min (w/ more than 1 digit)

This commit is contained in:
Olivier Chafik 2024-06-08 20:33:40 +01:00
parent 931b543607
commit 4c1c29361e
3 changed files with 41 additions and 3 deletions

View file

@ -276,9 +276,9 @@ static void _generate_min_max_int(int min_value, int max_value, std::stringstrea
if (has_min) { if (has_min) {
if (min_value < 0) { if (min_value < 0) {
out << "\"-\" "; out << "\"-\" (";
_generate_min_max_int(std::numeric_limits<int>::min(), -min_value, out, decimals_left, /* top_level= */ false); _generate_min_max_int(std::numeric_limits<int>::min(), -min_value, out, decimals_left, /* top_level= */ false);
out << " | [0] | [1-9] "; out << ") | [0] | [1-9] ";
more_digits(0, decimals_left - 1); more_digits(0, decimals_left - 1);
} else if (min_value == 0) { } else if (min_value == 0) {
if (top_level) { if (top_level) {

View file

@ -199,6 +199,30 @@ static void test_simple_grammar() {
"123", "123",
} }
); );
test_schema(
"simple min -123",
R"""({
"type": "integer",
"minimum": -123
})""",
// Passing strings
{
"-123",
"-122",
"-11",
"-1",
"0",
"1",
"123",
"1234",
"2345",
},
// Failing strings
{
"-1234",
"-124",
}
);
// Test case for a simple grammar // Test case for a simple grammar
test_grammar( test_grammar(

View file

@ -179,7 +179,21 @@ static void test_all(const std::string & lang, std::function<void(const TestCase
"minimum": -5 "minimum": -5
})""", })""",
R"""( R"""(
root ::= ("-" [0-5] | [0] | [1-9] [0-9]{0,15}) space root ::= ("-" ([0-5]) | [0] | [1-9] [0-9]{0,15}) space
space ::= " "?
)"""
});
test({
SUCCESS,
"min -123",
R"""({
"type": "integer",
"minimum": -123
})""",
R"""(
root ::= ("-" ([0-9] | ([1-8] [0-9] | [9] [0-9]) | "1" ([0-1] [0-9] | [2] [0-3])) | [0] | [1-9] [0-9]{0,15}) space
space ::= " "?
)""" )"""
}); });