// https://github.com/vinniefalco/LuaBridge
// Copyright 2018, Dmitry Tarakanov
// SPDX-License-Identifier: MIT
#include "TestBase.h"
#include "LuaBridge/detail/Iterator.h"
struct IteratorTests : TestBase
{
};
TEST_F(IteratorTests, DictionaryIteration)
{
runLua("result = {"
" bool = true,"
" int = 5,"
" c = 3.14,"
" [true] = 'D',"
" [8] = 'abc',"
" fn = function (i)"
" result = i + 1"
" end"
"}");
std::map<luabridge::LuaRef, luabridge::LuaRef> expected{
{{L, "bool"}, {L, true}},
{{L, "int"}, {L, 5}},
{{L, 'c'}, {L, 3.14}},
{{L, true}, {L, 'D'}},
{{L, 8}, {L, "abc"}},
{{L, "fn"}, {L, result()["fn"]}},
};
std::map<luabridge::LuaRef, luabridge::LuaRef> actual;
for (luabridge::Iterator iterator(result()); !iterator.isNil(); ++iterator)
{
actual.emplace(iterator.key(), iterator.value());
}
ASSERT_EQ(expected, actual);
actual.clear();
for (auto&& pair : pairs(result()))
{
actual.emplace(pair.first, pair.second);
}
ASSERT_EQ(expected, actual);
}
TEST_F(IteratorTests, SequenceIteration)
{
runLua("result = {"
" true,"
" 5,"
" 3.14,"
" 'D',"
" 'abc',"
" function (i)"
" result = i + 1"
" end"
"}");
std::map<luabridge::LuaRef, luabridge::LuaRef> expected{
{{L, 1}, {L, true}},
{{L, 2}, {L, 5}},
{{L, 3}, {L, 3.14}},
{{L, 4}, {L, 'D'}},
{{L, 5}, {L, "abc"}},
{{L, 6}, {L, result()[6]}},
};
std::map<luabridge::LuaRef, luabridge::LuaRef> actual;
for (luabridge::Iterator iterator(result()); !iterator.isNil(); ++iterator)
{
actual.emplace(iterator.key(), iterator.value());
}
ASSERT_EQ(expected, actual);
actual.clear();
for (auto&& pair : pairs(result()))
{
actual.emplace(pair.first, pair.second);
}
ASSERT_EQ(expected, actual);
}