53
53
/// assert_eq!(true, predicate_fn.eval(&1));
54
54
/// assert_eq!(false, predicate_fn.eval(&2));
55
55
/// assert_eq!(true, predicate_fn.eval(&3));
56
- /// assert_eq!(false, predicate_fn.eval(&4));
57
- /// assert_eq!(true, predicate_fn.eval(&5));
56
+ ///
57
+ /// let predicate_fn = predicate::in_iter(vec!["a", "c", "e"]).sort();
58
+ /// assert_eq!(true, predicate_fn.eval("a"));
59
+ /// assert_eq!(false, predicate_fn.eval("b"));
60
+ /// assert_eq!(true, predicate_fn.eval("c"));
58
61
/// ```
59
62
pub fn sort ( self ) -> OrdInPredicate < T > {
60
63
let mut items = self . inner ;
72
75
}
73
76
}
74
77
78
+ impl < ' a , T > Predicate < T > for InPredicate < & ' a T >
79
+ where
80
+ T : PartialEq + fmt:: Debug + ?Sized ,
81
+ {
82
+ fn eval ( & self , variable : & T ) -> bool {
83
+ self . inner . contains ( & variable)
84
+ }
85
+ }
86
+
75
87
impl < T > fmt:: Display for InPredicate < T >
76
88
where
77
89
T : PartialEq + fmt:: Debug ,
@@ -104,8 +116,11 @@ where
104
116
/// assert_eq!(true, predicate_fn.eval(&1));
105
117
/// assert_eq!(false, predicate_fn.eval(&2));
106
118
/// assert_eq!(true, predicate_fn.eval(&3));
107
- /// assert_eq!(false, predicate_fn.eval(&4));
108
- /// assert_eq!(true, predicate_fn.eval(&5));
119
+ ///
120
+ /// let predicate_fn = predicate::in_iter(vec!["a", "c", "e"]);
121
+ /// assert_eq!(true, predicate_fn.eval("a"));
122
+ /// assert_eq!(false, predicate_fn.eval("b"));
123
+ /// assert_eq!(true, predicate_fn.eval("c"));
109
124
/// ```
110
125
pub fn in_iter < I , T > ( iter : I ) -> InPredicate < T >
111
126
where
@@ -143,6 +158,15 @@ where
143
158
}
144
159
}
145
160
161
+ impl < ' a , T > Predicate < T > for OrdInPredicate < & ' a T >
162
+ where
163
+ T : Ord + fmt:: Debug + ?Sized ,
164
+ {
165
+ fn eval ( & self , variable : & T ) -> bool {
166
+ self . inner . binary_search ( & variable) . is_ok ( )
167
+ }
168
+ }
169
+
146
170
impl < T > fmt:: Display for OrdInPredicate < T >
147
171
where
148
172
T : Ord + fmt:: Debug ,
@@ -178,6 +202,15 @@ where
178
202
}
179
203
}
180
204
205
+ impl < ' a , T > Predicate < T > for HashableInPredicate < & ' a T >
206
+ where
207
+ T : Hash + Eq + fmt:: Debug + ?Sized ,
208
+ {
209
+ fn eval ( & self , variable : & T ) -> bool {
210
+ self . inner . contains ( & variable)
211
+ }
212
+ }
213
+
181
214
impl < T > fmt:: Display for HashableInPredicate < T >
182
215
where
183
216
T : Hash + Eq + fmt:: Debug ,
@@ -204,8 +237,11 @@ where
204
237
/// assert_eq!(true, predicate_fn.eval(&1));
205
238
/// assert_eq!(false, predicate_fn.eval(&2));
206
239
/// assert_eq!(true, predicate_fn.eval(&3));
207
- /// assert_eq!(false, predicate_fn.eval(&4));
208
- /// assert_eq!(true, predicate_fn.eval(&5));
240
+ ///
241
+ /// let predicate_fn = predicate::in_hash(vec!["a", "c", "e"]);
242
+ /// assert_eq!(true, predicate_fn.eval("a"));
243
+ /// assert_eq!(false, predicate_fn.eval("b"));
244
+ /// assert_eq!(true, predicate_fn.eval("c"));
209
245
/// ```
210
246
pub fn in_hash < I , T > ( iter : I ) -> HashableInPredicate < T >
211
247
where
0 commit comments