diff options
Diffstat (limited to 'lib/LuaBridge/Tests/Source/IteratorTests.cpp')
-rw-r--r-- | lib/LuaBridge/Tests/Source/IteratorTests.cpp | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/lib/LuaBridge/Tests/Source/IteratorTests.cpp b/lib/LuaBridge/Tests/Source/IteratorTests.cpp new file mode 100644 index 0000000..d62c068 --- /dev/null +++ b/lib/LuaBridge/Tests/Source/IteratorTests.cpp @@ -0,0 +1,96 @@ +// 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); +} |