[UTC][nntrainer][ACR-1579][Add optimizer testcase] 82/242082/3
authorJihoon Lee <jhoon.it.lee@samsung.com>
Mon, 24 Aug 2020 04:39:17 +0000 (13:39 +0900)
committerJihoon Lee <jhoon.it.lee@samsung.com>
Thu, 27 Aug 2020 02:16:36 +0000 (11:16 +0900)
This patch add test cases for optimizer in nntrainer

Change-Id: Ib29eb63aee6950ecff74dbf13c8102bfabd2da91
Signed-off-by: Jihoon Lee <jhoon.it.lee@samsung.com>
src/utc/nntrainer/tct-nntrainer-core_mobile.h
src/utc/nntrainer/tct-nntrainer-core_tizeniot.h
src/utc/nntrainer/tct-nntrainer-core_tv.h
src/utc/nntrainer/tct-nntrainer-core_wearable.h
src/utc/nntrainer/utc-nntrainer-optimizer.c [new file with mode: 0644]

index ca2d29e499b94c4459fda40cd8bd8c59e31c5278..49abf3496e3a5d28b8ea9bdeb7e84d1f239c7ccb 100644 (file)
@@ -29,6 +29,16 @@ extern int utc_nntrainer_layer_destroy_n(void);
 extern int utc_nntrainer_layer_set_property_p(void);
 extern int utc_nntrainer_layer_set_property_n(void);
 
+extern void utc_nntrainer_optimizer_startup(void);
+extern void utc_nntrainer_optimizer_cleanup(void);
+
+extern int utc_nntrainer_optimizer_create_p(void);
+extern int utc_nntrainer_optimizer_create_n(void);
+extern int utc_nntrainer_optimizer_destroy_p(void);
+extern int utc_nntrainer_optimizer_destroy_n(void);
+extern int utc_nntrainer_optimizer_set_property_p(void);
+extern int utc_nntrainer_optimizer_set_property_n(void);
+
 testcase tc_array[] = {
     // layer tcs
     {"utc_nntrainer_layer_create_p", utc_nntrainer_layer_create_p, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
@@ -37,6 +47,13 @@ testcase tc_array[] = {
     {"utc_nntrainer_layer_destroy_n", utc_nntrainer_layer_destroy_n, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
     {"utc_nntrainer_layer_set_property_p", utc_nntrainer_layer_set_property_p, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
     {"utc_nntrainer_layer_set_property_n", utc_nntrainer_layer_set_property_n, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
+    // optimizer tcs
+    {"utc_nntrainer_optimizer_create_p", utc_nntrainer_optimizer_create_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_create_n", utc_nntrainer_optimizer_create_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_destroy_p", utc_nntrainer_optimizer_destroy_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_destroy_n", utc_nntrainer_optimizer_destroy_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_set_property_p", utc_nntrainer_optimizer_set_property_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_set_property_n", utc_nntrainer_optimizer_set_property_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
     {NULL, NULL},
 };
 
index 859ed7c097c8189e9da022377bd6b9c001909b52..59ec0b893b0b05e16bb31394a96c301349c652c9 100644 (file)
@@ -29,6 +29,16 @@ extern int utc_nntrainer_layer_destroy_n(void);
 extern int utc_nntrainer_layer_set_property_p(void);
 extern int utc_nntrainer_layer_set_property_n(void);
 
+extern void utc_nntrainer_optimizer_startup(void);
+extern void utc_nntrainer_optimizer_cleanup(void);
+
+extern int utc_nntrainer_optimizer_create_p(void);
+extern int utc_nntrainer_optimizer_create_n(void);
+extern int utc_nntrainer_optimizer_destroy_p(void);
+extern int utc_nntrainer_optimizer_destroy_n(void);
+extern int utc_nntrainer_optimizer_set_property_p(void);
+extern int utc_nntrainer_optimizer_set_property_n(void);
+
 testcase tc_array[] = {
     // layer tcs
     {"utc_nntrainer_layer_create_p", utc_nntrainer_layer_create_p, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
@@ -37,6 +47,13 @@ testcase tc_array[] = {
     {"utc_nntrainer_layer_destroy_n", utc_nntrainer_layer_destroy_n, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
     {"utc_nntrainer_layer_set_property_p", utc_nntrainer_layer_set_property_p, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
     {"utc_nntrainer_layer_set_property_n", utc_nntrainer_layer_set_property_n, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
+    // optimizer tcs
+    {"utc_nntrainer_optimizer_create_p", utc_nntrainer_optimizer_create_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_create_n", utc_nntrainer_optimizer_create_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_destroy_p", utc_nntrainer_optimizer_destroy_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_destroy_n", utc_nntrainer_optimizer_destroy_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_set_property_p", utc_nntrainer_optimizer_set_property_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_set_property_n", utc_nntrainer_optimizer_set_property_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
     {NULL, NULL},
 };
 
index 0645d7ff58af3e7665e0ed3067c5fd22065e30c2..6f1126404c9b8f64fb01667a7e66339e677dee25 100644 (file)
@@ -29,6 +29,16 @@ extern int utc_nntrainer_layer_destroy_n(void);
 extern int utc_nntrainer_layer_set_property_p(void);
 extern int utc_nntrainer_layer_set_property_n(void);
 
+extern void utc_nntrainer_optimizer_startup(void);
+extern void utc_nntrainer_optimizer_cleanup(void);
+
+extern int utc_nntrainer_optimizer_create_p(void);
+extern int utc_nntrainer_optimizer_create_n(void);
+extern int utc_nntrainer_optimizer_destroy_p(void);
+extern int utc_nntrainer_optimizer_destroy_n(void);
+extern int utc_nntrainer_optimizer_set_property_p(void);
+extern int utc_nntrainer_optimizer_set_property_n(void);
+
 testcase tc_array[] = {
     // layer tcs
     {"utc_nntrainer_layer_create_p", utc_nntrainer_layer_create_p, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
@@ -37,6 +47,13 @@ testcase tc_array[] = {
     {"utc_nntrainer_layer_destroy_n", utc_nntrainer_layer_destroy_n, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
     {"utc_nntrainer_layer_set_property_p", utc_nntrainer_layer_set_property_p, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
     {"utc_nntrainer_layer_set_property_n", utc_nntrainer_layer_set_property_n, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
+    // optimizer tcs
+    {"utc_nntrainer_optimizer_create_p", utc_nntrainer_optimizer_create_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_create_n", utc_nntrainer_optimizer_create_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_destroy_p", utc_nntrainer_optimizer_destroy_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_destroy_n", utc_nntrainer_optimizer_destroy_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_set_property_p", utc_nntrainer_optimizer_set_property_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_set_property_n", utc_nntrainer_optimizer_set_property_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
     {NULL, NULL},
 };
 
index 6d13932771300510a20d5a56651c45df4308205b..00f280511129e1267551233516a1d459cff564b3 100644 (file)
@@ -29,6 +29,16 @@ extern int utc_nntrainer_layer_destroy_n(void);
 extern int utc_nntrainer_layer_set_property_p(void);
 extern int utc_nntrainer_layer_set_property_n(void);
 
+extern void utc_nntrainer_optimizer_startup(void);
+extern void utc_nntrainer_optimizer_cleanup(void);
+
+extern int utc_nntrainer_optimizer_create_p(void);
+extern int utc_nntrainer_optimizer_create_n(void);
+extern int utc_nntrainer_optimizer_destroy_p(void);
+extern int utc_nntrainer_optimizer_destroy_n(void);
+extern int utc_nntrainer_optimizer_set_property_p(void);
+extern int utc_nntrainer_optimizer_set_property_n(void);
+
 testcase tc_array[] = {
     // layer tcs
     {"utc_nntrainer_layer_create_p", utc_nntrainer_layer_create_p, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
@@ -37,6 +47,13 @@ testcase tc_array[] = {
     {"utc_nntrainer_layer_destroy_n", utc_nntrainer_layer_destroy_n, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
     {"utc_nntrainer_layer_set_property_p", utc_nntrainer_layer_set_property_p, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
     {"utc_nntrainer_layer_set_property_n", utc_nntrainer_layer_set_property_n, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
+    // optimizer tcs
+    {"utc_nntrainer_optimizer_create_p", utc_nntrainer_optimizer_create_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_create_n", utc_nntrainer_optimizer_create_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_destroy_p", utc_nntrainer_optimizer_destroy_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_destroy_n", utc_nntrainer_optimizer_destroy_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_set_property_p", utc_nntrainer_optimizer_set_property_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_set_property_n", utc_nntrainer_optimizer_set_property_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
     {NULL, NULL},
 };
 
diff --git a/src/utc/nntrainer/utc-nntrainer-optimizer.c b/src/utc/nntrainer/utc-nntrainer-optimizer.c
new file mode 100644 (file)
index 0000000..ee8f04d
--- /dev/null
@@ -0,0 +1,141 @@
+//
+// Copyright (c) 2020 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#include "utc-nntrainer-common.h"
+
+static int status;
+static ml_train_optimizer_h opt;
+
+/**
+ * @function utc_nntrainer_optimizer_startup
+ * @since_tizen 6.0
+ * @description Called before each test case
+ */
+void utc_nntrainer_optimizer_startup(void)
+{
+  int ret = SYSTEM_INFO_ERROR_NONE;
+
+  ret = check_feature();
+  if (ret != SYSTEM_INFO_ERROR_NONE)
+  {
+    LOG_I("startup failed because checking feature failed."
+          "Please note that tct can be run unexpectedly");
+    return;
+  }
+}
+
+/**
+ * @function utc_nntrainer_optimizer_cleanup
+ * @since_tizen 6.0
+ * @description Called after each test case
+ */
+void utc_nntrainer_optimizer_cleanup(void)
+{
+  return;
+}
+
+/**
+ * @function utc_nntrainer_optimizer_create_p
+ * @since_tizen 6.0
+ * @description create optimizer test
+ */
+int utc_nntrainer_optimizer_create_p(void)
+{
+  status = ml_train_optimizer_create(&opt, ML_TRAIN_OPTIMIZER_TYPE_SGD);
+  ASSERT_STATUS(ML_ERROR_NONE);
+
+  ml_train_optimizer_destroy(opt);
+
+  return 0;
+}
+
+/**
+ * @function utc_nntrainer_optimizer_create_n
+ * @since_tizen 6.0
+ * @description Test for creating unknown optimizer
+ */
+int utc_nntrainer_optimizer_create_n(void)
+{
+  status = ml_train_optimizer_create(&opt, ML_TRAIN_OPTIMIZER_TYPE_UNKNOWN);
+  ASSERT_STATUS(ML_ERROR_INVALID_PARAMETER);
+
+  return 0;
+}
+
+/**
+ * @function utc_nntrainer_optimizer_destory_p
+ * @since_tizen 6.0
+ * @description Test for destroying optimizer
+ */
+int utc_nntrainer_optimizer_destroy_p(void)
+{
+  ml_train_optimizer_create(&opt , ML_TRAIN_OPTIMIZER_TYPE_SGD);
+  status = ml_train_optimizer_destroy(opt);
+  ASSERT_STATUS(ML_ERROR_NONE);
+
+  return 0;
+}
+
+/**
+ * @function utc_nntrainer_optimizer_destroy_n
+ * @since_tizen 6.0
+ * @description Test for destroying optimizer that is passed to model
+ */
+int utc_nntrainer_optimizer_destroy_n(void)
+{
+  ml_train_model_h model;
+  ml_train_model_construct(&model);
+  ml_train_optimizer_create(&opt, ML_TRAIN_OPTIMIZER_TYPE_ADAM);
+
+  ml_train_model_set_optimizer(model, opt);
+
+  status = ml_train_optimizer_destroy(opt);
+  ASSERT_STATUS(ML_ERROR_INVALID_PARAMETER);
+
+  ml_train_model_destroy(model);
+
+  return 0;
+}
+
+/**
+ * @function utc_nntrainer_optimizer_set_property_p
+ * @since_tizen 6.0
+ * @description Test for setting property
+ */
+int utc_nntrainer_optimizer_set_property_p(void)
+{
+  ml_train_optimizer_create(&opt, ML_TRAIN_OPTIMIZER_TYPE_ADAM);
+  status = ml_train_optimizer_set_property(opt, "beta1=0.002", "beta2=0.001", NULL);
+  ASSERT_STATUS(ML_ERROR_NONE);
+
+  ml_train_optimizer_destroy(opt);
+  return 0;
+}
+
+/**
+ * @function utc_nntrainer_optimizer_set_property_n
+ * @since_tizen 6.0
+ * @description Test for setting invalid property
+ */
+int utc_nntrainer_optimizer_set_property_n(void)
+{
+  ml_train_optimizer_create(&opt, ML_TRAIN_OPTIMIZER_TYPE_ADAM);
+  status = ml_train_optimizer_set_property(opt, "invalid_property_key=invalid_property_value", NULL);
+  ASSERT_STATUS(ML_ERROR_INVALID_PARAMETER);
+  ml_train_optimizer_destroy(opt);
+
+  return 0;
+}