kszucs commented on a change in pull request #7519: URL: https://github.com/apache/arrow/pull/7519#discussion_r448551033
########## File path: python/pyarrow/tests/test_scalars.py ########## @@ -16,427 +16,443 @@ # under the License. import datetime +import decimal import pytest -import unittest import numpy as np import pyarrow as pa -class TestScalars(unittest.TestCase): - - def test_null_singleton(self): - with pytest.raises(Exception): - pa.NAType() +@pytest.mark.parametrize(['value', 'ty', 'klass', 'deprecated'], [ + (False, None, pa.BooleanScalar, pa.BooleanValue), + (True, None, pa.BooleanScalar, pa.BooleanValue), + (1, None, pa.Int64Scalar, pa.Int64Value), + (-1, None, pa.Int64Scalar, pa.Int64Value), + (1, pa.int8(), pa.Int8Scalar, pa.Int8Value), + (1, pa.uint8(), pa.UInt8Scalar, pa.UInt8Value), + (1, pa.int16(), pa.Int16Scalar, pa.Int16Value), + (1, pa.uint16(), pa.UInt16Scalar, pa.UInt16Value), + (1, pa.int32(), pa.Int32Scalar, pa.Int32Value), + (1, pa.uint32(), pa.UInt32Scalar, pa.UInt32Value), + (1, pa.int64(), pa.Int64Scalar, pa.Int64Value), + (1, pa.uint64(), pa.UInt64Scalar, pa.UInt64Value), + (1.0, None, pa.DoubleScalar, pa.DoubleValue), + (np.float16(1.0), pa.float16(), pa.HalfFloatScalar, pa.HalfFloatValue), + (1.0, pa.float32(), pa.FloatScalar, pa.FloatValue), + ("string", None, pa.StringScalar, pa.StringValue), + (b"bytes", None, pa.BinaryScalar, pa.BinaryValue), + ([1, 2, 3], None, pa.ListScalar, pa.ListValue), + ([1, 2, 3, 4], pa.large_list(pa.int8()), pa.LargeListScalar, + pa.LargeListValue), + (datetime.date.today(), None, pa.Date32Scalar, pa.Date64Value), + (datetime.datetime.now(), None, pa.TimestampScalar, pa.TimestampValue), + ({'a': 1, 'b': [1, 2]}, None, pa.StructScalar, pa.StructValue) +]) +def test_basics(value, ty, klass, deprecated): + s = pa.scalar(value, type=ty) + assert isinstance(s, klass) + assert s == value + assert s == s + assert s != "else" + assert hash(s) == hash(s) + assert s.is_valid is True + with pytest.warns(FutureWarning): + isinstance(s, deprecated) + + s = pa.scalar(None, type=s.type) + assert s.is_valid is False + assert s.as_py() is None + + +def test_null_singleton(): + with pytest.raises(Exception): + pa.NullScalar() + + +def test_nulls(): + null = pa.scalar(None) + assert null is pa.NA + assert null.as_py() is None + assert (null == "something") is pa.NA Review comment: Added and updated the `__eq__` behavior to return `False`. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org