// // Copyright © 2020 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #include #include #include #include using namespace armnn; TEST_SUITE("TransformIteratorSuite") { namespace { static int square(const int val) { return val * val; } static std::string concat(const std::string val) { return val + "a"; } TEST_CASE("TransformIteratorTest") { struct WrapperTestClass { TransformIterator::const_iterator> begin() const { return { m_Vec.begin(), &square }; } TransformIterator::const_iterator> end() const { return { m_Vec.end(), &square }; } const std::vector m_Vec{1, 2, 3, 4, 5}; }; struct WrapperStringClass { TransformIterator::const_iterator> begin() const { return { m_Vec.begin(), &concat }; } TransformIterator::const_iterator> end() const { return { m_Vec.end(), &concat }; } const std::vector m_Vec{"a", "b", "c"}; }; WrapperStringClass wrapperStringClass; WrapperTestClass wrapperTestClass; int i = 1; for(auto val : wrapperStringClass) { CHECK(val != "e"); i++; } i = 1; for(auto val : wrapperTestClass) { CHECK(val == square(i)); i++; } i = 1; // Check original vector is unchanged for(auto val : wrapperTestClass.m_Vec) { CHECK(val == i); i++; } std::vector originalVec{1, 2, 3, 4, 5}; auto transformBegin = MakeTransformIterator(originalVec.begin(), &square); auto transformEnd = MakeTransformIterator(originalVec.end(), &square); std::vector transformedVec(transformBegin, transformEnd); i = 1; for(auto val : transformedVec) { CHECK(val == square(i)); i++; } } } }