/************************************************************************* ** VectorIteratorTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** ** Copyright (C) 2005-2024 Martin Gieseking ** ** ** ** 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 3 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, see . ** *************************************************************************/ #include #include "VectorIterator.hpp" using namespace std; TEST(VectorIteratorTest, inc) { vector vec{4,3,2,9,8,7,10}; VectorIterator it(vec); EXPECT_TRUE(it.valid()); EXPECT_EQ(*it++, 4); EXPECT_EQ(*it, 3); EXPECT_EQ(*++it, 2); EXPECT_TRUE(it.valid()); for (size_t i=2; it.valid(); i++) { EXPECT_LT(i, vec.size()) << "i=" << i; EXPECT_EQ(*it, vec[i]) << "*it=" << *it << ", vec[" << i << "]=" << vec[i]; ++it; } } TEST(VectorIteratorTest, addsub) { vector vec{4,3,2,9,8,7,10}; VectorIterator it(vec); EXPECT_EQ(*(it += 4), 8); EXPECT_EQ(*(it -= 3), 3); EXPECT_EQ(*(it + 4), 7); EXPECT_EQ(*(it - 1), 4); } TEST(VectorIteratorTest, dec) { vector vec{4,3,2,9,8,7,10}; VectorIterator it(vec); it += 6; EXPECT_EQ(*it, 10); EXPECT_EQ(*it--, 10); EXPECT_EQ(*it, 7); EXPECT_EQ(*--it, 8); EXPECT_TRUE(it.valid()); for (size_t i=4; it.valid(); i--) { EXPECT_LT(i, vec.size()) << "i=" << i; EXPECT_EQ(*it, vec[i]) << "*it=" << *it << ", vec[" << i << "]=" << vec[i]; --it; } } TEST(VectorIteratorTest, invalidate) { vector vec{4,3,2,9,8,7,10}; VectorIterator it(vec); --it; EXPECT_FALSE(it.valid()); ++it; EXPECT_TRUE(it.valid()); it += 10; EXPECT_FALSE(it.valid()); it -= 10; EXPECT_TRUE(it.valid()); it.invalidate(); EXPECT_FALSE(it.valid()); it.reset(); ASSERT_TRUE(it.valid()); EXPECT_EQ(*it, 4); } TEST(VectorIteratorTest, compare) { vector vec{4,3,2,9,8,7,10}; VectorIterator it1(vec); VectorIterator it2 = it1 + 1; EXPECT_NE(it1, it2); ++it1; EXPECT_EQ(it1, it2); EXPECT_LE(it1, it2); EXPECT_GE(it1, it2); ++it2; EXPECT_LT(it1, it2); EXPECT_GT(it2, it1); } struct MyPair { int number; const char *str; } mypair[] = { {3, "text"}, {5, "string"} }; TEST(VectorIteratorTest, deref) { vector vec(mypair, mypair+2); VectorIterator it(vec); EXPECT_TRUE(it.valid()); EXPECT_EQ((*it).number, 3); EXPECT_EQ((*it).str, mypair[0].str); EXPECT_EQ(it->number, 3); EXPECT_EQ(it->str, mypair[0].str); ++it; EXPECT_EQ(it->number, 5); EXPECT_EQ(it->str, mypair[1].str); } TEST(VectorIteratorTest, fail) { vector vec(mypair, mypair+2); VectorIterator it(vec); --it; EXPECT_FALSE(it.valid()); EXPECT_THROW(*it, IteratorException); EXPECT_THROW(it->number, IteratorException); }