""" Test weave support for SWIG wrapped objects. This example requires that one has weave installed. Weave is distributed as part of SciPy (http://www.scipy.org). More information on Weave may be had from here: http://www.scipy.org/documentation/weave As of November 22, 2004, this only works with weave from CVS. If there is a more recent release of SciPy after this date, it should work fine. """ import example import weave from weave import converters from weave import swig2_spec # Weave does not support swig2 by default (yet). So add this to the # list of default converters to test. converters.default.insert(0, swig2_spec.swig2_converter()) def test(): """ A simple test case for weave.""" a = example.Foo() a.x = 1 b = example.Bar() b.y = 2 c = example.FooBar() c.x = 1 c.y = 2 c.z = 3 v = example.VectorBar() v.append(b) v.append(c) d = v[0] e = v[1] v = example.VectorFoo() v.append(a) v.append(c) f = v[0] g = v[1] code = """ std::cout << a->x << std::endl; assert(a->x == 1); std::cout << b->y << std::endl; assert(b->y == 2); std::cout << c->x << std::endl; std::cout << c->y << std::endl; std::cout << c->z << std::endl; assert(c->x == 1); assert(c->y == 2); assert(c->z == 3); std::cout << d->y << std::endl; assert(d->y == 2); std::cout << e->y << std::endl; assert(e->y == 2); std::cout << f->x << std::endl; assert(f->x == 1); std::cout << g->x << std::endl; assert(g->x == 1); """ weave.inline(code, ['a', 'b', 'c', 'd', 'e', 'f', 'g'], include_dirs=['.'], headers=['"example.h"'], verbose=2) if __name__ == "__main__": test()