swig/Examples/test-suite/python/python_pybuffer_runme.py
William S Fulton 4d5f4bcd33 Merge branch 'PyBuffer_Release-pybuffer'
* PyBuffer_Release-pybuffer:
  Add tests.
  Fix the error handling for the PyObject_GetBuffer() calls in pybuffer.i
2020-10-07 22:37:17 +01:00

70 lines
1.8 KiB
Python

# run:
# python python_pybuffer_runme.py benchmark
# for the benchmark, other wise the test case will be run
import python_pybuffer
import sys
def check(flag):
if not flag:
raise RuntimeError("Test failed")
if len(sys.argv) >= 2 and sys.argv[1] == "benchmark":
# run the benchmark
import time
k = 1000000 # number of times to execute the functions
t = time.time()
a = bytearray(b"hello world")
for i in range(k):
python_pybuffer.title1(a)
print("Time used by bytearray: {}".format(time.time() - t))
t = time.time()
b = "hello world"
for i in range(k):
python_pybuffer.title2(b)
print("Time used by string: {}".format(time.time() - t))
else:
# run the test case
buf1 = bytearray(10)
buf2 = bytearray(50)
python_pybuffer.func1(buf1)
check(buf1 == b"a" * 10)
python_pybuffer.func2(buf2)
check(buf2.startswith(b"Hello world!\x00"))
count = python_pybuffer.func3(buf2)
check(count == 10) # number of alpha and number in 'Hello world!'
length = python_pybuffer.func4(buf2)
check(length == 12)
buf3 = bytearray(b"hello")
python_pybuffer.title1(buf3)
check(buf3 == b"Hello")
try:
python_pybuffer.func1(1)
raise RuntimeError, "should throw TypeError"
except TypeError, e:
check("(char *buf1, int len)" in str(e))
try:
python_pybuffer.func2(1)
raise RuntimeError, "should throw TypeError"
except TypeError, e:
check("(char *buf2)" in str(e))
try:
python_pybuffer.func3(1)
raise RuntimeError, "should throw TypeError"
except TypeError, e:
check("(const char *buf3, int len)" in str(e))
try:
python_pybuffer.func4(1)
raise RuntimeError, "should throw TypeError"
except TypeError, e:
check("(const char *buf4)" in str(e))