class
	TEST
inherit
	EXCEPTIONS

create
	make

feature

	make
		local
			retries: INTEGER
			a: DA
			x: X
		do
			create x
			x.f
			if retries = 0 then
				(create {DA}).call_a
			elseif retries = 1 then
				(create {DA}).call_b
			elseif retries = 2 then
				(create {DB}).call_a
				retries := 3
				(create {DB}).call_b
				retries := 4	
				(create {DA}).invariant_test
			elseif retries = 5 then
				create a.make_bad
			elseif retries = 6 then
				(create {DA}).invalidate_post
			end
		rescue
			retries := retries + 1
			if retries = 1 and exception = Precondition then
				print ("1: call_a_a caused precondition violation%N")
				retry
			elseif retries = 2 and exception = Precondition then
				print ("2: call_a_b caused precondition violation%N")
				retry
			elseif retries = 3 and exception = Precondition then
				print ("call_b_a caused precondition violation%N")
			elseif retries = 4 and exception = Precondition then
				print ("call_b_b caused precondition violation%N")
			elseif retries = 5 and exception = Class_invariant then
				print ("3: invariant_test caused invariant violation%N")
				retry
			elseif retries = 6 and exception = Class_invariant then
				print ("4: creation caused invariant violation%N")
				retry
			elseif retries = 7 and exception = Postcondition then
				print ("5: creation caused postcondition violation%N")
				retry
			else
				print ("Unexpected exception, retries = " + retries.out + "%N")
				print ("Meaning:%N")
				print (meaning (exception))
				io.new_line
			end
		end


end