Files
tinyobjloader/float_parser_tests.cc
2015-02-23 23:34:16 +01:00

55 lines
1.6 KiB
C++

#include <cstdio>
#include <cstddef>
// Tries to parse a floating point number located at s.
//
// Parses the following EBNF grammar:
// sign = "+" | "-" ;
// END = ? anything not in digit ?
// digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
// integer = [sign] , digit , {digit} ;
// decimal = integer , ["." , {digit}] ;
// float = ( decimal , END ) | ( decimal , ("E" | "e") , decimal , END ) ;
//
// Valid strings are for example:
// -0 +3.1417e+2 -0.E-3 1.0324 -1.41 11e2
//
// If the parsing is a success, result is set to the parsed value and true
// is returned.
//
// The function is greedy, it will parse until it encounters a null-byte or
// a non-conforming character is encountered.
//
// The following situations triggers a failure:
// - parse failure.
// - underflow/overflow.
//
bool tryParseFloat(const char *s, double *result)
{
return false;
}
void testParsing(const char *input, bool expectedRes, double expectedValue)
{
double val = 0.0;
bool res = tryParseFloat(input, &val);
if (res != expectedRes || val != expectedValue)
{
printf("% 20s failed, returned %d and value % 10.4f.\n", input, res, val);
}
}
int main(int argc, char const *argv[])
{
testParsing("0", true, 0.0);
testParsing("-0", true, 0.0);
testParsing("+0", true, 0.0);
testParsing("1", true, 1.0);
testParsing("+1", true, 1.0);
testParsing("-1", true, -1.0);
testParsing("-1.08", true, -1.08);
testParsing("100.0823blabla", true, 100.0823);
testParsing("34.E-2\04", true, 34.0e-2);
testParsing("+34.23E2\02", true, 34.23E2);
return 0;
}