Skip to content

Commit f4e9161

Browse files
authored
Merge pull request #111 from codingseb/dev
Correction for #110 and better selection of methods
2 parents bb7bb0a + 8bb9b08 commit f4e9161

File tree

4 files changed

+93
-29
lines changed

4 files changed

+93
-29
lines changed

CodingSeb.ExpressionEvaluator.Tests/ExpressionEvaluatorTests.cs

+67-11
Original file line numberDiff line numberDiff line change
@@ -2597,25 +2597,29 @@ ExpressionEvaluator evaluatorForMethodArgs()
25972597
, "Persons.Sum(x=>x.Number)"
25982598
, null)
25992599
.Returns(23.22m)
2600-
.SetCategory("Bug resolution");
2600+
.SetCategory("Bug resolution")
2601+
.SetCategory("#65");
26012602

26022603
yield return new TestCaseData(new ExpressionEvaluator() { Context = new { Persons } }
26032604
, "Persons.Average(x=>x.Number)"
26042605
, null)
26052606
.Returns(11.61m)
2606-
.SetCategory("Bug resolution");
2607+
.SetCategory("Bug resolution")
2608+
.SetCategory("#65");
26072609

26082610
yield return new TestCaseData(new ExpressionEvaluator() { Context = new { Persons } }
26092611
, "Persons.Max(x=>x.Number)"
26102612
, null)
26112613
.Returns(12.11m)
2612-
.SetCategory("Bug resolution");
2614+
.SetCategory("Bug resolution")
2615+
.SetCategory("#65");
26132616

26142617
yield return new TestCaseData(new ExpressionEvaluator() { Context = new { Persons } }
26152618
, "Persons.Min(x=>x.Number)"
26162619
, null)
26172620
.Returns(11.11m)
2618-
.SetCategory("Bug resolution");
2621+
.SetCategory("Bug resolution")
2622+
.SetCategory("#65");
26192623

26202624
#endregion
26212625

@@ -2626,20 +2630,23 @@ ExpressionEvaluator evaluatorForMethodArgs()
26262630
, null)
26272631
.Returns(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData))
26282632
.SetCategory("Bug resolution")
2633+
.SetCategory("#95")
26292634
.SetCategory("NestedType");
26302635

26312636
yield return new TestCaseData(new ExpressionEvaluator()
26322637
, "Environment.GetFolderPath((Environment.SpecialFolder)5)"
26332638
, null)
26342639
.Returns(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))
26352640
.SetCategory("Bug resolution")
2641+
.SetCategory("#95")
26362642
.SetCategory("NestedType");
26372643

26382644
yield return new TestCaseData(new ExpressionEvaluator()
26392645
, "new CodingSeb.ExpressionEvaluator.Tests.OtherNamespace.ClassInOtherNameSpace1.ANestedClass().Value1"
26402646
, null)
26412647
.Returns(45)
26422648
.SetCategory("Bug resolution")
2649+
.SetCategory("#95")
26432650
.SetCategory("NestedType");
26442651

26452652
#endregion
@@ -2651,97 +2658,103 @@ ExpressionEvaluator evaluatorForMethodArgs()
26512658
, null)
26522659
.Returns(-1)
26532660
.SetCategory("Bug resolution")
2661+
.SetCategory("#95")
26542662
.SetCategory("MethodNameAsDelegates");
26552663

26562664
yield return new TestCaseData(new ExpressionEvaluator()
26572665
, "Array.ConvertAll<string,int>(\"1,2,3,4,5,6,-1\".Split(','), Int32.Parse).Min()"
26582666
, null)
26592667
.Returns(-1)
26602668
.SetCategory("Bug resolution")
2669+
.SetCategory("#95")
26612670
.SetCategory("MethodNameAsDelegates");
26622671

26632672
yield return new TestCaseData(new ExpressionEvaluator()
26642673
, "Array.ConvertAll(\"1,2,3,4,5,6,-1\".Split(','), s => Int32.Parse(s)).Min()"
26652674
, null)
26662675
.Returns(-1)
26672676
.SetCategory("Bug resolution")
2677+
.SetCategory("#95")
26682678
.SetCategory("MethodNameAsDelegates");
26692679

26702680
yield return new TestCaseData(new ExpressionEvaluator()
26712681
, "Array.ConvertAll<string, int>(\"1,2,3,4,5,6,-1\".Split(','), s => Int32.Parse(s)).Min()"
26722682
, null)
26732683
.Returns(-1)
26742684
.SetCategory("Bug resolution")
2685+
.SetCategory("#95")
26752686
.SetCategory("MethodNameAsDelegates");
26762687

26772688
yield return new TestCaseData(new ExpressionEvaluator()
26782689
, "Array.ConvertAll(\"test for Upper\".ToCharArray(), Char.IsUpper)"
26792690
, null)
26802691
.Returns(Array.ConvertAll("test for Upper".ToCharArray(), Char.IsUpper))
26812692
.SetCategory("Bug resolution")
2693+
.SetCategory("#95")
26822694
.SetCategory("MethodNameAsDelegates");
26832695

2684-
//yield return new TestCaseData(new ExpressionEvaluator()
2685-
// , "Array.ConvertAll(\"test for Upper\".ToCharArray(),u => u => Char.IsUpper(u) ? Char.ToLower(u) : Char.ToUpper(u))"
2686-
// , null)
2687-
// .Returns(Array.ConvertAll("test for Upper".ToCharArray(), u => Char.IsUpper(u) ? Char.ToLower(u) : Char.ToUpper(u)))
2688-
// .SetCategory("Bug resolution")
2689-
// .SetCategory("MethodNameAsDelegates");
2690-
26912696
yield return new TestCaseData(new ExpressionEvaluator()
26922697
, "(() => { var m = int.Parse; return m(\"5\"); })()"
26932698
, null)
26942699
.Returns(5)
26952700
.SetCategory("Bug resolution")
2701+
.SetCategory("#95")
26962702
.SetCategory("MethodNameAsDelegates");
26972703

26982704
yield return new TestCaseData(new ExpressionEvaluator()
26992705
, "\"test for Upper\".ToCharArray().First(Char.IsUpper)"
27002706
, null)
27012707
.Returns('U')
27022708
.SetCategory("Bug resolution")
2709+
.SetCategory("#95")
27032710
.SetCategory("MethodNameAsDelegates");
27042711

27052712
yield return new TestCaseData(new ExpressionEvaluator()
27062713
, "\"test for Upper\".ToCharArray().First(Char.IsUpper)"
27072714
, null)
27082715
.Returns('U')
27092716
.SetCategory("Bug resolution")
2717+
.SetCategory("#95")
27102718
.SetCategory("MethodNameAsDelegates");
27112719

27122720
yield return new TestCaseData(new ExpressionEvaluator()
27132721
, "\"test for Upper\".ToCharArray().First(c => Char.IsUpper(c))"
27142722
, null)
27152723
.Returns('U')
27162724
.SetCategory("Bug resolution")
2725+
.SetCategory("#95")
27172726
.SetCategory("MethodNameAsDelegates");
27182727

27192728
yield return new TestCaseData(new ExpressionEvaluator()
27202729
, "Array.Find(\"test for Upper\".ToCharArray(), Char.IsUpper)"
27212730
, null)
27222731
.Returns('U')
27232732
.SetCategory("Bug resolution")
2733+
.SetCategory("#95")
27242734
.SetCategory("MethodNameAsDelegates");
27252735

27262736
yield return new TestCaseData(new ExpressionEvaluator()
27272737
, "Array.Find(\"test for Upper\".ToCharArray(), c => Char.IsUpper(c))"
27282738
, null)
27292739
.Returns('U')
27302740
.SetCategory("Bug resolution")
2741+
.SetCategory("#95")
27312742
.SetCategory("MethodNameAsDelegates");
27322743

27332744
yield return new TestCaseData(new ExpressionEvaluator()
27342745
, "\"test for Upper\".ToCharArray().Any(Char.IsUpper)"
27352746
, null)
27362747
.Returns(true)
27372748
.SetCategory("Bug resolution")
2749+
.SetCategory("#95")
27382750
.SetCategory("MethodNameAsDelegates");
27392751

27402752
yield return new TestCaseData(new ExpressionEvaluator()
27412753
, "\"test for Upper\".ToCharArray().ToList().First(Char.IsUpper)"
27422754
, null)
27432755
.Returns('U')
27442756
.SetCategory("Bug resolution")
2757+
.SetCategory("#95")
27452758
.SetCategory("MethodNameAsDelegates");
27462759

27472760
#endregion
@@ -2752,48 +2765,56 @@ ExpressionEvaluator evaluatorForMethodArgs()
27522765
, "typeof(double[])"
27532766
, null)
27542767
.Returns(typeof(double[]))
2768+
.SetCategory("#100")
27552769
.SetCategory("Bug resolution");
27562770

27572771
yield return new TestCaseData(new ExpressionEvaluator()
27582772
, "typeof(double[ ])"
27592773
, null)
27602774
.Returns(typeof(double[]))
2775+
.SetCategory("#100")
27612776
.SetCategory("Bug resolution");
27622777

27632778
yield return new TestCaseData(new ExpressionEvaluator()
27642779
, "typeof(double[][])"
27652780
, null)
27662781
.Returns(typeof(double[][]))
2782+
.SetCategory("#100")
27672783
.SetCategory("Bug resolution");
27682784

27692785
yield return new TestCaseData(new ExpressionEvaluator()
27702786
, "typeof(double[,])"
27712787
, null)
27722788
.Returns(typeof(double[,]))
2789+
.SetCategory("#100")
27732790
.SetCategory("Bug resolution");
27742791

27752792
yield return new TestCaseData(new ExpressionEvaluator()
27762793
, "typeof(int[])"
27772794
, null)
27782795
.Returns(typeof(int[]))
2796+
.SetCategory("#100")
27792797
.SetCategory("Bug resolution");
27802798

27812799
yield return new TestCaseData(new ExpressionEvaluator()
27822800
, "typeof(Int32[])"
27832801
, null)
27842802
.Returns(typeof(Int32[]))
2803+
.SetCategory("#100")
27852804
.SetCategory("Bug resolution");
27862805

27872806
yield return new TestCaseData(new ExpressionEvaluator()
27882807
, "typeof(string[])"
27892808
, null)
27902809
.Returns(typeof(string[]))
2810+
.SetCategory("#100")
27912811
.SetCategory("Bug resolution");
27922812

27932813
yield return new TestCaseData(new ExpressionEvaluator()
27942814
, "typeof(Regex[])"
27952815
, null)
27962816
.Returns(typeof(Regex[]))
2817+
.SetCategory("#100")
27972818
.SetCategory("Bug resolution");
27982819

27992820
yield return new TestCaseData(new ExpressionEvaluator(new ObjectContainer()
@@ -2803,6 +2824,41 @@ ExpressionEvaluator evaluatorForMethodArgs()
28032824
, "(double[])AnObjectProperty"
28042825
, null)
28052826
.Returns(new double[] { 1.1, 2.3, 4.3 })
2827+
.SetCategory("#100")
2828+
.SetCategory("Bug resolution");
2829+
2830+
#endregion
2831+
2832+
#region for issue #110 OptionForceIntegerNumbersEvaluationsAsDoubleByDefault leads to exception when dividing
2833+
2834+
yield return new TestCaseData(new ExpressionEvaluator()
2835+
{
2836+
OptionForceIntegerNumbersEvaluationsAsDoubleByDefault = true,
2837+
}
2838+
, "3/Math.Round(Avg(1,2),MidpointRounding.AwayFromZero)"
2839+
, null)
2840+
.Returns(1.5d)
2841+
.SetCategory("#110")
2842+
.SetCategory("Bug resolution");
2843+
2844+
yield return new TestCaseData(new ExpressionEvaluator()
2845+
{
2846+
OptionForceIntegerNumbersEvaluationsAsDoubleByDefault = true,
2847+
}
2848+
, "Math.Round(1.5,MidpointRounding.AwayFromZero)"
2849+
, null)
2850+
.Returns(2d)
2851+
.SetCategory("#110")
2852+
.SetCategory("Bug resolution");
2853+
2854+
yield return new TestCaseData(new ExpressionEvaluator()
2855+
{
2856+
OptionForceIntegerNumbersEvaluationsAsDoubleByDefault = true,
2857+
}
2858+
, "Avg(1,2)"
2859+
, null)
2860+
.Returns(1.5d)
2861+
.SetCategory("#110")
28062862
.SetCategory("Bug resolution");
28072863

28082864
#endregion

CodingSeb.ExpressionEvaluator/CodingSeb.ExpressionEvaluator.csproj

+4-7
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
<Product>CodingSeb.ExpressionEvaluator</Product>
66
<Description>A Simple Math and Pseudo C# Expression Evaluator in One C# File. Can also execute small C# like scripts</Description>
77
<Copyright>Copyright © Coding Seb 2017</Copyright>
8-
<Version>1.4.30.0</Version>
9-
<AssemblyVersion>1.4.30.0</AssemblyVersion>
10-
<FileVersion>1.4.30.0</FileVersion>
8+
<Version>1.4.31.0</Version>
9+
<AssemblyVersion>1.4.31.0</AssemblyVersion>
10+
<FileVersion>1.4.31.0</FileVersion>
1111
<OutputPath>bin\$(Configuration)\</OutputPath>
1212
<Authors>Coding Seb</Authors>
1313
<PackageId>CodingSeb.ExpressionEvaluator</PackageId>
@@ -19,10 +19,7 @@
1919
<PackageIconUrl>https://github.com/codingseb/ExpressionEvaluator/blob/master/Icon.png?raw=true</PackageIconUrl>
2020
<PackageIcon>Icon.png</PackageIcon>
2121
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
22-
<PackageReleaseNotes>* BubbleExceptionContainer now throw their exceptions when necessary and are no more concatenate in string.
23-
* The default keyword this is introduce and is automatically set on the Context object (This allow to do indexing and call extentions methods on the context object)
24-
* We can now set a variable to null in PreEvaluateVariable events
25-
* Double double quotes are now supported in escaped string to escape double quotes @""""</PackageReleaseNotes>
22+
<PackageReleaseNotes>* Correction of a bug in methods selection</PackageReleaseNotes>
2623
<PackageLicenseFile>LICENSE.md</PackageLicenseFile>
2724
<RepositoryUrl>https://github.com/codingseb/ExpressionEvaluator</RepositoryUrl>
2825
</PropertyGroup>

CodingSeb.ExpressionEvaluator/ExpressionEvaluator.cs

+14-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/******************************************************************************************************
22
Title : ExpressionEvaluator (https://github.com/codingseb/ExpressionEvaluator)
3-
Version : 1.4.30.0
3+
Version : 1.4.31.0
44
(if last digit (the forth) is not a zero, the version is an intermediate version and can be unstable)
55
66
Author : Coding Seb
@@ -379,7 +379,7 @@ protected enum TryBlockEvaluatedState
379379
return typedArray;
380380
}
381381
},
382-
{ "Avg", (self, args) => args.ConvertAll(arg => Convert.ToDouble(self.Evaluate(arg))).Sum() / args.Count },
382+
{ "Avg", (self, args) => args.ConvertAll(arg => Convert.ToDouble(self.Evaluate(arg))).Sum() / (double)args.Count },
383383
{ "default", (self, args) =>
384384
{
385385
object argValue = self.Evaluate(args[0]);
@@ -3720,14 +3720,23 @@ protected virtual MethodInfo TryToCastMethodParametersToMakeItCallable(MethodInf
37203720
.MakeGenericMethod(parameterType.GetElementType())
37213721
.Invoke(null, new object[] { modifiedArgs[a] });
37223722
}
3723-
else
3723+
else if (IsCastable(modifiedArgs[a].GetType(), parameterType))
37243724
{
37253725
modifiedArgs[a] = Convert.ChangeType(modifiedArgs[a], parameterType);
37263726
}
3727+
else
3728+
{
3729+
parametersCastOK = false;
3730+
}
37273731
}
37283732
}
37293733
}
37303734
catch
3735+
{
3736+
parametersCastOK = false;
3737+
}
3738+
3739+
if (!parametersCastOK)
37313740
{
37323741
try
37333742
{
@@ -3738,16 +3747,10 @@ protected virtual MethodInfo TryToCastMethodParametersToMakeItCallable(MethodInf
37383747
if (parameterCastEvaluationEventArg.FunctionModifiedArgument)
37393748
{
37403749
modifiedArgs[a] = parameterCastEvaluationEventArg.Argument;
3750+
parametersCastOK = true;
37413751
}
3742-
else
3743-
{
3744-
parametersCastOK = false;
3745-
}
3746-
}
3747-
catch
3748-
{
3749-
parametersCastOK = false;
37503752
}
3753+
catch {}
37513754
}
37523755
}
37533756
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// This file is used by Code Analysis to maintain SuppressMessage
2+
// attributes that are applied to this project.
3+
// Project-level suppressions either have no target or are given
4+
// a specific target and scoped to a namespace, type, member, etc.
5+
6+
using System.Diagnostics.CodeAnalysis;
7+
8+
[assembly: SuppressMessage("Style", "RE0001:Regex issue: {0}", Justification = "<Pending>", Scope = "member", Target = "~F:CodingSeb.ExpressionEvaluator.ExpressionEvaluator.numberRegexOrigPattern")]

0 commit comments

Comments
 (0)