[gnome-calculator/60-split-out-a-backend-library] gcalc: term evaluates division of constants



commit 1f3cfc3d5d031a9c35d6f4be6c09d91b3bf0de79
Author: Daniel Espinosa Ortiz <esodan gmail com>
Date:   Thu Jan 3 18:13:00 2019 -0600

    gcalc: term evaluates division of constants

 gcalc/gcalc-term.vala          |  3 +++
 tests/gcalc-solving-basic.vala | 25 +++++++++++++++++++++++++
 2 files changed, 28 insertions(+)
---
diff --git a/gcalc/gcalc-term.vala b/gcalc/gcalc-term.vala
index b9f4eeee..985af4ef 100644
--- a/gcalc/gcalc-term.vala
+++ b/gcalc/gcalc-term.vala
@@ -50,6 +50,9 @@ public interface GCalc.Term : Object, Expression {
             if (current_operator is Multiply) {
               current = (current as Constant).multiply (e as Constant);
             }
+            if (current_operator is Division) {
+              current = (current as Constant).divide (e as Constant);
+            }
           }
         }
       }
diff --git a/tests/gcalc-solving-basic.vala b/tests/gcalc-solving-basic.vala
index 90b0acfe..c67ad6d9 100644
--- a/tests/gcalc-solving-basic.vala
+++ b/tests/gcalc-solving-basic.vala
@@ -152,6 +152,31 @@ class Tests {
         warning ("Error: %s", e.message);
       }
     });
+    Test.add_func ("/gcalc/solve/term/constant/division",
+    ()=>{
+      try {
+        var parser = new Parser ();
+        var eqman = new GMathEquationManager ();
+        parser.parse ("15/3-", eqman);
+        assert (eqman.equations.get_n_items () == 1);
+        var eq = eqman.equations.get_item (0) as MathEquation;
+        assert (eq != null);
+        var e = eq.expressions.get_item (0) as Polynomial;
+        assert (e != null);
+        var t = e.expressions.get_item (0) as Term;
+        var res = t.solve ();
+        assert (res != null);
+        assert (res.expression != null);
+        message ("Result type: %s", res.expression.get_type ().name ());
+        assert (res.is_valid);
+        var rc = res.expression as Constant;
+        assert (rc != null);
+        message ("Constant Result: %s", rc.to_string ());
+        assert (rc.real () == 5.0);
+      } catch (GLib.Error e) {
+        warning ("Error: %s", e.message);
+      }
+    });
     return Test.run ();
   }
 }


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