I am working on a writing C API test cases for PyTuple in this PR. I am having hard time writing test cases for the following C API’s.
- _PyTuple_Resize
- PyTuple_Pack
- PyTuple_SetItem
- PyTuple_SET_ITEM
I would appreciate any ideas. Thank you.
I am working on a writing C API test cases for PyTuple in this PR. I am having hard time writing test cases for the following C API’s.
I would appreciate any ideas. Thank you.
PyTuple_Pack. Look at py_buildvalue in _testcapimodule.c and the corresponding test.
PyTuple_SetItem. It is not safe to modify normal tuple. You have to create a copy of the specified tuple (using PyTuple_New and PyTuple_SET_ITEM) and then call PyTuple_SetItem for it. See for example how unicode_copy is used in _testcapi/unicode.c. Return the modified tuple.
PyTuple_SET_ITEM. The same as for PyTuple_SetItem, but you have to decref the old value.
_PyTuple_Resize. More or less the same, but it includes some corner cases, like gc-tracked and not gc-tracked tuple. I cannot say how to test this without trying to do this. You can only add simpler tests. It is surprizing that _PyTuple_Resize does not check that the tuple is not shared, perhaps it will be added later.