fixed ipairs swap bug

This commit is contained in:
ThePhD 2017-10-30 14:38:16 -04:00
parent 882f337c48
commit 9a0b5ef34a
3 changed files with 51 additions and 8 deletions

View File

@ -20,8 +20,8 @@
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// This file was generated with a script. // This file was generated with a script.
// Generated 2017-10-26 17:14:51.531340 UTC // Generated 2017-10-30 18:38:03.122522 UTC
// This header was generated with sol v2.18.5 (revision 540d322) // This header was generated with sol v2.18.5 (revision 882f337)
// https://github.com/ThePhD/sol2 // https://github.com/ThePhD/sol2
#ifndef SOL_SINGLE_INCLUDE_HPP #ifndef SOL_SINGLE_INCLUDE_HPP
@ -15337,12 +15337,12 @@ namespace sol {
} }
int p; int p;
if (ip) { if (ip) {
p = stack::push_reference(L, it->first);
}
else {
++i.i; ++i.i;
p = stack::push_reference(L, i.i); p = stack::push_reference(L, i.i);
} }
else {
p = stack::push_reference(L, it->first);
}
p += stack::stack_detail::push_reference<push_type>(L, detail::deref(it->second)); p += stack::stack_detail::push_reference<push_type>(L, detail::deref(it->second));
std::advance(it, 1); std::advance(it, 1);
return p; return p;

View File

@ -1004,12 +1004,12 @@ namespace sol {
} }
int p; int p;
if (ip) { if (ip) {
p = stack::push_reference(L, it->first);
}
else {
++i.i; ++i.i;
p = stack::push_reference(L, i.i); p = stack::push_reference(L, i.i);
} }
else {
p = stack::push_reference(L, it->first);
}
p += stack::stack_detail::push_reference<push_type>(L, detail::deref(it->second)); p += stack::stack_detail::push_reference<push_type>(L, detail::deref(it->second));
std::advance(it, 1); std::advance(it, 1);
return p; return p;

View File

@ -632,6 +632,28 @@ void associative_unordered_container_check(sol::state& lua, T& items) {
REQUIRE((v3 == 30)); REQUIRE((v3 == 30));
} }
template <typename T>
void associative_ordered_container_key_value_check(sol::state& lua, T& data, T& reflect) {
typedef typename T::key_type K;
typedef typename T::mapped_type V;
lua["collect"] = [&reflect](K k, V v) {
reflect.insert({ k, v });
};
#if SOL_LUA_VERSION > 502
lua["val"] = data;
lua.script(R"(
for k, v in pairs(val) do
collect(k, v)
end
print()
)");
#else
reflect = data;
#endif
REQUIRE((data == reflect));
}
template <typename T> template <typename T>
void fixed_container_check(sol::state& lua, T& items) { void fixed_container_check(sol::state& lua, T& items) {
{ {
@ -912,6 +934,27 @@ TEST_CASE("containers/associative unordered containers", "check associative (map
} }
} }
TEST_CASE("containers/associative ordered pairs", "check to make sure pairs works properly for key-value types") {
struct bar {};
std::unique_ptr<bar> ua(new bar()), ub(new bar()), uc(new bar());
bar* a = ua.get();
bar* b = ub.get();
bar* c = uc.get();
SECTION("map") {
sol::state lua;
std::map<std::string, bar*> data({ { "a", a },{ "b", b },{ "c", c } });
std::map<std::string, bar*> reflect;
associative_ordered_container_key_value_check(lua, data, reflect);
}
SECTION("multimap") {
sol::state lua;
std::multimap<std::string, bar*> data({ { "a", a },{ "b", b },{ "c", c } });
std::multimap<std::string, bar*> reflect;
associative_ordered_container_key_value_check(lua, data, reflect);
}
}
TEST_CASE("containers/auxiliary functions test", "make sure the manipulation functions are present and usable and working across various container types") { TEST_CASE("containers/auxiliary functions test", "make sure the manipulation functions are present and usable and working across various container types") {
sol::state lua; sol::state lua;
lua.open_libraries(); lua.open_libraries();