blob: 2fa3d0ea4b528aff83d9c1d44fd9afe6c775a4a0 [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
John Richardsondd715f22017-09-18 16:10:48 +0100314inline std::string to_string(const RoundingPolicy &rounding_policy)
315{
316 std::stringstream str;
317 str << rounding_policy;
318 return str.str();
319}
320
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100321/** Formatted output of the DataType type. */
322inline ::std::ostream &operator<<(::std::ostream &os, const DataType &data_type)
323{
324 switch(data_type)
325 {
326 case DataType::UNKNOWN:
327 os << "UNKNOWN";
328 break;
329 case DataType::U8:
330 os << "U8";
331 break;
332 case DataType::QS8:
333 os << "QS8";
334 break;
335 case DataType::S8:
336 os << "S8";
337 break;
338 case DataType::U16:
339 os << "U16";
340 break;
341 case DataType::S16:
342 os << "S16";
343 break;
Gian Marco Iodicebdb6b0b2017-06-30 12:21:00 +0100344 case DataType::QS16:
345 os << "QS16";
346 break;
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100347 case DataType::U32:
348 os << "U32";
349 break;
350 case DataType::S32:
351 os << "S32";
352 break;
353 case DataType::U64:
354 os << "U64";
355 break;
356 case DataType::S64:
357 os << "S64";
358 break;
359 case DataType::F16:
360 os << "F16";
361 break;
362 case DataType::F32:
363 os << "F32";
364 break;
365 case DataType::F64:
366 os << "F64";
367 break;
368 case DataType::SIZET:
369 os << "SIZET";
370 break;
371 default:
372 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
373 }
374
375 return os;
376}
377
Anthony Barbier2a07e182017-08-04 18:20:27 +0100378inline std::string to_string(const arm_compute::DataType &data_type)
Moritz Pflanzeree493ae2017-07-05 10:52:21 +0100379{
380 std::stringstream str;
381 str << data_type;
382 return str.str();
383}
384
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100385/** Formatted output of the Format type. */
386inline ::std::ostream &operator<<(::std::ostream &os, const Format &format)
387{
388 switch(format)
389 {
390 case Format::UNKNOWN:
391 os << "UNKNOWN";
392 break;
393 case Format::U8:
394 os << "U8";
395 break;
396 case Format::S16:
397 os << "S16";
398 break;
399 case Format::U16:
400 os << "U16";
401 break;
402 case Format::S32:
403 os << "S32";
404 break;
405 case Format::U32:
406 os << "U32";
407 break;
408 case Format::F16:
409 os << "F16";
410 break;
411 case Format::F32:
412 os << "F32";
413 break;
414 case Format::UV88:
415 os << "UV88";
416 break;
417 case Format::RGB888:
418 os << "RGB888";
419 break;
420 case Format::RGBA8888:
421 os << "RGBA8888";
422 break;
423 case Format::YUV444:
424 os << "YUV444";
425 break;
426 case Format::YUYV422:
427 os << "YUYV422";
428 break;
429 case Format::NV12:
430 os << "NV12";
431 break;
432 case Format::NV21:
433 os << "NV21";
434 break;
435 case Format::IYUV:
436 os << "IYUV";
437 break;
438 case Format::UYVY422:
439 os << "UYVY422";
440 break;
441 default:
442 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
443 }
444
445 return os;
446}
447
Moritz Pflanzer7655a672017-09-23 11:57:33 +0100448inline std::string to_string(const Format &format)
449{
450 std::stringstream str;
451 str << format;
452 return str.str();
453}
454
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100455/** Formatted output of the Channel type. */
456inline ::std::ostream &operator<<(::std::ostream &os, const Channel &channel)
457{
458 switch(channel)
459 {
460 case Channel::UNKNOWN:
461 os << "UNKNOWN";
462 break;
463 case Channel::C0:
464 os << "C0";
465 break;
466 case Channel::C1:
467 os << "C1";
468 break;
469 case Channel::C2:
470 os << "C2";
471 break;
472 case Channel::C3:
473 os << "C3";
474 break;
475 case Channel::R:
476 os << "R";
477 break;
478 case Channel::G:
479 os << "G";
480 break;
481 case Channel::B:
482 os << "B";
483 break;
484 case Channel::A:
485 os << "A";
486 break;
487 case Channel::Y:
488 os << "Y";
489 break;
490 case Channel::U:
491 os << "U";
492 break;
493 case Channel::V:
494 os << "V";
495 break;
496 default:
497 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
498 }
499
500 return os;
501}
502
Anthony Barbier2a07e182017-08-04 18:20:27 +0100503/** Formatted output of the BorderMode type. */
504inline ::std::ostream &operator<<(::std::ostream &os, const BorderMode &mode)
505{
506 switch(mode)
507 {
508 case BorderMode::UNDEFINED:
509 os << "UNDEFINED";
510 break;
511 case BorderMode::CONSTANT:
512 os << "CONSTANT";
513 break;
514 case BorderMode::REPLICATE:
515 os << "REPLICATE";
516 break;
517 default:
518 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
519 }
520
521 return os;
522}
523
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100524/** Formatted output of the BorderSize type. */
525inline ::std::ostream &operator<<(::std::ostream &os, const BorderSize &border)
526{
Moritz Pflanzerc87fbf82017-07-18 14:02:10 +0100527 os << border.top << ","
528 << border.right << ","
529 << border.bottom << ","
530 << border.left;
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100531
532 return os;
533}
Anthony Barbier2a07e182017-08-04 18:20:27 +0100534
535/** Formatted output of the InterpolationPolicy type. */
536inline ::std::ostream &operator<<(::std::ostream &os, const InterpolationPolicy &policy)
537{
538 switch(policy)
539 {
540 case InterpolationPolicy::NEAREST_NEIGHBOR:
541 os << "NEAREST_NEIGHBOR";
542 break;
543 case InterpolationPolicy::BILINEAR:
544 os << "BILINEAR";
545 break;
546 case InterpolationPolicy::AREA:
547 os << "AREA";
548 break;
549 default:
550 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
551 }
552
553 return os;
554}
555
Abe Mbise925ca0f2017-10-02 19:16:33 +0100556//FIXME: Check why this doesn't work and the TensorShape and Coordinates overload are needed
Anthony Barbier2a07e182017-08-04 18:20:27 +0100557template <typename T>
558inline std::string to_string(const Dimensions<T> &dimensions)
559{
560 std::stringstream str;
561 str << dimensions;
562 return str.str();
563}
564
John Richardsona36eae12017-09-26 16:55:59 +0100565inline std::string to_string(const Strides &stride)
566{
567 std::stringstream str;
568 str << stride;
569 return str.str();
570}
571
Anthony Barbier2a07e182017-08-04 18:20:27 +0100572/** Formatted output of the TensorShape type. */
573inline std::string to_string(const TensorShape &shape)
574{
575 std::stringstream str;
576 str << shape;
577 return str.str();
578}
579
Abe Mbise925ca0f2017-10-02 19:16:33 +0100580/** Formatted output of the Coordinates type. */
581inline std::string to_string(const Coordinates &coord)
582{
583 std::stringstream str;
584 str << coord;
585 return str.str();
586}
587
Anthony Barbier2a07e182017-08-04 18:20:27 +0100588/** Formatted output of the Rectangle type. */
589inline ::std::ostream &operator<<(::std::ostream &os, const Rectangle &rect)
590{
591 os << rect.width << "x" << rect.height;
592 os << "+" << rect.x << "+" << rect.y;
593
594 return os;
595}
596
597/** Formatted output of the PadStridInfo type. */
598inline ::std::ostream &operator<<(::std::ostream &os, const PadStrideInfo &pad_stride_info)
599{
600 os << pad_stride_info.stride().first << "," << pad_stride_info.stride().second;
601 os << ";";
602 os << pad_stride_info.pad().first << "," << pad_stride_info.pad().second;
603
604 return os;
605}
606
607inline std::string to_string(const PadStrideInfo &pad_stride_info)
608{
609 std::stringstream str;
610 str << pad_stride_info;
611 return str.str();
612}
613
614inline std::string to_string(const BorderMode &mode)
615{
616 std::stringstream str;
617 str << mode;
618 return str.str();
619}
620
John Richardsonb482ce12017-09-18 12:44:01 +0100621inline std::string to_string(const BorderSize &border)
622{
623 std::stringstream str;
624 str << border;
625 return str.str();
626}
627
Anthony Barbier2a07e182017-08-04 18:20:27 +0100628inline std::string to_string(const InterpolationPolicy &policy)
629{
630 std::stringstream str;
631 str << policy;
632 return str.str();
633}
634
635/** Formatted output of the ConversionPolicy type. */
636inline ::std::ostream &operator<<(::std::ostream &os, const ConvertPolicy &policy)
637{
638 switch(policy)
639 {
640 case ConvertPolicy::WRAP:
641 os << "WRAP";
642 break;
643 case ConvertPolicy::SATURATE:
644 os << "SATURATE";
645 break;
646 default:
647 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
648 }
649
650 return os;
651}
652
653inline std::string to_string(const ConvertPolicy &policy)
654{
655 std::stringstream str;
656 str << policy;
657 return str.str();
658}
659
660/** Formatted output of the Reduction Operations. */
661inline ::std::ostream &operator<<(::std::ostream &os, const ReductionOperation &op)
662{
663 switch(op)
664 {
665 case ReductionOperation::SUM_SQUARE:
666 os << "SUM_SQUARE";
667 break;
668 default:
669 ARM_COMPUTE_ERROR("NOT_SUPPORTED!");
670 }
671
672 return os;
673}
674
675inline std::string to_string(const ReductionOperation &op)
676{
677 std::stringstream str;
678 str << op;
679 return str.str();
680}
681
682inline std::string to_string(const NormType &type)
683{
684 std::stringstream str;
685 str << type;
686 return str.str();
687}
688
689inline std::string to_string(const PoolingType &type)
690{
691 std::stringstream str;
692 str << type;
693 return str.str();
694}
695
696inline std::string to_string(const PoolingLayerInfo &info)
697{
698 std::stringstream str;
699 str << info.pool_type();
700 return str.str();
701}
702
Moritz Pflanzer6c6597c2017-09-24 12:09:41 +0100703/** Formatted output of the KeyPoint type. */
704inline ::std::ostream &operator<<(::std::ostream &os, const KeyPoint &point)
705{
706 os << "{x=" << point.x << ","
707 << "y=" << point.y << ","
708 << "strength=" << point.strength << ","
709 << "scale=" << point.scale << ","
710 << "orientation=" << point.orientation << ","
711 << "tracking_status=" << point.tracking_status << ","
712 << "error=" << point.error << "}";
713
714 return os;
715}
Anthony Barbier6ff3b192017-09-04 18:44:23 +0100716} // namespace arm_compute
Anthony Barbierac69aa12017-07-03 17:39:37 +0100717#endif /* __ARM_COMPUTE_TEST_TYPE_PRINTER_H__ */