aboutsummaryrefslogtreecommitdiffstats
path: root/lib/sol2/tests/runtime_tests/source/customizations_private.cpp
diff options
context:
space:
mode:
authorClyne Sullivan <clyne@bitgloo.com>2022-08-19 19:48:10 -0400
committerClyne Sullivan <clyne@bitgloo.com>2022-08-19 19:48:10 -0400
commitc467671ae8b6ec161c17e86f3383fd0625f755b8 (patch)
treefd126d5721256b15c0d71e4c47033e341bdb7816 /lib/sol2/tests/runtime_tests/source/customizations_private.cpp
parentda0913771538fd9b1ca538615fd9aa0388608466 (diff)
remove sol2 (will re-add as submodule)
Diffstat (limited to 'lib/sol2/tests/runtime_tests/source/customizations_private.cpp')
-rw-r--r--lib/sol2/tests/runtime_tests/source/customizations_private.cpp178
1 files changed, 0 insertions, 178 deletions
diff --git a/lib/sol2/tests/runtime_tests/source/customizations_private.cpp b/lib/sol2/tests/runtime_tests/source/customizations_private.cpp
deleted file mode 100644
index 4a0f5fb..0000000
--- a/lib/sol2/tests/runtime_tests/source/customizations_private.cpp
+++ /dev/null
@@ -1,178 +0,0 @@
-// sol3
-
-// The MIT License (MIT)
-
-// Copyright (c) 2013-2019 Rapptz, ThePhD and contributors
-
-// Permission is hereby granted, free of charge, to any person obtaining a copy of
-// this software and associated documentation files (the "Software"), to deal in
-// the Software without restriction, including without limitation the rights to
-// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-// the Software, and to permit persons to whom the Software is furnished to do so,
-// subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included in all
-// copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-#include "sol_test.hpp"
-
-#include <catch.hpp>
-
-#include <unordered_map>
-#include <vector>
-
-struct two_things {
- int a;
- bool b;
-};
-
-struct number_shim {
- double num = 0;
-};
-
-
-// HEY:
-// Don't do this.
-// The code below is for sol3 to specialize things,
-// not for YOU to specialize things.
-// If you customize things in this fashion,
-// I will break your code sometime in the future when fixing things.
-// Do. Not. Use the designated ADL customization points, or file
-// a bug.
-namespace sol {
-
- template <>
- struct lua_size<two_things> : std::integral_constant<int, 2> {};
-
- template <>
- struct lua_type_of<two_things> : std::integral_constant<sol::type, sol::type::poly> {};
-
- template <>
- struct lua_type_of<number_shim> : std::integral_constant<sol::type, sol::type::poly> {};
-
- namespace stack {
-
- template <>
- struct unqualified_checker<two_things, type::poly> {
- template <typename Handler>
- static bool check(lua_State* L, int index, Handler&& handler, record& tracking) {
- bool success = stack::check<int>(L, index, handler) && stack::check<bool>(L, index + 1, handler);
- tracking.use(2);
- return success;
- }
- };
-
- template <>
- struct unqualified_getter<two_things> {
- static two_things get(lua_State* L, int index, record& tracking) {
- int a = stack::get<int>(L, index);
- bool b = stack::get<bool>(L, index + 1);
- tracking.use(2);
- return two_things{ a, b };
- }
- };
-
- template <>
- struct unqualified_pusher<two_things> {
- static int push(lua_State* L, const two_things& things) {
- int amount = stack::push(L, things.a);
- amount += stack::push(L, things.b);
- return amount;
- }
- };
-
- template <>
- struct unqualified_checker<number_shim, type::poly> {
- template <typename Handler>
- static bool check(lua_State* L, int index, Handler&& handler, record& tracking) {
- if (!check_usertype<number_shim>(L, index) && !stack::check<double>(L, index)) {
- handler(L, index, type_of(L, index), type::userdata, "expected a number_shim or a number");
- return false;
- }
- tracking.use(1);
- return true;
- }
- };
-
- template <>
- struct unqualified_getter<number_shim> {
- static number_shim get(lua_State* L, int index, record& tracking) {
- if (check_usertype<number_shim>(L, index)) {
- number_shim& ns = get_usertype<number_shim>(L, index, tracking);
- return ns;
- }
- number_shim ns{};
- ns.num = stack::get<double>(L, index, tracking);
- return ns;
- }
- };
-
- } // namespace stack
-} // namespace sol
-
-TEST_CASE("customization/split struct", "using the old customization points to handle different kinds of classes") {
- sol::state lua;
-
- // Create a pass-through style of function
- auto result1 = lua.safe_script("function f ( a, b, c ) return a + c, b end", sol::script_pass_on_error);
- REQUIRE(result1.valid());
- lua.set_function("g", [](int a, bool b, int c, double d) { return std::make_tuple(a + c, b, d + 2.5); });
-
- // get the function out of Lua
- sol::function f = lua["f"];
- sol::function g = lua["g"];
-
- two_things thingsf = f(two_things{ 24, true }, 1);
- REQUIRE(thingsf.a == 25);
- REQUIRE(thingsf.b);
-
- two_things thingsg;
- double d;
- sol::tie(thingsg, d) = g(two_things{ 25, false }, 2, 34.0);
- REQUIRE(thingsg.a == 27);
- REQUIRE_FALSE(thingsg.b);
- REQUIRE(d == 36.5);
-}
-
-TEST_CASE("customization/usertype", "using the old customization points to handle different kinds of classes") {
- sol::state lua;
-
- // Create a pass-through style of function
- auto result1 = lua.safe_script("function f ( a ) return a end");
- REQUIRE(result1.valid());
- lua.set_function("g", [](double a) {
- number_shim ns;
- ns.num = a;
- return ns;
- });
-
- auto result2 = lua.safe_script("vf = f(25) vg = g(35)", sol::script_pass_on_error);
- REQUIRE(result2.valid());
-
- number_shim thingsf = lua["vf"];
- number_shim thingsg = lua["vg"];
-
- REQUIRE(thingsf.num == 25);
- REQUIRE(thingsg.num == 35);
-}
-
-TEST_CASE("customization/overloading", "using multi-size customized types in an overload") {
- bool TwoThingsWorks = false, OverloadWorks = false;
- sol::state lua;
- lua["test_two_things"] = [&](two_things) { TwoThingsWorks = true; };
- lua["test_overload"] = sol::overload([&](two_things) { OverloadWorks = true; }, [] {});
-
- lua.script(
- "test_two_things(0, true)\n"
- "test_overload(0, true)");
-
- REQUIRE(TwoThingsWorks);
- REQUIRE(OverloadWorks);
-}