[poincare] Parsing: Unit token does not accept '_' char except at first

position. This enables to parse "_km_s" as Multiplication(Unit(km),
Unit(s))
This commit is contained in:
Émilie Feral
2020-02-04 10:56:36 +01:00
committed by Léa Saviot
parent f91ca59ca3
commit 5cb26b19a5
3 changed files with 17 additions and 6 deletions

View File

@@ -304,10 +304,21 @@ QUIZ_CASE(poincare_parsing_units) {
}
}
// Non-existing units are not parsable
assert_text_not_parsable("_n");
assert_text_not_parsable("_a");
// Any identifier starting with '_' is tokenized as a unit
assert_tokenizes_as_unit("_m");
assert_tokenizes_as_unit("_A");
// Can parse implicit multiplication with units
Expression kilometer = Expression::Parse("_km", nullptr);
Expression second = Expression::Parse("_s", nullptr);
assert_parsed_expression_is("_kmπ", Multiplication::Builder(kilometer, Constant::Builder(UCodePointGreekSmallLetterPi)));
assert_parsed_expression_is("π_km", Multiplication::Builder(Constant::Builder(UCodePointGreekSmallLetterPi), kilometer));
assert_parsed_expression_is("_s_km", Multiplication::Builder(second, kilometer));
assert_parsed_expression_is("3_s", Multiplication::Builder(BasedInteger::Builder(3), second));
}
QUIZ_CASE(poincare_parsing_identifiers) {