diff options
author | 2016-10-07 14:43:09 +0200 | |
---|---|---|
committer | 2016-10-07 14:43:09 +0200 | |
commit | 377472a6dd2c9bdff4d5667f5789c49aee2abb4c (patch) | |
tree | a0ce4d6fc3db1524609efc61307d48448e703f38 /3rdparty/sol2/test_overflow.cpp | |
parent | 1335933ce00cf6095e403a24d0b1dd9e0b565650 (diff) |
Added sol2 header only library as future replacement for luabridge (nw)
Diffstat (limited to '3rdparty/sol2/test_overflow.cpp')
-rw-r--r-- | 3rdparty/sol2/test_overflow.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/3rdparty/sol2/test_overflow.cpp b/3rdparty/sol2/test_overflow.cpp new file mode 100644 index 00000000000..68c11811a97 --- /dev/null +++ b/3rdparty/sol2/test_overflow.cpp @@ -0,0 +1,47 @@ +#define SOL_CHECK_ARGUMENTS + +#include <catch.hpp> +#include <sol.hpp> + + +TEST_CASE("issues/stack-overflow", "make sure various operations repeated don't trigger stack overflow") { + sol::state lua; + lua.script("t = {};t[0]=20"); + lua.script("lua_function=function(i)return i;end"); + + sol::function f = lua["lua_function"]; + std::string teststring = "testtext"; + REQUIRE_NOTHROW( + for (int i = 0; i < 1000000; ++i) { + std::string result = f(teststring); + if (result != teststring) throw std::logic_error("RIP"); + } + ); + sol::table t = lua["t"]; + int expected = 20; + REQUIRE_NOTHROW( + for (int i = 0; i < 1000000; ++i) { + int result = t[0]; + t.size(); + if (result != expected) + throw std::logic_error("RIP"); + } + ); +} + + +TEST_CASE("issues/stack-overflow-2", "make sure basic iterators clean up properly when they're not iterated through (e.g., with empty())") { + sol::state lua; + sol::table t = lua.create_table_with(1, "wut"); + int MAX = 50000; + auto fx = [&]() { + int a = 50; + for (int i = 0; i < MAX; ++i) { + if (t.empty()) { + a += 4; + } + a += 2; + } + }; + REQUIRE_NOTHROW(fx()); +} |