As part of another project I am developing ensure4j. The syntax (see the examples in redesigning junit asserts) is working quite nicely, ensure4j is already very useful for internal use.

Lately I was busy adding tests that are able to verify if some code (e.g. an optimizer that uses random, like genetic algorithm, simulated annealing, …) produces the desired in e.g. 95% of the cases (Wikipedia has a nice practical example for confidence intervals).

## Example Usage

Here is an example that tests the nonsense code `Math.random() * 2`

.

```
ensure(new Experiment() {
public double measure() {
return Math.random() * 2;
}
}).between(0.9, 1.1, 0.95).sample(10, 100);
```

The code most likely does not make much sense out of context like this, so here is an explanation of what it does:

## Explanation

In that example we want to verify that the code returns values whose **95% confidence interval is between 0.9 and 1.1**. At first take **10 samples** to verify this. If the mean is not as expected between the interval, there is still the chance that this was just bad luck. We can take further samples (**up to 1000**) to rule bad luck out. When we have to take more than 1000 samples and the mean is still not in the specified still not met, there is a very high probability that the code does not produce the desired result, so we have to fail.

I hope the above description is somewhat understandable. It’s no piece of cake, and there is no way to cheat around the complexity involved with that kind of statistical tests. I have tried to make the interface as clean and simple as possible, suggestions are always welcome.

## Open Source?

I am developing ensure4j partly at work, and partly in my free time. I would like to make it open source, but I need to get the OK from my boss first.

ensure4j is the the only implementation I know of that uses statistical tests that can be used with JUnit. If you know something similar than this, please post!