3 * Copyright (C) 2019 Samsung Electronics
4 * Copyright (C) 2019 Parichay Kapoor <pk.kapoor@samsung.com>
5 * Copyright (C) 2019 Dongju Chae <dongju.chae@samsung.com>
8 * @file ne_core_inf_test.cc
10 * @brief UnitTests to test functions in inference engine for NPU Engine
11 * @author Parichay Kapoor <pk.kapoor@samsung.com>
12 * @author Dongju Chae <dongju.chae@samsung.com>
13 * @bug No known bugs except for NYI items
17 #include "ne_unittest_utils.h"
20 * @brief test invokeInputService ()
22 TEST (ne_core_inf_test, invoke)
24 std::unique_ptr<DriverAPI> api;
25 api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
27 /** create dummy model & buffer */
28 std::unique_ptr<Model> model (new Model (new HWmemDevice));
29 model->setDriverAPI (api.get());
30 EXPECT_EQ (model->alloc (4096), 0);
32 std::unique_ptr<Buffer> buffer (new Buffer (new HWmemDevice));
33 buffer->setDriverAPI (api.get());
34 EXPECT_EQ (buffer->alloc (4096), 0);
37 std::unique_ptr<SegmentTable> segt (new SegmentTable (new HWmemDevice));
38 segt->setDriverAPI (api.get());
39 EXPECT_EQ (segt->alloc (), 0);
41 EXPECT_EQ (InferenceEngine::invokeInputService (
42 api.get(), NPUINPUT_HOST, 0, model.get(), buffer.get()), 0);
43 EXPECT_EQ (InferenceEngine::invokeInputService (
44 api.get(), NPUINPUT_HOST, 1, model.get(), segt.get()), 0);
46 usleep (TEST_SLEEP_MS);
50 * @brief test invokeInputService () with TRIV2
52 TEST (ne_core_inf_test, invoke_triv2)
54 std::unique_ptr<DriverAPI> api;
55 api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
57 /** create dummy model & segt */
58 std::unique_ptr<Model> model (new Model (new HWmemDevice));
59 model->setDriverAPI (api.get());
60 EXPECT_EQ (model->alloc (4096), 0);
62 std::unique_ptr<SegmentTable> segt (new SegmentTable (new HWmemDevice));
63 segt->setDriverAPI (api.get());
64 EXPECT_EQ (segt->alloc (), 0);
66 EXPECT_EQ (InferenceEngine::invokeInputService (
67 api.get(), NPUINPUT_HOST, 2, model.get(), segt.get()), 0);
68 EXPECT_EQ (InferenceEngine::invokeInputService (
69 api.get(), NPUINPUT_HW_RECURRING, 3, model.get(), segt.get()), 0);
71 usleep (TEST_SLEEP_MS);
75 * @brief test invokeInputService () with error handling
77 TEST (ne_core_inf_test, invoke_opmode_n)
79 std::unique_ptr<DriverAPI> api;
80 api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
82 /** create dummy model & buffer */
83 std::unique_ptr<Model> model (new Model (new HWmemDevice));
84 model->setDriverAPI (api.get());
85 EXPECT_EQ (model->alloc (4096), 0);
87 std::unique_ptr<Buffer> buffer (new Buffer (new HWmemDevice));
88 buffer->setDriverAPI (api.get());
89 EXPECT_EQ (buffer->alloc (4096), 0);
91 std::unique_ptr<SegmentTable> segt (new SegmentTable (new HWmemDevice));
92 segt->setDriverAPI (api.get());
93 EXPECT_EQ (segt->alloc (), 0);
95 /** unsupported opmode */
96 EXPECT_NE (InferenceEngine::invokeInputService (
97 api.get(), NPUINPUT_STOP, 0, model.get(), buffer.get()), 0);
98 EXPECT_NE (InferenceEngine::invokeInputService (
99 api.get(), NPUINPUT_INTERNAL_CAM, 0, model.get(), buffer.get()), 0);
100 EXPECT_NE (InferenceEngine::invokeInputService (
101 api.get(), NPUINPUT_I2S_MIC, 0, model.get(), buffer.get()), 0);
103 EXPECT_NE (InferenceEngine::invokeInputService (
104 api.get(), NPUINPUT_STOP, 0, model.get(), segt.get()), 0);
105 EXPECT_NE (InferenceEngine::invokeInputService (
106 api.get(), NPUINPUT_INTERNAL_CAM, 0, model.get(), segt.get()), 0);
107 EXPECT_NE (InferenceEngine::invokeInputService (
108 api.get(), NPUINPUT_I2S_MIC, 0, model.get(), segt.get()), 0);
110 /** HW_RECURRING works only with segment table */
111 EXPECT_NE (InferenceEngine::invokeInputService (
112 api.get(), NPUINPUT_HW_RECURRING, 0, model.get(), buffer.get()), 0);
114 usleep (TEST_SLEEP_MS);
118 * @brief test invokeInputService () with error handling
120 TEST (ne_core_inf_test, invoke_args_n)
122 std::unique_ptr<DriverAPI> api;
123 api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
125 /** create dummy model & buffer */
126 std::unique_ptr<Model> model (new Model (new HWmemDevice));
127 model->setDriverAPI (api.get());
128 EXPECT_EQ (model->alloc (4096), 0);
130 std::unique_ptr<Buffer> buffer (new Buffer (new HWmemDevice));
131 buffer->setDriverAPI (api.get());
132 EXPECT_EQ (buffer->alloc (4096), 0);
134 std::unique_ptr<SegmentTable> segt (new SegmentTable (new HWmemDevice));
135 segt->setDriverAPI (api.get());
136 EXPECT_EQ (segt->alloc (), 0);
138 /** invalid args (api should be valid) */
139 EXPECT_NE (InferenceEngine::invokeInputService (
140 nullptr, NPUINPUT_HOST, 0, nullptr, (Buffer *) nullptr), 0);
141 EXPECT_NE (InferenceEngine::invokeInputService (
142 nullptr, NPUINPUT_HOST, 0, model.get(), (Buffer *) nullptr), 0);
143 EXPECT_NE (InferenceEngine::invokeInputService (
144 nullptr, NPUINPUT_HOST, 0, nullptr, buffer.get()), 0);
145 EXPECT_NE (InferenceEngine::invokeInputService (
146 nullptr, NPUINPUT_HOST, 0, model.get(), buffer.get()), 0);
148 EXPECT_NE (InferenceEngine::invokeInputService (
149 nullptr, NPUINPUT_HOST, 0, nullptr, (SegmentTable *) nullptr), 0);
150 EXPECT_NE (InferenceEngine::invokeInputService (
151 nullptr, NPUINPUT_HOST, 0, model.get(), (SegmentTable *) nullptr), 0);
152 EXPECT_NE (InferenceEngine::invokeInputService (
153 nullptr, NPUINPUT_HOST, 0, nullptr, segt.get()), 0);
154 EXPECT_NE (InferenceEngine::invokeInputService (
155 nullptr, NPUINPUT_HOST, 0, model.get(), segt.get()), 0);
159 * @brief test StopRequest ()
161 TEST (ne_core_inf_test, stop)
163 std::unique_ptr<DriverAPI> api;
164 api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
166 /** create dummy model & buffer */
167 std::unique_ptr<Model> model (new Model (new HWmemDevice));
168 model->setDriverAPI (api.get());
169 EXPECT_EQ (model->alloc (4096), 0);
171 std::unique_ptr<Buffer> buffer (new Buffer (new HWmemDevice));
172 buffer->setDriverAPI (api.get());
173 EXPECT_EQ (buffer->alloc (4096), 0);
175 int max_called = 16; /** enough num to have pending requests */
177 std::condition_variable cv;
180 auto callback = std::bind (test_callback_sleep, &num_called, &m, &cv);
181 for (int i = 0; i < max_called; i++)
182 EXPECT_EQ (InferenceEngine::invokeInputService (
183 api.get(), NPUINPUT_HOST, i, model.get(), buffer.get(), callback), 0);
185 EXPECT_EQ (InferenceEngine::stopRequest (NPUINPUT_HOST, max_called - 1), 0);
188 wait_callbacks (num_called, max_called, m, cv);
189 EXPECT_EQ (num_called, max_called);
193 * @brief test StopRequest () with error handling
195 TEST (ne_core_inf_test, stop_opmode_n)
197 EXPECT_NE (InferenceEngine::stopRequest (NPUINPUT_STOP, 0), 0);
198 EXPECT_NE (InferenceEngine::stopRequest (NPUINPUT_INTERNAL_CAM, 0), 0);
199 EXPECT_NE (InferenceEngine::stopRequest (NPUINPUT_I2S_MIC, 0), 0);
203 * @brief test StopRequest () with error handling
205 TEST (ne_core_inf_test, stop_not_started_n)
207 std::unique_ptr<DriverAPI> api;
208 api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
210 /** create dummy model & buffer */
211 std::unique_ptr<Model> model (new Model (new HWmemDevice));
212 model->setDriverAPI (api.get());
213 EXPECT_EQ (model->alloc (4096), 0);
215 std::unique_ptr<Buffer> buffer (new Buffer (new HWmemDevice));
216 buffer->setDriverAPI (api.get());
217 EXPECT_EQ (buffer->alloc (4096), 0);
219 EXPECT_EQ (InferenceEngine::invokeInputService (
220 api.get(), NPUINPUT_HOST, 0, model.get(), buffer.get()), 0);
221 EXPECT_NE (InferenceEngine::stopRequest (NPUINPUT_HOST, 1), 0);
222 EXPECT_NE (InferenceEngine::stopRequest (NPUINPUT_HOST, 2), 0);
223 EXPECT_NE (InferenceEngine::stopRequest (NPUINPUT_HOST, 3), 0);
225 usleep (TEST_SLEEP_MS);
227 /** already handled */
228 EXPECT_NE (InferenceEngine::stopRequest (NPUINPUT_HOST, 0), 0);
232 * @brief main function for unit test
235 main (int argc, char **argv)
237 return start_gtest (argc, argv);