From d08dff4b4d8b57da5e54ae13caa4de51f60bb12d Mon Sep 17 00:00:00 2001 From: Daniel Wallin Date: Sun, 11 Nov 2007 20:27:02 +0000 Subject: [PATCH] Rewrote test_iterator. Now verifies #54. --- test/test_iterator.cpp | 147 ++++++++++++++++++++++++++++--------------------- 1 file changed, 85 insertions(+), 62 deletions(-) rewrite test/test_iterator.cpp (92%) diff --git a/test/test_iterator.cpp b/test/test_iterator.cpp dissimilarity index 92% index 49c0584..d1fae47 100755 --- a/test/test_iterator.cpp +++ b/test/test_iterator.cpp @@ -1,62 +1,85 @@ -// Copyright (c) 2003 Daniel Wallin and Arvid Norberg - -// 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 "test.hpp" - -#include -#include -#include - -struct IteratorTest : counted_type -{ - IteratorTest() - { - names.push_back("first one"); - names.push_back("foobar"); - names.push_back("last one"); - } - - std::vector names; -}; - -COUNTER_GUARD(IteratorTest); - -void test_main(lua_State* L) -{ - using namespace luabind; - - module(L) - [ - class_("A") - .def(constructor<>()) - .def_readonly("names", &IteratorTest::names, return_stl_iterator) - ]; - - DOSTRING(L, - "a = A()\n" - "b = ''\n" - "for name in a.names do\n" - " b = b .. ' ' .. name\n" - "end\n" - "assert(b == ' first one foobar last one')" - ); -} +// Copyright Daniel Wallin 2007. Use, modification and distribution is +// subject to the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include "test.hpp" + +#include +#include +#include + +struct container +{ + container() + { + for (int i = 0; i < 5; ++i) + data[i] = i + 1; + } + + struct iterator + : boost::iterator_adaptor + { + static std::size_t alive; + + iterator(int* p) + : iterator::iterator_adaptor_(p) + { + ++alive; + } + + iterator(iterator const& other) + : iterator::iterator_adaptor_(other) + { + ++alive; + } + + ~iterator() + { + --alive; + } + }; + + iterator begin() + { + return iterator(data); + } + + iterator end() + { + return iterator(data + 5); + } + + int data[5]; +}; + +std::size_t container::iterator::alive = 0; + +struct cls +{ + container iterable; +}; + +void test_main(lua_State* L) +{ + using namespace luabind; + + module(L) + [ + class_("cls") + .def(constructor<>()) + .def_readonly("iterable", &cls::iterable, return_stl_iterator) + ]; + + DOSTRING(L, + "x = cls()\n" + "sum = 0\n" + "for i in x.iterable do\n" + " sum = sum + i\n" + "end\n" + "assert(sum == 15)\n" + "collectgarbage('collect')\n" + ); + + assert(container::iterator::alive == 0); +} + -- 2.11.4.GIT