45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
import pytest
|
|
|
|
from pandas.util._move import BadMove, move_into_mutable_buffer, stolenbuf
|
|
|
|
|
|
def test_cannot_create_instance_of_stolen_buffer():
|
|
# Stolen buffers need to be created through the smart constructor
|
|
# "move_into_mutable_buffer," which has a bunch of checks in it.
|
|
|
|
msg = "cannot create 'pandas.util._move.stolenbuf' instances"
|
|
with pytest.raises(TypeError, match=msg):
|
|
stolenbuf()
|
|
|
|
|
|
def test_more_than_one_ref():
|
|
# Test case for when we try to use "move_into_mutable_buffer"
|
|
# when the object being moved has other references.
|
|
|
|
b = b"testing"
|
|
|
|
with pytest.raises(BadMove, match="testing") as e:
|
|
|
|
def handle_success(type_, value, tb):
|
|
assert value.args[0] is b
|
|
return type(e).handle_success(e, type_, value, tb) # super
|
|
|
|
e.handle_success = handle_success
|
|
move_into_mutable_buffer(b)
|
|
|
|
|
|
def test_exactly_one_ref():
|
|
# Test case for when the object being moved has exactly one reference.
|
|
|
|
b = b"testing"
|
|
|
|
# We need to pass an expression on the stack to ensure that there are
|
|
# not extra references hanging around. We cannot rewrite this test as
|
|
# buf = b[:-3]
|
|
# as_stolen_buf = move_into_mutable_buffer(buf)
|
|
# because then we would have more than one reference to buf.
|
|
as_stolen_buf = move_into_mutable_buffer(b[:-3])
|
|
|
|
# Materialize as byte-array to show that it is mutable.
|
|
assert bytearray(as_stolen_buf) == b"test"
|