From e07dfb2a16e38c4101fd4d6c15440bab8636ecbd Mon Sep 17 00:00:00 2001 From: Giacomo Bellini Date: Fri, 7 Apr 2023 18:10:09 +0200 Subject: [PATCH 1/2] Use decimal.TryParse to check if the given text is a number --- .../org.matheval/Functions/Impl/isnumberFunction.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Math expression eval/org.matheval/Functions/Impl/isnumberFunction.cs b/Math expression eval/org.matheval/Functions/Impl/isnumberFunction.cs index 3d50179..5626fb1 100644 --- a/Math expression eval/org.matheval/Functions/Impl/isnumberFunction.cs +++ b/Math expression eval/org.matheval/Functions/Impl/isnumberFunction.cs @@ -24,7 +24,6 @@ THE SOFTWARE. using org.matheval.Common; using System; using System.Collections.Generic; -using System.Text.RegularExpressions; namespace org.matheval.Functions { @@ -52,8 +51,7 @@ public List GetInfo() /// Value public Object Execute(Dictionary args, ExpressionContext dc) { - Regex rg = new Regex("^-?\\d*(\\.\\d+)+$"); - return rg.IsMatch(Afe_Common.ToString(args[Afe_Common.Const_Key_One], dc.WorkingCulture)); + return decimal.TryParse(Afe_Common.ToString(args[Afe_Common.Const_Key_One], dc.WorkingCulture), out _); } } } From 32e1d67dda449b51007edef688c9507c6d44f2e9 Mon Sep 17 00:00:00 2001 From: Giacomo Bellini Date: Fri, 7 Apr 2023 18:10:37 +0200 Subject: [PATCH 2/2] Added a bunch of tests for function isnumber and value --- Math expression eval/UnitTest/TestAll.cs | 53 ++++++++++++++++++++---- 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/Math expression eval/UnitTest/TestAll.cs b/Math expression eval/UnitTest/TestAll.cs index 48fef10..2d08a25 100644 --- a/Math expression eval/UnitTest/TestAll.cs +++ b/Math expression eval/UnitTest/TestAll.cs @@ -410,10 +410,6 @@ public void Math_Bitwise_Test() Expression expr6 = new Expression("BITRSHIFT(13,2)"); Assert.AreEqual(3, expr6.Eval()); - - Expression expr7 = new Expression("VALUE(\"123\")"); - Assert.AreEqual(123, expr7.Eval()); - } [TestMethod] @@ -920,6 +916,27 @@ public void Text_Function_IsNumber_Test() Expression expr1 = new Expression("ISNUMBER(\"0.23\")"); Assert.AreEqual(true, expr1.Eval()); + expr1.SetFomular("ISNUMBER(\"23\")"); + Assert.AreEqual(true, expr1.Eval()); + + expr1.SetFomular("ISNUMBER(\".23\")"); + Assert.AreEqual(true, expr1.Eval()); + + expr1.SetFomular("ISNUMBER(\"23.\")"); + Assert.AreEqual(true, expr1.Eval()); + + expr1.SetFomular("ISNUMBER(\"-23\")"); + Assert.AreEqual(true, expr1.Eval()); + + expr1.SetFomular("ISNUMBER(\"-.23\")"); + Assert.AreEqual(true, expr1.Eval()); + + expr1.SetFomular("ISNUMBER(\"-23.\")"); + Assert.AreEqual(true, expr1.Eval()); + + expr1.SetFomular("ISNUMBER(\".23.\")"); + Assert.AreEqual(false, expr1.Eval()); + expr1.SetFomular("ISNUMBER(\"0.2a3\")"); Assert.AreEqual(false, expr1.Eval()); @@ -1150,6 +1167,28 @@ public void Text_Function_Isblank_Test() Assert.AreEqual(false, expr1.Eval()); } + [TestMethod] + public void Text_Function_Value_Test() + { + Expression expr1 = new Expression("VALUE(\"123\")"); + Assert.AreEqual(123, expr1.Eval()); + + expr1.SetFomular("VALUE(\"123.123\")"); + Assert.AreEqual(123.123m, expr1.Eval()); + + expr1.SetFomular("VALUE(\".123\")"); + Assert.AreEqual(0.123m, expr1.Eval()); + + expr1.SetFomular("VALUE(\"-.123\")"); + Assert.AreEqual(-0.123m, expr1.Eval()); + + expr1.SetFomular("VALUE(\"123.\")"); + Assert.AreEqual(123, expr1.Eval()); + + expr1.SetFomular("VALUE(\".123.\")"); + Assert.ThrowsException(() => expr1.Eval()); + } + [TestMethod] public void Literals_Operation_Test() { @@ -1169,19 +1208,19 @@ public void Or_Operator_Test() .Bind("a", 0) .Bind("b", 0); Assert.AreEqual(false, expr.Eval()); - + // false, true = true var expr2 = new Expression("OR (a>0, b>0)") .Bind("a", 0) .Bind("b", 1); Assert.AreEqual(true, expr2.Eval()); - + // true, false = true var expr3 = new Expression("OR (a>0, b>0)") .Bind("a", 1) .Bind("b", 0); Assert.AreEqual(true, expr3.Eval()); - + // true, true = true var expr4 = new Expression("OR (a>0, b>0)") .Bind("a", 1)