ChaiScript/unittests/object_lifetime_test.cpp
Jason Turner 136b877afa Reduce cost of including chaiscript.hpp
- ChaiScript no longer includes or automatically instantiates std lib
 - ChaiScript constructor now requires an std lib instance in the form
   of a ModulePtr object
 - This new layout facilitates better usage of compilation firewalls and
   factories for reducing the overall impact of ChaiScript on a project
2011-12-27 21:37:00 -07:00

68 lines
1.5 KiB
C++

#include <chaiscript/utility/utility.hpp>
#include <chaiscript/chaiscript_stdlib.hpp>
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::utility::add_class<Test>(*m,
"Test",
{ chaiscript::constructor<Test ()>(),
chaiscript::constructor<Test (const Test &)>() },
{ {chaiscript::fun(&Test::count), "count"} }
);
chaiscript::ChaiScript chai(chaiscript::Std_Lib::library());
chai.add(m);
chai.add(chaiscript::fun(&Test::count), "count");
int count = chai.eval<int>("count()");
int count2 = chai.eval<int>("auto i = 0; { auto t = Test(); } return i;");
int count3 = chai.eval<int>("auto i = 0; { auto t = Test(); i = count(); } return i;");
int count4 = chai.eval<int>("auto i = 0; { auto t = Test(); { auto t2 = Test(); i = count(); } } return i;");
int count5 = chai.eval<int>("auto i = 0; { auto t = Test(); { auto t2 = Test(); } i = count(); } return i;");
int count6 = chai.eval<int>("auto i = 0; { auto t = Test(); { auto 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;
}
}