@@ -66,9 +66,64 @@ public void Test()
6666 var p4 = priceAlgorithm . TryEvaluate ( "出错了" , 0.0 ) ;
6767
6868 }
69-
7069 [ Test ]
7170 public void Test2 ( )
71+ {
72+ ConditionCache multiConditionCache = new ConditionCache ( ) ;
73+ multiConditionCache . LazyLoad = true ;
74+ multiConditionCache . AddFormula ( "桌面积" , "[圆桌]" , "[半径]*[半径]*pi()" ) ;
75+ multiConditionCache . AddFormula ( "桌面积" , "[方桌]" , "[长]*[宽]" ) ;
76+
77+ multiConditionCache . AddFormula ( "价格" , "[圆桌]&& [半径]<2.5" , "[桌面积]*1.3" ) ;
78+ multiConditionCache . AddFormula ( "价格" , "[圆桌]&& [半径]<5" , "[桌面积]*1.5" ) ;
79+ multiConditionCache . AddFormula ( "价格" , "[圆桌]&& [半径]<7" , "[桌面积]*2" ) ;
80+ multiConditionCache . AddFormula ( "价格" , "[圆桌]" , "[桌面积]*2.5" ) ;
81+
82+ multiConditionCache . AddFormula ( "价格" , "[方桌]&& [长]<1.3" , "[桌面积]*1.3+[高]*1.1" ) ;
83+ multiConditionCache . AddFormula ( "价格" , "[方桌]&& [长]<2" , "[桌面积]*1.5+[高]*1.1" ) ;
84+ multiConditionCache . AddFormula ( "价格" , "[方桌]&& [长]<5" , "[桌面积]*2+[高]*1.1" ) ;
85+ multiConditionCache . AddFormula ( "价格" , "[方桌]&& [长]<7" , "[桌面积]*2.5" ) ;
86+
87+
88+ multiConditionCache . AddFormula ( "出错了" , "[方桌]&& [长]<11" , "[出错]*2.5" ) ;
89+
90+
91+ Desk desk = new Desk ( ) {
92+ IsRoundTable = true ,
93+ Radius = 3
94+ } ;
95+ PriceAlgorithm priceAlgorithm = new PriceAlgorithm ( multiConditionCache , desk ) ;
96+ var p1 = priceAlgorithm . TryEvaluate ( "价格" , 0.0 ) ;
97+ Assert . AreEqual ( 3 * 3 * Math . PI * 1.5 , p1 , 0.0001 ) ;
98+
99+ Desk desk2 = new Desk ( ) {
100+ IsRoundTable = false ,
101+ Length = 3 ,
102+ Width = 1.3 ,
103+ Heigth = 1
104+ } ;
105+ priceAlgorithm = new PriceAlgorithm ( multiConditionCache , desk2 ) ;
106+ var p2 = priceAlgorithm . TryEvaluate ( "价格" , 0.0 ) ;
107+ Assert . AreEqual ( 3 * 1.3 * 2 + 1 * 1.1 , p2 , 0.0001 ) ;
108+
109+
110+ Desk desk3 = new Desk ( ) {
111+ IsRoundTable = false ,
112+ Length = 9 ,
113+ Width = 1.3 ,
114+ Heigth = 1
115+ } ;
116+ priceAlgorithm = new PriceAlgorithm ( multiConditionCache , desk3 ) ;
117+ var p3 = priceAlgorithm . TryEvaluate ( "价格" , 0.0 ) ;
118+ Assert . AreEqual ( 0 , p3 , 0.001 ) ;
119+ Assert . AreEqual ( "CategoryName [价格] is missing." , priceAlgorithm . LastError ) ;
120+
121+
122+ var p4 = priceAlgorithm . TryEvaluate ( "出错了" , 0.0 ) ;
123+
124+ }
125+ [ Test ]
126+ public void Test3 ( )
72127 {
73128 ConditionCache multiConditionCache = new ConditionCache ( ) ;
74129 multiConditionCache . AddCondition ( "类型" , "[方桌]&& [长]<1.3" , "1" ) ;
@@ -91,46 +146,4 @@ public void Test2()
91146
92147 }
93148
94- public class Desk
95- {
96- public bool IsRoundTable { get ; set ; }
97- public double Heigth { get ; set ; }
98- public double Length { get ; set ; }
99- public double Width { get ; set ; }
100- public double Radius { get ; set ; }
101- }
102-
103- public class PriceAlgorithm : ToolGood . Algorithm . AlgorithmEngineEx
104- {
105- private Desk _disk ;
106- public PriceAlgorithm ( ConditionCache multiConditionCache , Desk desk ) : base ( multiConditionCache )
107- {
108- _disk = desk ;
109- }
110-
111- protected override Operand GetParameter ( string parameter )
112- {
113- if ( parameter == "长" ) {
114- return Operand . Create ( _disk . Length ) ;
115- }
116- if ( parameter == "宽" ) {
117- return Operand . Create ( _disk . Width ) ;
118- }
119- if ( parameter == "高" ) {
120- return Operand . Create ( _disk . Heigth ) ;
121- }
122- if ( parameter == "半径" ) {
123- return Operand . Create ( _disk . Radius ) ;
124- }
125- if ( parameter == "方桌" ) {
126- return Operand . Create ( _disk . IsRoundTable == false ) ;
127- }
128- if ( parameter == "圆桌" ) {
129- return Operand . Create ( _disk . IsRoundTable ) ;
130- }
131- return base . GetParameter ( parameter ) ;
132- }
133-
134- }
135-
136149}
0 commit comments