diff --git a/CMakeLists.txt b/CMakeLists.txt index be2bb2f..2d82449 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -294,6 +294,10 @@ if(BUILD_TESTING) target_link_libraries(object_lifetime_test ${LIBS}) add_test(NAME Object_Lifetime_Test COMMAND object_lifetime_test) + add_executable(object_lifetime_test2 unittests/object_lifetime_test2.cpp) + target_link_libraries(object_lifetime_test2 ${LIBS}) + add_test(NAME Object_Lifetime_Test2 COMMAND object_lifetime_test2) + add_executable(function_ordering_test unittests/function_ordering_test.cpp) target_link_libraries(function_ordering_test ${LIBS}) add_test(NAME Function_Ordering_Test COMMAND function_ordering_test) diff --git a/unittests/object_lifetime_test2.cpp b/unittests/object_lifetime_test2.cpp new file mode 100644 index 0000000..c99b191 --- /dev/null +++ b/unittests/object_lifetime_test2.cpp @@ -0,0 +1,69 @@ +#include +#include + +template +struct Vector2 +{ + Vector2() : x(0), y(0) {}; + Vector2(T px, T py) : x(px), y(py) {}; + Vector2(const Vector2& cp) : x(cp.x), y(cp.y) {}; + + Vector2& operator+=(const Vector2& vec_r) + { + x += vec_r.x; + y += vec_r.y; + return *this; + } + + Vector2 operator+(const Vector2& vec_r) + { + return Vector2(*this += vec_r); + } + + void operator=(const Vector2& ver_r) + { + x = ver_r.x; + y = ver_r.y; + } + + + T x; + T y; +}; + +Vector2 GetValue() +{ + return Vector2(10,15); +} + +int main() +{ + chaiscript::ChaiScript _script(chaiscript::Std_Lib::library()); + + //Registering stuff + _script.add(chaiscript::user_type>(), "Vector2f"); + _script.add(chaiscript::constructor ()>(), "Vector2f"); + _script.add(chaiscript::constructor (float, float)>(), "Vector2f"); + _script.add(chaiscript::constructor (const Vector2&)>(), "Vector2f"); + _script.add(chaiscript::fun(&Vector2::x), "x"); + _script.add(chaiscript::fun(&Vector2::y), "y"); + _script.add(chaiscript::fun(&Vector2::operator +), "+"); + _script.add(chaiscript::fun(&Vector2::operator +=), "+="); + _script.add(chaiscript::fun(&Vector2::operator =), "="); + _script.add(chaiscript::fun(&GetValue), "getValue"); + + _script.eval(R"( + var test = 0.0 + var test2 = Vector2f(10,10) + + test = getValue().x + print(test) + print(test2.x) + )"); + + if (_script.eval("to_string(test)") != "10") { return EXIT_FAILURE; } + if (_script.eval("to_string(test2.x)") != "10") { return EXIT_FAILURE; } + + + //_script.eval_file("object_lifetime_test2.inc"); +}