assert_frame_equal for set (#51899) · pandas-dev/pandas@b5aec87 (original) (raw)

4 files changed

lines changed

Original file line number Diff line number Diff line change
@@ -240,11 +240,10 @@ Styler
240 240
241 241 Other
242 242 ^^^^^
243 --
243 +- Bug in :func:`assert_almost_equal` now throwing assertion error for two unequal sets (:issue:`51727`)
244 244
245 245 .. ***DO NOT USE THIS SECTION***
246 246
247 --
248 247 -
249 248
250 249 .. ---------------------------------------------------------------------------
Original file line number Diff line number Diff line change
@@ -95,6 +95,10 @@ cpdef assert_almost_equal(a, b,
95 95 if robj is None:
96 96 robj = b
97 97
98 +if isinstance(a, set) or isinstance(b, set):
99 +assert a == b, f"{a} != {b}"
100 +return True
101 +
98 102 if isinstance(a, dict) or isinstance(b, dict):
99 103 return assert_dict_equal(a, b)
100 104
Original file line number Diff line number Diff line change
@@ -202,6 +202,18 @@ def test_assert_almost_equal_edge_case_ndarrays(left_dtype, right_dtype):
202 202 )
203 203
204 204
205 +def test_assert_almost_equal_sets():
206 +# GH#51727
207 +_assert_almost_equal_both({1, 2, 3}, {1, 2, 3})
208 +
209 +
210 +def test_assert_almost_not_equal_sets():
211 +# GH#51727
212 +msg = r"{1, 2, 3} != {1, 2, 4}"
213 +with pytest.raises(AssertionError, match=msg):
214 +_assert_almost_equal_both({1, 2, 3}, {1, 2, 4})
215 +
216 +
205 217 def test_assert_almost_equal_dicts():
206 218 _assert_almost_equal_both({"a": 1, "b": 2}, {"a": 1, "b": 2})
207 219
Original file line number Diff line number Diff line change
@@ -362,3 +362,20 @@ def test_assert_frame_equal_ts_column():
362 362 msg = r'DataFrame.iloc\[:, 0\] \(column name="a"\) values are different'
363 363 with pytest.raises(AssertionError, match=msg):
364 364 tm.assert_frame_equal(df1, df2)
365 +
366 +
367 +def test_assert_frame_equal_set():
368 +# GH#51727
369 +df1 = DataFrame({"set_column": [{1, 2, 3}, {4, 5, 6}]})
370 +df2 = DataFrame({"set_column": [{1, 2, 3}, {4, 5, 6}]})
371 +tm.assert_frame_equal(df1, df2)
372 +
373 +
374 +def test_assert_frame_equal_set_mismatch():
375 +# GH#51727
376 +df1 = DataFrame({"set_column": [{1, 2, 3}, {4, 5, 6}]})
377 +df2 = DataFrame({"set_column": [{1, 2, 3}, {4, 5, 7}]})
378 +
379 +msg = r'DataFrame.iloc\[:, 0\] \(column name="set_column"\) values are different'
380 +with pytest.raises(AssertionError, match=msg):
381 +tm.assert_frame_equal(df1, df2)