60
60
/// assert_eq!(true, predicate_fn.eval("a"));
61
61
/// assert_eq!(false, predicate_fn.eval("b"));
62
62
/// assert_eq!(true, predicate_fn.eval("c"));
63
+ ///
64
+ /// let predicate_fn = predicate::in_iter(vec![String::from("a"), String::from("c"), String::from("e")]).sort();
65
+ /// assert_eq!(true, predicate_fn.eval("a"));
66
+ /// assert_eq!(false, predicate_fn.eval("b"));
67
+ /// assert_eq!(true, predicate_fn.eval("c"));
63
68
/// ```
64
69
pub fn sort ( self ) -> OrdInPredicate < T > {
65
70
let mut items = self . inner . debug ;
@@ -70,33 +75,16 @@ where
70
75
}
71
76
}
72
77
73
- impl < T > Predicate < T > for InPredicate < T >
74
- where
75
- T : PartialEq + fmt:: Debug ,
76
- {
77
- fn eval ( & self , variable : & T ) -> bool {
78
- self . inner . debug . contains ( variable)
79
- }
80
-
81
- fn find_case < ' a > ( & ' a self , expected : bool , variable : & T ) -> Option < reflection:: Case < ' a > > {
82
- utils:: default_find_case ( self , expected, variable) . map ( |case| {
83
- case. add_product ( reflection:: Product :: new (
84
- "var" ,
85
- utils:: DebugAdapter :: new ( variable) . to_string ( ) ,
86
- ) )
87
- } )
88
- }
89
- }
90
-
91
- impl < ' a , T > Predicate < T > for InPredicate < & ' a T >
78
+ impl < P , T > Predicate < P > for InPredicate < T >
92
79
where
93
- T : PartialEq + fmt:: Debug + ?Sized ,
80
+ T : std:: borrow:: Borrow < P > + PartialEq + fmt:: Debug ,
81
+ P : PartialEq + fmt:: Debug + ?Sized ,
94
82
{
95
- fn eval ( & self , variable : & T ) -> bool {
96
- self . inner . debug . contains ( & variable)
83
+ fn eval ( & self , variable : & P ) -> bool {
84
+ self . inner . debug . iter ( ) . any ( |x| x . borrow ( ) == variable)
97
85
}
98
86
99
- fn find_case < ' b > ( & ' b self , expected : bool , variable : & T ) -> Option < reflection:: Case < ' b > > {
87
+ fn find_case < ' a > ( & ' a self , expected : bool , variable : & P ) -> Option < reflection:: Case < ' a > > {
100
88
utils:: default_find_case ( self , expected, variable) . map ( |case| {
101
89
case. add_product ( reflection:: Product :: new (
102
90
"var" ,
@@ -160,6 +148,11 @@ where
160
148
/// assert_eq!(true, predicate_fn.eval("a"));
161
149
/// assert_eq!(false, predicate_fn.eval("b"));
162
150
/// assert_eq!(true, predicate_fn.eval("c"));
151
+ ///
152
+ /// let predicate_fn = predicate::in_iter(vec![String::from("a"), String::from("c"), String::from("e")]);
153
+ /// assert_eq!(true, predicate_fn.eval("a"));
154
+ /// assert_eq!(false, predicate_fn.eval("b"));
155
+ /// assert_eq!(true, predicate_fn.eval("c"));
163
156
/// ```
164
157
pub fn in_iter < I , T > ( iter : I ) -> InPredicate < T >
165
158
where
@@ -188,33 +181,19 @@ where
188
181
inner : utils:: DebugAdapter < Vec < T > > ,
189
182
}
190
183
191
- impl < T > Predicate < T > for OrdInPredicate < T >
184
+ impl < P , T > Predicate < P > for OrdInPredicate < T >
192
185
where
193
- T : Ord + fmt:: Debug ,
186
+ T : std:: borrow:: Borrow < P > + Ord + fmt:: Debug ,
187
+ P : Ord + fmt:: Debug + ?Sized ,
194
188
{
195
- fn eval ( & self , variable : & T ) -> bool {
196
- self . inner . debug . binary_search ( variable) . is_ok ( )
189
+ fn eval ( & self , variable : & P ) -> bool {
190
+ self . inner
191
+ . debug
192
+ . binary_search_by ( |x| x. borrow ( ) . cmp ( variable) )
193
+ . is_ok ( )
197
194
}
198
195
199
- fn find_case < ' a > ( & ' a self , expected : bool , variable : & T ) -> Option < reflection:: Case < ' a > > {
200
- utils:: default_find_case ( self , expected, variable) . map ( |case| {
201
- case. add_product ( reflection:: Product :: new (
202
- "var" ,
203
- utils:: DebugAdapter :: new ( variable) . to_string ( ) ,
204
- ) )
205
- } )
206
- }
207
- }
208
-
209
- impl < ' a , T > Predicate < T > for OrdInPredicate < & ' a T >
210
- where
211
- T : Ord + fmt:: Debug + ?Sized ,
212
- {
213
- fn eval ( & self , variable : & T ) -> bool {
214
- self . inner . debug . binary_search ( & variable) . is_ok ( )
215
- }
216
-
217
- fn find_case < ' b > ( & ' b self , expected : bool , variable : & T ) -> Option < reflection:: Case < ' b > > {
196
+ fn find_case < ' a > ( & ' a self , expected : bool , variable : & P ) -> Option < reflection:: Case < ' a > > {
218
197
utils:: default_find_case ( self , expected, variable) . map ( |case| {
219
198
case. add_product ( reflection:: Product :: new (
220
199
"var" ,
@@ -267,33 +246,16 @@ where
267
246
inner : utils:: DebugAdapter < HashSet < T > > ,
268
247
}
269
248
270
- impl < T > Predicate < T > for HashableInPredicate < T >
249
+ impl < P , T > Predicate < P > for HashableInPredicate < T >
271
250
where
272
- T : Hash + Eq + fmt:: Debug ,
251
+ T : std:: borrow:: Borrow < P > + Hash + Eq + fmt:: Debug ,
252
+ P : Hash + Eq + fmt:: Debug + ?Sized ,
273
253
{
274
- fn eval ( & self , variable : & T ) -> bool {
254
+ fn eval ( & self , variable : & P ) -> bool {
275
255
self . inner . debug . contains ( variable)
276
256
}
277
257
278
- fn find_case < ' a > ( & ' a self , expected : bool , variable : & T ) -> Option < reflection:: Case < ' a > > {
279
- utils:: default_find_case ( self , expected, variable) . map ( |case| {
280
- case. add_product ( reflection:: Product :: new (
281
- "var" ,
282
- utils:: DebugAdapter :: new ( variable) . to_string ( ) ,
283
- ) )
284
- } )
285
- }
286
- }
287
-
288
- impl < ' a , T > Predicate < T > for HashableInPredicate < & ' a T >
289
- where
290
- T : Hash + Eq + fmt:: Debug + ?Sized ,
291
- {
292
- fn eval ( & self , variable : & T ) -> bool {
293
- self . inner . debug . contains ( & variable)
294
- }
295
-
296
- fn find_case < ' b > ( & ' b self , expected : bool , variable : & T ) -> Option < reflection:: Case < ' b > > {
258
+ fn find_case < ' a > ( & ' a self , expected : bool , variable : & P ) -> Option < reflection:: Case < ' a > > {
297
259
utils:: default_find_case ( self , expected, variable) . map ( |case| {
298
260
case. add_product ( reflection:: Product :: new (
299
261
"var" ,
@@ -351,6 +313,11 @@ where
351
313
/// assert_eq!(true, predicate_fn.eval("a"));
352
314
/// assert_eq!(false, predicate_fn.eval("b"));
353
315
/// assert_eq!(true, predicate_fn.eval("c"));
316
+ ///
317
+ /// let predicate_fn = predicate::in_hash(vec![String::from("a"), String::from("c"), String::from("e")]);
318
+ /// assert_eq!(true, predicate_fn.eval("a"));
319
+ /// assert_eq!(false, predicate_fn.eval("b"));
320
+ /// assert_eq!(true, predicate_fn.eval("c"));
354
321
/// ```
355
322
pub fn in_hash < I , T > ( iter : I ) -> HashableInPredicate < T >
356
323
where
0 commit comments