2 * Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include "NNPackages.h"
20 #include "nnfw_internal.h"
22 using ValidationTestAddModelLoaded = ValidationTestModelLoaded<NNPackages::ADD>;
24 TEST_F(ValidationTestAddModelLoaded, prepare_001)
26 NNFW_ENSURE_SUCCESS(nnfw_prepare(_session));
31 TEST_F(ValidationTestAddModelLoaded, set_available_backends_001)
33 NNFW_ENSURE_SUCCESS(nnfw_set_available_backends(_session, "cpu"));
38 TEST_F(ValidationTestAddModelLoaded, get_input_size)
41 NNFW_ENSURE_SUCCESS(nnfw_input_size(_session, &size));
45 TEST_F(ValidationTestAddModelLoaded, get_output_size)
48 NNFW_ENSURE_SUCCESS(nnfw_output_size(_session, &size));
52 TEST_F(ValidationTestAddModelLoaded, output_tensorinfo)
54 nnfw_tensorinfo tensor_info;
55 NNFW_ENSURE_SUCCESS(nnfw_output_tensorinfo(_session, 0, &tensor_info));
56 ASSERT_EQ(tensor_info.rank, 1);
57 ASSERT_EQ(tensor_info.dims[0], 1);
60 TEST_F(ValidationTestAddModelLoaded, input_output_tensorindex)
62 uint32_t in_ind = 100;
63 NNFW_ENSURE_SUCCESS(nnfw_input_tensorindex(_session, "X_input", &in_ind));
66 uint32_t out_ind = 100;
67 NNFW_ENSURE_SUCCESS(nnfw_output_tensorindex(_session, "ADD_TOP", &out_ind));
68 ASSERT_EQ(out_ind, 0);
71 TEST_F(ValidationTestAddModelLoaded, neg_run)
73 // nnfw_prepare is not called
74 ASSERT_EQ(nnfw_run(_session), NNFW_STATUS_INVALID_STATE);
77 TEST_F(ValidationTestAddModelLoaded, neg_set_input)
79 // nnfw_prepare is not called
80 ASSERT_EQ(nnfw_set_input(_session, 0, NNFW_TYPE_TENSOR_FLOAT32, nullptr, 0),
81 NNFW_STATUS_INVALID_STATE);
84 TEST_F(ValidationTestAddModelLoaded, neg_set_output)
86 // nnfw_prepare is not called
87 ASSERT_EQ(nnfw_set_output(_session, 0, NNFW_TYPE_TENSOR_FLOAT32, nullptr, 0),
88 NNFW_STATUS_INVALID_STATE);
91 TEST_F(ValidationTestAddModelLoaded, neg_get_input_size)
93 ASSERT_EQ(nnfw_input_size(_session, nullptr), NNFW_STATUS_UNEXPECTED_NULL);
96 TEST_F(ValidationTestAddModelLoaded, neg_get_output_size)
98 ASSERT_EQ(nnfw_output_size(_session, nullptr), NNFW_STATUS_UNEXPECTED_NULL);
101 TEST_F(ValidationTestAddModelLoaded, neg_load_model)
104 ASSERT_EQ(nnfw_load_model_from_file(
105 _session, NNPackages::get().getModelAbsolutePath(NNPackages::ADD).c_str()),
106 NNFW_STATUS_INVALID_STATE);
109 TEST_F(ValidationTestAddModelLoaded, neg_output_tensorinfo)
111 // tensor_info is null
112 ASSERT_EQ(nnfw_output_tensorinfo(_session, 0, nullptr), NNFW_STATUS_UNEXPECTED_NULL);
115 TEST_F(ValidationTestAddModelLoaded, neg_input_output_tensorindex)
117 uint32_t in_ind = 100;
118 ASSERT_EQ(nnfw_input_tensorindex(_session, "ADD_TOP", &in_ind), NNFW_STATUS_ERROR);
119 ASSERT_EQ(in_ind, 100);
120 ASSERT_EQ(nnfw_input_tensorindex(_session, "y_var", &in_ind), NNFW_STATUS_ERROR);
121 ASSERT_EQ(in_ind, 100);
123 uint32_t out_ind = 100;
124 ASSERT_EQ(nnfw_output_tensorindex(_session, "X_input", &out_ind), NNFW_STATUS_ERROR);
125 ASSERT_EQ(out_ind, 100);
128 TEST_F(ValidationTestAddModelLoaded, experimental_input_tensorindex)
131 NNFW_ENSURE_SUCCESS(nnfw_input_tensorindex(_session, "X_input", &ind));
135 TEST_F(ValidationTestAddModelLoaded, neg_experimental_input_tensorindex_name_null)
138 ASSERT_EQ(nnfw_input_tensorindex(_session, nullptr, &ind), NNFW_STATUS_UNEXPECTED_NULL);
142 TEST_F(ValidationTestAddModelLoaded, neg_experimental_input_tensorindex_index_null)
144 ASSERT_EQ(nnfw_input_tensorindex(_session, "X_input", nullptr), NNFW_STATUS_UNEXPECTED_NULL);
147 TEST_F(ValidationTestAddModelLoaded, neg_experimental_input_name_too_long)
149 std::string long_name(1024, 'x'); // Too long
151 ASSERT_EQ(nnfw_output_tensorindex(_session, long_name.c_str(), &ind), NNFW_STATUS_ERROR);
155 TEST_F(ValidationTestAddModelLoaded, neg_experimental_input_no_such_name)
158 ASSERT_EQ(nnfw_output_tensorindex(_session, "NO_SUCH_TENSOR_NAME", &ind), NNFW_STATUS_ERROR);
162 TEST_F(ValidationTestAddModelLoaded, experimental_output_tensorindex)
165 NNFW_ENSURE_SUCCESS(nnfw_output_tensorindex(_session, "ADD_TOP", &ind));
169 TEST_F(ValidationTestAddModelLoaded, neg_experimental_output_tensorindex_name_null)
172 ASSERT_EQ(nnfw_output_tensorindex(_session, nullptr, &ind), NNFW_STATUS_UNEXPECTED_NULL);
176 TEST_F(ValidationTestAddModelLoaded, neg_experimental_output_tensorindex_index_null)
178 ASSERT_EQ(nnfw_output_tensorindex(_session, "ADD_TOP", nullptr), NNFW_STATUS_UNEXPECTED_NULL);
181 TEST_F(ValidationTestAddModelLoaded, neg_experimental_output_name_too_long)
183 std::string long_name(1024, 'x'); // Too long
185 ASSERT_EQ(nnfw_output_tensorindex(_session, long_name.c_str(), &ind), NNFW_STATUS_ERROR);
189 TEST_F(ValidationTestAddModelLoaded, neg_experimental_output_no_such_name)
192 ASSERT_EQ(nnfw_output_tensorindex(_session, "NO_SUCH_TENSOR_NAME", &ind), NNFW_STATUS_ERROR);
196 TEST_F(ValidationTestAddModelLoaded, debug_set_config)
198 // At least one test for all valid keys
199 NNFW_ENSURE_SUCCESS(nnfw_set_config(_session, "TRACE_FILEPATH", ""));
200 NNFW_ENSURE_SUCCESS(nnfw_set_config(_session, "GRAPH_DOT_DUMP", "0"));
201 NNFW_ENSURE_SUCCESS(nnfw_set_config(_session, "GRAPH_DOT_DUMP", "1"));
202 NNFW_ENSURE_SUCCESS(nnfw_set_config(_session, "GRAPH_DOT_DUMP", "2"));
203 NNFW_ENSURE_SUCCESS(nnfw_set_config(_session, "OP_SEQ_MAX_NODE", "0"));
204 NNFW_ENSURE_SUCCESS(nnfw_set_config(_session, "OP_SEQ_MAX_NODE", "1"));
205 NNFW_ENSURE_SUCCESS(nnfw_set_config(_session, "EXECUTOR", "Linear"));
206 NNFW_ENSURE_SUCCESS(nnfw_set_config(_session, "OP_BACKEND_ALLOPS", "cpu"));
207 NNFW_ENSURE_SUCCESS(nnfw_set_config(_session, "USE_SCHEDULER", "0"));
208 NNFW_ENSURE_SUCCESS(nnfw_set_config(_session, "USE_SCHEDULER", "1"));
209 NNFW_ENSURE_SUCCESS(nnfw_set_config(_session, "PROFILING_MODE", "0"));
210 NNFW_ENSURE_SUCCESS(nnfw_set_config(_session, "PROFILING_MODE", "1"));
211 NNFW_ENSURE_SUCCESS(nnfw_set_config(_session, "DISABLE_COMPILE", "0"));
212 NNFW_ENSURE_SUCCESS(nnfw_set_config(_session, "DISABLE_COMPILE", "1"));
216 TEST_F(ValidationTestAddModelLoaded, neg_debug_set_config)
218 // unexpected null args
219 ASSERT_EQ(nnfw_set_config(_session, nullptr, "1"), NNFW_STATUS_UNEXPECTED_NULL);
220 ASSERT_EQ(nnfw_set_config(_session, "EXECUTOR", nullptr), NNFW_STATUS_UNEXPECTED_NULL);
223 ASSERT_EQ(nnfw_set_config(_session, "", "1"), NNFW_STATUS_ERROR);
224 ASSERT_EQ(nnfw_set_config(_session, "BAD_KEY", "1"), NNFW_STATUS_ERROR);
227 TEST_F(ValidationTestAddModelLoaded, debug_get_config)
229 // At least one test for all valid keys
231 NNFW_ENSURE_SUCCESS(nnfw_get_config(_session, "EXECUTOR", buf, sizeof(buf)));
232 NNFW_ENSURE_SUCCESS(nnfw_get_config(_session, "BACKENDS", buf, sizeof(buf)));
236 TEST_F(ValidationTestAddModelLoaded, neg_debug_get_config)
238 // unexpected null args
240 ASSERT_EQ(nnfw_get_config(_session, nullptr, buf, sizeof(buf)), NNFW_STATUS_UNEXPECTED_NULL);
241 ASSERT_EQ(nnfw_get_config(_session, "EXECUTOR", nullptr, 0), NNFW_STATUS_UNEXPECTED_NULL);
243 // buffer is too small
244 ASSERT_EQ(nnfw_get_config(_session, "EXECUTOR", buf, 1), NNFW_STATUS_ERROR);
245 ASSERT_EQ(nnfw_get_config(_session, "BACKENDS", buf, 1), NNFW_STATUS_ERROR);
248 ASSERT_EQ(nnfw_get_config(_session, "", buf, sizeof(buf)), NNFW_STATUS_ERROR);
249 ASSERT_EQ(nnfw_get_config(_session, "BAD_KEY", buf, sizeof(buf)), NNFW_STATUS_ERROR);