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());
		}
	}
	
}