@@ -95,115 +95,3 @@ def test_fibonacci_negative(self):
9595 with self .assertRaises (ValueError ) as context :
9696 fibonacci (- 1 )
9797 self .assertEqual (str (context .exception ), "n must be a non-negative integer" )
98-
99-
100- class CalculatorTests (unittest .TestCase ):
101- def setUp (self ):
102- self .calculator = Calculator ()
103-
104- def test_add (self ):
105- self .assertEqual (self .calculator .add (2 , 3 ), 5 )
106-
107- def test_subtract (self ):
108- self .assertEqual (self .calculator .subtract (5 , 3 ), 2 )
109-
110- def test_multiply (self ):
111- self .assertEqual (self .calculator .multiply (2 , 3 ), 6 )
112-
113- def test_divide (self ):
114- self .assertEqual (self .calculator .divide (6 , 3 ), 2 )
115-
116- def test_divide_by_zero (self ):
117- with self .assertRaises (ValueError ) as context :
118- self .calculator .divide (5 , 0 )
119- self .assertEqual (str (context .exception ), "Cannot divide by zero" )
120-
121- def test_memory (self ):
122- self .calculator .store (10 )
123- self .assertEqual (self .calculator .recall (), 10 )
124- self .calculator .store (20 )
125- self .assertEqual (self .calculator .recall (), 20 )
126-
127-
128- class StringManipulatorTests (unittest .TestCase ):
129- def test_reverse_string (self ):
130- self .assertEqual (StringManipulator .reverse_string ("hello" ), "olleh" )
131- self .assertEqual (StringManipulator .reverse_string ("" ), "" )
132- self .assertEqual (StringManipulator .reverse_string ("a" ), "a" )
133- self .assertEqual (StringManipulator .reverse_string ("12345" ), "54321" )
134-
135- def test_is_palindrome (self ):
136- self .assertTrue (StringManipulator .is_palindrome ("racecar" ))
137- self .assertTrue (StringManipulator .is_palindrome ("A man, a plan, a canal: Panama" ))
138- self .assertTrue (StringManipulator .is_palindrome ("" ))
139- self .assertTrue (StringManipulator .is_palindrome ("a" ))
140- self .assertFalse (StringManipulator .is_palindrome ("hello" ))
141- self .assertFalse (StringManipulator .is_palindrome ("world" ))
142-
143-
144- class DataProcessorTests (unittest .TestCase ):
145- def test_get_mean (self ):
146- processor = DataProcessor ([1 , 2 , 3 , 4 , 5 ])
147- self .assertEqual (processor .get_mean (), 3 )
148-
149- def test_get_variance (self ):
150- processor = DataProcessor ([1 , 2 , 3 , 4 , 5 ])
151- self .assertEqual (processor .get_variance (), 2.5 )
152-
153- def test_normalize (self ):
154- processor = DataProcessor ([1 , 2 , 3 , 4 , 5 ])
155- normalized = processor .normalize ()
156- expected = [- 1.265 , - 0.632 , 0 , 0.632 , 1.265 ]
157- # Compare rounded values due to floating point precision
158- for i , val in enumerate (normalized ):
159- self .assertAlmostEqual (val , expected [i ], places = 3 )
160-
161- def test_empty_data (self ):
162- with self .assertRaises (ValueError ) as context :
163- DataProcessor ([])
164- self .assertEqual (str (context .exception ), "Data list cannot be empty" )
165-
166- def test_single_value_variance (self ):
167- processor = DataProcessor ([5 ])
168- with self .assertRaises (ValueError ) as context :
169- processor .get_variance ()
170- self .assertEqual (str (context .exception ), "At least two data points are required to compute variance" )
171-
172-
173- class DateParserTests (unittest .TestCase ):
174- def test_parse_date (self ):
175- self .assertEqual (parse_date ("2023-01-15" ), datetime (2023 , 1 , 15 ))
176- self .assertEqual (parse_date ("2023-12-31" ), datetime (2023 , 12 , 31 ))
177-
178- def test_parse_date_custom_format (self ):
179- self .assertEqual (parse_date ("15/01/2023" , fmt = "%d/%m/%Y" ), datetime (2023 , 1 , 15 ))
180-
181- def test_parse_date_invalid (self ):
182- with self .assertRaises (ValueError ):
183- parse_date ("invalid-date" )
184-
185-
186- class UtilityFunctionsTests (unittest .TestCase ):
187- def test_safe_list_access (self ):
188- my_list = [1 , 2 , 3 ]
189- self .assertEqual (safe_list_access (my_list , 0 ), 1 )
190- self .assertEqual (safe_list_access (my_list , 2 ), 3 )
191- self .assertIsNone (safe_list_access (my_list , 3 ))
192- self .assertEqual (safe_list_access (my_list , 3 , default = "not found" ), "not found" )
193- self .assertEqual (safe_list_access ([], 0 , default = "empty" ), "empty" )
194-
195- def test_merge_dicts (self ):
196- dict1 = {"a" : 1 , "b" : 2 }
197- dict2 = {"b" : 3 , "c" : 4 }
198- merged = merge_dicts (dict1 , dict2 )
199- self .assertEqual (merged , {"a" : 1 , "b" : 3 , "c" : 4 })
200-
201- # Test recursive merging
202- dict1 = {"a" : 1 , "b" : {"x" : 10 , "y" : 20 }}
203- dict2 = {"b" : {"y" : 30 , "z" : 40 }, "c" : 4 }
204- merged = merge_dicts (dict1 , dict2 )
205- self .assertEqual (merged , {"a" : 1 , "b" : {"x" : 10 , "y" : 30 , "z" : 40 }, "c" : 4 })
206-
207- # Test that original dicts are not modified
208- self .assertEqual (dict1 , {"a" : 1 , "b" : {"x" : 10 , "y" : 20 }})
209- self .assertEqual (dict2 , {"b" : {"y" : 30 , "z" : 40 }, "c" : 4 })
0 commit comments