Imported Upstream version 1.8.0
[platform/core/ml/nnfw.git] / tests / nnfw_api / src / ValidationTestAddSessionPrepared.cc
1 /*
2  * Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved
3  *
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
7  *
8  *    http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 #include "fixtures.h"
18 #include "NNPackages.h"
19
20 using ValidationTestAddSessionPrepared = ValidationTestSessionPrepared<NNPackages::ADD>;
21
22 TEST_F(ValidationTestAddSessionPrepared, run)
23 {
24   SetInOutBuffers();
25   _input[0] = 3.0;
26   NNFW_ENSURE_SUCCESS(nnfw_run(_session));
27   ASSERT_FLOAT_EQ(_output[0], 5.0);
28 }
29
30 TEST_F(ValidationTestAddSessionPrepared, run_twice)
31 {
32   SetInOutBuffers();
33   _input[0] = 4.0;
34   NNFW_ENSURE_SUCCESS(nnfw_run(_session));
35   ASSERT_FLOAT_EQ(_output[0], 6.0);
36
37   _input[0] = 5.0f;
38   NNFW_ENSURE_SUCCESS(nnfw_run(_session));
39   ASSERT_FLOAT_EQ(_output[0], 7.0);
40 }
41
42 TEST_F(ValidationTestAddSessionPrepared, run_async)
43 {
44   SetInOutBuffers();
45   _input[0] = 3.0;
46   NNFW_ENSURE_SUCCESS(nnfw_run_async(_session));
47   NNFW_ENSURE_SUCCESS(nnfw_await(_session));
48   ASSERT_FLOAT_EQ(_output[0], 5.0);
49 }
50
51 TEST_F(ValidationTestAddSessionPrepared, set_input_001)
52 {
53   char input[32];
54   ASSERT_EQ(nnfw_set_input(_session, 0, NNFW_TYPE_TENSOR_FLOAT32, input, sizeof(input)),
55             NNFW_STATUS_NO_ERROR);
56 }
57
58 TEST_F(ValidationTestAddSessionPrepared, get_input_size)
59 {
60   uint32_t size = 0;
61   NNFW_ENSURE_SUCCESS(nnfw_input_size(_session, &size));
62   ASSERT_EQ(size, 1);
63 }
64
65 TEST_F(ValidationTestAddSessionPrepared, get_output_size)
66 {
67   uint32_t size = 0;
68   NNFW_ENSURE_SUCCESS(nnfw_output_size(_session, &size));
69   ASSERT_EQ(size, 1);
70 }
71
72 TEST_F(ValidationTestAddSessionPrepared, output_tensorinfo)
73 {
74   nnfw_tensorinfo tensor_info;
75   NNFW_ENSURE_SUCCESS(nnfw_output_tensorinfo(_session, 0, &tensor_info));
76   ASSERT_EQ(tensor_info.rank, 1);
77   ASSERT_EQ(tensor_info.dims[0], 1);
78 }
79
80 TEST_F(ValidationTestAddSessionPrepared, neg_await_without_async_run)
81 {
82   SetInOutBuffers();
83   ASSERT_EQ(nnfw_await(_session), NNFW_STATUS_ERROR);
84 }
85
86 TEST_F(ValidationTestAddSessionPrepared, neg_await_after_sync_run)
87 {
88   SetInOutBuffers();
89   NNFW_ENSURE_SUCCESS(nnfw_run(_session));
90   ASSERT_EQ(nnfw_await(_session), NNFW_STATUS_ERROR);
91 }
92
93 TEST_F(ValidationTestAddSessionPrepared, neg_await_twice)
94 {
95   SetInOutBuffers();
96   NNFW_ENSURE_SUCCESS(nnfw_run_async(_session));
97   NNFW_ENSURE_SUCCESS(nnfw_await(_session));
98   ASSERT_EQ(nnfw_await(_session), NNFW_STATUS_ERROR);
99 }
100
101 TEST_F(ValidationTestAddSessionPrepared, neg_run_during_async_run)
102 {
103   SetInOutBuffers();
104   NNFW_ENSURE_SUCCESS(nnfw_run_async(_session));
105   EXPECT_EQ(nnfw_run(_session), NNFW_STATUS_INVALID_STATE);
106   NNFW_ENSURE_SUCCESS(nnfw_await(_session));
107 }
108
109 TEST_F(ValidationTestAddSessionPrepared, neg_set_input_001)
110 {
111   ASSERT_EQ(nnfw_set_input(_session, 0, NNFW_TYPE_TENSOR_FLOAT32, nullptr, 1), NNFW_STATUS_ERROR);
112 }
113
114 TEST_F(ValidationTestAddSessionPrepared, neg_set_input_002)
115 {
116   char input[1]; // buffer size is too small
117   ASSERT_EQ(nnfw_set_input(_session, 0, NNFW_TYPE_TENSOR_FLOAT32, input, sizeof(input)),
118             NNFW_STATUS_ERROR);
119 }
120
121 TEST_F(ValidationTestAddSessionPrepared, set_output_001)
122 {
123   char buffer[32];
124   ASSERT_EQ(nnfw_set_input(_session, 0, NNFW_TYPE_TENSOR_FLOAT32, buffer, sizeof(buffer)),
125             NNFW_STATUS_NO_ERROR);
126 }
127
128 TEST_F(ValidationTestAddSessionPrepared, neg_set_output_001)
129 {
130   ASSERT_EQ(nnfw_set_output(_session, 0, NNFW_TYPE_TENSOR_FLOAT32, nullptr, 1), NNFW_STATUS_ERROR);
131 }
132
133 TEST_F(ValidationTestAddSessionPrepared, neg_set_output_002)
134 {
135   char input[1]; // buffer size is too small
136   ASSERT_EQ(nnfw_set_output(_session, 0, NNFW_TYPE_TENSOR_FLOAT32, input, sizeof(input)),
137             NNFW_STATUS_ERROR);
138 }
139
140 TEST_F(ValidationTestAddSessionPrepared, neg_get_input_size)
141 {
142   ASSERT_EQ(nnfw_input_size(_session, nullptr), NNFW_STATUS_UNEXPECTED_NULL);
143 }
144
145 TEST_F(ValidationTestAddSessionPrepared, neg_get_output_size)
146 {
147   ASSERT_EQ(nnfw_output_size(_session, nullptr), NNFW_STATUS_UNEXPECTED_NULL);
148 }
149
150 TEST_F(ValidationTestAddSessionPrepared, neg_load_model)
151 {
152   // Load model twice
153   ASSERT_EQ(nnfw_load_model_from_file(
154                 _session, NNPackages::get().getModelAbsolutePath(NNPackages::ADD).c_str()),
155             NNFW_STATUS_INVALID_STATE);
156 }
157
158 TEST_F(ValidationTestAddSessionPrepared, neg_prepare)
159 {
160   // Call Prepare twice
161   ASSERT_EQ(nnfw_prepare(_session), NNFW_STATUS_INVALID_STATE);
162 }
163
164 // TODO Validation check when "nnfw_run" is called without input & output tensor setting