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 using ValidationTestAddSessionPrepared = ValidationTestSessionPrepared<NNPackages::ADD>;
22 TEST_F(ValidationTestAddSessionPrepared, run)
26 NNFW_ENSURE_SUCCESS(nnfw_run(_session));
27 ASSERT_FLOAT_EQ(_output[0], 5.0);
30 TEST_F(ValidationTestAddSessionPrepared, run_twice)
34 NNFW_ENSURE_SUCCESS(nnfw_run(_session));
35 ASSERT_FLOAT_EQ(_output[0], 6.0);
38 NNFW_ENSURE_SUCCESS(nnfw_run(_session));
39 ASSERT_FLOAT_EQ(_output[0], 7.0);
42 TEST_F(ValidationTestAddSessionPrepared, run_many_times_dynamic_input)
44 for (int v = 1; v <= 5; v++) // 5 times with different shapes
46 nnfw_tensorinfo ti_input = {NNFW_TYPE_TENSOR_FLOAT32, 4, {1, 1, 1, v}};
47 SetInOutBuffersDynamic(&ti_input);
49 for (int i = 0; i < v; i++)
52 NNFW_ENSURE_SUCCESS(nnfw_run(_session));
54 // Check if the shape inference is correct
55 nnfw_tensorinfo ti_output;
56 ASSERT_EQ(nnfw_output_tensorinfo(_session, 0, &ti_output), NNFW_STATUS_NO_ERROR);
57 EXPECT_EQ(num_elems(&ti_input), num_elems(&ti_output));
59 for (int i = 0; i < v; i++)
60 ASSERT_FLOAT_EQ(_output[i], i * 10.0 + 2.0) << "i : " << i;
64 TEST_F(ValidationTestAddSessionPrepared, run_async)
68 NNFW_ENSURE_SUCCESS(nnfw_run_async(_session));
69 NNFW_ENSURE_SUCCESS(nnfw_await(_session));
70 ASSERT_FLOAT_EQ(_output[0], 5.0);
73 TEST_F(ValidationTestAddSessionPrepared, set_input_001)
76 ASSERT_EQ(nnfw_set_input(_session, 0, NNFW_TYPE_TENSOR_FLOAT32, input, sizeof(input)),
77 NNFW_STATUS_NO_ERROR);
80 TEST_F(ValidationTestAddSessionPrepared, get_input_size)
83 NNFW_ENSURE_SUCCESS(nnfw_input_size(_session, &size));
87 TEST_F(ValidationTestAddSessionPrepared, get_output_size)
90 NNFW_ENSURE_SUCCESS(nnfw_output_size(_session, &size));
94 TEST_F(ValidationTestAddSessionPrepared, output_tensorinfo)
96 nnfw_tensorinfo tensor_info;
97 NNFW_ENSURE_SUCCESS(nnfw_output_tensorinfo(_session, 0, &tensor_info));
98 ASSERT_EQ(tensor_info.rank, 1);
99 ASSERT_EQ(tensor_info.dims[0], 1);
102 TEST_F(ValidationTestAddSessionPrepared, neg_await_without_async_run)
105 ASSERT_EQ(nnfw_await(_session), NNFW_STATUS_ERROR);
108 TEST_F(ValidationTestAddSessionPrepared, neg_await_after_sync_run)
111 NNFW_ENSURE_SUCCESS(nnfw_run(_session));
112 ASSERT_EQ(nnfw_await(_session), NNFW_STATUS_ERROR);
115 TEST_F(ValidationTestAddSessionPrepared, neg_await_twice)
118 NNFW_ENSURE_SUCCESS(nnfw_run_async(_session));
119 NNFW_ENSURE_SUCCESS(nnfw_await(_session));
120 ASSERT_EQ(nnfw_await(_session), NNFW_STATUS_ERROR);
123 TEST_F(ValidationTestAddSessionPrepared, neg_run_during_async_run)
126 NNFW_ENSURE_SUCCESS(nnfw_run_async(_session));
127 EXPECT_EQ(nnfw_run(_session), NNFW_STATUS_INVALID_STATE);
128 NNFW_ENSURE_SUCCESS(nnfw_await(_session));
131 TEST_F(ValidationTestAddSessionPrepared, neg_set_input_001)
133 ASSERT_EQ(nnfw_set_input(_session, 0, NNFW_TYPE_TENSOR_FLOAT32, nullptr, 1), NNFW_STATUS_ERROR);
136 TEST_F(ValidationTestAddSessionPrepared, neg_set_input_002)
138 char input[1]; // buffer size is too small
139 ASSERT_EQ(nnfw_set_input(_session, 0, NNFW_TYPE_TENSOR_FLOAT32, input, sizeof(input)),
143 TEST_F(ValidationTestAddSessionPrepared, set_output_001)
146 ASSERT_EQ(nnfw_set_input(_session, 0, NNFW_TYPE_TENSOR_FLOAT32, buffer, sizeof(buffer)),
147 NNFW_STATUS_NO_ERROR);
150 TEST_F(ValidationTestAddSessionPrepared, neg_set_output_001)
152 ASSERT_EQ(nnfw_set_output(_session, 0, NNFW_TYPE_TENSOR_FLOAT32, nullptr, 1), NNFW_STATUS_ERROR);
155 TEST_F(ValidationTestAddSessionPrepared, neg_set_output_002)
157 char input[1]; // buffer size is too small
158 ASSERT_EQ(nnfw_set_output(_session, 0, NNFW_TYPE_TENSOR_FLOAT32, input, sizeof(input)),
162 TEST_F(ValidationTestAddSessionPrepared, neg_get_input_size)
164 ASSERT_EQ(nnfw_input_size(_session, nullptr), NNFW_STATUS_UNEXPECTED_NULL);
167 TEST_F(ValidationTestAddSessionPrepared, neg_get_output_size)
169 ASSERT_EQ(nnfw_output_size(_session, nullptr), NNFW_STATUS_UNEXPECTED_NULL);
172 TEST_F(ValidationTestAddSessionPrepared, neg_load_model)
175 ASSERT_EQ(nnfw_load_model_from_file(
176 _session, NNPackages::get().getModelAbsolutePath(NNPackages::ADD).c_str()),
177 NNFW_STATUS_INVALID_STATE);
180 TEST_F(ValidationTestAddSessionPrepared, neg_prepare)
182 // Call Prepare twice
183 ASSERT_EQ(nnfw_prepare(_session), NNFW_STATUS_INVALID_STATE);
186 TEST_F(ValidationTestAddSessionPrepared, neg_run_without_set_output)
189 NNFW_ENSURE_SUCCESS(nnfw_set_input(_session, 0, NNFW_TYPE_TENSOR_FLOAT32, input, sizeof(input)));
190 // `nnfw_set_output()` is not called
191 ASSERT_EQ(nnfw_run(_session), NNFW_STATUS_ERROR);
194 TEST_F(ValidationTestAddSessionPrepared, neg_internal_set_config)
196 // All arguments are valid, but the session state is wrong
197 ASSERT_EQ(nnfw_set_config(_session, "TRACE_FILEPATH", ""), NNFW_STATUS_INVALID_STATE);
198 ASSERT_EQ(nnfw_set_config(_session, "GRAPH_DOT_DUMP", "0"), NNFW_STATUS_INVALID_STATE);
201 // TODO Validation check when "nnfw_run" is called without input & output tensor setting