if (*cursor_ == '.') {
cursor_++;
while (isdigit(static_cast<unsigned char>(*cursor_))) cursor_++;
+ // See if this float has a scientific notation suffix. Both JSON
+ // and C++ (through strtod() we use) have the same format:
+ if (*cursor_ == 'e' || *cursor_ == 'E') {
+ cursor_++;
+ if (*cursor_ == '+' || *cursor_ == '-') cursor_++;
+ while (isdigit(static_cast<unsigned char>(*cursor_))) cursor_++;
+ }
token_ = kTokenFloatConstant;
} else {
token_ = kTokenIntegerConstant;
TestError("union Z { X } struct X { Y:int; }", "only tables");
}
+// Additional parser testing not covered elsewhere.
+void TokenTest() {
+ flatbuffers::Parser parser;
+
+ // Simple schema.
+ TEST_EQ(parser.Parse("table X { Y:float; } root_type X;"), true);
+
+ // Test scientific notation numbers.
+ TEST_EQ(parser.Parse("{ Y:0.0314159e+2 }"), true);
+ auto root = flatbuffers::GetRoot<float>(parser.builder_.GetBufferPointer());
+ // root will point to the table, which is a 32bit vtable offset followed
+ // by a float:
+ TEST_EQ(fabs(root[1] - 3.14159) < 0.001, true);
+}
+
int main(int /*argc*/, const char * /*argv*/[]) {
// Run our various test suites:
FuzzTest2();
ErrorTest();
+ TokenTest();
if (!testing_fails) {
TEST_OUTPUT_LINE("ALL TESTS PASSED");