Skip to content

Commit 3865536

Browse files
committed
new to open source
1 parent 9f66b81 commit 3865536

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

pandas/tests/arrays/boolean/test_arithmetic.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,61 @@ def test_error_invalid_values(data, all_arithmetic_operators):
132132
)
133133
with pytest.raises(TypeError, match=msg):
134134
ops(pd.Series("foo", index=s.index))
135+
136+
# Tests for BooleanArray logical and comparison operations
137+
# -------------------------------------------------------------------------
138+
139+
@pytest.mark.parametrize(
140+
"opname, expected",[
141+
("and_", [True, False, None, False, False, None, None, None, None]),
142+
("or_", [True, True, None, True, False, None, None, None, None]),
143+
("xor", [False, True, None, True, False, None, None, None, None]),
144+
],ids=["and", "or", "xor"],
145+
)
146+
147+
def test_logical_ops(left_array, right_array, opname, expected):
148+
"""Test bitwise logical operations (&, |, ^) for BooleanArray."""
149+
op = getattr(operator, opname)
150+
result = op(left_array, right_array)
151+
expected = pd.array(expected, dtype="boolean")
152+
tm.assert_extension_array_equal(result, expected)
153+
154+
def test_invert(left_array):
155+
"""Test inversion (~) for BooleanArray."""
156+
result = operator.invert(left_array)
157+
expected = pd.array(
158+
[False, False, False, True, True, True, None, None, None],
159+
dtype="boolean",
160+
)
161+
tm.assert_extension_array_equal(result, expected)
162+
163+
@pytest.mark.parametrize(
164+
"opname, expected",[
165+
("eq", [True, False, None, False, True, None, None, None, None]),
166+
("ne", [False, True, None, True, False, None, None, None, None]),
167+
("gt", [False, True, None, False, False, None, None, None, None]),
168+
("lt", [False, False, None, False, False, None, None, None, None]),
169+
("ge", [True, False, None, True, True, None, None, None, None]),
170+
("le", [True, True, None, False, True, None, None, None, None]),
171+
],ids=["==", "!=", ">", "<", ">=", "<="],
172+
)
173+
def test_comparison_ops(left_array, right_array, opname, expected):
174+
"""Test comparison operators (==, !=, >, <, >=, <=) for BooleanArray."""
175+
op = getattr(operator, opname)
176+
result = op(left_array, right_array)
177+
expected = pd.array(expected, dtype="boolean")
178+
tm.assert_extension_array_equal(result, expected)
179+
180+
def test_logical_with_scalar(left_array):
181+
"""Test logical ops with scalar values (True/False/NA)."""
182+
result_true = left_array & True
183+
result_false = left_array | False
184+
result_na = left_array ^ pd.NA
185+
186+
expected_true = left_array # '&' True→Same
187+
expected_false = left_array # '|' False→same
188+
expected_na = pd.array([None] * len(left_array), dtype="boolean") # XOR NA→All NA
189+
190+
tm.assert_extension_array_equal(result_true, expected_true)
191+
tm.assert_extension_array_equal(result_false, expected_false)
192+
tm.assert_extension_array_equal(result_na, expected_na)

0 commit comments

Comments
 (0)