Unit testing the native code
Another use of Cython is unit testing the core functionality of shared C libraries. If you maintain a .pxd
file (this is all you need really), you can write your own wrapper classes and do scalability testing of data structures with the expressiveness of Python. For example, we can write unit tests for something such as std::map
and std::vector
as follows:
from libcpp.vector cimport vector PASSED = False cdef vector[int] vect cdef int i for i in range(10): vect.push_back(i) for i in range(10): print vect[i] PASSED = True
Then, write a test for map
as follows:
from libcpp.map cimport map PASSED = False cdef map[int,int] mymap cdef int i for i in range (10): mymap[i] = (i + 1) for i in range (10): print mymap[i] PASSED = True
Then, if we compile them into separate modules, we can simply write a test executor:
#!/usr/bin/env python
print "Cython C++ Unit test executor"
print "[TEST] std::map"
import testmap
assert testmap.PASSED
print "[PASS...