blob: c44e454312ffd9f435e9bfb6966e6c1a1e5c1721 [file] [log] [blame]
Finn Williams3e54d032020-10-22 16:53:35 +01001//
2// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include <armnn/utility/TransformIterator.hpp>
7
8#include <boost/test/unit_test.hpp>
9#include <iostream>
10
11using namespace armnn;
12
13BOOST_AUTO_TEST_SUITE(TransformIteratorSuite)
14
15namespace
16{
17
18static int square(const int val)
19{
20 return val * val;
21}
22
23static std::string concat(const std::string val)
24{
25 return val + "a";
26}
27
28BOOST_AUTO_TEST_CASE(TransformIteratorTest)
29{
30 struct WrapperTestClass
31 {
32 TransformIterator<decltype(&square), std::vector<int>::const_iterator> begin() const
33 {
34 return { m_Vec.begin(), &square };
35 }
36
37 TransformIterator<decltype(&square), std::vector<int>::const_iterator> end() const
38 {
39 return { m_Vec.end(), &square };
40 }
41
42 const std::vector<int> m_Vec{1, 2, 3, 4, 5};
43 };
44
45 struct WrapperStringClass
46 {
47 TransformIterator<decltype(&concat), std::vector<std::string>::const_iterator> begin() const
48 {
49 return { m_Vec.begin(), &concat };
50 }
51
52 TransformIterator<decltype(&concat), std::vector<std::string>::const_iterator> end() const
53 {
54 return { m_Vec.end(), &concat };
55 }
56
57 const std::vector<std::string> m_Vec{"a", "b", "c"};
58 };
59
60 WrapperStringClass wrapperStringClass;
61 WrapperTestClass wrapperTestClass;
62 int i = 1;
63
64 for(auto val : wrapperStringClass)
65 {
66 BOOST_CHECK(val != "e");
67 i++;
68 }
69
70 i = 1;
71 for(auto val : wrapperTestClass)
72 {
73 BOOST_CHECK(val == square(i));
74 i++;
75 }
76
77 i = 1;
78 // Check original vector is unchanged
79 for(auto val : wrapperTestClass.m_Vec)
80 {
81 BOOST_CHECK(val == i);
82 i++;
83 }
84
85 std::vector<int> originalVec{1, 2, 3, 4, 5};
86
87 auto transformBegin = MakeTransformIterator(originalVec.begin(), &square);
88 auto transformEnd = MakeTransformIterator(originalVec.end(), &square);
89
90 std::vector<int> transformedVec(transformBegin, transformEnd);
91
92 i = 1;
93 for(auto val : transformedVec)
94 {
95 BOOST_CHECK(val == square(i));
96 i++;
97 }
98}
99
100}
101
102BOOST_AUTO_TEST_SUITE_END()