note
	description: "[
		Testing suite for the RATIONAL Class covering the +, -, *, and // operation capabilities.
	]"
	author: "Connor Dear, Jonathan Ostroff"
	date: "June 10 2019"
	revision: "1.00"

class 
	RATIONAL_PRIMARY_OPERATION_TEST

inherit
	ES_TEST

create 
	make

feature {NONE} -- Initialization

	make
		do
			add_boolean_case (agent t1)
			add_boolean_case (agent t2)
			add_boolean_case (agent t3)
			add_boolean_case (agent t4)
			add_boolean_case (agent t5)
			add_boolean_case (agent t6)
			add_boolean_case (agent t7)
			add_boolean_case (agent t8)
		end
	
feature -- Tests
-- Addition Segment (1 - 2)

	t1: BOOLEAN
		local
			r1, r2, r3, r4: RATIONAL
		do
			comment ("t1: Addition - Positive and Negative Cases")
			r1 := create {attached RATIONAL}.make_from_string ("10/2")
			r2 := create {attached RATIONAL}.make_from_string ("22/2")
			r3 := create {attached RATIONAL}.make_from_string ("-3/4")
			r4 := create {attached RATIONAL}.make_from_string ("1/-2")
			Result := r1 + r2 ~ create {RATIONAL}.make_from_string ("32/2")
			check
					Result
			end
			Result := r1 + r3 ~ create {RATIONAL}.make_from_string ("17/4")
			check
					Result
			end
			Result := r3 + r2 ~ create {RATIONAL}.make_from_string ("41/4")
			check
					Result
			end
			Result := r3 + r4 ~ create {RATIONAL}.make_from_string ("-5/4")
		end

	t2: BOOLEAN
		local
			r1, r2, zero: RATIONAL
		do
			comment ("t2: Addition - Zero Cases")
			r1 := create {attached RATIONAL}.make_from_string ("1/5")
			r2 := create {attached RATIONAL}.make_from_string ("-4/5")
			zero := create {attached RATIONAL}.make_from_string ("0/1")
			Result := r1 + zero ~ r1
			check
					Result
			end
			Result := r2 + zero ~ r2
			check
					Result
			end
			Result := create {RATIONAL}.make_from_string ("0") + zero ~ create {RATIONAL}.make_from_string ("0")
		end

	t3: BOOLEAN
		local
			r1, r2, r3, r4: RATIONAL
		do
			comment ("t3: Subtraction - Positive and Negative Cases")
			r1 := create {attached RATIONAL}.make_from_string ("1/2")
			r2 := create {attached RATIONAL}.make_from_string ("3/4")
			r3 := create {attached RATIONAL}.make_from_string ("-1/3")
			r4 := create {attached RATIONAL}.make_from_string ("2/-3")
			Result := r1 - r2 ~ create {RATIONAL}.make_from_string ("-1/4")
			check
					Result
			end
			Result := r1 - r3 ~ create {RATIONAL}.make_from_string ("5/6")
			check
					Result
			end
			Result := r3 - r2 ~ create {RATIONAL}.make_from_string ("-13/12")
			check
					Result
			end
			Result := r3 - r4 ~ create {RATIONAL}.make_from_string ("1/3")
		end

	t4: BOOLEAN
		local
			r1, r2, zero: RATIONAL
		do
			comment ("t4: Subtraction - Zero Cases")
			r1 := create {attached RATIONAL}.make_from_string ("1/3")
			r2 := create {attached RATIONAL}.make_from_string ("-2/3")
			zero := create {attached RATIONAL}.make_from_string ("0")
			Result := r1 - zero ~ r1
			check
					Result
			end
			Result := r2 - zero ~ r2
			check
					Result
			end
			Result := create {RATIONAL}.make_from_string ("0") - zero ~ create {RATIONAL}.make_from_string ("0")
		end

	t5: BOOLEAN
		local
			r1, r2, r3, r4: RATIONAL
		do
			comment ("t5: Multiplication - Positive and Negative Cases")
			r1 := create {attached RATIONAL}.make_from_string ("1/3")
			r2 := create {attached RATIONAL}.make_from_string ("3/4")
			r3 := create {attached RATIONAL}.make_from_string ("-1/2")
			r4 := create {attached RATIONAL}.make_from_string ("2/-3")
			Result := r1 * r2 ~ create {RATIONAL}.make_from_string ("3/12")
			check
					Result
			end
			Result := r1 * r3 ~ create {RATIONAL}.make_from_string ("-1/6")
			check
					Result
			end
			Result := r3 * r2 ~ create {RATIONAL}.make_from_string ("-3/8")
			check
					Result
			end
			Result := r3 * r4 ~ create {RATIONAL}.make_from_string ("2/6")
		end

	t6: BOOLEAN
		local
			r1, r2, zero: RATIONAL
		do
			comment ("t6: Multiplication - Zero Cases")
			r1 := create {attached RATIONAL}.make_from_string ("2/3")
			r2 := create {attached RATIONAL}.make_from_string ("-4/5")
			zero := create {attached RATIONAL}.make_from_string ("0/1")
			Result := r1 * zero ~ create {RATIONAL}.make_from_string ("0/3")
			check
					Result
			end
			Result := r2 * zero ~ create {RATIONAL}.make_from_string ("0/5")
			check
					Result
			end
			Result := create {RATIONAL}.make_from_string ("0/1") * zero ~ create {RATIONAL}.make_from_string ("0/1")
		end

	t7: BOOLEAN
		local
			r1, r2, r3, r4: RATIONAL
		do
			comment ("t7: Division - Positive and Negative Cases")
			r1 := create {attached RATIONAL}.make_from_string ("1/3")
			r2 := create {attached RATIONAL}.make_from_string ("1/4")
			r3 := create {attached RATIONAL}.make_from_string ("-2/3")
			r4 := create {attached RATIONAL}.make_from_string ("-3/4")
			Result := r2 // r1 ~ create {RATIONAL}.make_from_string ("3/4")
			check
					Result
			end
			Result := r1 // r3 ~ create {RATIONAL}.make_from_string ("3/-6")
			check
					Result
			end
			Result := r4 // r2 ~ create {RATIONAL}.make_from_string ("-12/4")
			check
					Result
			end
			Result := r4 // r3 ~ create {RATIONAL}.make_from_string ("-9/-8")
		end

	t8: BOOLEAN
		local
			r1, r2, zero: RATIONAL
		do
			comment ("t8: Division - Zero Cases")
			r1 := create {attached RATIONAL}.make_from_string ("2/3")
			r2 := create {attached RATIONAL}.make_from_string ("-1/4")
			zero := create {attached RATIONAL}.make_from_string ("0/1")
			assert_equal ("fail", zero.out, "0")
			Result := zero // r1 ~ create {RATIONAL}.make_from_string ("0")
			check
					Result
			end
			Result := zero // r2 ~ create {RATIONAL}.make_from_string ("0")
			check
					Result
			end
		end
	
end -- class RATIONAL_PRIMARY_OPERATION_TEST

Generated by ISE EiffelStudio