@@ -35,7 +35,9 @@ impl PredicateEvaluator for MyInteger {
35
35
} ;
36
36
37
37
if res {
38
- reasons. push ( self . val . to_string ( ) ) ;
38
+ reasons. push ( predicate. val . clone ( ) ) ;
39
+ } else {
40
+ reasons. retain ( |_| false ) ;
39
41
}
40
42
41
43
res
@@ -54,7 +56,7 @@ impl PredicateEvaluator for MyReal {
54
56
} ;
55
57
56
58
if res {
57
- reasons. push ( self . val . to_string ( ) ) ;
59
+ reasons. push ( predicate . val . clone ( ) ) ;
58
60
}
59
61
60
62
res
@@ -71,13 +73,29 @@ fn test_postfix_evaluate_single() {
71
73
72
74
let expr = PostfixExpression :: from_tokens ( vec ! [ PostfixToken :: Predicate ( a) ] ) . unwrap ( ) ;
73
75
74
- assert ! ( ! expr. evaluate( & MyInteger { val: 34 } ) . 0 ) ;
75
- assert ! ( expr . evaluate ( & MyInteger { val : 33 } ) . 0 ) ;
76
- assert ! ( !expr . evaluate ( & MyInteger { val : 12 } ) . 0 ) ;
76
+ let res = expr. evaluate ( & MyInteger { val : 34 } ) ;
77
+ assert ! ( !res . 0 ) ;
78
+ assert ! ( res . 1 . is_empty ( ) ) ;
77
79
78
- assert ! ( !expr. evaluate( & MyReal { val: 34.0 } ) . 0 ) ;
79
- assert ! ( expr. evaluate( & MyReal { val: 33.0 } ) . 0 ) ;
80
- assert ! ( !expr. evaluate( & MyReal { val: 12.0 } ) . 0 ) ;
80
+ let res = expr. evaluate ( & MyInteger { val : 33 } ) ;
81
+ assert ! ( res. 0 ) ;
82
+ assert_eq ! ( res. 1 , vec![ "33" . to_string( ) ] ) ;
83
+
84
+ let res = expr. evaluate ( & MyInteger { val : 12 } ) ;
85
+ assert ! ( !res. 0 ) ;
86
+ assert ! ( res. 1 . is_empty( ) ) ;
87
+
88
+ let res = expr. evaluate ( & MyReal { val : 34.0 } ) ;
89
+ assert ! ( !res. 0 ) ;
90
+ assert ! ( res. 1 . is_empty( ) ) ;
91
+
92
+ let res = expr. evaluate ( & MyReal { val : 33.0 } ) ;
93
+ assert ! ( res. 0 ) ;
94
+ assert_eq ! ( res. 1 , vec![ "33" . to_string( ) ] ) ;
95
+
96
+ let res = expr. evaluate ( & MyReal { val : 12.0 } ) ;
97
+ assert ! ( !res. 0 ) ;
98
+ assert ! ( res. 1 . is_empty( ) ) ;
81
99
}
82
100
83
101
#[ test]
@@ -99,15 +117,41 @@ fn test_postfix_evaluate_simple() {
99
117
] )
100
118
. unwrap ( ) ;
101
119
102
- assert ! ( !expr. evaluate( & MyInteger { val: 34 } ) . 0 ) ;
103
- assert ! ( expr. evaluate( & MyInteger { val: 33 } ) . 0 ) ;
104
- assert ! ( !expr. evaluate( & MyInteger { val: 12 } ) . 0 ) ;
105
- assert ! ( !expr. evaluate( & MyInteger { val: 11 } ) . 0 ) ;
106
- assert ! ( !expr. evaluate( & MyInteger { val: 10 } ) . 0 ) ;
107
- assert ! ( expr. evaluate( & MyInteger { val: 9 } ) . 0 ) ;
108
- assert ! ( expr. evaluate( & MyInteger { val: 8 } ) . 0 ) ;
109
- assert ! ( expr. evaluate( & MyInteger { val: 7 } ) . 0 ) ;
110
- assert ! ( expr. evaluate( & MyInteger { val: 6 } ) . 0 ) ;
120
+ let res = expr. evaluate ( & MyInteger { val : 34 } ) ;
121
+ assert ! ( !res. 0 ) ;
122
+ assert ! ( res. 1 . is_empty( ) ) ;
123
+
124
+ let res = expr. evaluate ( & MyInteger { val : 33 } ) ;
125
+ assert ! ( res. 0 ) ;
126
+ assert_eq ! ( res. 1 , vec![ "33" . to_string( ) ] ) ;
127
+
128
+ let res = expr. evaluate ( & MyInteger { val : 12 } ) ;
129
+ assert ! ( !res. 0 ) ;
130
+ assert ! ( res. 1 . is_empty( ) ) ;
131
+
132
+ let res = expr. evaluate ( & MyInteger { val : 11 } ) ;
133
+ assert ! ( !res. 0 ) ;
134
+ assert ! ( res. 1 . is_empty( ) ) ;
135
+
136
+ let res = expr. evaluate ( & MyInteger { val : 10 } ) ;
137
+ assert ! ( !res. 0 ) ;
138
+ assert ! ( res. 1 . is_empty( ) ) ;
139
+
140
+ let res = expr. evaluate ( & MyInteger { val : 9 } ) ;
141
+ assert ! ( res. 0 ) ;
142
+ assert_eq ! ( res. 1 , vec![ "10" . to_string( ) ] ) ;
143
+
144
+ let res = expr. evaluate ( & MyInteger { val : 8 } ) ;
145
+ assert ! ( res. 0 ) ;
146
+ assert_eq ! ( res. 1 , vec![ "10" . to_string( ) ] ) ;
147
+
148
+ let res = expr. evaluate ( & MyInteger { val : 7 } ) ;
149
+ assert ! ( res. 0 ) ;
150
+ assert_eq ! ( res. 1 , vec![ "10" . to_string( ) ] ) ;
151
+
152
+ let res = expr. evaluate ( & MyInteger { val : 6 } ) ;
153
+ assert ! ( res. 0 ) ;
154
+ assert_eq ! ( res. 1 , vec![ "10" . to_string( ) ] ) ;
111
155
112
156
assert ! ( !expr. evaluate( & MyReal { val: 34.0 } ) . 0 ) ;
113
157
assert ! ( expr. evaluate( & MyReal { val: 33.0 } ) . 0 ) ;
@@ -169,11 +213,28 @@ fn test_postfix_evaluate_complex() {
169
213
] )
170
214
. unwrap ( ) ;
171
215
172
- assert ! ( !expr. evaluate( & MyInteger { val: 7 } ) . 0 ) ;
173
- assert ! ( !expr. evaluate( & MyInteger { val: 6 } ) . 0 ) ;
174
- assert ! ( expr. evaluate( & MyInteger { val: 5 } ) . 0 ) ;
175
- assert ! ( !expr. evaluate( & MyInteger { val: 4 } ) . 0 ) ;
176
- assert ! ( expr. evaluate( & MyInteger { val: 3 } ) . 0 ) ;
216
+ let res = expr. evaluate ( & MyInteger { val : 7 } ) ;
217
+ assert ! ( !res. 0 ) ;
218
+ assert ! ( res. 1 . is_empty( ) ) ;
219
+
220
+ let res = expr. evaluate ( & MyInteger { val : 6 } ) ;
221
+ assert ! ( !res. 0 ) ;
222
+ assert ! ( res. 1 . is_empty( ) ) ;
223
+
224
+ let res = expr. evaluate ( & MyInteger { val : 5 } ) ;
225
+ assert ! ( res. 0 ) ;
226
+ assert_eq ! ( res. 1 , vec![ "5" . to_string( ) ] ) ;
227
+
228
+ let res = expr. evaluate ( & MyInteger { val : 4 } ) ;
229
+ assert ! ( !res. 0 ) ;
230
+ assert ! ( res. 1 . is_empty( ) ) ;
231
+
232
+ let res = expr. evaluate ( & MyInteger { val : 3 } ) ;
233
+ assert ! ( res. 0 ) ;
234
+ assert_eq ! (
235
+ res. 1 ,
236
+ vec![ "8" . to_string( ) , "9" . to_string( ) , "3" . to_string( ) , ]
237
+ ) ;
177
238
178
239
assert ! ( !expr. evaluate( & MyReal { val: 7.0 } ) . 0 ) ;
179
240
assert ! ( !expr. evaluate( & MyReal { val: 6.0 } ) . 0 ) ;
@@ -213,8 +274,21 @@ fn test_postfix_evaluate_many_and() {
213
274
] )
214
275
. unwrap ( ) ;
215
276
216
- assert ! ( !expr. evaluate( & MyInteger { val: 7 } ) . 0 ) ;
217
- assert ! ( expr. evaluate( & MyInteger { val: 1 } ) . 0 ) ;
277
+ let res = expr. evaluate ( & MyInteger { val : 7 } ) ;
278
+ assert ! ( !res. 0 ) ;
279
+ assert ! ( res. 1 . is_empty( ) ) ;
280
+
281
+ let res = expr. evaluate ( & MyInteger { val : 1 } ) ;
282
+ assert ! ( res. 0 ) ;
283
+ assert_eq ! (
284
+ res. 1 ,
285
+ vec![
286
+ "1" . to_string( ) ,
287
+ "2" . to_string( ) ,
288
+ "3" . to_string( ) ,
289
+ "4" . to_string( )
290
+ ]
291
+ ) ;
218
292
219
293
assert ! ( !expr. evaluate( & MyReal { val: 7.0 } ) . 0 ) ;
220
294
assert ! ( expr. evaluate( & MyReal { val: 1.0 } ) . 0 ) ;
@@ -232,8 +306,8 @@ fn test_postfix_evaluate_many_or() {
232
306
val : "2" . to_string ( ) ,
233
307
} ;
234
308
let c = Predicate {
235
- condition : PredicateCondition :: Equal ,
236
- val : "3 " . to_string ( ) ,
309
+ condition : PredicateCondition :: GreaterThan ,
310
+ val : "2 " . to_string ( ) ,
237
311
} ;
238
312
let d = Predicate {
239
313
condition : PredicateCondition :: Equal ,
@@ -251,19 +325,31 @@ fn test_postfix_evaluate_many_or() {
251
325
] )
252
326
. unwrap ( ) ;
253
327
254
- assert ! ( !expr. evaluate( & MyInteger { val: 0 } ) . 0 ) ;
255
- assert ! ( expr. evaluate( & MyInteger { val: 1 } ) . 0 ) ;
256
- assert ! ( expr. evaluate( & MyInteger { val: 2 } ) . 0 ) ;
257
- assert ! ( expr. evaluate( & MyInteger { val: 3 } ) . 0 ) ;
258
- assert ! ( expr. evaluate( & MyInteger { val: 4 } ) . 0 ) ;
259
- assert ! ( !expr. evaluate( & MyInteger { val: 5 } ) . 0 ) ;
328
+ let res = expr. evaluate ( & MyInteger { val : 0 } ) ;
329
+ assert ! ( !res. 0 ) ;
330
+ assert ! ( res. 1 . is_empty( ) ) ;
331
+
332
+ let res = expr. evaluate ( & MyInteger { val : 1 } ) ;
333
+ assert ! ( res. 0 ) ;
334
+ assert_eq ! ( res. 1 , vec![ "1" . to_string( ) ] ) ;
335
+
336
+ let res = expr. evaluate ( & MyInteger { val : 2 } ) ;
337
+ assert ! ( res. 0 ) ;
338
+ assert_eq ! ( res. 1 , vec![ "2" . to_string( ) ] ) ;
339
+
340
+ let res = expr. evaluate ( & MyInteger { val : 3 } ) ;
341
+ assert ! ( res. 0 ) ;
342
+ assert_eq ! ( res. 1 , vec![ "2" . to_string( ) ] ) ;
343
+
344
+ let res = expr. evaluate ( & MyInteger { val : 4 } ) ;
345
+ assert ! ( res. 0 ) ;
346
+ assert_eq ! ( res. 1 , vec![ "2" . to_string( ) ] ) ;
260
347
261
348
assert ! ( !expr. evaluate( & MyReal { val: 0.0 } ) . 0 ) ;
262
349
assert ! ( expr. evaluate( & MyReal { val: 1.0 } ) . 0 ) ;
263
350
assert ! ( expr. evaluate( & MyReal { val: 2.0 } ) . 0 ) ;
264
351
assert ! ( expr. evaluate( & MyReal { val: 3.0 } ) . 0 ) ;
265
352
assert ! ( expr. evaluate( & MyReal { val: 4.0 } ) . 0 ) ;
266
- assert ! ( !expr. evaluate( & MyReal { val: 5.0 } ) . 0 ) ;
267
353
}
268
354
269
355
// #[test]
0 commit comments