[test] reorder tizen capi unittest
[platform/core/ml/nntrainer.git] / test / tizen_capi / unittest_tizen_capi_optimizer.cpp
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  *   http://www.apache.org/licenses/LICENSE-2.0
8  * Unless required by applicable law or agreed to in writing, software
9  * distributed under the License is distributed on an "AS IS" BASIS,
10  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11  * See the License for the specific language governing permissions and
12  * limitations under the License.
13  */
14 /**
15  * @file        unittest_tizen_capi_optimizer.cpp
16  * @date        12 May 2020
17  * @brief       Unit test utility for optimizer.
18  * @see         https://github.com/nnstreamer/nntrainer
19  * @author      Jijoong Moon <jijoong.moon@samsung.com>
20  * @bug         No known bugs
21  */
22 #include <gtest/gtest.h>
23
24 #include <nntrainer.h>
25 #include <nntrainer_internal.h>
26 #include <nntrainer_test_util.h>
27
28 /**
29  * @brief Neural Network Optimizer Create / Delete Test (positive test)
30  */
31 TEST(nntrainer_capi_nnopt, create_delete_01_p) {
32   ml_train_optimizer_h handle;
33   int status;
34   status = ml_train_optimizer_create(&handle, ML_TRAIN_OPTIMIZER_TYPE_SGD);
35   EXPECT_EQ(status, ML_ERROR_NONE);
36   status = ml_train_optimizer_destroy(handle);
37   EXPECT_EQ(status, ML_ERROR_NONE);
38 }
39
40 /**
41  * @brief Neural Network Optimizer Create / Delete Test (positive test )
42  */
43 TEST(nntrainer_capi_nnopt, create_delete_02_p) {
44   ml_train_optimizer_h handle;
45   int status;
46   status = ml_train_optimizer_create(&handle, ML_TRAIN_OPTIMIZER_TYPE_ADAM);
47   EXPECT_EQ(status, ML_ERROR_NONE);
48   status = ml_train_optimizer_destroy(handle);
49   EXPECT_EQ(status, ML_ERROR_NONE);
50 }
51
52 /**
53  * @brief Neural Network Optimizer Create / Delete Test (negative test )
54  */
55 TEST(nntrainer_capi_nnopt, create_delete_03_n) {
56   ml_train_optimizer_h handle = NULL;
57   int status;
58   status = ml_train_optimizer_destroy(handle);
59   EXPECT_EQ(status, ML_ERROR_INVALID_PARAMETER);
60 }
61
62 /**
63  * @brief Neural Network Optimizer Create / Delete Test (positive test)
64  */
65 TEST(nntrainer_capi_nnopt, create_delete_04_n) {
66   ml_train_optimizer_h handle;
67   int status;
68   status = ml_train_optimizer_create(&handle, ML_TRAIN_OPTIMIZER_TYPE_UNKNOWN);
69   EXPECT_EQ(status, ML_ERROR_INVALID_PARAMETER);
70 }
71
72 /**
73  * @brief Neural Network Optimizer set Property Test (positive test)
74  */
75 TEST(nntrainer_capi_nnopt, setProperty_01_p) {
76   ml_train_optimizer_h handle;
77   int status;
78   status = ml_train_optimizer_create(&handle, ML_TRAIN_OPTIMIZER_TYPE_ADAM);
79   EXPECT_EQ(status, ML_ERROR_NONE);
80   status =
81     ml_train_optimizer_set_property(handle, "beta1=0.002", "beta2=0.001", NULL);
82   EXPECT_EQ(status, ML_ERROR_NONE);
83   status = ml_train_optimizer_destroy(handle);
84   EXPECT_EQ(status, ML_ERROR_NONE);
85 }
86
87 /**
88  * @brief Neural Network Optimizer Set Property Test (positive test)
89  */
90 TEST(nntrainer_capi_nnopt, setProperty_02_p) {
91   ml_train_optimizer_h handle;
92   int status;
93   status = ml_train_optimizer_create(&handle, ML_TRAIN_OPTIMIZER_TYPE_ADAM);
94   EXPECT_EQ(status, ML_ERROR_NONE);
95   status = ml_train_optimizer_set_property(
96     handle, "learning_rate=0.0001 | decay_rate=0.96", "decay_steps=1000",
97     "beta1=0.002", "beta2=0.001", "epsilon=1e-7", NULL);
98   EXPECT_EQ(status, ML_ERROR_NONE);
99   status = ml_train_optimizer_destroy(handle);
100   EXPECT_EQ(status, ML_ERROR_NONE);
101 }
102
103 /**
104  * @brief Neural Network Optimizer Set Property Test (negative test)
105  */
106 TEST(nntrainer_capi_nnopt, setProperty_03_n) {
107   ml_train_optimizer_h handle;
108   int status;
109   status = ml_train_optimizer_create(&handle, ML_TRAIN_OPTIMIZER_TYPE_ADAM);
110   EXPECT_EQ(status, ML_ERROR_NONE);
111   status =
112     ml_train_optimizer_set_property(handle, "beta1=true", "beta2=0.001", NULL);
113   EXPECT_EQ(status, ML_ERROR_INVALID_PARAMETER);
114   status = ml_train_optimizer_destroy(handle);
115   EXPECT_EQ(status, ML_ERROR_NONE);
116 }
117
118 /**
119  * @brief Neural Network Optimizer Set Property Test (negative test)
120  */
121 TEST(nntrainer_capi_nnopt, setProperty_04_n) {
122   ml_train_optimizer_h handle = NULL;
123   int status;
124
125   status = ml_train_optimizer_set_property(
126     handle, "learning_rate=0.0001 | decay_rate=0.96", "decay_steps=1000",
127     "beta1=0.002", "beta2=0.001", "epsilon=1e-7", NULL);
128   EXPECT_EQ(status, ML_ERROR_INVALID_PARAMETER);
129 }
130
131 /**
132  * @brief Neural Network Optimizer Set Property Test (negative test)
133  */
134 TEST(nntrainer_capi_nnopt, setProperty_05_n) {
135   ml_train_optimizer_h handle = NULL;
136   int status;
137   status = ml_train_optimizer_create(&handle, ML_TRAIN_OPTIMIZER_TYPE_ADAM);
138   EXPECT_EQ(status, ML_ERROR_NONE);
139   status = ml_train_optimizer_set_property(handle, "unknown=unknown", NULL);
140   EXPECT_EQ(status, ML_ERROR_INVALID_PARAMETER);
141 }
142
143 /**
144  * @brief Neural Network Optimizer Set Property Test (positive test)
145  */
146 TEST(nntrainer_capi_nnopt, setProperty_with_single_param_01_p) {
147   ml_train_optimizer_h handle;
148   int status;
149   status = ml_train_optimizer_create(&handle, ML_TRAIN_OPTIMIZER_TYPE_ADAM);
150   EXPECT_EQ(status, ML_ERROR_NONE);
151   status = ml_train_optimizer_set_property_with_single_param(
152     handle, "beta1=0.002 | beta2=0.001 | epsilon=1e-7");
153   EXPECT_EQ(status, ML_ERROR_NONE);
154   status = ml_train_optimizer_destroy(handle);
155   EXPECT_EQ(status, ML_ERROR_NONE);
156 }
157
158 /**
159  * @brief Neural Network Optimizer Set Property Test (negative test)
160  */
161 TEST(nntrainer_capi_nnopt, setProperty_with_single_param_02_n) {
162   ml_train_optimizer_h handle;
163   int status;
164   status = ml_train_optimizer_create(&handle, ML_TRAIN_OPTIMIZER_TYPE_ADAM);
165   EXPECT_EQ(status, ML_ERROR_NONE);
166   status = ml_train_optimizer_set_property_with_single_param(
167     handle, "beta1=0.002, beta2=0.001, epsilon=1e-7");
168   EXPECT_EQ(status, ML_ERROR_INVALID_PARAMETER);
169   status = ml_train_optimizer_destroy(handle);
170   EXPECT_EQ(status, ML_ERROR_NONE);
171 }
172
173 /**
174  * @brief Neural Network Optimizer Set Property Test (negative test)
175  */
176 TEST(nntrainer_capi_nnopt, setProperty_with_single_param_03_n) {
177   ml_train_optimizer_h handle;
178   int status;
179   status = ml_train_optimizer_create(&handle, ML_TRAIN_OPTIMIZER_TYPE_ADAM);
180   EXPECT_EQ(status, ML_ERROR_NONE);
181   status = ml_train_optimizer_set_property_with_single_param(
182     handle, "beta1=0.002 ! beta2=0.001 ! epsilon=1e-7");
183   EXPECT_EQ(status, ML_ERROR_INVALID_PARAMETER);
184   status = ml_train_optimizer_destroy(handle);
185   EXPECT_EQ(status, ML_ERROR_NONE);
186 }
187
188 /**
189  * @brief Main gtest
190  */
191 int main(int argc, char **argv) {
192   int result = -1;
193
194   try {
195     testing::InitGoogleTest(&argc, argv);
196   } catch (...) {
197     std::cerr << "Error duing IniGoogleTest" << std::endl;
198     return 0;
199   }
200
201   /** ignore tizen feature check while running the testcases */
202   set_feature_state(ML_FEATURE, SUPPORTED);
203   set_feature_state(ML_FEATURE_INFERENCE, SUPPORTED);
204   set_feature_state(ML_FEATURE_TRAINING, SUPPORTED);
205
206   try {
207     result = RUN_ALL_TESTS();
208   } catch (...) {
209     std::cerr << "Error duing RUN_ALL_TSETS()" << std::endl;
210   }
211
212   /** reset tizen feature check state */
213   set_feature_state(ML_FEATURE, NOT_CHECKED_YET);
214   set_feature_state(ML_FEATURE_INFERENCE, NOT_CHECKED_YET);
215   set_feature_state(ML_FEATURE_TRAINING, NOT_CHECKED_YET);
216
217   return result;
218 }