summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/sol2/test_overflow.cpp
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2016-10-07 14:43:09 +0200
committer Miodrag Milanovic <mmicko@gmail.com>2016-10-07 14:43:09 +0200
commit377472a6dd2c9bdff4d5667f5789c49aee2abb4c (patch)
treea0ce4d6fc3db1524609efc61307d48448e703f38 /3rdparty/sol2/test_overflow.cpp
parent1335933ce00cf6095e403a24d0b1dd9e0b565650 (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.cpp47
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());
+}