From 811764e0487a732c2138ab849278d93a01243180 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Thu, 11 Nov 2010 15:58:51 +0000 Subject: [PATCH] Object lifetime specificity test added. --- CMakeLists.txt | 4 ++ unittests/object_lifetime_test.cpp | 66 ++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 unittests/object_lifetime_test.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index e85c6ca..bf573db 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -155,6 +155,10 @@ IF(BUILD_TESTING) target_link_libraries(boxed_cast_test ${LIBS}) add_test(NAME Boxed_Cast_Test COMMAND boxed_cast_test) + add_executable(object_lifetime_test unittests/object_lifetime_test.cpp) + target_link_libraries(object_lifetime_test ${LIBS}) + add_test(NAME Object_Lifetime_Test COMMAND object_lifetime_test) + add_executable(multifile_test unittests/multifile_test_main.cpp unittests/multifile_test_chai.cpp unittests/multifile_test_module.cpp) target_link_libraries(multifile_test ${LIBS}) diff --git a/unittests/object_lifetime_test.cpp b/unittests/object_lifetime_test.cpp new file mode 100644 index 0000000..d59957b --- /dev/null +++ b/unittests/object_lifetime_test.cpp @@ -0,0 +1,66 @@ +#include + +class Test +{ + public: + Test() + { + ++count(); + } + + Test(const Test &) + { + ++count(); + } + + ~Test() + { + --count(); + } + + static int& count() + { + static int c = 0; + return c; + } +}; + +int main() +{ + chaiscript::ModulePtr m = chaiscript::ModulePtr(new chaiscript::Module()); + + CHAISCRIPT_CLASS( m, + Test, + (Test ()) + (Test (const Test &)), + ((count)) + ); + + chaiscript::ChaiScript chai; + chai.add(m); + chai.add(chaiscript::fun(&Test::count), "count"); + + int count = chai.eval("count()"); + + int count2 = chai.eval("var i = 0; { var t = Test(); } return i;"); + + int count3 = chai.eval("var i = 0; { var t = Test(); i = count(); } return i;"); + + int count4 = chai.eval("var i = 0; { var t = Test(); { var t2 = Test(); i = count(); } } return i;"); + + int count5 = chai.eval("var i = 0; { var t = Test(); { var t2 = Test(); } i = count(); } return i;"); + + int count6 = chai.eval("var i = 0; { var t = Test(); { var t2 = Test(); } } i = count(); return i;"); + + if (count == 0 + && count2 == 0 + && count3 == 1 + && count4 == 2 + && count5 == 1 + && count6 == 0) + { + return EXIT_SUCCESS; + } else { + return EXIT_FAILURE; + } +}