xref: /aosp_15_r20/external/armnn/src/armnnUtils/VerificationHelpers.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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