summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/sol2/test_operators.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_operators.cpp
parent1335933ce00cf6095e403a24d0b1dd9e0b565650 (diff)
Added sol2 header only library as future replacement for luabridge (nw)
Diffstat (limited to '3rdparty/sol2/test_operators.cpp')
-rw-r--r--3rdparty/sol2/test_operators.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/3rdparty/sol2/test_operators.cpp b/3rdparty/sol2/test_operators.cpp
new file mode 100644
index 00000000000..b8e48e783ee
--- /dev/null
+++ b/3rdparty/sol2/test_operators.cpp
@@ -0,0 +1,83 @@
+#define SOL_CHECK_ARGUMENTS
+
+#include <sol.hpp>
+#include <catch.hpp>
+
+TEST_CASE("operators/default", "test that generic equality operators and all sorts of equality tests can be used") {
+ sol::state lua;
+ lua.open_libraries(sol::lib::base);
+
+ struct T {};
+ struct U {
+ int a;
+ U(int x = 20) : a(x) {}
+ bool operator==(const U& r) {
+ return a == r.a;
+ }
+ };
+ struct V {
+ int a;
+ V(int x = 20) : a(x) {}
+ bool operator==(const V& r) const {
+ return a == r.a;
+ }
+ };
+ lua.new_usertype<T>("T");
+ lua.new_usertype<U>("U");
+ lua.new_usertype<V>("V");
+
+ T t1;
+ T& t2 = t1;
+ T t3;
+ U u1;
+ U u2{ 30 };
+ U u3;
+ U v1;
+ U v2{ 30 };
+ U v3;
+ lua["t1"] = &t1;
+ lua["t2"] = &t2;
+ lua["t3"] = &t3;
+ lua["u1"] = &u1;
+ lua["u2"] = &u2;
+ lua["u3"] = &u3;
+ lua["v1"] = &v1;
+ lua["v2"] = &v2;
+ lua["v3"] = &v3;
+
+ // Can only compare identity here
+ REQUIRE_NOTHROW({
+ lua.script("assert(t1 == t1)");
+ lua.script("assert(t2 == t2)");
+ lua.script("assert(t3 == t3)");
+ });
+ REQUIRE_NOTHROW({
+ lua.script("assert(t1 == t2)");
+ lua.script("assert(not (t1 == t3))");
+ lua.script("assert(not (t2 == t3))");
+ });
+ // Object should compare equal to themselves
+ // (and not invoke operator==; pointer test should be sufficient)
+ REQUIRE_NOTHROW({
+ lua.script("assert(u1 == u1)");
+ lua.script("assert(u2 == u2)");
+ lua.script("assert(u3 == u3)");
+ });
+ REQUIRE_NOTHROW({
+ lua.script("assert(not (u1 == u2))");
+ lua.script("assert(u1 == u3)");
+ lua.script("assert(not (u2 == u3))");
+ });
+ // Object should compare equal to themselves
+ // (and not invoke operator==; pointer test should be sufficient)
+ REQUIRE_NOTHROW({
+ lua.script("assert(v1 == v1)");
+ lua.script("assert(v2 == v2)");
+ lua.script("assert(v3 == v3)");
+ });
+ REQUIRE_NOTHROW({
+ lua.script("assert(not (v1 == v2))");
+ lua.script("assert(v1 == v3)");
+ lua.script("assert(not (v2 == v3))");
+ });
+} \ No newline at end of file