[gnome-calculator/gnome-42] Fixed incorrect percentage precedence handling (fixes #236, fixes #275)



commit 58c052a3d9bf93543da987ce8714b2f389a9efdd
Author: Robert Roth <robert roth off gmail com>
Date:   Fri May 13 15:10:06 2022 +0300

    Fixed incorrect percentage precedence handling (fixes #236, fixes #275)

 lib/equation-parser.vala | 6 ++++--
 tests/test-equation.vala | 5 +++++
 2 files changed, 9 insertions(+), 2 deletions(-)
---
diff --git a/lib/equation-parser.vala b/lib/equation-parser.vala
index c98f31fa..6445d79f 100644
--- a/lib/equation-parser.vala
+++ b/lib/equation-parser.vala
@@ -1177,6 +1177,8 @@ public class Parser
             return Precedence.CONVERT;
         if (type == LexerTokenType.SHIFT_LEFT || type == LexerTokenType.SHIFT_RIGHT)
             return Precedence.SHIFT;
+        if (type == LexerTokenType.L_R_BRACKET || type == LexerTokenType.R_R_BRACKET)
+            return Precedence.DEPTH;
         return Precedence.TOP;
     }
 
@@ -1889,7 +1891,7 @@ public class Parser
                             return true;
                     }
 
-                    node.precedence = Precedence.PERCENTAGE;
+                    node.precedence = make_precedence_p (Precedence.PERCENTAGE);
                     node.do_percentage = true;
                     return true;
                 }
@@ -1932,7 +1934,7 @@ public class Parser
                             return true;
                     }
 
-                    node.precedence = Precedence.PERCENTAGE;
+                    node.precedence = make_precedence_p (Precedence.PERCENTAGE);
                     node.do_percentage = true;
                     return true;
                 }
diff --git a/tests/test-equation.vala b/tests/test-equation.vala
index cee344dc..336708c1 100644
--- a/tests/test-equation.vala
+++ b/tests/test-equation.vala
@@ -422,6 +422,11 @@ private void test_equations ()
     test ("100−1%", "99", 0);
     test ("100×1%", "1", 0);
     test ("100÷1%", "10000", 0);
+    test ("1+100%", "2", 0);
+    test ("(1+100%)", "2", 0);
+    test ("(1+100%)^2", "4", 0);
+    test ("(1+100%)^2", "4", 0);
+    test ("(((100−20)−50%)+20)", "60", 0);
 
     /* Factorial */
     test ("0!", "1", 0);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]