Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
package fj.test;
import fj.F;
import fj.P1;
import fj.data.List;
import fj.data.Option;
import static fj.data.Option.none;
import static fj.data.Option.some;
/**
* The result of evaluating a property.
*
* @version %build.number%
*/
public final class Result {
private final Option>> args;
private final R r;
private final Option t;
private enum R {
Unfalsified, Falsified, Proven, Exception, NoResult
}
private Result(final Option>> args, final R r, final Option t) {
this.args = args;
this.r = r;
this.t = t;
}
/**
* Returns the potential arguments associated with this result. This will only have a value, if
* and only if {@link #noResult(Option) !noResult()} holds.
*
* @return The potential arguments associated with this result.
*/
public Option>> args() {
return args;
}
/**
* Returns the potential exception associated with this result. This will only have a value if and
* only if this result is an exception result.
*
* @return The potential exception associated with this result.
*/
public Option exception() {
return t;
}
/**
* Returns true if this result is unfalsified; otherwise, false.
*
* @return true if this result is unfalsified; otherwise, false.
*/
public boolean isUnfalsified() {
return r == R.Unfalsified;
}
/**
* Returns true if this result is falsified; otherwise, false.
*
* @return true if this result is falsified; otherwise, false.
*/
public boolean isFalsified() {
return r == R.Falsified;
}
/**
* Returns true if this result is proven; otherwise, false.
*
* @return true if this result is proven; otherwise, false.
*/
public boolean isProven() {
return r == R.Proven;
}
/**
* Returns true if this result is an exception; otherwise, false.
*
* @return true if this result is an exception; otherwise, false.
*/
public boolean isException() {
return r == R.Exception;
}
/**
* Returns true if this result is no result; otherwise, false.
*
* @return true if this result is no result; otherwise, false.
*/
public boolean isNoResult() {
return r == R.NoResult;
}
/**
* Returns true if this result is falsified or an exception; otherwise,
* false.
*
* @return true if this result is falsified or an exception; otherwise,
* false.
*/
public boolean failed() {
return isFalsified() || isException();
}
/**
* Returns true if this result is unfalsified or proven; otherwise,
* false.
*
* @return true if this result is unfalsified or proven; otherwise,
* false.
*/
public boolean passed() {
return isUnfalsified() || isProven();
}
/**
* If this result is proven, alter it to be unfalsified with the same arguments; otherwise, return
* this.
*
* @return If this result is proven, alter it to be unfalsified with the same arguments;
* otherwise, return this.
*/
public Result provenAsUnfalsified() {
return isProven() ? unfalsified(args.some()) : this;
}
/**
* Adds an argument to this result.
*
* @param a The argument to add.
* @return A result with the new argument.
*/
public Result addArg(final Arg> a) {
final F, F>, List>>> cons = List.cons();
return new Result(args.map(cons.f(a)), r, t);
}
/**
* Returns a potential result for this result. This will have a value if this result is
* {@link #noResult(Option) !noResult()}.
*
* @return A potential result for this result.
*/
@SuppressWarnings({"IfMayBeConditional"})
public Option toOption() {
if(isNoResult())
return none();
else
return some(this);
}
/**
* Returns a result from the given potential result.
*
* @param r The potential result.
* @return The result that may be {@link #noResult() noResult()}.
*/
public static Result noResult(final Option r) {
return r.orSome(() -> noResult());
}
/**
* Returns a result representing no result.
*
* @return A result representing no result.
*/
public static Result noResult() {
return new Result(Option.>>none(), R.NoResult, Option.none());
}
/**
* Returns an unfalsified result.
*
* @param args The arguments used during the failure of falsification.
* @return An unfalsified result.
*/
public static Result unfalsified(final List> args) {
return new Result(some(args), R.Unfalsified, Option.none());
}
/**
* Returns a falsified result.
*
* @param args The arguments used during falsification.
* @return A falsified result.
*/
public static Result falsified(final List> args) {
return new Result(some(args), R.Falsified, Option.none());
}
/**
* Returns a proven result.
*
* @param args The arguments used during proof.
* @return A proven result.
*/
public static Result proven(final List> args) {
return new Result(some(args), R.Proven, Option.none());
}
/**
* Returns an exception result.
*
* @param args The arguments used when the exception occurred.
* @param t The exception that occurred.
* @return A exception result.
*/
public static Result exception(final List> args, final Throwable t) {
return new Result(some(args), R.Exception, some(t));
}
}