Update of /cvsroot/luabind/luabind/luabind/test
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32481/luabind/test
Modified Files:
test_abstract_base.cpp test_policies.cpp
Log Message:
fixed problem with returning const-references to abstract classes. The const_reference_policy was copying the objects. Also added a test to verify that the fix actually works
Index: test_abstract_base.cpp
===================================================================
RCS file: /cvsroot/luabind/luabind/luabind/test/test_abstract_base.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- test_abstract_base.cpp 15 Apr 2005 13:46:17 -0000 1.4
+++ test_abstract_base.cpp 21 Dec 2005 23:09:47 -0000 1.5
@@ -34,6 +34,14 @@
COUNTER_GUARD(abstract);
+struct concrete : abstract
+{
+ std::string hello()
+ {
+ return "test string";
+ }
+};
+
struct abstract_wrap : abstract, wrap_base
{
std::string hello()
@@ -52,6 +60,19 @@
return a.hello();
}
+abstract& return_abstract_ref()
+{
+ static concrete c;
+ return c;
+}
+
+abstract const& return_const_abstract_ref()
+{
+ static concrete c;
+ return c;
+}
+
+
void test_main(lua_State* L)
{
module(L)
@@ -60,7 +81,9 @@
.def(constructor<>())
.def("hello", &abstract::hello),
- def("call_hello", &call_hello)
+ def("call_hello", &call_hello),
+ def("return_abstract_ref", &return_abstract_ref),
+ def("return_const_abstract_ref", &return_const_abstract_ref)
];
DOSTRING_EXPECTED(L,
Index: test_policies.cpp
===================================================================
RCS file: /cvsroot/luabind/luabind/luabind/test/test_policies.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- test_policies.cpp 28 Nov 2005 20:55:34 -0000 1.11
+++ test_policies.cpp 21 Dec 2005 23:09:47 -0000 1.12
@@ -67,7 +67,7 @@
policies_test_class(policies_test_class const& c): name_(c.name_)
{ ++count; }
- void member_out_val(int* v) { *v = 5; }
+ void member_out_val(int a, int* v) { *v = a * 2; }
secret_type* member_secret() { return &sec_; }
};
@@ -112,7 +112,7 @@
[
class_<policies_test_class>("test")
.def(constructor<>())
- .def("member_out_val", &policies_test_class::member_out_val, pure_out_value(_2))
+ .def("member_out_val", &policies_test_class::member_out_val, pure_out_value(_3))
.def("member_secret", &policies_test_class::member_secret, discard_result)
.def("f", &policies_test_class::f, adopt(_2))
.def("make", &policies_test_class::make, adopt(return_value))
@@ -195,7 +195,7 @@
TEST_CHECK(policies_test_class::count == 2);
DOSTRING(L, "b = a:make('tjosan')");
- DOSTRING(L, "assert(a:member_out_val() == 5)");
+ DOSTRING(L, "assert(a:member_out_val(3) == 6)");
DOSTRING(L, "a:member_secret()");
// make instantiated a new policies_test_class
|