code: def test_array(self, comparison_op, dtype):
      op = comparison_op
  
      left = pd.array([0, 1, 2, None, None, None], dtype=dtype)
      right = pd.array([0, 1, None, 0, 1, None], dtype=dtype)
  
      result = op(left, right)
      values = op(left._data, right._data)
      mask = left._mask | right._mask
  
      expected = pd.arrays.BooleanArray(values, mask)
      tm.assert_extension_array_equal(result, expected)
  
      # ensure we haven't mutated anything inplace
      result[0] = pd.NA
      tm.assert_extension_array_equal(
          left, pd.array([0, 1, 2, None, None, None], dtype=dtype)
      )
      tm.assert_extension_array_equal(
          right, pd.array([0, 1, None, 0, 1, None], dtype=dtype)
      )
  
file_path: pandas/pandas/tests/arrays/masked_shared.py
imports: import numpy
  import pytest
  import pandas
  import pandas._testing
  from pandas.tests.extension.base import BaseOpsUtil
label_desc: Use image node_id 3 for calling the NumericOps obj's underlying member method code with example usage: obj.test_array(comparison_op, dtype) without return types