blob: b072d1a308e23ee8eaac58a1e1e5b75513d10cf8 [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_TYPE_PRINTER_H__
25#define __ARM_COMPUTE_TEST_TYPE_PRINTER_H__
26
27#include "arm_compute/core/Dimensions.h"
28#include "arm_compute/core/Error.h"
John Richardsona36eae12017-09-26 16:55:59 +010029#include "arm_compute/core/Strides.h"
Anthony Barbier6ff3b192017-09-04 18:44:23 +010030#include "arm_compute/core/Types.h"
31
Abe Mbise4bd2cb82017-09-27 18:39:19 +010032#include "tests/Types.h"
33
Anthony Barbier6ff3b192017-09-04 18:44:23 +010034#include <ostream>
Moritz Pflanzeree493ae2017-07-05 10:52:21 +010035#include <sstream>
36#include <string>
Anthony Barbier6ff3b192017-09-04 18:44:23 +010037
38namespace arm_compute
39{
40/** Formatted output of the Dimensions type. */
41template <typename T>
42inline ::std::ostream &operator<<(::std::ostream &os, const Dimensions<T> &dimensions)
43{
Anthony Barbier6ff3b192017-09-04 18:44:23 +010044 if(dimensions.num_dimensions() > 0)
45 {
46 os << dimensions[0];
47
48 for(unsigned int d = 1; d < dimensions.num_dimensions(); ++d)
49 {
Moritz Pflanzerc87fbf82017-07-18 14:02:10 +010050 os << "x" << dimensions[d];
Anthony Barbier6ff3b192017-09-04 18:44:23 +010051 }
52 }
53
Anthony Barbier6ff3b192017-09-04 18:44:23 +010054 return os;
55}
56
Isabella Gottardi3b77e9d2017-06-22 11:05:41 +010057/** Formatted output of the NonLinearFilterFunction type. */
58inline ::std::ostream &operator<<(::std::ostream &os, const NonLinearFilterFunction &function)
59{
60 switch(function)
61 {
62 case NonLinearFilterFunction::MAX:
63 os << "MAX";
64 break;
65 case NonLinearFilterFunction::MEDIAN:
66 os << "MEDIAN";
67 break;
68 case NonLinearFilterFunction::MIN:
69 os << "MIN";
70 break;
71 default:
72 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
73 }
74
75 return os;
76}
77
John Richardson6f4d49f2017-09-07 11:21:10 +010078inline std::string to_string(const NonLinearFilterFunction &function)
79{
80 std::stringstream str;
81 str << function;
82 return str.str();
83}
84
Isabella Gottardi3b77e9d2017-06-22 11:05:41 +010085/** Formatted output of the MatrixPattern type. */
86inline ::std::ostream &operator<<(::std::ostream &os, const MatrixPattern &pattern)
87{
88 switch(pattern)
89 {
90 case MatrixPattern::BOX:
91 os << "BOX";
92 break;
93 case MatrixPattern::CROSS:
94 os << "CROSS";
95 break;
96 case MatrixPattern::DISK:
97 os << "DISK";
98 break;
99 case MatrixPattern::OTHER:
100 os << "OTHER";
101 break;
102 default:
103 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
104 }
105
106 return os;
107}
108
John Richardson6f4d49f2017-09-07 11:21:10 +0100109inline std::string to_string(const MatrixPattern &pattern)
110{
111 std::stringstream str;
112 str << pattern;
113 return str.str();
114}
115
Anthony Barbier2a07e182017-08-04 18:20:27 +0100116/** Formatted output of the RoundingPolicy type. */
117inline ::std::ostream &operator<<(::std::ostream &os, const RoundingPolicy &rounding_policy)
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100118{
Anthony Barbier2a07e182017-08-04 18:20:27 +0100119 switch(rounding_policy)
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100120 {
Anthony Barbier2a07e182017-08-04 18:20:27 +0100121 case RoundingPolicy::TO_ZERO:
122 os << "TO_ZERO";
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100123 break;
Anthony Barbier2a07e182017-08-04 18:20:27 +0100124 case RoundingPolicy::TO_NEAREST_UP:
125 os << "TO_NEAREST_UP";
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100126 break;
Anthony Barbier2a07e182017-08-04 18:20:27 +0100127 case RoundingPolicy::TO_NEAREST_EVEN:
128 os << "TO_NEAREST_EVEN";
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100129 break;
130 default:
131 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
132 }
133
134 return os;
135}
136
Anthony Barbier2a07e182017-08-04 18:20:27 +0100137/** Formatted output of the WeightsInfo type. */
138inline ::std::ostream &operator<<(::std::ostream &os, const WeightsInfo &weights_info)
Isabella Gottardi1fab09f2017-07-13 15:55:57 +0100139{
Anthony Barbier2a07e182017-08-04 18:20:27 +0100140 os << weights_info.are_reshaped() << ";";
141 os << weights_info.num_kernels() << ";" << weights_info.kernel_size().first << "," << weights_info.kernel_size().second;
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100142
143 return os;
144}
145
Anthony Barbier2a07e182017-08-04 18:20:27 +0100146/** Formatted output of the ROIPoolingInfo type. */
147inline ::std::ostream &operator<<(::std::ostream &os, const ROIPoolingLayerInfo &pool_info)
Sanghoon Lee70f82912017-08-24 14:21:24 +0100148{
Anthony Barbier2a07e182017-08-04 18:20:27 +0100149 os << pool_info.pooled_width() << "x" << pool_info.pooled_height() << "~" << pool_info.spatial_scale();
Georgios Pinitasd9769582017-08-03 10:19:40 +0100150 return os;
151}
152
Abe Mbise4bd2cb82017-09-27 18:39:19 +0100153inline ::std::ostream &operator<<(::std::ostream &os, const FixedPointOp &op)
154{
155 switch(op)
156 {
John Richardson70f946b2017-10-02 16:52:16 +0100157 case FixedPointOp::ADD:
158 os << "ADD";
159 break;
160 case FixedPointOp::SUB:
161 os << "SUB";
162 break;
163 case FixedPointOp::MUL:
164 os << "MUL";
165 break;
Abe Mbise4bd2cb82017-09-27 18:39:19 +0100166 case FixedPointOp::EXP:
167 os << "EXP";
168 break;
169 case FixedPointOp::LOG:
170 os << "LOG";
171 break;
172 case FixedPointOp::INV_SQRT:
173 os << "INV_SQRT";
174 break;
175 case FixedPointOp::RECIPROCAL:
176 os << "RECIPROCAL";
177 break;
178 default:
179 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
180 }
181
182 return os;
183}
John Richardson70f946b2017-10-02 16:52:16 +0100184
Abe Mbise4bd2cb82017-09-27 18:39:19 +0100185inline std::string to_string(const FixedPointOp &op)
186{
187 std::stringstream str;
188 str << op;
189 return str.str();
190}
191
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100192/** Formatted output of the activation function type. */
193inline ::std::ostream &operator<<(::std::ostream &os, const ActivationLayerInfo::ActivationFunction &act_function)
194{
195 switch(act_function)
196 {
197 case ActivationLayerInfo::ActivationFunction::ABS:
198 os << "ABS";
199 break;
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100200 case ActivationLayerInfo::ActivationFunction::LINEAR:
201 os << "LINEAR";
202 break;
203 case ActivationLayerInfo::ActivationFunction::LOGISTIC:
204 os << "LOGISTIC";
205 break;
206 case ActivationLayerInfo::ActivationFunction::RELU:
207 os << "RELU";
208 break;
Georgios Pinitas579c0492017-07-12 16:12:12 +0100209 case ActivationLayerInfo::ActivationFunction::BOUNDED_RELU:
210 os << "BOUNDED_RELU";
211 break;
212 case ActivationLayerInfo::ActivationFunction::LEAKY_RELU:
213 os << "LEAKY_RELU";
214 break;
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100215 case ActivationLayerInfo::ActivationFunction::SOFT_RELU:
216 os << "SOFT_RELU";
217 break;
218 case ActivationLayerInfo::ActivationFunction::SQRT:
219 os << "SQRT";
220 break;
Anthony Barbier2a07e182017-08-04 18:20:27 +0100221 case ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU:
222 os << "LU_BOUNDED_RELU";
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100223 case ActivationLayerInfo::ActivationFunction::SQUARE:
224 os << "SQUARE";
225 break;
226 case ActivationLayerInfo::ActivationFunction::TANH:
227 os << "TANH";
228 break;
229 default:
230 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
231 }
232
233 return os;
234}
235
Anthony Barbier2a07e182017-08-04 18:20:27 +0100236inline std::string to_string(const arm_compute::ActivationLayerInfo &info)
Moritz Pflanzeree493ae2017-07-05 10:52:21 +0100237{
238 std::stringstream str;
239 str << info.activation();
240 return str.str();
241}
242
Anthony Barbier2a07e182017-08-04 18:20:27 +0100243inline std::string to_string(const arm_compute::ActivationLayerInfo::ActivationFunction &function)
244{
245 std::stringstream str;
246 str << function;
247 return str.str();
248}
249
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100250/** Formatted output of the NormType type. */
251inline ::std::ostream &operator<<(::std::ostream &os, const NormType &norm_type)
252{
253 switch(norm_type)
254 {
255 case NormType::CROSS_MAP:
256 os << "CROSS_MAP";
257 break;
258 case NormType::IN_MAP_1D:
259 os << "IN_MAP_1D";
260 break;
261 case NormType::IN_MAP_2D:
262 os << "IN_MAP_2D";
263 break;
264 default:
265 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
266 }
267
268 return os;
269}
270
Anthony Barbier2a07e182017-08-04 18:20:27 +0100271inline std::string to_string(const arm_compute::NormalizationLayerInfo &info)
Moritz Pflanzeree493ae2017-07-05 10:52:21 +0100272{
273 std::stringstream str;
274 str << info.type();
275 return str.str();
276}
277
Georgios Pinitas6f669f02017-09-26 12:32:57 +0100278/** Formatted output of @ref NormalizationLayerInfo. */
279inline ::std::ostream &operator<<(::std::ostream &os, const NormalizationLayerInfo &info)
280{
281 os << info.type();
282 return os;
283}
284
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100285/** Formatted output of the PoolingType type. */
286inline ::std::ostream &operator<<(::std::ostream &os, const PoolingType &pool_type)
287{
288 switch(pool_type)
289 {
290 case PoolingType::AVG:
291 os << "AVG";
292 break;
293 case PoolingType::MAX:
294 os << "MAX";
295 break;
Georgios Pinitascdf51452017-08-31 14:21:36 +0100296 case PoolingType::L2:
297 os << "L2";
298 break;
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100299 default:
300 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
301 }
302
303 return os;
304}
305
Moritz Pflanzeree493ae2017-07-05 10:52:21 +0100306/** Formatted output of @ref PoolingLayerInfo. */
307inline ::std::ostream &operator<<(::std::ostream &os, const PoolingLayerInfo &info)
308{
Anthony Barbier2a07e182017-08-04 18:20:27 +0100309 os << info.pool_type();
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100310
311 return os;
312}
313
314/** Formatted output of the DataType type. */
315inline ::std::ostream &operator<<(::std::ostream &os, const DataType &data_type)
316{
317 switch(data_type)
318 {
319 case DataType::UNKNOWN:
320 os << "UNKNOWN";
321 break;
322 case DataType::U8:
323 os << "U8";
324 break;
325 case DataType::QS8:
326 os << "QS8";
327 break;
328 case DataType::S8:
329 os << "S8";
330 break;
331 case DataType::U16:
332 os << "U16";
333 break;
334 case DataType::S16:
335 os << "S16";
336 break;
Gian Marco Iodicebdb6b0b2017-06-30 12:21:00 +0100337 case DataType::QS16:
338 os << "QS16";
339 break;
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100340 case DataType::U32:
341 os << "U32";
342 break;
343 case DataType::S32:
344 os << "S32";
345 break;
346 case DataType::U64:
347 os << "U64";
348 break;
349 case DataType::S64:
350 os << "S64";
351 break;
352 case DataType::F16:
353 os << "F16";
354 break;
355 case DataType::F32:
356 os << "F32";
357 break;
358 case DataType::F64:
359 os << "F64";
360 break;
361 case DataType::SIZET:
362 os << "SIZET";
363 break;
364 default:
365 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
366 }
367
368 return os;
369}
370
Anthony Barbier2a07e182017-08-04 18:20:27 +0100371inline std::string to_string(const arm_compute::DataType &data_type)
Moritz Pflanzeree493ae2017-07-05 10:52:21 +0100372{
373 std::stringstream str;
374 str << data_type;
375 return str.str();
376}
377
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100378/** Formatted output of the Format type. */
379inline ::std::ostream &operator<<(::std::ostream &os, const Format &format)
380{
381 switch(format)
382 {
383 case Format::UNKNOWN:
384 os << "UNKNOWN";
385 break;
386 case Format::U8:
387 os << "U8";
388 break;
389 case Format::S16:
390 os << "S16";
391 break;
392 case Format::U16:
393 os << "U16";
394 break;
395 case Format::S32:
396 os << "S32";
397 break;
398 case Format::U32:
399 os << "U32";
400 break;
401 case Format::F16:
402 os << "F16";
403 break;
404 case Format::F32:
405 os << "F32";
406 break;
407 case Format::UV88:
408 os << "UV88";
409 break;
410 case Format::RGB888:
411 os << "RGB888";
412 break;
413 case Format::RGBA8888:
414 os << "RGBA8888";
415 break;
416 case Format::YUV444:
417 os << "YUV444";
418 break;
419 case Format::YUYV422:
420 os << "YUYV422";
421 break;
422 case Format::NV12:
423 os << "NV12";
424 break;
425 case Format::NV21:
426 os << "NV21";
427 break;
428 case Format::IYUV:
429 os << "IYUV";
430 break;
431 case Format::UYVY422:
432 os << "UYVY422";
433 break;
434 default:
435 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
436 }
437
438 return os;
439}
440
Moritz Pflanzer7655a672017-09-23 11:57:33 +0100441inline std::string to_string(const Format &format)
442{
443 std::stringstream str;
444 str << format;
445 return str.str();
446}
447
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100448/** Formatted output of the Channel type. */
449inline ::std::ostream &operator<<(::std::ostream &os, const Channel &channel)
450{
451 switch(channel)
452 {
453 case Channel::UNKNOWN:
454 os << "UNKNOWN";
455 break;
456 case Channel::C0:
457 os << "C0";
458 break;
459 case Channel::C1:
460 os << "C1";
461 break;
462 case Channel::C2:
463 os << "C2";
464 break;
465 case Channel::C3:
466 os << "C3";
467 break;
468 case Channel::R:
469 os << "R";
470 break;
471 case Channel::G:
472 os << "G";
473 break;
474 case Channel::B:
475 os << "B";
476 break;
477 case Channel::A:
478 os << "A";
479 break;
480 case Channel::Y:
481 os << "Y";
482 break;
483 case Channel::U:
484 os << "U";
485 break;
486 case Channel::V:
487 os << "V";
488 break;
489 default:
490 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
491 }
492
493 return os;
494}
495
Anthony Barbier2a07e182017-08-04 18:20:27 +0100496/** Formatted output of the BorderMode type. */
497inline ::std::ostream &operator<<(::std::ostream &os, const BorderMode &mode)
498{
499 switch(mode)
500 {
501 case BorderMode::UNDEFINED:
502 os << "UNDEFINED";
503 break;
504 case BorderMode::CONSTANT:
505 os << "CONSTANT";
506 break;
507 case BorderMode::REPLICATE:
508 os << "REPLICATE";
509 break;
510 default:
511 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
512 }
513
514 return os;
515}
516
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100517/** Formatted output of the BorderSize type. */
518inline ::std::ostream &operator<<(::std::ostream &os, const BorderSize &border)
519{
Moritz Pflanzerc87fbf82017-07-18 14:02:10 +0100520 os << border.top << ","
521 << border.right << ","
522 << border.bottom << ","
523 << border.left;
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100524
525 return os;
526}
Anthony Barbier2a07e182017-08-04 18:20:27 +0100527
528/** Formatted output of the InterpolationPolicy type. */
529inline ::std::ostream &operator<<(::std::ostream &os, const InterpolationPolicy &policy)
530{
531 switch(policy)
532 {
533 case InterpolationPolicy::NEAREST_NEIGHBOR:
534 os << "NEAREST_NEIGHBOR";
535 break;
536 case InterpolationPolicy::BILINEAR:
537 os << "BILINEAR";
538 break;
539 case InterpolationPolicy::AREA:
540 os << "AREA";
541 break;
542 default:
543 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
544 }
545
546 return os;
547}
548
Abe Mbise925ca0f2017-10-02 19:16:33 +0100549//FIXME: Check why this doesn't work and the TensorShape and Coordinates overload are needed
Anthony Barbier2a07e182017-08-04 18:20:27 +0100550template <typename T>
551inline std::string to_string(const Dimensions<T> &dimensions)
552{
553 std::stringstream str;
554 str << dimensions;
555 return str.str();
556}
557
John Richardsona36eae12017-09-26 16:55:59 +0100558inline std::string to_string(const Strides &stride)
559{
560 std::stringstream str;
561 str << stride;
562 return str.str();
563}
564
Anthony Barbier2a07e182017-08-04 18:20:27 +0100565/** Formatted output of the TensorShape type. */
566inline std::string to_string(const TensorShape &shape)
567{
568 std::stringstream str;
569 str << shape;
570 return str.str();
571}
572
Abe Mbise925ca0f2017-10-02 19:16:33 +0100573/** Formatted output of the Coordinates type. */
574inline std::string to_string(const Coordinates &coord)
575{
576 std::stringstream str;
577 str << coord;
578 return str.str();
579}
580
Anthony Barbier2a07e182017-08-04 18:20:27 +0100581/** Formatted output of the Rectangle type. */
582inline ::std::ostream &operator<<(::std::ostream &os, const Rectangle &rect)
583{
584 os << rect.width << "x" << rect.height;
585 os << "+" << rect.x << "+" << rect.y;
586
587 return os;
588}
589
590/** Formatted output of the PadStridInfo type. */
591inline ::std::ostream &operator<<(::std::ostream &os, const PadStrideInfo &pad_stride_info)
592{
593 os << pad_stride_info.stride().first << "," << pad_stride_info.stride().second;
594 os << ";";
595 os << pad_stride_info.pad().first << "," << pad_stride_info.pad().second;
596
597 return os;
598}
599
600inline std::string to_string(const PadStrideInfo &pad_stride_info)
601{
602 std::stringstream str;
603 str << pad_stride_info;
604 return str.str();
605}
606
607inline std::string to_string(const BorderMode &mode)
608{
609 std::stringstream str;
610 str << mode;
611 return str.str();
612}
613
John Richardsonb482ce12017-09-18 12:44:01 +0100614inline std::string to_string(const BorderSize &border)
615{
616 std::stringstream str;
617 str << border;
618 return str.str();
619}
620
Anthony Barbier2a07e182017-08-04 18:20:27 +0100621inline std::string to_string(const InterpolationPolicy &policy)
622{
623 std::stringstream str;
624 str << policy;
625 return str.str();
626}
627
628/** Formatted output of the ConversionPolicy type. */
629inline ::std::ostream &operator<<(::std::ostream &os, const ConvertPolicy &policy)
630{
631 switch(policy)
632 {
633 case ConvertPolicy::WRAP:
634 os << "WRAP";
635 break;
636 case ConvertPolicy::SATURATE:
637 os << "SATURATE";
638 break;
639 default:
640 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
641 }
642
643 return os;
644}
645
646inline std::string to_string(const ConvertPolicy &policy)
647{
648 std::stringstream str;
649 str << policy;
650 return str.str();
651}
652
653/** Formatted output of the Reduction Operations. */
654inline ::std::ostream &operator<<(::std::ostream &os, const ReductionOperation &op)
655{
656 switch(op)
657 {
658 case ReductionOperation::SUM_SQUARE:
659 os << "SUM_SQUARE";
660 break;
661 default:
662 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
663 }
664
665 return os;
666}
667
668inline std::string to_string(const ReductionOperation &op)
669{
670 std::stringstream str;
671 str << op;
672 return str.str();
673}
674
675inline std::string to_string(const NormType &type)
676{
677 std::stringstream str;
678 str << type;
679 return str.str();
680}
681
682inline std::string to_string(const PoolingType &type)
683{
684 std::stringstream str;
685 str << type;
686 return str.str();
687}
688
689inline std::string to_string(const PoolingLayerInfo &info)
690{
691 std::stringstream str;
692 str << info.pool_type();
693 return str.str();
694}
695
Moritz Pflanzer6c6597c2017-09-24 12:09:41 +0100696/** Formatted output of the KeyPoint type. */
697inline ::std::ostream &operator<<(::std::ostream &os, const KeyPoint &point)
698{
699 os << "{x=" << point.x << ","
700 << "y=" << point.y << ","
701 << "strength=" << point.strength << ","
702 << "scale=" << point.scale << ","
703 << "orientation=" << point.orientation << ","
704 << "tracking_status=" << point.tracking_status << ","
705 << "error=" << point.error << "}";
706
707 return os;
708}
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100709} // namespace arm_compute
Anthony Barbierac69aa12017-07-03 17:39:37 +0100710#endif /* __ARM_COMPUTE_TEST_TYPE_PRINTER_H__ */