• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
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 
11 using namespace armnn;
12 
13 BOOST_AUTO_TEST_SUITE(TransformIteratorSuite)
14 
15 namespace
16 {
17 
square(const int val)18 static int square(const int val)
19 {
20     return val * val;
21 }
22 
concat(const std::string val)23 static std::string concat(const std::string val)
24 {
25     return val + "a";
26 }
27 
BOOST_AUTO_TEST_CASE(TransformIteratorTest)28 BOOST_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 
102 BOOST_AUTO_TEST_SUITE_END()
103