• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
2 
3 Licensed under the Apache License, Version 2.0 (the "License");
4 you may not use this file except in compliance with the License.
5 You may obtain a copy of the License at
6 
7     http://www.apache.org/licenses/LICENSE-2.0
8 
9 Unless required by applicable law or agreed to in writing, software
10 distributed under the License is distributed on an "AS IS" BASIS,
11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 See the License for the specific language governing permissions and
13 limitations under the License.
14 ==============================================================================*/
15 #include "tensorflow/lite/nnapi/nnapi_implementation.h"
16 #include <gtest/gtest.h>
17 
18 namespace {
19 
TEST(NnapiLibTest,NnApiImplementation)20 TEST(NnapiLibTest, NnApiImplementation) {
21   const NnApi* nnapi = NnApiImplementation();
22   EXPECT_NE(nnapi, nullptr);
23 #ifdef __ANDROID__
24   EXPECT_GT(nnapi->android_sdk_version, 0);
25   if (nnapi.android_sdk_version < 27) {
26     EXPECT_FALSE(nnapi->nnapi_exists);
27     EXPECT_EQ(nnapi->ANeuralNetworksMemory_createFromFd, nullptr);
28     EXPECT_EQ(nnapi->ANeuralNetworksMemory_free, nullptr);
29     EXPECT_EQ(nnapi->ANeuralNetworksModel_create, nullptr);
30     EXPECT_EQ(nnapi->ANeuralNetworksModel_free, nullptr);
31     EXPECT_EQ(nnapi->ANeuralNetworksModel_finish, nullptr);
32     EXPECT_EQ(nnapi->ANeuralNetworksModel_addOperand, nullptr);
33     EXPECT_EQ(nnapi->ANeuralNetworksModel_setOperandValue, nullptr);
34     EXPECT_EQ(nnapi->ANeuralNetworksModel_setOperandValueFromMemory, nullptr);
35     EXPECT_EQ(nnapi->ANeuralNetworksModel_addOperation, nullptr);
36     EXPECT_EQ(nnapi->ANeuralNetworksModel_identifyInputsAndOutputs, nullptr);
37     EXPECT_EQ(nnapi->ANeuralNetworksModel_relaxComputationFloat32toFloat16,
38               nullptr);
39     EXPECT_EQ(nnapi->ANeuralNetworksCompilation_create, nullptr);
40     EXPECT_EQ(nnapi->ANeuralNetworksCompilation_free, nullptr);
41     EXPECT_EQ(nnapi->ANeuralNetworksCompilation_setPreference, nullptr);
42     EXPECT_EQ(nnapi->ANeuralNetworksCompilation_finish, nullptr);
43     EXPECT_EQ(nnapi->ANeuralNetworksExecution_create, nullptr);
44     EXPECT_EQ(nnapi->ANeuralNetworksExecution_free, nullptr);
45     EXPECT_EQ(nnapi->ANeuralNetworksExecution_setInput, nullptr);
46     EXPECT_EQ(nnapi->ANeuralNetworksExecution_setInputFromMemory, nullptr);
47     EXPECT_EQ(nnapi->ANeuralNetworksExecution_setOutput, nullptr);
48     EXPECT_EQ(nnapi->ANeuralNetworksExecution_setOutputFromMemory, nullptr);
49     EXPECT_EQ(nnapi->ANeuralNetworksExecution_startCompute, nullptr);
50     EXPECT_EQ(nnapi->ANeuralNetworksEvent_wait, nullptr);
51     EXPECT_EQ(nnapi->ANeuralNetworksEvent_free, nullptr);
52     EXPECT_EQ(nnapi->ASharedMemory_create, nullptr);
53   } else {
54     EXPECT_TRUE(nnapi->nnapi_exists);
55     EXPECT_NE(nnapi->ANeuralNetworksMemory_createFromFd, nullptr);
56     EXPECT_NE(nnapi->ANeuralNetworksMemory_free, nullptr);
57     EXPECT_NE(nnapi->ANeuralNetworksModel_create, nullptr);
58     EXPECT_NE(nnapi->ANeuralNetworksModel_free, nullptr);
59     EXPECT_NE(nnapi->ANeuralNetworksModel_finish, nullptr);
60     EXPECT_NE(nnapi->ANeuralNetworksModel_addOperand, nullptr);
61     EXPECT_NE(nnapi->ANeuralNetworksModel_setOperandValue, nullptr);
62     EXPECT_NE(nnapi->ANeuralNetworksModel_setOperandValueFromMemory, nullptr);
63     EXPECT_NE(nnapi->ANeuralNetworksModel_addOperation, nullptr);
64     EXPECT_NE(nnapi->ANeuralNetworksModel_identifyInputsAndOutputs, nullptr);
65     if (nnapi->android_sdk_version >= 28) {
66       // relaxComputationFloat32toFloat16 only available with Android 9.0 (P).
67       EXPECT_NE(nnapi->ANeuralNetworksModel_relaxComputationFloat32toFloat16,
68                 nullptr);
69     } else {
70       EXPECT_EQ(nnapi->ANeuralNetworksModel_relaxComputationFloat32toFloat16,
71                 nullptr);
72     }
73     EXPECT_NE(nnapi->ANeuralNetworksCompilation_create, nullptr);
74     EXPECT_NE(nnapi->ANeuralNetworksCompilation_free, nullptr);
75     EXPECT_NE(nnapi->ANeuralNetworksCompilation_setPreference, nullptr);
76     EXPECT_NE(nnapi->ANeuralNetworksCompilation_finish, nullptr);
77     EXPECT_NE(nnapi->ANeuralNetworksExecution_create, nullptr);
78     EXPECT_NE(nnapi->ANeuralNetworksExecution_free, nullptr);
79     EXPECT_NE(nnapi->ANeuralNetworksExecution_setInput, nullptr);
80     EXPECT_NE(nnapi->ANeuralNetworksExecution_setInputFromMemory, nullptr);
81     EXPECT_NE(nnapi->ANeuralNetworksExecution_setOutput, nullptr);
82     EXPECT_NE(nnapi->ANeuralNetworksExecution_setOutputFromMemory, nullptr);
83     EXPECT_NE(nnapi->ANeuralNetworksExecution_startCompute, nullptr);
84     EXPECT_NE(nnapi->ANeuralNetworksEvent_wait, nullptr);
85     EXPECT_NE(nnapi->ANeuralNetworksEvent_free, nullptr);
86     EXPECT_NE(nnapi->ASharedMemory_create, nullptr);
87     // TODO(b/123423795): Test Q-specific APIs after release.
88   }
89 #else
90   EXPECT_FALSE(nnapi->nnapi_exists);
91   EXPECT_EQ(nnapi->android_sdk_version, 0);
92   EXPECT_EQ(nnapi->ANeuralNetworksMemory_createFromFd, nullptr);
93   EXPECT_EQ(nnapi->ANeuralNetworksMemory_free, nullptr);
94   EXPECT_EQ(nnapi->ANeuralNetworksModel_create, nullptr);
95   EXPECT_EQ(nnapi->ANeuralNetworksModel_free, nullptr);
96   EXPECT_EQ(nnapi->ANeuralNetworksModel_finish, nullptr);
97   EXPECT_EQ(nnapi->ANeuralNetworksModel_addOperand, nullptr);
98   EXPECT_EQ(nnapi->ANeuralNetworksModel_setOperandValue, nullptr);
99   EXPECT_EQ(nnapi->ANeuralNetworksModel_setOperandSymmPerChannelQuantParams,
100             nullptr);
101   EXPECT_EQ(nnapi->ANeuralNetworksModel_setOperandValueFromMemory, nullptr);
102   EXPECT_EQ(nnapi->ANeuralNetworksModel_addOperation, nullptr);
103   EXPECT_EQ(nnapi->ANeuralNetworksModel_identifyInputsAndOutputs, nullptr);
104   EXPECT_EQ(nnapi->ANeuralNetworksModel_relaxComputationFloat32toFloat16,
105             nullptr);
106   EXPECT_EQ(nnapi->ANeuralNetworksCompilation_create, nullptr);
107   EXPECT_EQ(nnapi->ANeuralNetworksCompilation_free, nullptr);
108   EXPECT_EQ(nnapi->ANeuralNetworksCompilation_setPreference, nullptr);
109   EXPECT_EQ(nnapi->ANeuralNetworksCompilation_finish, nullptr);
110   EXPECT_EQ(nnapi->ANeuralNetworksExecution_create, nullptr);
111   EXPECT_EQ(nnapi->ANeuralNetworksExecution_free, nullptr);
112   EXPECT_EQ(nnapi->ANeuralNetworksExecution_setInput, nullptr);
113   EXPECT_EQ(nnapi->ANeuralNetworksExecution_setInputFromMemory, nullptr);
114   EXPECT_EQ(nnapi->ANeuralNetworksExecution_setOutput, nullptr);
115   EXPECT_EQ(nnapi->ANeuralNetworksExecution_setOutputFromMemory, nullptr);
116   EXPECT_EQ(nnapi->ANeuralNetworksExecution_startCompute, nullptr);
117   EXPECT_EQ(nnapi->ANeuralNetworksEvent_wait, nullptr);
118   EXPECT_EQ(nnapi->ANeuralNetworksEvent_free, nullptr);
119   EXPECT_EQ(nnapi->ASharedMemory_create, nullptr);
120   EXPECT_EQ(nnapi->ANeuralNetworks_getDeviceCount, nullptr);
121   EXPECT_EQ(nnapi->ANeuralNetworks_getDevice, nullptr);
122   EXPECT_EQ(nnapi->ANeuralNetworksDevice_getName, nullptr);
123   EXPECT_EQ(nnapi->ANeuralNetworksDevice_getVersion, nullptr);
124   EXPECT_EQ(nnapi->ANeuralNetworksDevice_getFeatureLevel, nullptr);
125   EXPECT_EQ(nnapi->ANeuralNetworksModel_getSupportedOperationsForDevices,
126             nullptr);
127   EXPECT_EQ(nnapi->ANeuralNetworksCompilation_createForDevices, nullptr);
128   EXPECT_EQ(nnapi->ANeuralNetworksCompilation_setCaching, nullptr);
129   EXPECT_EQ(nnapi->ANeuralNetworksExecution_compute, nullptr);
130   EXPECT_EQ(nnapi->ANeuralNetworksExecution_getOutputOperandRank, nullptr);
131   EXPECT_EQ(nnapi->ANeuralNetworksExecution_getOutputOperandDimensions,
132             nullptr);
133   EXPECT_EQ(nnapi->ANeuralNetworksBurst_create, nullptr);
134   EXPECT_EQ(nnapi->ANeuralNetworksBurst_free, nullptr);
135   EXPECT_EQ(nnapi->ANeuralNetworksExecution_burstCompute, nullptr);
136   EXPECT_EQ(nnapi->ANeuralNetworksMemory_createFromAHardwareBuffer, nullptr);
137   EXPECT_EQ(nnapi->ANeuralNetworksExecution_setMeasureTiming, nullptr);
138   EXPECT_EQ(nnapi->ANeuralNetworksExecution_getDuration, nullptr);
139 #endif
140 }
141 
142 }  // namespace
143