Mercurial > hg > Members > tatsuki > functionaljava-master > core
comparison src/main/java/fj/test/Property.java @ 0:fe80c1edf1be
add getLoop
author | tatsuki |
---|---|
date | Fri, 20 Mar 2015 21:04:03 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:fe80c1edf1be |
---|---|
1 package fj.test; | |
2 | |
3 import static fj.Function.curry; | |
4 import static fj.Function.compose2; | |
5 import static fj.P.p; | |
6 | |
7 import fj.*; | |
8 | |
9 import static fj.P2.__2; | |
10 import fj.data.List; | |
11 import fj.data.Option; | |
12 import static fj.data.Option.none; | |
13 import fj.data.Stream; | |
14 import static fj.test.Arg.arg; | |
15 import static fj.test.CheckResult.exhausted; | |
16 import static fj.test.CheckResult.falsified; | |
17 import static fj.test.CheckResult.genException; | |
18 import static fj.test.CheckResult.passed; | |
19 import static fj.test.CheckResult.propException; | |
20 import static fj.test.CheckResult.proven; | |
21 import static fj.test.Result.noResult; | |
22 import static java.lang.Math.round; | |
23 | |
24 /** | |
25 * Represents an algebraic property about a program that may be {@link #check(Rand, int, int, int, | |
26 * int) checked} for its truth value. For example, it is true that "for all integers (call it x) and | |
27 * for all integers (call it y), then x + y is equivalent to y + x". This statement is a (algebraic) | |
28 * property, proposition or theorem that, when checked, will at least (depending on arguments) fail | |
29 * to be falsified — since there does not exist a counter-example to this statement. | |
30 * | |
31 * @version %build.number% | |
32 */ | |
33 public final class Property { | |
34 private final F<Integer, F<Rand, Result>> f; | |
35 | |
36 private Property(final F<Integer, F<Rand, Result>> f) { | |
37 this.f = f; | |
38 } | |
39 | |
40 /** | |
41 * Returns the result of applying the given size and random generator. | |
42 * | |
43 * @param i The size to use to obtain a result. | |
44 * @param r The random generator to use to obtain a result. | |
45 * @return The result of applying the given size and random generator. | |
46 */ | |
47 public Result prop(final int i, final Rand r) { | |
48 return f.f(i).f(r); | |
49 } | |
50 | |
51 /** | |
52 * Returns a generator of results from this property. | |
53 * | |
54 * @return A generator of results from this property. | |
55 */ | |
56 public Gen<Result> gen() { | |
57 return Gen.gen(new F<Integer, F<Rand, Result>>() { | |
58 public F<Rand, Result> f(final Integer i) { | |
59 return new F<Rand, Result>() { | |
60 public Result f(final Rand r) { | |
61 return f.f(i).f(r); | |
62 } | |
63 }; | |
64 } | |
65 }); | |
66 } | |
67 | |
68 /** | |
69 * Performs a conjunction of this property with the given property. | |
70 * | |
71 * @param p The property to perform the conjunction with. | |
72 * @return A conjunction of this property with the given property. | |
73 */ | |
74 public Property and(final Property p) { | |
75 return fromGen(gen().bind(p.gen(), new F<Result, F<Result, Result>>() { | |
76 public F<Result, Result> f(final Result res1) { | |
77 return new F<Result, Result>() { | |
78 public Result f(final Result res2) { | |
79 return res1.isException() || res1.isFalsified() ? res1 : res2.isException() || res2.isFalsified() ? res2 : res1.isProven() || res1.isUnfalsified() ? res2 : res2.isProven() || res2.isUnfalsified() ? res1 : noResult(); | |
80 } | |
81 }; | |
82 } | |
83 })); | |
84 } | |
85 | |
86 /** | |
87 * Performs a disjunction of this property with the given property. | |
88 * | |
89 * @param p The property to perform the disjunction with. | |
90 * @return A disjunction of this property with the given property. | |
91 */ | |
92 public Property or(final Property p) { | |
93 return fromGen(gen().bind(p.gen(), new F<Result, F<Result, Result>>() { | |
94 public F<Result, Result> f(final Result res1) { | |
95 return new F<Result, Result>() { | |
96 public Result f(final Result res2) { | |
97 return res1.isException() || res1.isFalsified() ? res1 : res2.isException() || res2.isFalsified() ? res2 : res1.isProven() || res1.isUnfalsified() ? res1 : res2.isProven() || res2.isUnfalsified() ? res2 : noResult(); | |
98 } | |
99 }; | |
100 } | |
101 })); | |
102 } | |
103 | |
104 /** | |
105 * Performs a sequence of this property with the given property. The returned property holds if | |
106 * and only if this property and the given property also hold. If one property does not hold, but | |
107 * the other does, then the returned property will produce the same result and the property that | |
108 * holds. | |
109 * | |
110 * @param p The property to sequence this property with. | |
111 * @return A sequence of this property with the given property. | |
112 */ | |
113 public Property sequence(final Property p) { | |
114 return fromGen(gen().bind(p.gen(), new F<Result, F<Result, Result>>() { | |
115 public F<Result, Result> f(final Result res1) { | |
116 return new F<Result, Result>() { | |
117 public Result f(final Result res2) { | |
118 return res1.isException() || res1.isProven() || res1.isUnfalsified() ? res1 : res2.isException() || res2.isProven() || res2.isUnfalsified() ? res2 : res1.isFalsified() ? res2 : res2.isFalsified() ? res1 : noResult(); | |
119 } | |
120 }; | |
121 } | |
122 })); | |
123 } | |
124 | |
125 /** | |
126 * Checks this property using the given arguments and produces a result. | |
127 * | |
128 * @param r The random generator to use for checking. | |
129 * @param minSuccessful The minimum number of successful tests before a result is reached. | |
130 * @param maxDiscarded The maximum number of tests discarded because they did not satisfy | |
131 * pre-conditions (i.e. {@link #implies(boolean, P1)}). | |
132 * @param minSize The minimum size to use for checking. | |
133 * @param maxSize The maximum size to use for checking. | |
134 * @return A result after checking this property. | |
135 */ | |
136 @SuppressWarnings({"ThrowableResultOfMethodCallIgnored"}) | |
137 public CheckResult check(final Rand r, | |
138 final int minSuccessful, | |
139 final int maxDiscarded, | |
140 final int minSize, | |
141 final int maxSize) { | |
142 int s = 0; | |
143 int d = 0; | |
144 float sz = minSize; | |
145 CheckResult res; | |
146 | |
147 while (true) { | |
148 final float size = s == 0 && d == 0 ? minSize : sz + (maxSize - sz) / (minSuccessful - s); | |
149 try { | |
150 final Result x = f.f(round(size)).f(r); | |
151 if (x.isNoResult()) | |
152 if (d + 1 >= maxDiscarded) { | |
153 res = exhausted(s, d + 1); | |
154 break; | |
155 } else { | |
156 sz = size; | |
157 d++; | |
158 } | |
159 else if (x.isProven()) { | |
160 res = proven(x.args().some(), s + 1, d); | |
161 break; | |
162 } else if (x.isUnfalsified()) | |
163 if (s + 1 >= minSuccessful) { | |
164 res = passed(s + 1, d); | |
165 break; | |
166 } else { | |
167 sz = size; | |
168 s++; | |
169 } | |
170 else if (x.isFalsified()) { | |
171 res = falsified(x.args().some(), s, d); | |
172 break; | |
173 } else if (x.isException()) { | |
174 res = propException(x.args().some(), x.exception().some(), s, d); | |
175 break; | |
176 } | |
177 } catch (final Throwable t) { | |
178 res = genException(t, s, d); | |
179 break; | |
180 } | |
181 } | |
182 | |
183 return res; | |
184 } | |
185 | |
186 /** | |
187 * Checks this property using a {@link Rand#Rand(F, F) standard random generator} and the given | |
188 * arguments to produce a result. | |
189 * | |
190 * @param minSuccessful The minimum number of successful tests before a result is reached. | |
191 * @param maxDiscarded The maximum number of tests discarded because they did not satisfy | |
192 * pre-conditions (i.e. {@link #implies(boolean, P1)}). | |
193 * @param minSize The minimum size to use for checking. | |
194 * @param maxSize The maximum size to use for checking. | |
195 * @return A result after checking this property. | |
196 */ | |
197 public CheckResult check(final int minSuccessful, | |
198 final int maxDiscarded, | |
199 final int minSize, | |
200 final int maxSize) { | |
201 return check(Rand.standard, minSuccessful, maxDiscarded, minSize, maxSize); | |
202 } | |
203 | |
204 /** | |
205 * Checks this property using the given random generator, 100 minimum successful checks, 500 | |
206 * maximum discarded tests, minimum size of 0, maximum size of 100. | |
207 * | |
208 * @param r The random generator. | |
209 * @return A result after checking this property. | |
210 */ | |
211 public CheckResult check(final Rand r) { | |
212 return check(r, 100, 500, 0, 100); | |
213 } | |
214 | |
215 /** | |
216 * Checks this property using the given random generator, 100 minimum successful checks, 500 | |
217 * maximum discarded tests, the given minimum size and the given maximum size. | |
218 * | |
219 * @param r The random generator. | |
220 * @param minSize The minimum size to use for checking. | |
221 * @param maxSize The maximum size to use for checking. | |
222 * @return A result after checking this property. | |
223 */ | |
224 public CheckResult check(final Rand r, final int minSize, final int maxSize) { | |
225 return check(r, 100, 500, minSize, maxSize); | |
226 } | |
227 | |
228 /** | |
229 * Checks this property using a {@link Rand#Rand(F, F) standard random generator}, 100 minimum | |
230 * successful checks, 500 maximum discarded tests and the given arguments to produce a result. | |
231 * | |
232 * @param minSize The minimum size to use for checking. | |
233 * @param maxSize The maximum size to use for checking. | |
234 * @return A result after checking this property. | |
235 */ | |
236 public CheckResult check(final int minSize, | |
237 final int maxSize) { | |
238 return check(100, 500, minSize, maxSize); | |
239 } | |
240 | |
241 /** | |
242 * Checks this property using a {@link Rand#Rand(F, F) standard random generator}, 100 minimum | |
243 * successful checks, 500 maximum discarded tests, minimum size of 0, maximum size of 100. | |
244 * | |
245 * @return A result after checking this property. | |
246 */ | |
247 public CheckResult check() { | |
248 return check(0, 100); | |
249 } | |
250 | |
251 /** | |
252 * Checks this property using a {@link Rand#Rand(F, F) standard random generator}, the given minimum | |
253 * successful checks, 500 maximum discarded tests, minimum size of 0, maximum size of 100. | |
254 * | |
255 * @param minSuccessful The minimum number of successful tests before a result is reached. | |
256 * @return A result after checking this property. | |
257 */ | |
258 public CheckResult minSuccessful(final int minSuccessful) { | |
259 return check(minSuccessful, 500, 0, 100); | |
260 } | |
261 | |
262 /** | |
263 * Checks this property using the given random generator, the given minimum | |
264 * successful checks, 500 maximum discarded tests, minimum size of 0, maximum size of 100. | |
265 * | |
266 * @param r The random generator. | |
267 * @param minSuccessful The minimum number of successful tests before a result is reached. | |
268 * @return A result after checking this property. | |
269 */ | |
270 public CheckResult minSuccessful(final Rand r, final int minSuccessful) { | |
271 return check(r, minSuccessful, 500, 0, 100); | |
272 } | |
273 | |
274 /** | |
275 * Checks this property using a {@link Rand#Rand(F, F) standard random generator}, 100 minimum | |
276 * successful checks, the given maximum discarded tests, minimum size of 0, maximum size of 100. | |
277 * | |
278 * @param maxDiscarded The maximum number of tests discarded because they did not satisfy | |
279 * pre-conditions (i.e. {@link #implies(boolean, P1)}). | |
280 * @return A result after checking this property. | |
281 */ | |
282 public CheckResult maxDiscarded(final int maxDiscarded) { | |
283 return check(100, maxDiscarded, 0, 100); | |
284 } | |
285 | |
286 /** | |
287 * Checks this property using a the given random generator}, 100 minimum | |
288 * successful checks, the given maximum discarded tests, minimum size of 0, maximum size of 100. | |
289 * | |
290 * @param r The random generator. | |
291 * @param maxDiscarded The maximum number of tests discarded because they did not satisfy | |
292 * pre-conditions (i.e. {@link #implies(boolean, P1)}). | |
293 * @return A result after checking this property. | |
294 */ | |
295 public CheckResult maxDiscarded(final Rand r, final int maxDiscarded) { | |
296 return check(r, 100, maxDiscarded, 0, 100); | |
297 } | |
298 | |
299 /** | |
300 * Checks this property using a {@link Rand#Rand(F, F) standard random generator}, 100 minimum | |
301 * successful checks, 500 maximum discarded tests, the given minimum size, maximum size of 100. | |
302 * | |
303 * @param minSize The minimum size to use for checking. | |
304 * @return A result after checking this property. | |
305 */ | |
306 public CheckResult minSize(final int minSize) { | |
307 return check(100, 500, minSize, 100); | |
308 } | |
309 | |
310 /** | |
311 * Checks this property using the given random generator, 100 minimum | |
312 * successful checks, 500 maximum discarded tests, the given minimum size, maximum size of 100. | |
313 * | |
314 * @param r The random generator. | |
315 * @param minSize The minimum size to use for checking. | |
316 * @return A result after checking this property. | |
317 */ | |
318 public CheckResult minSize(final Rand r, final int minSize) { | |
319 return check(r, 100, 500, minSize, 100); | |
320 } | |
321 | |
322 /** | |
323 * Checks this property using a {@link Rand#Rand(F, F) standard random generator}, 100 minimum | |
324 * successful checks, 500 maximum discarded tests, minimum size of 0, the given maximum size. | |
325 * | |
326 * @param maxSize The maximum size to use for checking. | |
327 * @return A result after checking this property. | |
328 */ | |
329 public CheckResult maxSize(final int maxSize) { | |
330 return check(100, 500, 0, maxSize); | |
331 } | |
332 | |
333 /** | |
334 * Checks this property using the given random generator, 100 minimum | |
335 * successful checks, 500 maximum discarded tests, minimum size of 0, the given maximum size. | |
336 * | |
337 * @param r The random generator. | |
338 * @param maxSize The maximum size to use for checking. | |
339 * @return A result after checking this property. | |
340 */ | |
341 public CheckResult maxSize(final Rand r, final int maxSize) { | |
342 return check(r, 100, 500, 0, maxSize); | |
343 } | |
344 | |
345 /** | |
346 * Returns a property that produces a result only if the given condition satisfies. The result | |
347 * will be taken from the given property. | |
348 * | |
349 * @param b The condition that, if satisfied, produces the given property. | |
350 * @param p The property to return if the condition satisfies. | |
351 * @return A property that produces a result only if the given condition satisfies. | |
352 */ | |
353 public static Property implies(final boolean b, final P1<Property> p) { | |
354 return b ? p._1() : new Property(new F<Integer, F<Rand, Result>>() { | |
355 public F<Rand, Result> f(final Integer i) { | |
356 return new F<Rand, Result>() { | |
357 public Result f(final Rand r) { | |
358 return noResult(); | |
359 } | |
360 }; | |
361 } | |
362 }); | |
363 } | |
364 | |
365 /** | |
366 * Returns a property from the given function. | |
367 * | |
368 * @param f The function to construct the returned property with. | |
369 * @return A property from the given function. | |
370 */ | |
371 public static Property prop(final F<Integer, F<Rand, Result>> f) { | |
372 return new Property(f); | |
373 } | |
374 | |
375 /** | |
376 * Returns a property that always has the given result. | |
377 * | |
378 * @param r The result of the returned property. | |
379 * @return A property that always has the given result. | |
380 */ | |
381 public static Property prop(final Result r) { | |
382 return new Property(new F<Integer, F<Rand, Result>>() { | |
383 public F<Rand, Result> f(final Integer integer) { | |
384 return new F<Rand, Result>() { | |
385 public Result f(final Rand x) { | |
386 return r; | |
387 } | |
388 }; | |
389 } | |
390 }); | |
391 } | |
392 | |
393 /** | |
394 * Returns a property that is either proven (the given condition satsifies) or falsified | |
395 * otherwise. | |
396 * | |
397 * @param b The condition that, if satisfied, returns a property that is proven; otherwise, the | |
398 * property is falsified. | |
399 * @return A property that is either proven (the given condition satsifies) or falsified | |
400 * otherwise. | |
401 */ | |
402 public static Property prop(final boolean b) { | |
403 return b ? prop(Result.proven(List.<Arg<?>>nil())) : prop(Result.falsified(List.<Arg<?>>nil())); | |
404 } | |
405 | |
406 /** | |
407 * Constructs a property from a generator of results. | |
408 * | |
409 * @param g The generator of results to constructor a property with. | |
410 * @return A property from a generator of results. | |
411 */ | |
412 public static Property fromGen(final Gen<Result> g) { | |
413 return prop(new F<Integer, F<Rand, Result>>() { | |
414 public F<Rand, Result> f(final Integer i) { | |
415 return new F<Rand, Result>() { | |
416 public Result f(final Rand r) { | |
417 return g.gen(i, r); | |
418 } | |
419 }; | |
420 } | |
421 }); | |
422 } | |
423 | |
424 /** | |
425 * Returns a property where its result is derived from universal quantification across the | |
426 * application of its arguments. | |
427 * | |
428 * @param g The generator to produces values from to produce the property with. | |
429 * @param shrink The shrink strategy to use upon falsification. | |
430 * @param f The function to produce properties with results. | |
431 * @return A property where its result is derived from universal quantification across the | |
432 * application of its arguments. | |
433 */ | |
434 public static <A> Property forall(final Gen<A> g, final Shrink<A> shrink, final F<A, P1<Property>> f) { | |
435 return prop(new F<Integer, F<Rand, Result>>() { | |
436 public F<Rand, Result> f(final Integer i) { | |
437 return new F<Rand, Result>() { | |
438 public Result f(final Rand r) { | |
439 final class Util { | |
440 @SuppressWarnings({"IfMayBeConditional"}) | |
441 Option<P2<A, Result>> first(final Stream<A> as, final int shrinks) { | |
442 final Stream<Option<P2<A, Result>>> results = as.map(new F<A, Option<P2<A, Result>>>() { | |
443 public Option<P2<A, Result>> f(final A a) { | |
444 final Result result = exception(f.f(a)).prop(i, r); | |
445 | |
446 return result.toOption().map(new F<Result, P2<A, Result>>() { | |
447 public P2<A, Result> f(final Result result) { | |
448 return p(a, result.provenAsUnfalsified().addArg(arg(a, shrinks))); | |
449 } | |
450 }); | |
451 } | |
452 }); | |
453 | |
454 if (results.isEmpty()) | |
455 return none(); | |
456 else return results.find(new F<Option<P2<A, Result>>, Boolean>() { | |
457 public Boolean f(final Option<P2<A, Result>> o) { | |
458 return failed(o); | |
459 } | |
460 }).orSome(new P1<Option<P2<A, Result>>>() { | |
461 public Option<P2<A, Result>> _1() { | |
462 return results.head(); | |
463 } | |
464 }); | |
465 } | |
466 | |
467 public boolean failed(final Option<P2<A, Result>> o) { | |
468 return o.isSome() && o.some()._2().failed(); | |
469 } | |
470 } | |
471 | |
472 final Util u = new Util(); | |
473 | |
474 Option<P2<A, Result>> x = u.first(Stream.single(g.gen(i, r)), 0); | |
475 final F<P2<A, Result>, Result> __2 = __2(); | |
476 if (u.failed(x)) { | |
477 Option<Result> or; | |
478 int shrinks = 0; | |
479 | |
480 do { | |
481 shrinks++; | |
482 or = x.map(__2); | |
483 x = u.first(shrink.shrink(x.some()._1()), shrinks); | |
484 } | |
485 while (u.failed(x)); | |
486 | |
487 return noResult(or); | |
488 } else | |
489 return noResult(x.map(__2)); | |
490 } | |
491 }; | |
492 } | |
493 }); | |
494 } | |
495 | |
496 /** | |
497 * Returns a property where its result is derived from universal quantification across the | |
498 * application of its arguments. | |
499 * | |
500 * @param aa The arbitrrary to produces values from to produce the property with. | |
501 * @param sa The shrink strategy to use upon falsification. | |
502 * @param f The function to produce properties with results. | |
503 * @return A property where its result is derived from universal quantification across the | |
504 * application of its arguments. | |
505 */ | |
506 public static <A> Property propertyP(final Arbitrary<A> aa, final Shrink<A> sa, final F<A, P1<Property>> f) { | |
507 return forall(aa.gen, sa, f); | |
508 } | |
509 | |
510 /** | |
511 * Returns a property where its result is derived from universal quantification across the | |
512 * application of its arguments. | |
513 * | |
514 * @param aa The arbitrrary to produces values from to produce the property with. | |
515 * @param sa The shrink strategy to use upon falsification. | |
516 * @param f The function to produce properties with results. | |
517 * @return A property where its result is derived from universal quantification across the | |
518 * application of its arguments. | |
519 */ | |
520 public static <A> Property property(final Arbitrary<A> aa, final Shrink<A> sa, final F<A, Property> f) { | |
521 return propertyP(aa, sa, P1.curry(f)); | |
522 } | |
523 | |
524 /** | |
525 * Returns a property where its result is derived from universal quantification across the | |
526 * application of its arguments. No shrinking occurs upon falsification. | |
527 * | |
528 * @param aa The arbitrrary to produces values from to produce the property with. | |
529 * @param f The function to produce properties with results. | |
530 * @return A property where its result is derived from universal quantification across the | |
531 * application of its arguments. | |
532 */ | |
533 public static <A> Property propertyP(final Arbitrary<A> aa, final F<A, P1<Property>> f) { | |
534 return propertyP(aa, Shrink.<A>empty(), f); | |
535 } | |
536 | |
537 /** | |
538 * Returns a property where its result is derived from universal quantification across the | |
539 * application of its arguments. No shrinking occurs upon falsification. | |
540 * | |
541 * @param aa The arbitrrary to produces values from to produce the property with. | |
542 * @param f The function to produce properties with results. | |
543 * @return A property where its result is derived from universal quantification across the | |
544 * application of its arguments. | |
545 */ | |
546 public static <A> Property property(final Arbitrary<A> aa, final F<A, Property> f) { | |
547 return propertyP(aa, P1.curry(f)); | |
548 } | |
549 | |
550 | |
551 /** | |
552 * Returns a property where its result is derived from universal quantification across the | |
553 * application of its arguments. | |
554 * | |
555 * @param aa The arbitrrary to produces values from to produce the property with. | |
556 * @param ab The arbitrrary to produces values from to produce the property with. | |
557 * @param sa The shrink strategy to use upon falsification. | |
558 * @param sb The shrink strategy to use upon falsification. | |
559 * @param f The function to produce properties with results. | |
560 * @return A property where its result is derived from universal quantification across the | |
561 * application of its arguments. | |
562 */ | |
563 public static <A, B> Property propertyP(final Arbitrary<A> aa, final Arbitrary<B> ab, final Shrink<A> sa, final Shrink<B> sb, final F<A, F<B, P1<Property>>> f) { | |
564 return property(aa, sa, new F<A, Property>() { | |
565 public Property f(final A a) { | |
566 return propertyP(ab, sb, new F<B, P1<Property>>() { | |
567 public P1<Property> f(final B b) { | |
568 return f.f(a).f(b); | |
569 } | |
570 }); | |
571 } | |
572 }); | |
573 } | |
574 | |
575 /** | |
576 * Returns a property where its result is derived from universal quantification across the | |
577 * application of its arguments. | |
578 * | |
579 * @param aa The arbitrrary to produces values from to produce the property with. | |
580 * @param ab The arbitrrary to produces values from to produce the property with. | |
581 * @param sa The shrink strategy to use upon falsification. | |
582 * @param sb The shrink strategy to use upon falsification. | |
583 * @param f The function to produce properties with results. | |
584 * @return A property where its result is derived from universal quantification across the | |
585 * application of its arguments. | |
586 */ | |
587 public static <A, B> Property property(final Arbitrary<A> aa, final Arbitrary<B> ab, final Shrink<A> sa, final Shrink<B> sb, final F<A, F<B, Property>> f) { | |
588 return propertyP(aa, ab, sa, sb, compose2(P.<Property>p1(), f)); | |
589 } | |
590 | |
591 /** | |
592 * Returns a property where its result is derived from universal quantification across the | |
593 * application of its arguments. No shrinking occurs upon falsification. | |
594 * | |
595 * @param aa The arbitrrary to produces values from to produce the property with. | |
596 * @param ab The arbitrrary to produces values from to produce the property with. | |
597 * @param f The function to produce properties with results. | |
598 * @return A property where its result is derived from universal quantification across the | |
599 * application of its arguments. | |
600 */ | |
601 public static <A, B> Property propertyP(final Arbitrary<A> aa, final Arbitrary<B> ab, final F<A, F<B, P1<Property>>> f) { | |
602 return property(aa, new F<A, Property>() { | |
603 public Property f(final A a) { | |
604 return propertyP(ab, new F<B, P1<Property>>() { | |
605 public P1<Property> f(final B b) { | |
606 return f.f(a).f(b); | |
607 } | |
608 }); | |
609 } | |
610 }); | |
611 } | |
612 | |
613 /** | |
614 * Returns a property where its result is derived from universal quantification across the | |
615 * application of its arguments. No shrinking occurs upon falsification. | |
616 * | |
617 * @param aa The arbitrrary to produces values from to produce the property with. | |
618 * @param ab The arbitrrary to produces values from to produce the property with. | |
619 * @param f The function to produce properties with results. | |
620 * @return A property where its result is derived from universal quantification across the | |
621 * application of its arguments. | |
622 */ | |
623 public static <A, B> Property property(final Arbitrary<A> aa, final Arbitrary<B> ab, final F<A, F<B, Property>> f) { | |
624 return propertyP(aa, ab, compose2(P.<Property>p1(), f)); | |
625 } | |
626 | |
627 /** | |
628 * Returns a property where its result is derived from universal quantification across the | |
629 * application of its arguments. | |
630 * | |
631 * @param aa The arbitrrary to produces values from to produce the property with. | |
632 * @param ab The arbitrrary to produces values from to produce the property with. | |
633 * @param sa The shrink strategy to use upon falsification. | |
634 * @param sb The shrink strategy to use upon falsification. | |
635 * @param f The function to produce properties with results. | |
636 * @return A property where its result is derived from universal quantification across the | |
637 * application of its arguments. | |
638 */ | |
639 public static <A, B> Property propertyP(final Arbitrary<A> aa, final Arbitrary<B> ab, final Shrink<A> sa, final Shrink<B> sb, final F2<A, B, P1<Property>> f) { | |
640 return propertyP(aa, ab, sa, sb, curry(f)); | |
641 } | |
642 | |
643 /** | |
644 * Returns a property where its result is derived from universal quantification across the | |
645 * application of its arguments. | |
646 * | |
647 * @param aa The arbitrrary to produces values from to produce the property with. | |
648 * @param ab The arbitrrary to produces values from to produce the property with. | |
649 * @param sa The shrink strategy to use upon falsification. | |
650 * @param sb The shrink strategy to use upon falsification. | |
651 * @param f The function to produce properties with results. | |
652 * @return A property where its result is derived from universal quantification across the | |
653 * application of its arguments. | |
654 */ | |
655 public static <A, B> Property property(final Arbitrary<A> aa, final Arbitrary<B> ab, final Shrink<A> sa, final Shrink<B> sb, final F2<A, B, Property> f) { | |
656 return propertyP(aa, ab, sa, sb, compose2(P.<Property>p1(), curry(f))); | |
657 } | |
658 | |
659 /** | |
660 * Returns a property where its result is derived from universal quantification across the | |
661 * application of its arguments. No shrinking occurs upon falsification. | |
662 * | |
663 * @param aa The arbitrrary to produces values from to produce the property with. | |
664 * @param ab The arbitrrary to produces values from to produce the property with. | |
665 * @param f The function to produce properties with results. | |
666 * @return A property where its result is derived from universal quantification across the | |
667 * application of its arguments. | |
668 */ | |
669 public static <A, B> Property propertyP(final Arbitrary<A> aa, final Arbitrary<B> ab, final F2<A, B, P1<Property>> f) { | |
670 return propertyP(aa, ab, curry(f)); | |
671 } | |
672 | |
673 /** | |
674 * Returns a property where its result is derived from universal quantification across the | |
675 * application of its arguments. No shrinking occurs upon falsification. | |
676 * | |
677 * @param aa The arbitrrary to produces values from to produce the property with. | |
678 * @param ab The arbitrrary to produces values from to produce the property with. | |
679 * @param f The function to produce properties with results. | |
680 * @return A property where its result is derived from universal quantification across the | |
681 * application of its arguments. | |
682 */ | |
683 public static <A, B> Property property(final Arbitrary<A> aa, final Arbitrary<B> ab, final F2<A, B, Property> f) { | |
684 return propertyP(aa, ab, compose2(P.<Property>p1(), curry(f))); | |
685 } | |
686 | |
687 /** | |
688 * Returns a property where its result is derived from universal quantification across the | |
689 * application of its arguments. | |
690 * | |
691 * @param aa The arbitrrary to produces values from to produce the property with. | |
692 * @param ab The arbitrrary to produces values from to produce the property with. | |
693 * @param ac The arbitrrary to produces values from to produce the property with. | |
694 * @param sa The shrink strategy to use upon falsification. | |
695 * @param sb The shrink strategy to use upon falsification. | |
696 * @param sc The shrink strategy to use upon falsification. | |
697 * @param f The function to produce properties with results. | |
698 * @return A property where its result is derived from universal quantification across the | |
699 * application of its arguments. | |
700 */ | |
701 public static <A, B, C> Property property(final Arbitrary<A> aa, | |
702 final Arbitrary<B> ab, | |
703 final Arbitrary<C> ac, | |
704 final Shrink<A> sa, | |
705 final Shrink<B> sb, | |
706 final Shrink<C> sc, | |
707 final F<A, F<B, F<C, Property>>> f) { | |
708 return property(aa, ab, sa, sb, new F<A, F<B, Property>>() { | |
709 public F<B, Property> f(final A a) { | |
710 return new F<B, Property>() { | |
711 public Property f(final B b) { | |
712 return property(ac, sc, new F<C, Property>() { | |
713 public Property f(final C c) { | |
714 return f.f(a).f(b).f(c); | |
715 } | |
716 }); | |
717 } | |
718 }; | |
719 } | |
720 }); | |
721 } | |
722 | |
723 /** | |
724 * Returns a property where its result is derived from universal quantification across the | |
725 * application of its arguments. No shrinking occurs upon falsification. | |
726 * | |
727 * @param aa The arbitrrary to produces values from to produce the property with. | |
728 * @param ab The arbitrrary to produces values from to produce the property with. | |
729 * @param ac The arbitrrary to produces values from to produce the property with. | |
730 * @param f The function to produce properties with results. | |
731 * @return A property where its result is derived from universal quantification across the | |
732 * application of its arguments. | |
733 */ | |
734 public static <A, B, C> Property property(final Arbitrary<A> aa, | |
735 final Arbitrary<B> ab, | |
736 final Arbitrary<C> ac, | |
737 final F<A, F<B, F<C, Property>>> f) { | |
738 return property(aa, ab, new F<A, F<B, Property>>() { | |
739 public F<B, Property> f(final A a) { | |
740 return new F<B, Property>() { | |
741 public Property f(final B b) { | |
742 return property(ac, new F<C, Property>() { | |
743 public Property f(final C c) { | |
744 return f.f(a).f(b).f(c); | |
745 } | |
746 }); | |
747 } | |
748 }; | |
749 } | |
750 }); | |
751 } | |
752 | |
753 /** | |
754 * Returns a property where its result is derived from universal quantification across the | |
755 * application of its arguments. | |
756 * | |
757 * @param aa The arbitrrary to produces values from to produce the property with. | |
758 * @param ab The arbitrrary to produces values from to produce the property with. | |
759 * @param ac The arbitrrary to produces values from to produce the property with. | |
760 * @param sa The shrink strategy to use upon falsification. | |
761 * @param sb The shrink strategy to use upon falsification. | |
762 * @param sc The shrink strategy to use upon falsification. | |
763 * @param f The function to produce properties with results. | |
764 * @return A property where its result is derived from universal quantification across the | |
765 * application of its arguments. | |
766 */ | |
767 public static <A, B, C> Property property(final Arbitrary<A> aa, | |
768 final Arbitrary<B> ab, | |
769 final Arbitrary<C> ac, | |
770 final Shrink<A> sa, | |
771 final Shrink<B> sb, | |
772 final Shrink<C> sc, | |
773 final F3<A, B, C, Property> f) { | |
774 return property(aa, ab, ac, sa, sb, sc, curry(f)); | |
775 } | |
776 | |
777 /** | |
778 * Returns a property where its result is derived from universal quantification across the | |
779 * application of its arguments. No shrinking occurs upon falsification. | |
780 * | |
781 * @param aa The arbitrrary to produces values from to produce the property with. | |
782 * @param ab The arbitrrary to produces values from to produce the property with. | |
783 * @param ac The arbitrrary to produces values from to produce the property with. | |
784 * @param f The function to produce properties with results. | |
785 * @return A property where its result is derived from universal quantification across the | |
786 * application of its arguments. | |
787 */ | |
788 public static <A, B, C> Property property(final Arbitrary<A> aa, | |
789 final Arbitrary<B> ab, | |
790 final Arbitrary<C> ac, | |
791 final F3<A, B, C, Property> f) { | |
792 return property(aa, ab, ac, curry(f)); | |
793 } | |
794 | |
795 /** | |
796 * Returns a property where its result is derived from universal quantification across the | |
797 * application of its arguments. | |
798 * | |
799 * @param aa The arbitrrary to produces values from to produce the property with. | |
800 * @param ab The arbitrrary to produces values from to produce the property with. | |
801 * @param ac The arbitrrary to produces values from to produce the property with. | |
802 * @param ad The arbitrrary to produces values from to produce the property with. | |
803 * @param sa The shrink strategy to use upon falsification. | |
804 * @param sb The shrink strategy to use upon falsification. | |
805 * @param sc The shrink strategy to use upon falsification. | |
806 * @param sd The shrink strategy to use upon falsification. | |
807 * @param f The function to produce properties with results. | |
808 * @return A property where its result is derived from universal quantification across the | |
809 * application of its arguments. | |
810 */ | |
811 public static <A, B, C, D> Property property(final Arbitrary<A> aa, | |
812 final Arbitrary<B> ab, | |
813 final Arbitrary<C> ac, | |
814 final Arbitrary<D> ad, | |
815 final Shrink<A> sa, | |
816 final Shrink<B> sb, | |
817 final Shrink<C> sc, | |
818 final Shrink<D> sd, | |
819 final F<A, F<B, F<C, F<D, Property>>>> f) { | |
820 return property(aa, ab, ac, sa, sb, sc, new F<A, F<B, F<C, Property>>>() { | |
821 public F<B, F<C, Property>> f(final A a) { | |
822 return new F<B, F<C, Property>>() { | |
823 public F<C, Property> f(final B b) { | |
824 return new F<C, Property>() { | |
825 public Property f(final C c) { | |
826 return property(ad, sd, new F<D, Property>() { | |
827 public Property f(final D d) { | |
828 return f.f(a).f(b).f(c).f(d); | |
829 } | |
830 }); | |
831 } | |
832 }; | |
833 } | |
834 }; | |
835 } | |
836 }); | |
837 } | |
838 | |
839 /** | |
840 * Returns a property where its result is derived from universal quantification across the | |
841 * application of its arguments. No shrinking occurs upon falsification. | |
842 * | |
843 * @param aa The arbitrrary to produces values from to produce the property with. | |
844 * @param ab The arbitrrary to produces values from to produce the property with. | |
845 * @param ac The arbitrrary to produces values from to produce the property with. | |
846 * @param ad The arbitrrary to produces values from to produce the property with. | |
847 * @param f The function to produce properties with results. | |
848 * @return A property where its result is derived from universal quantification across the | |
849 * application of its arguments. | |
850 */ | |
851 public static <A, B, C, D> Property property(final Arbitrary<A> aa, | |
852 final Arbitrary<B> ab, | |
853 final Arbitrary<C> ac, | |
854 final Arbitrary<D> ad, | |
855 final F<A, F<B, F<C, F<D, Property>>>> f) { | |
856 return property(aa, ab, ac, new F<A, F<B, F<C, Property>>>() { | |
857 public F<B, F<C, Property>> f(final A a) { | |
858 return new F<B, F<C, Property>>() { | |
859 public F<C, Property> f(final B b) { | |
860 return new F<C, Property>() { | |
861 public Property f(final C c) { | |
862 return property(ad, new F<D, Property>() { | |
863 public Property f(final D d) { | |
864 return f.f(a).f(b).f(c).f(d); | |
865 } | |
866 }); | |
867 } | |
868 }; | |
869 } | |
870 }; | |
871 } | |
872 }); | |
873 } | |
874 | |
875 /** | |
876 * Returns a property where its result is derived from universal quantification across the | |
877 * application of its arguments. | |
878 * | |
879 * @param aa The arbitrrary to produces values from to produce the property with. | |
880 * @param ab The arbitrrary to produces values from to produce the property with. | |
881 * @param ac The arbitrrary to produces values from to produce the property with. | |
882 * @param ad The arbitrrary to produces values from to produce the property with. | |
883 * @param sa The shrink strategy to use upon falsification. | |
884 * @param sb The shrink strategy to use upon falsification. | |
885 * @param sc The shrink strategy to use upon falsification. | |
886 * @param sd The shrink strategy to use upon falsification. | |
887 * @param f The function to produce properties with results. | |
888 * @return A property where its result is derived from universal quantification across the | |
889 * application of its arguments. | |
890 */ | |
891 public static <A, B, C, D> Property property(final Arbitrary<A> aa, | |
892 final Arbitrary<B> ab, | |
893 final Arbitrary<C> ac, | |
894 final Arbitrary<D> ad, | |
895 final Shrink<A> sa, | |
896 final Shrink<B> sb, | |
897 final Shrink<C> sc, | |
898 final Shrink<D> sd, | |
899 final F4<A, B, C, D, Property> f) { | |
900 return property(aa, ab, ac, ad, sa, sb, sc, sd, curry(f)); | |
901 } | |
902 | |
903 /** | |
904 * Returns a property where its result is derived from universal quantification across the | |
905 * application of its arguments. No shrinking occurs upon falsification. | |
906 * | |
907 * @param aa The arbitrrary to produces values from to produce the property with. | |
908 * @param ab The arbitrrary to produces values from to produce the property with. | |
909 * @param ac The arbitrrary to produces values from to produce the property with. | |
910 * @param ad The arbitrrary to produces values from to produce the property with. | |
911 * @param f The function to produce properties with results. | |
912 * @return A property where its result is derived from universal quantification across the | |
913 * application of its arguments. | |
914 */ | |
915 public static <A, B, C, D> Property property(final Arbitrary<A> aa, | |
916 final Arbitrary<B> ab, | |
917 final Arbitrary<C> ac, | |
918 final Arbitrary<D> ad, | |
919 final F4<A, B, C, D, Property> f) { | |
920 return property(aa, ab, ac, ad, curry(f)); | |
921 } | |
922 | |
923 /** | |
924 * Returns a property where its result is derived from universal quantification across the | |
925 * application of its arguments. | |
926 * | |
927 * @param aa The arbitrrary to produces values from to produce the property with. | |
928 * @param ab The arbitrrary to produces values from to produce the property with. | |
929 * @param ac The arbitrrary to produces values from to produce the property with. | |
930 * @param ad The arbitrrary to produces values from to produce the property with. | |
931 * @param ae The arbitrrary to produces values from to produce the property with. | |
932 * @param sa The shrink strategy to use upon falsification. | |
933 * @param sb The shrink strategy to use upon falsification. | |
934 * @param sc The shrink strategy to use upon falsification. | |
935 * @param sd The shrink strategy to use upon falsification. | |
936 * @param se The shrink strategy to use upon falsification. | |
937 * @param f The function to produce properties with results. | |
938 * @return A property where its result is derived from universal quantification across the | |
939 * application of its arguments. | |
940 */ | |
941 public static <A, B, C, D, E> Property property(final Arbitrary<A> aa, | |
942 final Arbitrary<B> ab, | |
943 final Arbitrary<C> ac, | |
944 final Arbitrary<D> ad, | |
945 final Arbitrary<E> ae, | |
946 final Shrink<A> sa, | |
947 final Shrink<B> sb, | |
948 final Shrink<C> sc, | |
949 final Shrink<D> sd, | |
950 final Shrink<E> se, | |
951 final F<A, F<B, F<C, F<D, F<E, Property>>>>> f) { | |
952 return property(aa, ab, ac, ad, sa, sb, sc, sd, new F<A, F<B, F<C, F<D, Property>>>>() { | |
953 public F<B, F<C, F<D, Property>>> f(final A a) { | |
954 return new F<B, F<C, F<D, Property>>>() { | |
955 public F<C, F<D, Property>> f(final B b) { | |
956 return new F<C, F<D, Property>>() { | |
957 public F<D, Property> f(final C c) { | |
958 return new F<D, Property>() { | |
959 public Property f(final D d) { | |
960 return property(ae, se, new F<E, Property>() { | |
961 public Property f(final E e) { | |
962 return f.f(a).f(b).f(c).f(d).f(e); | |
963 } | |
964 }); | |
965 } | |
966 }; | |
967 } | |
968 }; | |
969 } | |
970 }; | |
971 } | |
972 }); | |
973 } | |
974 | |
975 /** | |
976 * Returns a property where its result is derived from universal quantification across the | |
977 * application of its arguments. No shrinking occurs upon falsification. | |
978 * | |
979 * @param aa The arbitrrary to produces values from to produce the property with. | |
980 * @param ab The arbitrrary to produces values from to produce the property with. | |
981 * @param ac The arbitrrary to produces values from to produce the property with. | |
982 * @param ad The arbitrrary to produces values from to produce the property with. | |
983 * @param ae The arbitrrary to produces values from to produce the property with. | |
984 * @param f The function to produce properties with results. | |
985 * @return A property where its result is derived from universal quantification across the | |
986 * application of its arguments. | |
987 */ | |
988 public static <A, B, C, D, E> Property property(final Arbitrary<A> aa, | |
989 final Arbitrary<B> ab, | |
990 final Arbitrary<C> ac, | |
991 final Arbitrary<D> ad, | |
992 final Arbitrary<E> ae, | |
993 final F<A, F<B, F<C, F<D, F<E, Property>>>>> f) { | |
994 return property(aa, ab, ac, ad, new F<A, F<B, F<C, F<D, Property>>>>() { | |
995 public F<B, F<C, F<D, Property>>> f(final A a) { | |
996 return new F<B, F<C, F<D, Property>>>() { | |
997 public F<C, F<D, Property>> f(final B b) { | |
998 return new F<C, F<D, Property>>() { | |
999 public F<D, Property> f(final C c) { | |
1000 return new F<D, Property>() { | |
1001 public Property f(final D d) { | |
1002 return property(ae, new F<E, Property>() { | |
1003 public Property f(final E e) { | |
1004 return f.f(a).f(b).f(c).f(d).f(e); | |
1005 } | |
1006 }); | |
1007 } | |
1008 }; | |
1009 } | |
1010 }; | |
1011 } | |
1012 }; | |
1013 } | |
1014 }); | |
1015 } | |
1016 | |
1017 /** | |
1018 * Returns a property where its result is derived from universal quantification across the | |
1019 * application of its arguments. | |
1020 * | |
1021 * @param aa The arbitrrary to produces values from to produce the property with. | |
1022 * @param ab The arbitrrary to produces values from to produce the property with. | |
1023 * @param ac The arbitrrary to produces values from to produce the property with. | |
1024 * @param ad The arbitrrary to produces values from to produce the property with. | |
1025 * @param ae The arbitrrary to produces values from to produce the property with. | |
1026 * @param sa The shrink strategy to use upon falsification. | |
1027 * @param sb The shrink strategy to use upon falsification. | |
1028 * @param sc The shrink strategy to use upon falsification. | |
1029 * @param sd The shrink strategy to use upon falsification. | |
1030 * @param se The shrink strategy to use upon falsification. | |
1031 * @param f The function to produce properties with results. | |
1032 * @return A property where its result is derived from universal quantification across the | |
1033 * application of its arguments. | |
1034 */ | |
1035 public static <A, B, C, D, E> Property property(final Arbitrary<A> aa, | |
1036 final Arbitrary<B> ab, | |
1037 final Arbitrary<C> ac, | |
1038 final Arbitrary<D> ad, | |
1039 final Arbitrary<E> ae, | |
1040 final Shrink<A> sa, | |
1041 final Shrink<B> sb, | |
1042 final Shrink<C> sc, | |
1043 final Shrink<D> sd, | |
1044 final Shrink<E> se, | |
1045 final F5<A, B, C, D, E, Property> f) { | |
1046 return property(aa, ab, ac, ad, ae, sa, sb, sc, sd, se, curry(f)); | |
1047 } | |
1048 | |
1049 /** | |
1050 * Returns a property where its result is derived from universal quantification across the | |
1051 * application of its arguments. No shrinking occurs upon falsification. | |
1052 * | |
1053 * @param aa The arbitrrary to produces values from to produce the property with. | |
1054 * @param ab The arbitrrary to produces values from to produce the property with. | |
1055 * @param ac The arbitrrary to produces values from to produce the property with. | |
1056 * @param ad The arbitrrary to produces values from to produce the property with. | |
1057 * @param ae The arbitrrary to produces values from to produce the property with. | |
1058 * @param f The function to produce properties with results. | |
1059 * @return A property where its result is derived from universal quantification across the | |
1060 * application of its arguments. | |
1061 */ | |
1062 public static <A, B, C, D, E> Property property(final Arbitrary<A> aa, | |
1063 final Arbitrary<B> ab, | |
1064 final Arbitrary<C> ac, | |
1065 final Arbitrary<D> ad, | |
1066 final Arbitrary<E> ae, | |
1067 final F5<A, B, C, D, E, Property> f) { | |
1068 return property(aa, ab, ac, ad, ae, curry(f)); | |
1069 } | |
1070 | |
1071 /** | |
1072 * Returns a property where its result is derived from universal quantification across the | |
1073 * application of its arguments. | |
1074 * | |
1075 * @param aa The arbitrrary to produces values from to produce the property with. | |
1076 * @param ab The arbitrrary to produces values from to produce the property with. | |
1077 * @param ac The arbitrrary to produces values from to produce the property with. | |
1078 * @param ad The arbitrrary to produces values from to produce the property with. | |
1079 * @param ae The arbitrrary to produces values from to produce the property with. | |
1080 * @param af The arbitrrary to produces values from to produce the property with. | |
1081 * @param sa The shrink strategy to use upon falsification. | |
1082 * @param sb The shrink strategy to use upon falsification. | |
1083 * @param sc The shrink strategy to use upon falsification. | |
1084 * @param sd The shrink strategy to use upon falsification. | |
1085 * @param se The shrink strategy to use upon falsification. | |
1086 * @param sf The shrink strategy to use upon falsification. | |
1087 * @param f The function to produce properties with results. | |
1088 * @return A property where its result is derived from universal quantification across the | |
1089 * application of its arguments. | |
1090 */ | |
1091 public static <A, B, C, D, E, F$> Property property(final Arbitrary<A> aa, | |
1092 final Arbitrary<B> ab, | |
1093 final Arbitrary<C> ac, | |
1094 final Arbitrary<D> ad, | |
1095 final Arbitrary<E> ae, | |
1096 final Arbitrary<F$> af, | |
1097 final Shrink<A> sa, | |
1098 final Shrink<B> sb, | |
1099 final Shrink<C> sc, | |
1100 final Shrink<D> sd, | |
1101 final Shrink<E> se, | |
1102 final Shrink<F$> sf, | |
1103 final F<A, F<B, F<C, F<D, F<E, F<F$, Property>>>>>> f) { | |
1104 return property(aa, ab, ac, ad, ae, sa, sb, sc, sd, se, new F<A, F<B, F<C, F<D, F<E, Property>>>>>() { | |
1105 public F<B, F<C, F<D, F<E, Property>>>> f(final A a) { | |
1106 return new F<B, F<C, F<D, F<E, Property>>>>() { | |
1107 public F<C, F<D, F<E, Property>>> f(final B b) { | |
1108 return new F<C, F<D, F<E, Property>>>() { | |
1109 public F<D, F<E, Property>> f(final C c) { | |
1110 return new F<D, F<E, Property>>() { | |
1111 public F<E, Property> f(final D d) { | |
1112 return new F<E, Property>() { | |
1113 public Property f(final E e) { | |
1114 return property(af, sf, new F<F$, Property>() { | |
1115 public Property f(final F$ f$) { | |
1116 return f.f(a).f(b).f(c).f(d).f(e).f(f$); | |
1117 } | |
1118 }); | |
1119 } | |
1120 }; | |
1121 } | |
1122 }; | |
1123 } | |
1124 }; | |
1125 } | |
1126 }; | |
1127 } | |
1128 }); | |
1129 } | |
1130 | |
1131 /** | |
1132 * Returns a property where its result is derived from universal quantification across the | |
1133 * application of its arguments. No shrinking occurs upon falsification. | |
1134 * | |
1135 * @param aa The arbitrrary to produces values from to produce the property with. | |
1136 * @param ab The arbitrrary to produces values from to produce the property with. | |
1137 * @param ac The arbitrrary to produces values from to produce the property with. | |
1138 * @param ad The arbitrrary to produces values from to produce the property with. | |
1139 * @param ae The arbitrrary to produces values from to produce the property with. | |
1140 * @param af The arbitrrary to produces values from to produce the property with. | |
1141 * @param f The function to produce properties with results. | |
1142 * @return A property where its result is derived from universal quantification across the | |
1143 * application of its arguments. | |
1144 */ | |
1145 public static <A, B, C, D, E, F$> Property property(final Arbitrary<A> aa, | |
1146 final Arbitrary<B> ab, | |
1147 final Arbitrary<C> ac, | |
1148 final Arbitrary<D> ad, | |
1149 final Arbitrary<E> ae, | |
1150 final Arbitrary<F$> af, | |
1151 final F<A, F<B, F<C, F<D, F<E, F<F$, Property>>>>>> f) { | |
1152 return property(aa, ab, ac, ad, ae, new F<A, F<B, F<C, F<D, F<E, Property>>>>>() { | |
1153 public F<B, F<C, F<D, F<E, Property>>>> f(final A a) { | |
1154 return new F<B, F<C, F<D, F<E, Property>>>>() { | |
1155 public F<C, F<D, F<E, Property>>> f(final B b) { | |
1156 return new F<C, F<D, F<E, Property>>>() { | |
1157 public F<D, F<E, Property>> f(final C c) { | |
1158 return new F<D, F<E, Property>>() { | |
1159 public F<E, Property> f(final D d) { | |
1160 return new F<E, Property>() { | |
1161 public Property f(final E e) { | |
1162 return property(af, new F<F$, Property>() { | |
1163 public Property f(final F$ f$) { | |
1164 return f.f(a).f(b).f(c).f(d).f(e).f(f$); | |
1165 } | |
1166 }); | |
1167 } | |
1168 }; | |
1169 } | |
1170 }; | |
1171 } | |
1172 }; | |
1173 } | |
1174 }; | |
1175 } | |
1176 }); | |
1177 } | |
1178 | |
1179 /** | |
1180 * Returns a property where its result is derived from universal quantification across the | |
1181 * application of its arguments. | |
1182 * | |
1183 * @param aa The arbitrrary to produces values from to produce the property with. | |
1184 * @param ab The arbitrrary to produces values from to produce the property with. | |
1185 * @param ac The arbitrrary to produces values from to produce the property with. | |
1186 * @param ad The arbitrrary to produces values from to produce the property with. | |
1187 * @param ae The arbitrrary to produces values from to produce the property with. | |
1188 * @param af The arbitrrary to produces values from to produce the property with. | |
1189 * @param sa The shrink strategy to use upon falsification. | |
1190 * @param sb The shrink strategy to use upon falsification. | |
1191 * @param sc The shrink strategy to use upon falsification. | |
1192 * @param sd The shrink strategy to use upon falsification. | |
1193 * @param se The shrink strategy to use upon falsification. | |
1194 * @param sf The shrink strategy to use upon falsification. | |
1195 * @param f The function to produce properties with results. | |
1196 * @return A property where its result is derived from universal quantification across the | |
1197 * application of its arguments. | |
1198 */ | |
1199 public static <A, B, C, D, E, F$> Property property(final Arbitrary<A> aa, | |
1200 final Arbitrary<B> ab, | |
1201 final Arbitrary<C> ac, | |
1202 final Arbitrary<D> ad, | |
1203 final Arbitrary<E> ae, | |
1204 final Arbitrary<F$> af, | |
1205 final Shrink<A> sa, | |
1206 final Shrink<B> sb, | |
1207 final Shrink<C> sc, | |
1208 final Shrink<D> sd, | |
1209 final Shrink<E> se, | |
1210 final Shrink<F$> sf, | |
1211 final F6<A, B, C, D, E, F$, Property> f) { | |
1212 return property(aa, ab, ac, ad, ae, af, sa, sb, sc, sd, se, sf, curry(f)); | |
1213 } | |
1214 | |
1215 /** | |
1216 * Returns a property where its result is derived from universal quantification across the | |
1217 * application of its arguments. No shrinking occurs upon falsification. | |
1218 * | |
1219 * @param aa The arbitrrary to produces values from to produce the property with. | |
1220 * @param ab The arbitrrary to produces values from to produce the property with. | |
1221 * @param ac The arbitrrary to produces values from to produce the property with. | |
1222 * @param ad The arbitrrary to produces values from to produce the property with. | |
1223 * @param ae The arbitrrary to produces values from to produce the property with. | |
1224 * @param af The arbitrrary to produces values from to produce the property with. | |
1225 * @param f The function to produce properties with results. | |
1226 * @return A property where its result is derived from universal quantification across the | |
1227 * application of its arguments. | |
1228 */ | |
1229 public static <A, B, C, D, E, F$> Property property(final Arbitrary<A> aa, | |
1230 final Arbitrary<B> ab, | |
1231 final Arbitrary<C> ac, | |
1232 final Arbitrary<D> ad, | |
1233 final Arbitrary<E> ae, | |
1234 final Arbitrary<F$> af, | |
1235 final F6<A, B, C, D, E, F$, Property> f) { | |
1236 return property(aa, ab, ac, ad, ae, af, curry(f)); | |
1237 } | |
1238 | |
1239 /** | |
1240 * Returns a property where its result is derived from universal quantification across the | |
1241 * application of its arguments. | |
1242 * | |
1243 * @param aa The arbitrrary to produces values from to produce the property with. | |
1244 * @param ab The arbitrrary to produces values from to produce the property with. | |
1245 * @param ac The arbitrrary to produces values from to produce the property with. | |
1246 * @param ad The arbitrrary to produces values from to produce the property with. | |
1247 * @param ae The arbitrrary to produces values from to produce the property with. | |
1248 * @param af The arbitrrary to produces values from to produce the property with. | |
1249 * @param ag The arbitrrary to produces values from to produce the property with. | |
1250 * @param sa The shrink strategy to use upon falsification. | |
1251 * @param sb The shrink strategy to use upon falsification. | |
1252 * @param sc The shrink strategy to use upon falsification. | |
1253 * @param sd The shrink strategy to use upon falsification. | |
1254 * @param se The shrink strategy to use upon falsification. | |
1255 * @param sf The shrink strategy to use upon falsification. | |
1256 * @param sg The shrink strategy to use upon falsification. | |
1257 * @param f The function to produce properties with results. | |
1258 * @return A property where its result is derived from universal quantification across the | |
1259 * application of its arguments. | |
1260 */ | |
1261 public static <A, B, C, D, E, F$, G> Property property(final Arbitrary<A> aa, | |
1262 final Arbitrary<B> ab, | |
1263 final Arbitrary<C> ac, | |
1264 final Arbitrary<D> ad, | |
1265 final Arbitrary<E> ae, | |
1266 final Arbitrary<F$> af, | |
1267 final Arbitrary<G> ag, | |
1268 final Shrink<A> sa, | |
1269 final Shrink<B> sb, | |
1270 final Shrink<C> sc, | |
1271 final Shrink<D> sd, | |
1272 final Shrink<E> se, | |
1273 final Shrink<F$> sf, | |
1274 final Shrink<G> sg, | |
1275 final F<A, F<B, F<C, F<D, F<E, F<F$, F<G, Property>>>>>>> f) { | |
1276 return property(aa, ab, ac, ad, ae, af, sa, sb, sc, sd, se, sf, new F<A, F<B, F<C, F<D, F<E, F<F$, Property>>>>>>() { | |
1277 public F<B, F<C, F<D, F<E, F<F$, Property>>>>> f(final A a) { | |
1278 return new F<B, F<C, F<D, F<E, F<F$, Property>>>>>() { | |
1279 public F<C, F<D, F<E, F<F$, Property>>>> f(final B b) { | |
1280 return new F<C, F<D, F<E, F<F$, Property>>>>() { | |
1281 public F<D, F<E, F<F$, Property>>> f(final C c) { | |
1282 return new F<D, F<E, F<F$, Property>>>() { | |
1283 public F<E, F<F$, Property>> f(final D d) { | |
1284 return new F<E, F<F$, Property>>() { | |
1285 public F<F$, Property> f(final E e) { | |
1286 return new F<F$, Property>() { | |
1287 public Property f(final F$ f$) { | |
1288 return property(ag, sg, new F<G, Property>() { | |
1289 public Property f(final G g) { | |
1290 return f.f(a).f(b).f(c).f(d).f(e).f(f$).f(g); | |
1291 } | |
1292 }); | |
1293 } | |
1294 }; | |
1295 } | |
1296 }; | |
1297 } | |
1298 }; | |
1299 } | |
1300 }; | |
1301 } | |
1302 }; | |
1303 } | |
1304 }); | |
1305 } | |
1306 | |
1307 /** | |
1308 * Returns a property where its result is derived from universal quantification across the | |
1309 * application of its arguments. No shrinking occurs upon falsification. | |
1310 * | |
1311 * @param aa The arbitrrary to produces values from to produce the property with. | |
1312 * @param ab The arbitrrary to produces values from to produce the property with. | |
1313 * @param ac The arbitrrary to produces values from to produce the property with. | |
1314 * @param ad The arbitrrary to produces values from to produce the property with. | |
1315 * @param ae The arbitrrary to produces values from to produce the property with. | |
1316 * @param af The arbitrrary to produces values from to produce the property with. | |
1317 * @param ag The arbitrrary to produces values from to produce the property with. | |
1318 * @param f The function to produce properties with results. | |
1319 * @return A property where its result is derived from universal quantification across the | |
1320 * application of its arguments. | |
1321 */ | |
1322 public static <A, B, C, D, E, F$, G> Property property(final Arbitrary<A> aa, | |
1323 final Arbitrary<B> ab, | |
1324 final Arbitrary<C> ac, | |
1325 final Arbitrary<D> ad, | |
1326 final Arbitrary<E> ae, | |
1327 final Arbitrary<F$> af, | |
1328 final Arbitrary<G> ag, | |
1329 final F<A, F<B, F<C, F<D, F<E, F<F$, F<G, Property>>>>>>> f) { | |
1330 return property(aa, ab, ac, ad, ae, af, new F<A, F<B, F<C, F<D, F<E, F<F$, Property>>>>>>() { | |
1331 public F<B, F<C, F<D, F<E, F<F$, Property>>>>> f(final A a) { | |
1332 return new F<B, F<C, F<D, F<E, F<F$, Property>>>>>() { | |
1333 public F<C, F<D, F<E, F<F$, Property>>>> f(final B b) { | |
1334 return new F<C, F<D, F<E, F<F$, Property>>>>() { | |
1335 public F<D, F<E, F<F$, Property>>> f(final C c) { | |
1336 return new F<D, F<E, F<F$, Property>>>() { | |
1337 public F<E, F<F$, Property>> f(final D d) { | |
1338 return new F<E, F<F$, Property>>() { | |
1339 public F<F$, Property> f(final E e) { | |
1340 return new F<F$, Property>() { | |
1341 public Property f(final F$ f$) { | |
1342 return property(ag, new F<G, Property>() { | |
1343 public Property f(final G g) { | |
1344 return f.f(a).f(b).f(c).f(d).f(e).f(f$).f(g); | |
1345 } | |
1346 }); | |
1347 } | |
1348 }; | |
1349 } | |
1350 }; | |
1351 } | |
1352 }; | |
1353 } | |
1354 }; | |
1355 } | |
1356 }; | |
1357 } | |
1358 }); | |
1359 } | |
1360 | |
1361 /** | |
1362 * Returns a property where its result is derived from universal quantification across the | |
1363 * application of its arguments. | |
1364 * | |
1365 * @param aa The arbitrrary to produces values from to produce the property with. | |
1366 * @param ab The arbitrrary to produces values from to produce the property with. | |
1367 * @param ac The arbitrrary to produces values from to produce the property with. | |
1368 * @param ad The arbitrrary to produces values from to produce the property with. | |
1369 * @param ae The arbitrrary to produces values from to produce the property with. | |
1370 * @param af The arbitrrary to produces values from to produce the property with. | |
1371 * @param ag The arbitrrary to produces values from to produce the property with. | |
1372 * @param sa The shrink strategy to use upon falsification. | |
1373 * @param sb The shrink strategy to use upon falsification. | |
1374 * @param sc The shrink strategy to use upon falsification. | |
1375 * @param sd The shrink strategy to use upon falsification. | |
1376 * @param se The shrink strategy to use upon falsification. | |
1377 * @param sf The shrink strategy to use upon falsification. | |
1378 * @param sg The shrink strategy to use upon falsification. | |
1379 * @param f The function to produce properties with results. | |
1380 * @return A property where its result is derived from universal quantification across the | |
1381 * application of its arguments. | |
1382 */ | |
1383 public static <A, B, C, D, E, F$, G> Property property(final Arbitrary<A> aa, | |
1384 final Arbitrary<B> ab, | |
1385 final Arbitrary<C> ac, | |
1386 final Arbitrary<D> ad, | |
1387 final Arbitrary<E> ae, | |
1388 final Arbitrary<F$> af, | |
1389 final Arbitrary<G> ag, | |
1390 final Shrink<A> sa, | |
1391 final Shrink<B> sb, | |
1392 final Shrink<C> sc, | |
1393 final Shrink<D> sd, | |
1394 final Shrink<E> se, | |
1395 final Shrink<F$> sf, | |
1396 final Shrink<G> sg, | |
1397 final F7<A, B, C, D, E, F$, G, Property> f) { | |
1398 return property(aa, ab, ac, ad, ae, af, ag, sa, sb, sc, sd, se, sf, sg, curry(f)); | |
1399 } | |
1400 | |
1401 /** | |
1402 * Returns a property where its result is derived from universal quantification across the | |
1403 * application of its arguments. No shrinking occurs upon falsification. | |
1404 * | |
1405 * @param aa The arbitrrary to produces values from to produce the property with. | |
1406 * @param ab The arbitrrary to produces values from to produce the property with. | |
1407 * @param ac The arbitrrary to produces values from to produce the property with. | |
1408 * @param ad The arbitrrary to produces values from to produce the property with. | |
1409 * @param ae The arbitrrary to produces values from to produce the property with. | |
1410 * @param af The arbitrrary to produces values from to produce the property with. | |
1411 * @param ag The arbitrrary to produces values from to produce the property with. | |
1412 * @param f The function to produce properties with results. | |
1413 * @return A property where its result is derived from universal quantification across the | |
1414 * application of its arguments. | |
1415 */ | |
1416 public static <A, B, C, D, E, F$, G> Property property(final Arbitrary<A> aa, | |
1417 final Arbitrary<B> ab, | |
1418 final Arbitrary<C> ac, | |
1419 final Arbitrary<D> ad, | |
1420 final Arbitrary<E> ae, | |
1421 final Arbitrary<F$> af, | |
1422 final Arbitrary<G> ag, | |
1423 final F7<A, B, C, D, E, F$, G, Property> f) { | |
1424 return property(aa, ab, ac, ad, ae, af, ag, curry(f)); | |
1425 } | |
1426 | |
1427 /** | |
1428 * Returns a property where its result is derived from universal quantification across the | |
1429 * application of its arguments. | |
1430 * | |
1431 * @param aa The arbitrrary to produces values from to produce the property with. | |
1432 * @param ab The arbitrrary to produces values from to produce the property with. | |
1433 * @param ac The arbitrrary to produces values from to produce the property with. | |
1434 * @param ad The arbitrrary to produces values from to produce the property with. | |
1435 * @param ae The arbitrrary to produces values from to produce the property with. | |
1436 * @param af The arbitrrary to produces values from to produce the property with. | |
1437 * @param ag The arbitrrary to produces values from to produce the property with. | |
1438 * @param ah The arbitrrary to produces values from to produce the property with. | |
1439 * @param sa The shrink strategy to use upon falsification. | |
1440 * @param sb The shrink strategy to use upon falsification. | |
1441 * @param sc The shrink strategy to use upon falsification. | |
1442 * @param sd The shrink strategy to use upon falsification. | |
1443 * @param se The shrink strategy to use upon falsification. | |
1444 * @param sf The shrink strategy to use upon falsification. | |
1445 * @param sg The shrink strategy to use upon falsification. | |
1446 * @param sh The shrink strategy to use upon falsification. | |
1447 * @param f The function to produce properties with results. | |
1448 * @return A property where its result is derived from universal quantification across the | |
1449 * application of its arguments. | |
1450 */ | |
1451 public static <A, B, C, D, E, F$, G, H> Property property(final Arbitrary<A> aa, | |
1452 final Arbitrary<B> ab, | |
1453 final Arbitrary<C> ac, | |
1454 final Arbitrary<D> ad, | |
1455 final Arbitrary<E> ae, | |
1456 final Arbitrary<F$> af, | |
1457 final Arbitrary<G> ag, | |
1458 final Arbitrary<H> ah, | |
1459 final Shrink<A> sa, | |
1460 final Shrink<B> sb, | |
1461 final Shrink<C> sc, | |
1462 final Shrink<D> sd, | |
1463 final Shrink<E> se, | |
1464 final Shrink<F$> sf, | |
1465 final Shrink<G> sg, | |
1466 final Shrink<H> sh, | |
1467 final F<A, F<B, F<C, F<D, F<E, F<F$, F<G, F<H, Property>>>>>>>> f) { | |
1468 return property(aa, ab, ac, ad, ae, af, ag, sa, sb, sc, sd, se, sf, sg, new F<A, F<B, F<C, F<D, F<E, F<F$, F<G, Property>>>>>>>() { | |
1469 public F<B, F<C, F<D, F<E, F<F$, F<G, Property>>>>>> f(final A a) { | |
1470 return new F<B, F<C, F<D, F<E, F<F$, F<G, Property>>>>>>() { | |
1471 public F<C, F<D, F<E, F<F$, F<G, Property>>>>> f(final B b) { | |
1472 return new F<C, F<D, F<E, F<F$, F<G, Property>>>>>() { | |
1473 public F<D, F<E, F<F$, F<G, Property>>>> f(final C c) { | |
1474 return new F<D, F<E, F<F$, F<G, Property>>>>() { | |
1475 public F<E, F<F$, F<G, Property>>> f(final D d) { | |
1476 return new F<E, F<F$, F<G, Property>>>() { | |
1477 public F<F$, F<G, Property>> f(final E e) { | |
1478 return new F<F$, F<G, Property>>() { | |
1479 public F<G, Property> f(final F$ f$) { | |
1480 return new F<G, Property>() { | |
1481 public Property f(final G g) { | |
1482 return property(ah, sh, new F<H, Property>() { | |
1483 public Property f(final H h) { | |
1484 return f.f(a).f(b).f(c).f(d).f(e).f(f$).f(g).f(h); | |
1485 } | |
1486 }); | |
1487 } | |
1488 }; | |
1489 } | |
1490 }; | |
1491 } | |
1492 }; | |
1493 } | |
1494 }; | |
1495 } | |
1496 }; | |
1497 } | |
1498 }; | |
1499 } | |
1500 }); | |
1501 } | |
1502 | |
1503 /** | |
1504 * Returns a property where its result is derived from universal quantification across the | |
1505 * application of its arguments. No shrinking occurs upon falsification. | |
1506 * | |
1507 * @param aa The arbitrrary to produces values from to produce the property with. | |
1508 * @param ab The arbitrrary to produces values from to produce the property with. | |
1509 * @param ac The arbitrrary to produces values from to produce the property with. | |
1510 * @param ad The arbitrrary to produces values from to produce the property with. | |
1511 * @param ae The arbitrrary to produces values from to produce the property with. | |
1512 * @param af The arbitrrary to produces values from to produce the property with. | |
1513 * @param ag The arbitrrary to produces values from to produce the property with. | |
1514 * @param ah The arbitrrary to produces values from to produce the property with. | |
1515 * @param f The function to produce properties with results. | |
1516 * @return A property where its result is derived from universal quantification across the | |
1517 * application of its arguments. | |
1518 */ | |
1519 public static <A, B, C, D, E, F$, G, H> Property property(final Arbitrary<A> aa, | |
1520 final Arbitrary<B> ab, | |
1521 final Arbitrary<C> ac, | |
1522 final Arbitrary<D> ad, | |
1523 final Arbitrary<E> ae, | |
1524 final Arbitrary<F$> af, | |
1525 final Arbitrary<G> ag, | |
1526 final Arbitrary<H> ah, | |
1527 final F<A, F<B, F<C, F<D, F<E, F<F$, F<G, F<H, Property>>>>>>>> f) { | |
1528 return property(aa, ab, ac, ad, ae, af, ag, new F<A, F<B, F<C, F<D, F<E, F<F$, F<G, Property>>>>>>>() { | |
1529 public F<B, F<C, F<D, F<E, F<F$, F<G, Property>>>>>> f(final A a) { | |
1530 return new F<B, F<C, F<D, F<E, F<F$, F<G, Property>>>>>>() { | |
1531 public F<C, F<D, F<E, F<F$, F<G, Property>>>>> f(final B b) { | |
1532 return new F<C, F<D, F<E, F<F$, F<G, Property>>>>>() { | |
1533 public F<D, F<E, F<F$, F<G, Property>>>> f(final C c) { | |
1534 return new F<D, F<E, F<F$, F<G, Property>>>>() { | |
1535 public F<E, F<F$, F<G, Property>>> f(final D d) { | |
1536 return new F<E, F<F$, F<G, Property>>>() { | |
1537 public F<F$, F<G, Property>> f(final E e) { | |
1538 return new F<F$, F<G, Property>>() { | |
1539 public F<G, Property> f(final F$ f$) { | |
1540 return new F<G, Property>() { | |
1541 public Property f(final G g) { | |
1542 return property(ah, new F<H, Property>() { | |
1543 public Property f(final H h) { | |
1544 return f.f(a).f(b).f(c).f(d).f(e).f(f$).f(g).f(h); | |
1545 } | |
1546 }); | |
1547 } | |
1548 }; | |
1549 } | |
1550 }; | |
1551 } | |
1552 }; | |
1553 } | |
1554 }; | |
1555 } | |
1556 }; | |
1557 } | |
1558 }; | |
1559 } | |
1560 }); | |
1561 } | |
1562 | |
1563 /** | |
1564 * Returns a property where its result is derived from universal quantification across the | |
1565 * application of its arguments. | |
1566 * | |
1567 * @param aa The arbitrrary to produces values from to produce the property with. | |
1568 * @param ab The arbitrrary to produces values from to produce the property with. | |
1569 * @param ac The arbitrrary to produces values from to produce the property with. | |
1570 * @param ad The arbitrrary to produces values from to produce the property with. | |
1571 * @param ae The arbitrrary to produces values from to produce the property with. | |
1572 * @param af The arbitrrary to produces values from to produce the property with. | |
1573 * @param ag The arbitrrary to produces values from to produce the property with. | |
1574 * @param ah The arbitrrary to produces values from to produce the property with. | |
1575 * @param sa The shrink strategy to use upon falsification. | |
1576 * @param sb The shrink strategy to use upon falsification. | |
1577 * @param sc The shrink strategy to use upon falsification. | |
1578 * @param sd The shrink strategy to use upon falsification. | |
1579 * @param se The shrink strategy to use upon falsification. | |
1580 * @param sf The shrink strategy to use upon falsification. | |
1581 * @param sg The shrink strategy to use upon falsification. | |
1582 * @param sh The shrink strategy to use upon falsification. | |
1583 * @param f The function to produce properties with results. | |
1584 * @return A property where its result is derived from universal quantification across the | |
1585 * application of its arguments. | |
1586 */ | |
1587 public static <A, B, C, D, E, F$, G, H> Property property(final Arbitrary<A> aa, | |
1588 final Arbitrary<B> ab, | |
1589 final Arbitrary<C> ac, | |
1590 final Arbitrary<D> ad, | |
1591 final Arbitrary<E> ae, | |
1592 final Arbitrary<F$> af, | |
1593 final Arbitrary<G> ag, | |
1594 final Arbitrary<H> ah, | |
1595 final Shrink<A> sa, | |
1596 final Shrink<B> sb, | |
1597 final Shrink<C> sc, | |
1598 final Shrink<D> sd, | |
1599 final Shrink<E> se, | |
1600 final Shrink<F$> sf, | |
1601 final Shrink<G> sg, | |
1602 final Shrink<H> sh, | |
1603 final F8<A, B, C, D, E, F$, G, H, Property> f) { | |
1604 return property(aa, ab, ac, ad, ae, af, ag, ah, sa, sb, sc, sd, se, sf, sg, sh, curry(f)); | |
1605 } | |
1606 | |
1607 /** | |
1608 * Returns a property where its result is derived from universal quantification across the | |
1609 * application of its arguments. No shrinking occurs upon falsification. | |
1610 * | |
1611 * @param aa The arbitrrary to produces values from to produce the property with. | |
1612 * @param ab The arbitrrary to produces values from to produce the property with. | |
1613 * @param ac The arbitrrary to produces values from to produce the property with. | |
1614 * @param ad The arbitrrary to produces values from to produce the property with. | |
1615 * @param ae The arbitrrary to produces values from to produce the property with. | |
1616 * @param af The arbitrrary to produces values from to produce the property with. | |
1617 * @param ag The arbitrrary to produces values from to produce the property with. | |
1618 * @param ah The arbitrrary to produces values from to produce the property with. | |
1619 * @param f The function to produce properties with results. | |
1620 * @return A property where its result is derived from universal quantification across the | |
1621 * application of its arguments. | |
1622 */ | |
1623 public static <A, B, C, D, E, F$, G, H> Property property(final Arbitrary<A> aa, | |
1624 final Arbitrary<B> ab, | |
1625 final Arbitrary<C> ac, | |
1626 final Arbitrary<D> ad, | |
1627 final Arbitrary<E> ae, | |
1628 final Arbitrary<F$> af, | |
1629 final Arbitrary<G> ag, | |
1630 final Arbitrary<H> ah, | |
1631 final F8<A, B, C, D, E, F$, G, H, Property> f) { | |
1632 return property(aa, ab, ac, ad, ae, af, ag, ah, curry(f)); | |
1633 } | |
1634 | |
1635 /** | |
1636 * Returns a property that has a result of exception, if the evaluation of the given property | |
1637 * throws an exception; otherwise, the given property is returned. | |
1638 * | |
1639 * @param p A property to evaluate to check for an exception. | |
1640 * @return A property that has a result of exception, if the evaluation of the given property | |
1641 * throws an exception; otherwise, the given property is returned. | |
1642 */ | |
1643 public static Property exception(final P1<Property> p) { | |
1644 try { | |
1645 return p._1(); | |
1646 } catch (final Throwable t) { | |
1647 return new Property(new F<Integer, F<Rand, Result>>() { | |
1648 public F<Rand, Result> f(final Integer i) { | |
1649 return new F<Rand, Result>() { | |
1650 public Result f(final Rand r) { | |
1651 return Result.exception(List.<Arg<?>>nil(), t); | |
1652 } | |
1653 }; | |
1654 } | |
1655 }); | |
1656 } | |
1657 } | |
1658 | |
1659 | |
1660 | |
1661 } |