Skip to content

Commit 86a1355

Browse files
committed
Add test_set.py
1 parent d062986 commit 86a1355

File tree

1 file changed

+236
-0
lines changed

1 file changed

+236
-0
lines changed

test/basic/test_set.py

Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
"""
2+
Unit tests for the set module.
3+
4+
This module contains tests for the set operations and functionality
5+
demonstrated in the set module.
6+
"""
7+
8+
import unittest
9+
10+
from src.basic.set import set_basics, set_comprehensions, set_operations
11+
12+
13+
class TestSetBasics(unittest.TestCase):
14+
"""Test cases for basic set operations."""
15+
16+
def test_set_creation(self):
17+
"""Test that sets are created correctly."""
18+
empty_set, numbers, fruits, mixed = set_basics()
19+
20+
self.assertEqual(len(empty_set), 0)
21+
self.assertEqual(len(numbers), 5)
22+
self.assertEqual(len(fruits), 3)
23+
self.assertEqual(len(mixed), 3)
24+
25+
# Test set contents
26+
self.assertEqual(numbers, {1, 2, 3, 4, 5})
27+
self.assertEqual(fruits, {"apple", "banana", "orange"})
28+
self.assertTrue(1 in mixed)
29+
self.assertTrue("hello" in mixed)
30+
self.assertTrue((1, 2) in mixed)
31+
32+
def test_duplicate_removal(self):
33+
"""Test that sets automatically remove duplicates."""
34+
# Create a set with duplicates
35+
with_duplicates = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4}
36+
37+
# Check that duplicates are removed
38+
self.assertEqual(with_duplicates, {1, 2, 3, 4})
39+
self.assertEqual(len(with_duplicates), 4)
40+
41+
42+
class TestSetOperations(unittest.TestCase):
43+
"""Test cases for common set operations."""
44+
45+
def test_membership(self):
46+
"""Test membership operations."""
47+
a, _ = set_operations()
48+
49+
self.assertTrue(1 in a)
50+
self.assertTrue(5 in a)
51+
self.assertFalse(6 in a)
52+
self.assertFalse(0 in a)
53+
54+
def test_add_remove(self):
55+
"""Test adding and removing elements."""
56+
a = {1, 2, 3}
57+
58+
# Test add
59+
a.add(4)
60+
self.assertEqual(a, {1, 2, 3, 4})
61+
62+
# Adding existing element doesn't change the set
63+
a.add(3)
64+
self.assertEqual(a, {1, 2, 3, 4})
65+
66+
# Test remove
67+
a.remove(4)
68+
self.assertEqual(a, {1, 2, 3})
69+
70+
# Test discard (element exists)
71+
a.discard(3)
72+
self.assertEqual(a, {1, 2})
73+
74+
# Test discard (element doesn't exist)
75+
a.discard(10) # Should not raise an error
76+
self.assertEqual(a, {1, 2})
77+
78+
# Test remove raises KeyError for non-existent element
79+
with self.assertRaises(KeyError):
80+
a.remove(10)
81+
82+
def test_clear_and_pop(self):
83+
"""Test clear and pop operations."""
84+
a = {1, 2, 3}
85+
86+
# Test pop
87+
popped = a.pop()
88+
self.assertTrue(popped in {1, 2, 3})
89+
self.assertEqual(len(a), 2)
90+
91+
# Test clear
92+
a.clear()
93+
self.assertEqual(len(a), 0)
94+
self.assertEqual(a, set())
95+
96+
97+
class TestSetMathematicalOperations(unittest.TestCase):
98+
"""Test cases for mathematical set operations."""
99+
100+
def test_union(self):
101+
"""Test union operation."""
102+
a = {1, 2, 3}
103+
b = {3, 4, 5}
104+
105+
# Test operator
106+
self.assertEqual(a | b, {1, 2, 3, 4, 5})
107+
108+
# Test method
109+
self.assertEqual(a.union(b), {1, 2, 3, 4, 5})
110+
111+
# Union with multiple sets
112+
c = {5, 6, 7}
113+
self.assertEqual(a.union(b, c), {1, 2, 3, 4, 5, 6, 7})
114+
115+
def test_intersection(self):
116+
"""Test intersection operation."""
117+
a = {1, 2, 3, 4}
118+
b = {3, 4, 5, 6}
119+
120+
# Test operator
121+
self.assertEqual(a & b, {3, 4})
122+
123+
# Test method
124+
self.assertEqual(a.intersection(b), {3, 4})
125+
126+
# Intersection with multiple sets
127+
c = {4, 5, 6, 7}
128+
self.assertEqual(a.intersection(b, c), {4})
129+
130+
def test_difference(self):
131+
"""Test difference operation."""
132+
a = {1, 2, 3, 4, 5}
133+
b = {4, 5, 6, 7}
134+
135+
# Test operator
136+
self.assertEqual(a - b, {1, 2, 3})
137+
self.assertEqual(b - a, {6, 7})
138+
139+
# Test method
140+
self.assertEqual(a.difference(b), {1, 2, 3})
141+
142+
# Difference with multiple sets
143+
c = {3, 5, 7}
144+
self.assertEqual(a.difference(b, c), {1, 2})
145+
146+
def test_symmetric_difference(self):
147+
"""Test symmetric difference operation."""
148+
a = {1, 2, 3, 4, 5}
149+
b = {4, 5, 6, 7}
150+
151+
# Test operator
152+
self.assertEqual(a ^ b, {1, 2, 3, 6, 7})
153+
154+
# Test method
155+
self.assertEqual(a.symmetric_difference(b), {1, 2, 3, 6, 7})
156+
157+
def test_subset_superset(self):
158+
"""Test subset and superset operations."""
159+
a = {1, 2, 3, 4, 5}
160+
b = {1, 2, 3}
161+
c = {1, 2, 3, 4, 5, 6}
162+
163+
# Test subset
164+
self.assertTrue(b.issubset(a))
165+
self.assertFalse(a.issubset(b))
166+
self.assertTrue(a.issubset(a)) # A set is a subset of itself
167+
168+
# Test superset
169+
self.assertTrue(a.issuperset(b))
170+
self.assertFalse(b.issuperset(a))
171+
self.assertTrue(a.issuperset(a)) # A set is a superset of itself
172+
173+
# Test with operators
174+
self.assertTrue(b <= a) # subset
175+
self.assertTrue(b < a) # proper subset
176+
self.assertTrue(a >= b) # superset
177+
self.assertTrue(a > b) # proper superset
178+
179+
# Test relationships
180+
self.assertTrue(b < a < c) # b is proper subset of a, a is proper subset of c
181+
182+
183+
class TestSetComprehensions(unittest.TestCase):
184+
"""Test cases for set comprehensions."""
185+
186+
def test_basic_comprehension(self):
187+
"""Test basic set comprehension."""
188+
squares, even_squares, _ = set_comprehensions()
189+
190+
expected_squares = {0, 1, 4, 9, 16, 25, 36, 49, 64, 81}
191+
self.assertEqual(squares, expected_squares)
192+
193+
expected_even_squares = {0, 4, 16, 36, 64}
194+
self.assertEqual(even_squares, expected_even_squares)
195+
196+
def test_duplicate_removal(self):
197+
"""Test using set for duplicate removal."""
198+
numbers = [1, 2, 2, 3, 3, 3, 4, 4, 5]
199+
unique_numbers = list(set(numbers))
200+
201+
# Check that all unique elements are present
202+
self.assertEqual(set(unique_numbers), {1, 2, 3, 4, 5})
203+
204+
# Check that the length is correct
205+
self.assertEqual(len(unique_numbers), 5)
206+
207+
208+
class TestPracticalExamples(unittest.TestCase):
209+
"""Test cases for practical examples of using sets."""
210+
211+
def test_unique_words(self):
212+
"""Test finding unique words in text."""
213+
text = "to be or not to be that is the question"
214+
unique_words = set(text.split())
215+
216+
expected_words = {"to", "be", "or", "not", "that", "is", "the", "question"}
217+
self.assertEqual(unique_words, expected_words)
218+
219+
def test_common_elements(self):
220+
"""Test finding common elements between lists."""
221+
list1 = [1, 2, 3, 4, 5]
222+
list2 = [4, 5, 6, 7, 8]
223+
224+
common = set(list1).intersection(set(list2))
225+
self.assertEqual(common, {4, 5})
226+
227+
def test_list_differences(self):
228+
"""Test finding differences between lists."""
229+
list1 = [1, 2, 3, 4, 5]
230+
list2 = [4, 5, 6, 7, 8]
231+
232+
only_in_list1 = set(list1) - set(list2)
233+
only_in_list2 = set(list2) - set(list1)
234+
235+
self.assertEqual(only_in_list1, {1, 2, 3})
236+
self.assertEqual(only_in_list2, {6, 7, 8})

0 commit comments

Comments
 (0)