note
	description: "Summary description for {TEST_SET}."
	author: ""
	date: "$Date$"
	revision: "$Revision$"

class 
	TEST_SET

inherit
	ES_TEST
		redefine
			setup
		end

	COMMON_SETUP
		undefine
			default_create
		end

create 
	make

feature {NONE} -- Initialization

	make
			-- Run application.
		do
			setup
			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)
			add_boolean_case (agent t9)
		end

	setup
			-- Will be executed at the beginning of "run" in a test case.
		do
			common_setup
		end
	
feature -- tests

	t1: BOOLEAN
		local
			l_set: SET [PERSON]
			p: PERSON
		do
			comment ("t1: check that iterable works with sets")
			create p.make ("p1")
			create l_set.make_empty
			l_set.extend (p1)
			l_set.extend (p2)
			l_set.extend (p3)
			l_set.extend (p4)
			Result := across
				l_set as it
			some
				it.item ~ p
			end
		end

	t2: BOOLEAN
		local
			l_set1, l_set2: SET [PERSON]
		do
			comment ("t2: compare equality of two sets")
			create l_set1.make_empty
			create l_set2.make_empty
			l_set1.extend (p1)
			l_set1.extend (p2)
			l_set2.extend (p2)
			l_set2.extend (p1)
			Result := l_set1 ~ l_set2
		end

	t3: BOOLEAN
		local
			l_set1, l_set2: SET [PERSON]
		do
			comment ("t3: is_subset_of on empty sets")
			create l_set1.make_empty
			create l_set2.make_empty
			Result := # l_set1 = 0 and then # l_set2 = 0 and then l_set1 |<: l_set2 and then l_set2 |<: l_set1 and then l_set1 ~ l_set2
			check
					Result
			end
			l_set1.extend (p1)
			l_set2 := l_set2.extended (p1)
			Result := # l_set1 = 1 and then # l_set2 = 1 and then l_set1 |<: l_set2 and then l_set2 |<: l_set1 and then l_set1 ~ l_set2
			check
					Result
			end
			l_set1.extend (p2)
			l_set2 := l_set2.extended (p2)
			Result := # l_set1 = 2 and then # l_set2 = 2 and then l_set1 |<: l_set2 and then l_set2 |<: l_set1 and then l_set1 ~ l_set2
			check
					Result
			end
			l_set1.extend (p3)
			Result := # l_set1 = 3 and then # l_set2 = 2 and then not (l_set1 |<: l_set2) and then l_set2 |<: l_set1 and then not (l_set1 ~ l_set2)
			check
					Result
			end
		end

	t4: BOOLEAN
		local
			s1, s2: SET [PERSON]
			r, r1, r2, r3, r4, es: SET [PERSON]
		do
			comment ("t4: unioned, intersected, and differenced")
			create s1.make_empty
			create s2.make_empty
			create es.make_empty
			Result := s1 |\/| s2 ~ es and then s1 |/\| s2 ~ es and then s1 |\ s2 ~ es and then s2 |\ s1 ~ es
			check
					Result
			end
			s1.extend (p1)
			Result := s1 |\/| s2 ~ s1 and then s1 |/\| s2 ~ es and then s1 |\ s2 ~ s1 and then s2 |\ s1 ~ es
			check
					Result
			end
			s2.extend (p2)
			create r.make_empty
			r.extend (p1)
			r.extend (p2)
			Result := s1 |\/| s2 ~ r and then s1 |/\| s2 ~ es and then s1 |\ s2 ~ s1 and then s2 |\ s1 ~ s2
			check
					Result
			end
			s1.extend (p3)
			s2.extend (p3)
			create r1.make_empty
			r1.extend (p1)
			r1.extend (p2)
			r1.extend (p3)
			create r2.make_empty
			r2.extend (p3)
			r3 := (r1 - p2) - p3
			r4 := (r1 - p1) - p3
			Result := s1 |\/| s2 ~ r1 and then s1 |/\| s2 ~ r2 and then s1 |\ s2 ~ r3 and then s2 |\ s1 ~ r4
			check
					Result
			end
		end

	t5: BOOLEAN
		local
			s1, s2: SET [PERSON]
			r, r1, r2, r3, r4, es: SET [PERSON]
		do
			comment ("t5: union, intersect, and difference")
			create s1.make_empty
			create s2.make_empty
			create es.make_empty
			s1.union (s2)
			Result := s1 ~ es
			check
					Result
			end
			s1.intersect (s2)
			Result := s1 ~ es
			check
					Result
			end
			s1.difference (s2)
			Result := s1 ~ es
			check
					Result
			end
			s2.difference (s1)
			Result := s2 ~ es
			check
					Result
			end
			s1.extend (p1)
			s1.union (s2)
			Result := s1 ~ create {SET [PERSON]}.make_from_array (<<p1>>)
			check
					Result
			end
			s1.intersect (s2)
			Result := s1 ~ create {SET [PERSON]}.make_from_array (ARRAY [PERSON] <<>>)
			check
					Result
			end
			s1.extend (p1)
			s1.difference (s2)
			Result := s1 ~ create {SET [PERSON]}.make_from_array (<<p1>>)
			check
					Result
			end
			s2.extend (p2)
			create r.make_empty
			r.extend (p1)
			r.extend (p2)
			s1.union (s2)
			Result := s1 ~ r
			check
					Result
			end
			s1.difference (s2)
			s1.intersect (s2)
			Result := s1 ~ es
			check
					Result
			end
			s1.extend (p1)
			s1.difference (s2)
			Result := s1 ~ create {SET [PERSON]}.make_from_array (<<p1>>)
			check
					Result
			end
			s2.difference (s1)
			Result := s2 ~ create {SET [PERSON]}.make_from_array (<<p2>>)
			check
					Result
			end
			s1.extend (p3)
			s2.extend (p3)
			create r1.make_empty
			r1.extend (p1)
			r1.extend (p2)
			r1.extend (p3)
			create r2.make_empty
			r2.extend (p3)
			r3 := (r1 - p2) - p3
			r4 := (r1 - p1) - p3
			s1.union (s2)
			Result := s1 ~ r1
			check
					Result
			end
			s1.subtract (p2)
			s1.intersect (s2)
			Result := s1 ~ r2
			check
					Result
			end
			s1.extend (p1)
			s1.difference (s2)
			Result := s1 ~ r3
			check
					Result
			end
			s1.extend (p3)
			s2.difference (s1)
			Result := s2 ~ r4
			check
					Result
			end
		end

	t6: BOOLEAN
		local
			s, s_: SET [PERSON]
		do
			comment ("t6: item and remove")
			create s.make_from_array (<<p1, p2, p3>>)
			s.choose_item
			Result := s.item ~ p3
			check
					Result
			end
			s.remove_item
			s.choose_item
			create s_.make_from_array (<<p1, p2>>)
			Result := s ~ s_ and then s.item ~ p2
			check
					Result
			end
			s.extend (p4)
			s.choose_item
			create s_.make_from_array (<<p4, p1, p2>>)
			Result := s ~ s_ and then s.item ~ p4
			check
					Result
			end
			s.subtract (p2)
			s.choose_item
			create s_.make_from_array (<<p4, p1>>)
			Result := s ~ s_ and then s.item ~ p4
			check
					Result
			end
		end

	t7: BOOLEAN
		local
			s: SET [PERSON]
			a, b: ARRAY [PERSON]
		do
			comment ("t7: as_array")
			b := <<p1, p2, p3>>
			b.compare_objects
			create s.make_empty
			Result := s.as_array.is_empty
			check
					Result
			end
			create s.make_from_array (<<p1, p2, p3>>)
			a := s.as_array
			Result := s.as_array ~ b
			check
					Result
			end
		end

	t8: BOOLEAN
		local
			s: SET [PERSON]
			a: ARRAY [PERSON]
		do
			comment ("t8: as_array")
			a := <<p1, p2, p3>>
			a.compare_objects
			create s.make_empty
			Result := s.as_array.is_empty
			check
					Result
			end
			s := create {attached SET [PERSON]}.make_from_array (<<p1, p2, p3>>)
			Result := s.as_array ~ a
			check
					Result
			end
		end

	t9: BOOLEAN
		local
			s1, s2: SET [INTEGER_32]
			s3: SET [STRING_8]
		do
			comment ("t9: test make_one")
			create s1.make_one (23)
			Result := s1.count = 1 and s1.has (23)
			check
					Result
			end
			create s2.make_from_array (<<23>>)
			assert_equal ("test make_one", s1, s2)
			create s3.make_one ("Amin")
			Result := s3.has ("Amin")
		end
	
end -- class TEST_SET

Generated by ISE EiffelStudio