diff --git a/poincare/src/multiplication.cpp b/poincare/src/multiplication.cpp index 509e2696f..9eacf74ad 100644 --- a/poincare/src/multiplication.cpp +++ b/poincare/src/multiplication.cpp @@ -264,8 +264,15 @@ Expression Multiplication::removeUnit(Expression * unit) { if (!currentUnit.isUninitialized()) { unitMult.addChildAtIndexInPlace(currentUnit, resultChildrenCount, resultChildrenCount); resultChildrenCount++; - assert(childAtIndex(i).isRationalOne()); - removeChildAtIndexInPlace(i--); + if (childAtIndex(i).isRationalOne()) { + removeChildAtIndexInPlace(i--); + } else { + /* If the child was a unit convert, it replaced itself with an undefined + * during the removeUnit. */ + assert(childAtIndex(i).isUndefined()); + *unit = Expression(); + return replaceWithUndefinedInPlace(); + } } } if (resultChildrenCount == 0) { diff --git a/poincare/test/simplification.cpp b/poincare/test/simplification.cpp index 13860225b..64175b73c 100644 --- a/poincare/test/simplification.cpp +++ b/poincare/test/simplification.cpp @@ -1317,6 +1317,17 @@ QUIZ_CASE(poincare_simplification_user_function_with_convert) { Symbol::Builder('x'))); assert_expression_reduce(e); assert_parsed_expression_simplify_to("e^(f(0))", "undef"); + + e = Store::Builder( + UnitConvert::Builder( + Rational::Builder(0), + Unit::Second()), + Function::Builder( + "f", 1, + Symbol::Builder('x'))); + assert_expression_reduce(e); + assert_parsed_expression_simplify_to("0f(0)", "undef"); + Ion::Storage::sharedStorage()->recordNamed("f.func").destroy(); }