1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017 Arm Ltd. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker
6*89c4ff92SAndroid Build Coastguard Worker #include "VerificationHelpers.hpp"
7*89c4ff92SAndroid Build Coastguard Worker #include <armnn/Exceptions.hpp>
8*89c4ff92SAndroid Build Coastguard Worker
9*89c4ff92SAndroid Build Coastguard Worker #include <fmt/format.h>
10*89c4ff92SAndroid Build Coastguard Worker
11*89c4ff92SAndroid Build Coastguard Worker using namespace armnn;
12*89c4ff92SAndroid Build Coastguard Worker
13*89c4ff92SAndroid Build Coastguard Worker namespace armnnUtils
14*89c4ff92SAndroid Build Coastguard Worker {
15*89c4ff92SAndroid Build Coastguard Worker
CheckValidSize(std::initializer_list<size_t> validInputCounts,size_t actualValue,const char * validExpr,const char * actualExpr,const CheckLocation & location)16*89c4ff92SAndroid Build Coastguard Worker void CheckValidSize(std::initializer_list<size_t> validInputCounts,
17*89c4ff92SAndroid Build Coastguard Worker size_t actualValue,
18*89c4ff92SAndroid Build Coastguard Worker const char* validExpr,
19*89c4ff92SAndroid Build Coastguard Worker const char* actualExpr,
20*89c4ff92SAndroid Build Coastguard Worker const CheckLocation& location)
21*89c4ff92SAndroid Build Coastguard Worker {
22*89c4ff92SAndroid Build Coastguard Worker bool isValid = std::any_of(validInputCounts.begin(),
23*89c4ff92SAndroid Build Coastguard Worker validInputCounts.end(),
24*89c4ff92SAndroid Build Coastguard Worker [&actualValue](size_t x) { return x == actualValue; } );
25*89c4ff92SAndroid Build Coastguard Worker if (!isValid)
26*89c4ff92SAndroid Build Coastguard Worker {
27*89c4ff92SAndroid Build Coastguard Worker throw ParseException(fmt::format("{} = {} is not valid, not in {{}}. {}",
28*89c4ff92SAndroid Build Coastguard Worker actualExpr,
29*89c4ff92SAndroid Build Coastguard Worker actualValue,
30*89c4ff92SAndroid Build Coastguard Worker validExpr,
31*89c4ff92SAndroid Build Coastguard Worker location.AsString()));
32*89c4ff92SAndroid Build Coastguard Worker }
33*89c4ff92SAndroid Build Coastguard Worker }
34*89c4ff92SAndroid Build Coastguard Worker
NonNegative(const char * expr,int32_t value,const CheckLocation & location)35*89c4ff92SAndroid Build Coastguard Worker uint32_t NonNegative(const char* expr,
36*89c4ff92SAndroid Build Coastguard Worker int32_t value,
37*89c4ff92SAndroid Build Coastguard Worker const CheckLocation& location)
38*89c4ff92SAndroid Build Coastguard Worker {
39*89c4ff92SAndroid Build Coastguard Worker if (value < 0)
40*89c4ff92SAndroid Build Coastguard Worker {
41*89c4ff92SAndroid Build Coastguard Worker throw ParseException(fmt::format("'{}' must be non-negative, received: {} at {}",
42*89c4ff92SAndroid Build Coastguard Worker expr,
43*89c4ff92SAndroid Build Coastguard Worker value,
44*89c4ff92SAndroid Build Coastguard Worker location.AsString()));
45*89c4ff92SAndroid Build Coastguard Worker }
46*89c4ff92SAndroid Build Coastguard Worker else
47*89c4ff92SAndroid Build Coastguard Worker {
48*89c4ff92SAndroid Build Coastguard Worker return static_cast<uint32_t>(value);
49*89c4ff92SAndroid Build Coastguard Worker }
50*89c4ff92SAndroid Build Coastguard Worker }
51*89c4ff92SAndroid Build Coastguard Worker
VerifyInt32(const char * expr,int64_t value,const armnn::CheckLocation & location)52*89c4ff92SAndroid Build Coastguard Worker int32_t VerifyInt32(const char* expr,
53*89c4ff92SAndroid Build Coastguard Worker int64_t value,
54*89c4ff92SAndroid Build Coastguard Worker const armnn::CheckLocation& location)
55*89c4ff92SAndroid Build Coastguard Worker {
56*89c4ff92SAndroid Build Coastguard Worker if (value < std::numeric_limits<int>::min() || value > std::numeric_limits<int>::max())
57*89c4ff92SAndroid Build Coastguard Worker {
58*89c4ff92SAndroid Build Coastguard Worker throw ParseException(fmt::format("'{}' must should fit into a int32 (ArmNN don't support int64),"
59*89c4ff92SAndroid Build Coastguard Worker " received: {} at {}",
60*89c4ff92SAndroid Build Coastguard Worker expr,
61*89c4ff92SAndroid Build Coastguard Worker value,
62*89c4ff92SAndroid Build Coastguard Worker location.AsString()));
63*89c4ff92SAndroid Build Coastguard Worker }
64*89c4ff92SAndroid Build Coastguard Worker else
65*89c4ff92SAndroid Build Coastguard Worker {
66*89c4ff92SAndroid Build Coastguard Worker return static_cast<int32_t>(value);
67*89c4ff92SAndroid Build Coastguard Worker }
68*89c4ff92SAndroid Build Coastguard Worker }
69*89c4ff92SAndroid Build Coastguard Worker
70*89c4ff92SAndroid Build Coastguard Worker }// armnnUtils
71