public void testIC() {
		boolean thrown;
		Proof test = new Proof(null);

		//LEGAL IC.
		thrown =false;
		try {        
			test.extendProof("show (q=>q)");
			test.extendProof("assume q");
			test.extendProof("ic 2 (q=>q)");
		} catch (IllegalLineException l) {
		} catch (IllegalInferenceException e) {
			thrown= true;
		}       
		assertFalse(thrown);

		//ILLEGAL IC.
		//Incorrect expr concluded. 
		thrown =false;
		test = new Proof(null);
		try {        
			test.extendProof("show (q=>q)");
			test.extendProof("assume q");
			test.extendProof("ic 2 (q=>d)");
		} catch (IllegalLineException e) {
		} catch (IllegalInferenceException e) {
			assertEquals(e.getMessage(),"Bad inference.");
			thrown= true;
		}       
		assertTrue(thrown);

		//Wrong number of arguments.
		thrown =false;
		try {
			test.extendProof("ic p");
		} catch (IllegalLineException e) {
			assertEquals(e.getMessage(),"Wrong number of things.");
			thrown= true;
		} catch (IllegalInferenceException e) {
		}
		assertTrue(thrown);
		thrown=false;

		//Assuming that expr does not lead to conclusion. 
		thrown =false;
		try {        
			test.extendProof("show (q=>p)");
			test.extendProof("assume ~(q=>p)"); //Line 2
			test.extendProof("ic 2 (q=>p)");
		} catch (IllegalLineException e) {
		} catch (IllegalInferenceException e) {
			assertEquals(e.getMessage(),"Bad inference.");
			thrown= true;
		}       
		assertTrue(thrown);		
	}