Spreadsheet: Fixed for issue #2767: In some instances, needed parentheses are dropped from the expression. Fixed and updated unit tests.
This commit is contained in:
parent
089bb79674
commit
eb32b3d831
|
@ -534,6 +534,10 @@ std::string OperatorExpression::toString() const
|
|||
else if (!isCommutative())
|
||||
needsParens = true;
|
||||
}
|
||||
else if (right->priority() == priority()) {
|
||||
if (!isRightAssociative())
|
||||
needsParens = true;
|
||||
}
|
||||
|
||||
if (needsParens)
|
||||
s << "(" << right->toString() << ")";
|
||||
|
|
|
@ -348,6 +348,10 @@ class SpreadsheetCases(unittest.TestCase):
|
|||
sheet.set('A34', '=1 < 2 ? <<A>> : <<B>>')
|
||||
sheet.set('A35', '=min(A32:A33)')
|
||||
sheet.set('A36', '=(1 < 2 ? 0 : 1) * 3')
|
||||
sheet.set('A37', '=8/(2^2*2)')
|
||||
sheet.set('A38', '=(2^2*2)/8')
|
||||
sheet.set('A39', '=2^(2*2)/8')
|
||||
sheet.set('A40', '=8/2^(2*2)')
|
||||
self.doc.recompute()
|
||||
self.assertEqual(sheet.getContents("A1"), "=1 < 2 ? 3 : 4")
|
||||
self.assertEqual(sheet.getContents("A2"), "=1 + 2 < 3 + 4 ? 5 + 6 : 7 + 8")
|
||||
|
@ -383,6 +387,10 @@ class SpreadsheetCases(unittest.TestCase):
|
|||
self.assertEqual(sheet.A29, 3.0/8)
|
||||
self.assertEqual(sheet.A30, 3.0/2)
|
||||
self.assertEqual(sheet.A31, 3.0/8)
|
||||
self.assertEqual(sheet.A37, 1)
|
||||
self.assertEqual(sheet.A38, 1)
|
||||
self.assertEqual(sheet.A39, 2)
|
||||
self.assertEqual(sheet.A40, 0.5)
|
||||
self.assertEqual(sheet.getContents('A1'), '=1 < 2 ? 3 : 4')
|
||||
self.assertEqual(sheet.getContents('A2'), '=1 + 2 < 3 + 4 ? 5 + 6 : 7 + 8')
|
||||
self.assertEqual(sheet.getContents('A3'), '=1 + 2 * 1 < 3 + 4 ? 5 * 2 + 6 * 3 + 2 ^ 4 : 7 * 2 + 8 * 3 + 2 ^ 3')
|
||||
|
@ -398,7 +406,7 @@ class SpreadsheetCases(unittest.TestCase):
|
|||
self.assertEqual(sheet.getContents('A13'), '=1 + 4 / 2 + 5')
|
||||
self.assertEqual(sheet.getContents('A14'), '=(3 + 6) / (1 + 2)')
|
||||
self.assertEqual(sheet.getContents('A15'), '=1 * 2 / 3 * 4')
|
||||
self.assertEqual(sheet.getContents('A16'), '=1 * 2 / 3 * 4')
|
||||
self.assertEqual(sheet.getContents('A16'), '=1 * 2 / (3 * 4)')
|
||||
self.assertEqual(sheet.getContents('A17'), '=3 ^ 4 ^ 2')
|
||||
self.assertEqual(sheet.getContents('A18'), '=3 ^ (4 ^ 2)')
|
||||
self.assertEqual(sheet.getContents('A19'), '=3 ^ 4 ^ 2')
|
||||
|
@ -419,6 +427,10 @@ class SpreadsheetCases(unittest.TestCase):
|
|||
self.assertEqual(sheet.getContents('A34'), '=1 < 2 ? <<A>> : <<B>>')
|
||||
self.assertEqual(sheet.getContents('A35'), '=min(A32:A33)')
|
||||
self.assertEqual(sheet.getContents('A36'), '=(1 < 2 ? 0 : 1) * 3')
|
||||
self.assertEqual(sheet.getContents('A37'), '=8 / (2 ^ 2 * 2)')
|
||||
self.assertEqual(sheet.getContents('A38'), '=2 ^ 2 * 2 / 8')
|
||||
self.assertEqual(sheet.getContents('A39'), '=2 ^ (2 * 2) / 8')
|
||||
self.assertEqual(sheet.getContents('A40'), '=8 / 2 ^ (2 * 2)')
|
||||
|
||||
def testNumbers(self):
|
||||
""" Test different numbers """
|
||||
|
|
Loading…
Reference in New Issue
Block a user