diff --git a/src/App/Expression.cpp b/src/App/Expression.cpp index 6f6fb6cbab..471c074287 100644 --- a/src/App/Expression.cpp +++ b/src/App/Expression.cpp @@ -897,16 +897,13 @@ Expression * FunctionExpression::evalAggregate() const throw Exception("Invalid property type for aggregate"); } while (range.next()); } - else if (args[i]->isDerivedFrom(App::VariableExpression::getClassTypeId())) { + else { std::unique_ptr e(args[i]->eval()); NumberExpression * n(freecad_dynamic_cast(e.get())); if (n) c->collect(n->getQuantity()); } - else if (args[i]->isDerivedFrom(App::NumberExpression::getClassTypeId())) { - c->collect(static_cast(args[i])->getQuantity()); - } } return new NumberExpression(owner, c->getQuantity()); diff --git a/src/Mod/Spreadsheet/TestSpreadsheet.py b/src/Mod/Spreadsheet/TestSpreadsheet.py index 56a0acf92e..19ed6be8d4 100644 --- a/src/Mod/Spreadsheet/TestSpreadsheet.py +++ b/src/Mod/Spreadsheet/TestSpreadsheet.py @@ -851,6 +851,16 @@ class SpreadsheetCases(unittest.TestCase): self.assertEqual(sheet.getContents('B1'), '=A1 == 1 ? 11 : (A1 == 2 ? 12 : 13)') self.assertEqual(sheet.getContents('C1'), '=A1 == 1 ? (A1 == 2 ? 12 : 13) : 11') + def testIssue3432(self): + """ Regression test for issue 3432; numbers with units are ignored from aggregates""" + sheet = self.doc.addObject('Spreadsheet::Sheet','Spreadsheet') + sheet.set('A1', '1mm') + sheet.set('B1', '2mm') + sheet.set('C1', '=max(A1:B1;3mm)') + self.doc.recompute() + self.assertEqual(sheet.get('C1'), Units.Quantity('3 mm')) + + def tearDown(self): #closing doc FreeCAD.closeDocument(self.doc.Name)