2
0
mirror of https://github.com/boostorg/python.git synced 2026-01-19 16:32:16 +00:00

Pearu's test

[SVN r14057]
This commit is contained in:
Dave Abrahams
2002-05-29 13:02:14 +00:00
parent 033a3dd620
commit c7d16fbf9e
3 changed files with 126 additions and 0 deletions

View File

@@ -52,6 +52,7 @@ rule bpl-test ( name ? : files * )
}
bpl-test minimal ;
bpl-test pearu1 : test_cltree.py cltree.cpp ;
bpl-test try : newtest.py m1.cpp m2.cpp ;
bpl-test builtin_converters : test_builtin_converters.py test_builtin_converters.cpp ;
bpl-test test_pointer_adoption ;

85
test/cltree.cpp Executable file
View File

@@ -0,0 +1,85 @@
#include <boost/python/module.hpp>
#include <boost/python/class.hpp>
#include <boost/utility.hpp>
/* Non-modifiable definitions */
class basic {
public:
basic() { name = "cltree.basic"; }
std::string repr() { return name+"()"; }
protected:
std::string name;
};
class constant: public basic {
public:
constant() { name = "cltree.constant"; }
};
class symbol: public basic {
public:
symbol() { name = "cltree.symbol"; }
};
class variable: public basic {
public:
variable() { name = "cltree.variable"; }
};
/* EOF: Non-modifiable definitions */
class symbol_wrapper: public symbol {
public:
symbol_wrapper(PyObject* self): symbol() {
name = "cltree.wrapped_symbol";
}
};
class variable_wrapper: public variable {
public:
variable_wrapper(PyObject* self): variable() {
name = "cltree.wrapped_variable";
}
// This constructor is introduced only because cannot use
// boost::noncopyable, see below.
variable_wrapper(PyObject* self,variable v): variable(v) {}
};
BOOST_PYTHON_MODULE_INIT(cltree) {
boost::python::module m("cltree");
m
.add(
boost::python::class_<basic>("basic")
.def_init(boost::python::args<>())
.def("__repr__",&basic::repr)
)
;
m
.add(boost::python::class_<constant
,boost::python::bases<basic>
,boost::noncopyable
>("constant")
.def_init(boost::python::args<>())
)
.add(boost::python::class_<symbol
,symbol_wrapper
,boost::noncopyable
>("symbol")
.def_init(boost::python::args<>())
)
.add(boost::python::class_<variable
,boost::python::bases<basic>
,variable_wrapper
//,boost::noncopyable // leads to compiler failure?!
>("variable")
.def_init(boost::python::args<>())
)
;
}

40
test/test_cltree.py Normal file
View File

@@ -0,0 +1,40 @@
#!/usr/bin/env python
from cltree import basic,symbol,constant,variable
b = basic()
c = constant()
s = symbol()
v = variable()
assert isinstance(b,basic)
assert not isinstance(b,symbol)
assert not isinstance(b,constant)
assert not isinstance(b,variable)
assert isinstance(c,basic)
assert isinstance(c,constant)
assert not isinstance(c,symbol)
assert not isinstance(c,variable)
assert not isinstance(s,basic)
assert isinstance(s,symbol)
assert not isinstance(s,constant)
assert not isinstance(s,variable)
assert isinstance(v,basic)
assert not isinstance(v,symbol)
assert not isinstance(v,constant)
assert isinstance(v,variable)
print 'b=',b
assert repr(b)=='cltree.basic()'
print 's=',s
assert repr(s)!='cltree.wrapped_symbol()' # because not isinstance(s,basic)
print 'c=',c
assert repr(c)=='cltree.constant()'
print 'v=',v
assert repr(v)=='cltree.wrapped_variable()'
print 'ok'