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
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.
15 * @file unittest_tizen_capi_optimizer.cpp
17 * @brief Unit test utility for optimizer.
18 * @see https://github.com/nnstreamer/nntrainer
19 * @author Jijoong Moon <jijoong.moon@samsung.com>
22 #include <gtest/gtest.h>
24 #include <nntrainer.h>
25 #include <nntrainer_internal.h>
26 #include <nntrainer_test_util.h>
29 * @brief Neural Network Optimizer Create / Delete Test (positive test)
31 TEST(nntrainer_capi_nnopt, create_delete_01_p) {
32 ml_train_optimizer_h handle;
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);
41 * @brief Neural Network Optimizer Create / Delete Test (positive test )
43 TEST(nntrainer_capi_nnopt, create_delete_02_p) {
44 ml_train_optimizer_h handle;
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);
53 * @brief Neural Network Optimizer Create / Delete Test (negative test )
55 TEST(nntrainer_capi_nnopt, create_delete_03_n) {
56 ml_train_optimizer_h handle = NULL;
58 status = ml_train_optimizer_destroy(handle);
59 EXPECT_EQ(status, ML_ERROR_INVALID_PARAMETER);
63 * @brief Neural Network Optimizer Create / Delete Test (positive test)
65 TEST(nntrainer_capi_nnopt, create_delete_04_n) {
66 ml_train_optimizer_h handle;
68 status = ml_train_optimizer_create(&handle, ML_TRAIN_OPTIMIZER_TYPE_UNKNOWN);
69 EXPECT_EQ(status, ML_ERROR_INVALID_PARAMETER);
73 * @brief Neural Network Optimizer set Property Test (positive test)
75 TEST(nntrainer_capi_nnopt, setProperty_01_p) {
76 ml_train_optimizer_h handle;
78 status = ml_train_optimizer_create(&handle, ML_TRAIN_OPTIMIZER_TYPE_ADAM);
79 EXPECT_EQ(status, ML_ERROR_NONE);
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);
88 * @brief Neural Network Optimizer Set Property Test (positive test)
90 TEST(nntrainer_capi_nnopt, setProperty_02_p) {
91 ml_train_optimizer_h handle;
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);
104 * @brief Neural Network Optimizer Set Property Test (negative test)
106 TEST(nntrainer_capi_nnopt, setProperty_03_n) {
107 ml_train_optimizer_h handle;
109 status = ml_train_optimizer_create(&handle, ML_TRAIN_OPTIMIZER_TYPE_ADAM);
110 EXPECT_EQ(status, ML_ERROR_NONE);
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);
119 * @brief Neural Network Optimizer Set Property Test (negative test)
121 TEST(nntrainer_capi_nnopt, setProperty_04_n) {
122 ml_train_optimizer_h handle = NULL;
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);
132 * @brief Neural Network Optimizer Set Property Test (negative test)
134 TEST(nntrainer_capi_nnopt, setProperty_05_n) {
135 ml_train_optimizer_h handle = NULL;
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);
144 * @brief Neural Network Optimizer Set Property Test (positive test)
146 TEST(nntrainer_capi_nnopt, setProperty_with_single_param_01_p) {
147 ml_train_optimizer_h handle;
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);
159 * @brief Neural Network Optimizer Set Property Test (negative test)
161 TEST(nntrainer_capi_nnopt, setProperty_with_single_param_02_n) {
162 ml_train_optimizer_h handle;
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);
174 * @brief Neural Network Optimizer Set Property Test (negative test)
176 TEST(nntrainer_capi_nnopt, setProperty_with_single_param_03_n) {
177 ml_train_optimizer_h handle;
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);
191 int main(int argc, char **argv) {
195 testing::InitGoogleTest(&argc, argv);
197 std::cerr << "Error duing IniGoogleTest" << std::endl;
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);
207 result = RUN_ALL_TESTS();
209 std::cerr << "Error duing RUN_ALL_TSETS()" << std::endl;
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);