Fix is_valid_float, Variant parser, Expression parser, script highlighter, and TextServer not handing capital E in scientific notation.

This commit is contained in:
Pāvels Nadtočajevs
2025-02-03 19:35:10 +02:00
parent a63a8b430b
commit b50d9742c2
10 changed files with 52 additions and 35 deletions

View File

@@ -181,6 +181,9 @@ TEST_CASE("[Expression] Scientific notation") {
CHECK_MESSAGE(
expression.parse("2.e5") == OK,
"The expression should parse successfully.");
CHECK_MESSAGE(
expression.parse("2.E5") == OK,
"The expression should parse successfully.");
CHECK_MESSAGE(
double(expression.execute()) == doctest::Approx(200'000),
"The expression should return the expected result.");

View File

@@ -1888,15 +1888,15 @@ TEST_CASE("[String] Join") {
}
TEST_CASE("[String] Is_*") {
static const char *data[13] = { "-30", "100", "10.1", "10,1", "1e2", "1e-2", "1e2e3", "0xAB", "AB", "Test1", "1Test", "Test*1", "文字" };
static bool isnum[13] = { true, true, true, false, false, false, false, false, false, false, false, false, false };
static bool isint[13] = { true, true, false, false, false, false, false, false, false, false, false, false, false };
static bool ishex[13] = { true, true, false, false, true, false, true, false, true, false, false, false, false };
static bool ishex_p[13] = { false, false, false, false, false, false, false, true, false, false, false, false, false };
static bool isflt[13] = { true, true, true, false, true, true, false, false, false, false, false, false, false };
static bool isaid[13] = { false, false, false, false, false, false, false, false, true, true, false, false, false };
static bool isuid[13] = { false, false, false, false, false, false, false, false, true, true, false, false, true };
for (int i = 0; i < 12; i++) {
static const char *data[] = { "-30", "100", "10.1", "10,1", "1e2", "1e-2", "1e2e3", "0xAB", "AB", "Test1", "1Test", "Test*1", "文字", "1E2", "1E-2" };
static bool isnum[] = { true, true, true, false, false, false, false, false, false, false, false, false, false, false, false };
static bool isint[] = { true, true, false, false, false, false, false, false, false, false, false, false, false, false, false };
static bool ishex[] = { true, true, false, false, true, false, true, false, true, false, false, false, false, true, false };
static bool ishex_p[] = { false, false, false, false, false, false, false, true, false, false, false, false, false, false, false };
static bool isflt[] = { true, true, true, false, true, true, false, false, false, false, false, false, false, true, true };
static bool isaid[] = { false, false, false, false, false, false, false, false, true, true, false, false, false, false, false };
static bool isuid[] = { false, false, false, false, false, false, false, false, true, true, false, false, true, false, false };
for (unsigned int i = 0; i < sizeof(data) / sizeof(data[0]); i++) {
String s = String::utf8(data[i]);
CHECK(s.is_numeric() == isnum[i]);
CHECK(s.is_valid_int() == isint[i]);