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_operators.cpp | |
parent | 1335933ce00cf6095e403a24d0b1dd9e0b565650 (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.cpp | 83 |
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 |