/* UtilCollection(Test) - helpers and shortcuts for working with collections Copyright (C) Lumiera.org 2012, Hermann Vosseler This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * *****************************************************/ /** @file util-collection-test.cpp ** unit test §§TODO§§ */ #include "lib/test/run.hpp" #include "lib/itertools.hpp" #include "lib/util-coll.hpp" #include "lib/iter-adapter.hpp" #include "lib/meta/trait.hpp" #include #include using ::Test; using util::first; using util::last; using lib::meta::can_STL_ForEach; using lib::meta::can_IterForEach; using lib::meta::can_STL_backIteration; using boost::lexical_cast; namespace util { namespace test { typedef std::vector VecI; typedef lib::RangeIter RangeI; namespace{ // Test data and operations uint NUM_ELMS = 20; VecI someNumberz (uint count) { VecI numbers; numbers.reserve(count); while (count) numbers.push_back(count--); return numbers; } } // (End) test data and operations /*****************************************************************//** * @test verify some convenience shortcuts and helpers dealing * with Collections and sequences (Iterators). * - metafunctions to distinguish STL containers and Lumiera Iterators * - get the first element * - get the last element */ class UtilCollection_test : public Test { void run (Arg arg) { verify_typeDetectors(); if (0 < arg.size()) NUM_ELMS = lexical_cast (arg[0]); VecI container = someNumberz (NUM_ELMS); RangeI iterator(container.begin(), container.end()); verify_accessFirstLast (container, NUM_ELMS); verify_accessFirstLast (iterator, NUM_ELMS); } template void verify_accessFirstLast (COL const& col, uint lim) { uint theFirst = lim; uint theLast = 1; CHECK (first(col) == theFirst); CHECK (last(col) == theLast); } void verify_typeDetectors() { CHECK ( can_STL_ForEach::value); CHECK ( can_STL_backIteration::value); CHECK (!can_STL_ForEach::value); CHECK (!can_STL_backIteration::value); CHECK (!can_IterForEach::value); CHECK ( can_IterForEach::value); } }; LAUNCHER (UtilCollection_test, "unit common"); }} // namespace util::test