Java-QuickCheck tutorial¶
If you want to do the exercises yourself, download the initial files: JavaQuickCheck.tar.gz.
Bellow you’ll find the properties implemented during the tutorial.
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import static org.junit.Assert.*;
import static net.java.quickcheck.generator.CombinedGeneratorsIterables.*;
import static net.java.quickcheck.generator.PrimitiveGenerators.*;
import static java.util.Collections.sort;
public class SortTest {
@Test
public void testIdempotent() {
for(List<Integer> mlist : someLists(integers())) {
sort(mlist);
List<Integer> copyOfList = new ArrayList<Integer>(mlist);
sort(mlist);
assertEquals(mlist, copyOfList);
}
}
@Test
public void testHead() {
for(List<Integer> mlist : someLists(integers())) {
sort(mlist);
if (!mlist.isEmpty()) {
Integer head = mlist.get(0);
for( int i = 0 ; i < mlist.size() ; i++ ) {
assertTrue(head <= mlist.get(i));
}
}
}
}
}
import java.util.List;
import net.java.quickcheck.Generator;
import org.junit.Test;
import static org.junit.Assert.*;
import static net.java.quickcheck.generator.CombinedGeneratorsIterables.*;
import static net.java.quickcheck.generator.CombinedGenerators.*;
import static net.java.quickcheck.generator.PrimitiveGenerators.*;
import static net.java.quickcheck.generator.iterable.Iterables.toIterable;
public class QueueTests {
class QueueGenerator implements Generator<Queue<Integer>> {
Generator<List<Integer>> fronts = lists(integers());
Generator<List<Integer>> backs = lists(integers());
@Override
public Queue<Integer> next() {
List<Integer> front = fronts.next();
List<Integer> back = backs.next();
if (front.isEmpty())
return new Queue<Integer>();
else
return new Queue<Integer>(front, back);
}
}
@Test
public void propEmptyInv() {
Queue<Integer> mqueue = new Queue<Integer>();
assertTrue( mqueue.checkInvarient() );
}
@Test
public void propAddInv() {
Generator<Queue<Integer>> qGen = new QueueGenerator();
for( Queue<Integer> mQueue : toIterable(qGen)) {
for( Integer mInt : toIterable(integers())) {
mQueue.add(mInt);
assertTrue(mQueue.checkInvarient());
}
}
}
@Test
public void propRemoveInv() {
Generator<Queue<Integer>> qGen = new QueueGenerator();
for( Queue<Integer> mQueue : toIterable(qGen)) {
if (mQueue.isEmpty())
continue;
mQueue.remove();
assertTrue(mQueue.checkInvarient());
}
}
@Test
public void propGenInv() {
Generator<Queue<Integer>> mGen = new QueueGenerator();
for ( Queue<Integer> mQueue : toIterable(mGen)) {
assertTrue(mQueue.checkInvarient());
}
}
}