blob: 555227e83bab27f4748cba29c8d0572f006f55a8 [file] [log] [blame]
Anthony Barbier6ff3b192017-09-04 18:44:23 +01001/*
2 * Copyright (c) 2017 ARM Limited.
3 *
4 * SPDX-License-Identifier: MIT
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to
8 * deal in the Software without restriction, including without limitation the
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 * sell copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
24#ifndef __ARM_COMPUTE_TEST_IMAGE_DATASETS_H__
25#define __ARM_COMPUTE_TEST_IMAGE_DATASETS_H__
26
27#include <string>
28#include <type_traits>
29
30#ifdef BOOST
31#include "boost_wrapper.h"
32#endif
33
34namespace arm_compute
35{
36namespace test
37{
38/** Abstract data set containing image names.
39 *
40 * Can be used as input for Boost data test cases to automatically run a test
41 * case on different images.
42 */
43template <unsigned int Size>
44class ImageDataset
45{
46public:
47 /** Type of the samples in the data set. */
48 using sample = const std::string;
49
50 /** Dimensionality of the data set. */
51 enum
52 {
53 arity = 1
54 };
55
56 /** Number of samples in the data set. */
57#ifdef BOOST
58 boost::unit_test::data::size_t size() const
59#else
60 unsigned int size() const
61#endif
62 {
63 return _images.size();
64 }
65
66 /** Type of the iterator used to step through all samples in the data set.
67 * Needs to support operator*() and operator++() which a pointer does.
68 */
69 using iterator = const std::string *;
70
71 /** Iterator to the first sample in the data set. */
72 iterator begin() const
73 {
74 return _images.data();
75 }
76
77protected:
78 /** Protected constructor to make the class abstract. */
79 template <typename... Ts>
80 ImageDataset(Ts... images)
81 : _images{ { images... } }
82 {
83 }
84
85 /** Protected destructor to prevent deletion of derived class through a
86 * pointer to the base class.
87 */
88 ~ImageDataset() = default;
89
90private:
91 std::array<std::string, Size> _images;
92};
93
94/** Data set containing names of small images. */
95class SmallImages final : public ImageDataset<2>
96{
97public:
98 SmallImages()
99 : ImageDataset("128x128.ppm", "640x480.ppm")
100 {
101 }
102};
103
104/** Data set containing names of large images. */
105class LargeImages final : public ImageDataset<3>
106{
107public:
108 LargeImages()
109#ifdef INTERNAL_ONLY
110 : ImageDataset("1280x720.ppm", "1920x1080.ppm", "4160x3120.ppm")
111 // The 4k image is too large to distribute
112#else
113 : ImageDataset("1280x720.ppm", "1920x1080.ppm")
114#endif /* INTERNAL_ONLY */
115 {
116 }
117};
118} // namespace test
119} // namespace arm_compute
120#endif