Skip to content

Commit 3b7e51e

Browse files
committed
include tests about reasons
1 parent 7d16ec5 commit 3b7e51e

File tree

1 file changed

+119
-33
lines changed

1 file changed

+119
-33
lines changed

tests/postfix.rs

Lines changed: 119 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ impl PredicateEvaluator for MyInteger {
3535
};
3636

3737
if res {
38-
reasons.push(self.val.to_string());
38+
reasons.push(predicate.val.clone());
39+
} else {
40+
reasons.retain(|_| false);
3941
}
4042

4143
res
@@ -54,7 +56,7 @@ impl PredicateEvaluator for MyReal {
5456
};
5557

5658
if res {
57-
reasons.push(self.val.to_string());
59+
reasons.push(predicate.val.clone());
5860
}
5961

6062
res
@@ -71,13 +73,29 @@ fn test_postfix_evaluate_single() {
7173

7274
let expr = PostfixExpression::from_tokens(vec![PostfixToken::Predicate(a)]).unwrap();
7375

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());
7779

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());
8199
}
82100

83101
#[test]
@@ -99,15 +117,41 @@ fn test_postfix_evaluate_simple() {
99117
])
100118
.unwrap();
101119

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()]);
111155

112156
assert!(!expr.evaluate(&MyReal { val: 34.0 }).0);
113157
assert!(expr.evaluate(&MyReal { val: 33.0 }).0);
@@ -169,11 +213,28 @@ fn test_postfix_evaluate_complex() {
169213
])
170214
.unwrap();
171215

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+
);
177238

178239
assert!(!expr.evaluate(&MyReal { val: 7.0 }).0);
179240
assert!(!expr.evaluate(&MyReal { val: 6.0 }).0);
@@ -213,8 +274,21 @@ fn test_postfix_evaluate_many_and() {
213274
])
214275
.unwrap();
215276

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+
);
218292

219293
assert!(!expr.evaluate(&MyReal { val: 7.0 }).0);
220294
assert!(expr.evaluate(&MyReal { val: 1.0 }).0);
@@ -232,8 +306,8 @@ fn test_postfix_evaluate_many_or() {
232306
val: "2".to_string(),
233307
};
234308
let c = Predicate {
235-
condition: PredicateCondition::Equal,
236-
val: "3".to_string(),
309+
condition: PredicateCondition::GreaterThan,
310+
val: "2".to_string(),
237311
};
238312
let d = Predicate {
239313
condition: PredicateCondition::Equal,
@@ -251,19 +325,31 @@ fn test_postfix_evaluate_many_or() {
251325
])
252326
.unwrap();
253327

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()]);
260347

261348
assert!(!expr.evaluate(&MyReal { val: 0.0 }).0);
262349
assert!(expr.evaluate(&MyReal { val: 1.0 }).0);
263350
assert!(expr.evaluate(&MyReal { val: 2.0 }).0);
264351
assert!(expr.evaluate(&MyReal { val: 3.0 }).0);
265352
assert!(expr.evaluate(&MyReal { val: 4.0 }).0);
266-
assert!(!expr.evaluate(&MyReal { val: 5.0 }).0);
267353
}
268354

269355
// #[test]

0 commit comments

Comments
 (0)