diff --git a/gtsam/discrete/SignatureParser.cpp b/gtsam/discrete/SignatureParser.cpp index ab259d0ea..2081e1ee1 100644 --- a/gtsam/discrete/SignatureParser.cpp +++ b/gtsam/discrete/SignatureParser.cpp @@ -33,6 +33,8 @@ std::optional static ParseConditional(const std::string& token) { // can throw exception row.push_back(std::stod(s)); } + // if we ended with a '/' then return false + if (token.back() == '/') return false; } catch (...) { return std::nullopt; } diff --git a/gtsam/discrete/tests/testSignatureParser.cpp b/gtsam/discrete/tests/testSignatureParser.cpp index 5ae71442e..933d55d8b 100644 --- a/gtsam/discrete/tests/testSignatureParser.cpp +++ b/gtsam/discrete/tests/testSignatureParser.cpp @@ -85,11 +85,16 @@ TEST(SimpleParser, Gibberish) { // If Gibberish is in the middle, it should not parse. TEST(SimpleParser, GibberishInMiddle) { - SignatureParser::Table expectedTable{{1, 1}, {2, 3}}; const auto table = SignatureParser::Parse("1/1 2/3 sdf 1/4"); EXPECT(!table); } +// A test with slash in the end +TEST(SimpleParser, SlashInEnd) { + const auto table = SignatureParser::parse("1/1 2/"); + EXPECT(!table); +} + /* ************************************************************************* */ int main() {