text: import numpy as np
  import pytest
  
  import pandas as pd
  import pandas._testing as tm
  from pandas.arrays import BooleanArray
  from pandas.tests.arrays.masked_shared import ComparisonOps
  
  
  @pytest.fixture
  def data():
      """Fixture returning boolean array with valid and missing data"""
      return pd.array(
          [True, False] * 4 + [np.nan] + [True, False] * 44 + [np.nan] + [True, False],
          dtype="boolean",
      )
  
  
  @pytest.fixture
  def dtype():
      """Fixture returning BooleanDtype"""
      return pd.BooleanDtype()
  
  
  class TestComparisonOps(ComparisonOps):
      def test_compare_scalar(self, data, comparison_op):
          self._compare_other(data, comparison_op, True)
  
      def test_compare_array(self, data, comparison_op):
          other = pd.array([True] * len(data), dtype="boolean")
          self._compare_other(data, comparison_op, other)
          other = np.array([True] * len(data))
          self._compare_other(data, comparison_op, other)
          other = pd.Series([True] * len(data))
          self._compare_other(data, comparison_op, other)
  
      @pytest.mark.parametrize("other", [True, False, pd.NA])
      def test_scalar(self, other, comparison_op, dtype):
          ComparisonOps.test_scalar(self, other, comparison_op, dtype)
  
      def test_array(self, comparison_op):
          op = comparison_op
          a = pd.array([True] * 3 + [False] * 3 + [None] * 3, dtype="boolean")
          b = pd.array([True, False, None] * 3, dtype="boolean")
  
          result = op(a, b)
  
          values = op(a._data, b._data)
          mask = a._mask | b._mask
          expected = BooleanArray(values, mask)
          tm.assert_extension_array_equal(result, expected)
  
          # ensure we haven't mutated anything inplace
          result[0] = None
          tm.assert_extension_array_equal(
              a, pd.array([True] * 3 + [False] * 3 + [None] * 3, dtype="boolean")
          )
          tm.assert_extension_array_equal(
              b, pd.array([True, False, None] * 3, dtype="boolean")
          )
  