Skip to content

Commit f27025e

Browse files
committed
修改 1 > -2
fix #2
1 parent cec6fd5 commit f27025e

File tree

4 files changed

+63
-13
lines changed

4 files changed

+63
-13
lines changed

ToolGood.Algorithm.Test/AlgorithmEngine/AlgorithmEngineTest.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class AlgorithmEngineTest
1313
public void Test()
1414
{
1515
AlgorithmEngine engine = new AlgorithmEngine();
16+
1617
double t = 0.0;
1718
if (engine.Parse("1+2")) {
1819
t = (double)engine.Evaluate();
@@ -61,6 +62,27 @@ public void Test()
6162
Assert.AreEqual(DateTime.Parse("2016-1-2"), dt); ;
6263
dt = engine.TryEvaluate("'2016-1-1'+9*'1:0'", DateTime.MinValue);
6364
Assert.AreEqual(DateTime.Parse("2016-1-1 9:0"), dt); ;
65+
66+
var value = engine.TryEvaluate("1 > (-2)", false);
67+
Assert.AreEqual(value, true);
68+
69+
70+
value = engine.TryEvaluate("(-1) > (-2)", false);
71+
Assert.AreEqual(value, true);
72+
73+
74+
value = engine.TryEvaluate("-1 > (-2)", false);
75+
Assert.AreEqual(value, true);
76+
77+
value = engine.TryEvaluate("-1 > -2", false);
78+
Assert.AreEqual(value, true);
79+
80+
var value2 = engine.TryEvaluate("-1 > -2", false);
81+
Assert.AreEqual(value2, true);
82+
83+
84+
var value3 = engine.TryEvaluate("-7 < -2", false);
85+
Assert.AreEqual(value2, true);
6486
}
6587

6688
[Test]

ToolGood.Algorithm.Test/Program.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ class Program
1313
static void Main(string[] args)
1414
{
1515

16-
AlgorithmEngine engine = new AlgorithmEngine();
17-
var e = engine.TryEvaluate("pi", 0.0);
18-
Assert.AreEqual(Math.PI, e);
16+
//AlgorithmEngine engine = new AlgorithmEngine();
17+
//var e = engine.TryEvaluate("pi", 0.0);
18+
//Assert.AreEqual(Math.PI, e);
1919

2020
//if (engine.Parse("1*1.1")) {
2121
// var t = engine.Evaluate();
@@ -26,11 +26,11 @@ static void Main(string[] args)
2626
// var a = t;
2727
//}
2828

29-
if (engine.Parse("json('{\"Name1\":\"William Shakespeare \",\"Age\":51,\"Birthday\":\"04/26/1564 00:00:00\"}').('Name'& 1).Trim().substring(2,3)")) {
30-
var t = engine.Evaluate();
31-
var a = t;
29+
//if (engine.Parse("json('{\"Name1\":\"William Shakespeare \",\"Age\":51,\"Birthday\":\"04/26/1564 00:00:00\"}').('Name'& 1).Trim().substring(2,3)")) {
30+
// var t = engine.Evaluate();
31+
// var a = t;
3232

33-
}
33+
//}
3434
//if (engine.Parse("json('{\"Name\":\"William Shakespeare\",\"Age\":51,\"Birthday\":\"04/26/1564 00:00:00\"}').Birthday")) {
3535
// var t = engine.Evaluate();
3636
// var a = t;

ToolGood.Algorithm/AlgorithmEngine.cs

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public partial class AlgorithmEngine
1111
{
1212
private Random rand;
1313
private List<string> m_Operators = new List<string>() { ".", "(", ")", "!", "*", "/", "%", "+", "-", "<", ">", "=", "&", "|", ",", "==", "!=", ">=", "<=", "<>", "@" };
14+
private List<string> m_Operators2 = new List<string>() { "<", ">", "=", "==", "!=", ">=", "<=", "<>" };
1415
private List<object> m_tokens = new List<object>(); //最终逆波兰式堆栈
1516
private Dictionary<string, List<object>> tokenDict = new Dictionary<string, List<object>>();
1617
private Dictionary<string, Func<List<Operand>, Operand>> funcDict = new Dictionary<string, Func<List<Operand>, Operand>>();
@@ -178,7 +179,7 @@ private List<object> parse(string exp)
178179

179180
while (curPos < texts.Count) {
180181
//获取 当前操作数
181-
curOpd = getOperand(texts, curPos);
182+
curOpd = getOperand(texts,ref curPos);
182183
if (curOpd != "") {
183184
if (operators.Count > 0 && hasPoint) {
184185
Operator op = operators.Pop();
@@ -240,6 +241,24 @@ private List<object> parse(string exp)
240241
continue;
241242
}
242243

244+
//if (optType== OperatorType.SUB &&( operators.Peek().Type== OperatorType.LT || operators.Peek().Type == OperatorType.LE
245+
// || operators.Peek().Type== OperatorType.GT || operators.Peek().Type == OperatorType.GE
246+
// || operators.Peek().Type == OperatorType.ET || operators.Peek().Type == OperatorType.UT
247+
// )) {
248+
// while (operators.Count > 0) {
249+
// if (Operator.ComparePriority(optType, operators.Peek().Type) <= 0 && operators.Peek().Type != OperatorType.LB) {
250+
// operands.Add(operators.Pop());
251+
252+
// if (operators.Count == 0) {
253+
// operators.Push(new Operator(optType, curOpt, funcCount));
254+
// break;
255+
// }
256+
// } else {
257+
// operators.Push(new Operator(optType, curOpt, funcCount));
258+
// break;
259+
// }
260+
// }
261+
//} else
243262
//若当前运算符优先级大于运算符栈顶的运算符,则将当前运算符直接存入运算符堆栈.
244263
if (Operator.ComparePriority(optType, operators.Peek().Type) > 0) {
245264
operators.Push(new Operator(optType, curOpt, funcCount));
@@ -288,7 +307,7 @@ private int getFunctionCount(List<string> texts, int curPos)
288307
}
289308
return count + hasCount;
290309
}
291-
private string getOperand(List<string> texts, int curPos)
310+
private string getOperand(List<string> texts,ref int curPos)
292311
{
293312
var t = texts[curPos];
294313
if (t.StartsWith("[")) {
@@ -300,6 +319,15 @@ private string getOperand(List<string> texts, int curPos)
300319
return "";
301320
}
302321
}
322+
if (curPos > 0 && t == "-" && curPos + 1 < texts.Count) {
323+
if (m_Operators2.Contains(texts[curPos - 1])) {
324+
curPos++;
325+
return t + texts[curPos ];
326+
}
327+
}
328+
329+
330+
303331
if (m_Operators.Contains(t.ToLower())) {
304332
return "";
305333
}
@@ -588,7 +616,7 @@ private object evaluate(List<object> tokens)
588616
list.Insert(0, opds.Pop());
589617
list.Insert(0, opds.Pop());
590618
opds.Push(getChild(list));
591-
break;
619+
break;
592620
#endregion
593621

594622
#region 乘,*,multiplication

ToolGood.Algorithm/ToolGood.Algorithm.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@
2323
<RootNamespace>ToolGood.Algorithm</RootNamespace>
2424
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
2525
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
26-
<FileVersion>1.3.3.3</FileVersion>
27-
<Version>1.3.3.3</Version>
26+
<FileVersion>1.3.3.4</FileVersion>
27+
<Version>1.3.3.4</Version>
2828
<PackageReleaseNotes></PackageReleaseNotes>
2929
<Product>ToolGood.Algorithm</Product>
30-
<AssemblyVersion>1.3.3.3</AssemblyVersion>
30+
<AssemblyVersion>1.3.3.4</AssemblyVersion>
3131
</PropertyGroup>
3232

3333
<ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">

0 commit comments

Comments
 (0)