[UTC][nntrainer][ACR-1758] Added new TCs for new lr scheduler and get weight API 77/291777/2
authorhyeonseok lee <hs89.lee@samsung.com>
Fri, 21 Apr 2023 05:00:54 +0000 (14:00 +0900)
committerhyeonseok lee <hs89.lee@samsung.com>
Wed, 26 Apr 2023 06:29:43 +0000 (15:29 +0900)
 - Added learning rate scheduler related API TC
 - Added get weight from model API TC

Change-Id: I4ca409129e146e7ff5082a9e9e5c47921244a590
Signed-off-by: hyeonseok lee <hs89.lee@samsung.com>
src/utc/nntrainer/CMakeLists.txt
src/utc/nntrainer/public.list
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-lr-scheduler.c [new file with mode: 0644]
src/utc/nntrainer/utc-nntrainer-model.c
src/utc/nntrainer/utc-nntrainer-optimizer.c

index 3c7ef3ed09a769759b8f8ab7c1f23ebf4321d690..7baa618a0bf955fd89eb42255d8bd033fee82178 100644 (file)
@@ -7,6 +7,7 @@ SET(CAPI_LIB "nntrainer")
 SET(TC_SOURCES
   utc-nntrainer-dataset.c
   utc-nntrainer-layer.c
+  utc-nntrainer-lr-scheduler.c
   utc-nntrainer-optimizer.c
   utc-nntrainer-model.c
 )
index b1f804afa1c3b371972348db597a74c2c5049c4f..f1ee403d1dc2a304d802257c6feb332a80b39c3a 100644 (file)
@@ -9,15 +9,25 @@ ml_train_model_set_optimizer
 ml_train_model_set_dataset
 ml_train_model_get_input_tensors_info
 ml_train_model_get_output_tensors_info
-ml_train_model_save
-ml_train_model_load
 ml_train_layer_create
-ml_train_layer_set_property
 ml_train_layer_destroy
+ml_train_layer_set_property
 ml_train_optimizer_create
-ml_train_optimizer_set_property
 ml_train_optimizer_destroy
+ml_train_optimizer_set_property
+ml_train_optimizer_set_lr_scheduler
+ml_train_lr_scheduler_create
+ml_train_lr_scheduler_destroy
+ml_train_lr_scheduler_set_property
 ml_train_dataset_create_with_generator
+ml_train_dataset_create
+ml_train_dataset_add_generator
+ml_train_dataset_add_file
 ml_train_dataset_create_with_file
-ml_train_dataset_set_property
 ml_train_dataset_destroy
+ml_train_dataset_set_property
+ml_train_dataset_set_property_for_mode
+ml_train_model_save
+ml_train_model_load
+ml_train_model_get_layer
+ml_train_model_get_weight
index c0c5f491519f3787eb8d95bc1e4ddf8df0bc103e..fd27af4cee951cfa799875505dc53fef0e68e0ac 100644 (file)
@@ -38,6 +38,9 @@ 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);
+extern int utc_nntrainer_optimizer_set_lr_scheduler_p(void);
+extern int utc_nntrainer_optimizer_set_lr_scheduler_n1(void);
+extern int utc_nntrainer_optimizer_set_lr_scheduler_n2(void);
 
 extern void utc_nntrainer_dataset_startup(void);
 extern void utc_nntrainer_dataset_cleanup(void);
@@ -76,6 +79,9 @@ extern int utc_nntrainer_model_compile_n(void);
 extern int utc_nntrainer_model_run_p1(void);
 extern int utc_nntrainer_model_run_p2(void);
 extern int utc_nntrainer_model_run_n(void);
+extern int utc_nntrainer_model_get_weight_p(void);
+extern int utc_nntrainer_model_get_weight_n(void);
+
 /// since tizen 6.5
 extern int utc_nntrainer_layer_create_p2(void);
 extern int utc_nntrainer_layer_set_property_bn_p(void);
@@ -173,6 +179,17 @@ extern int utc_nntrainer_dataset_add_file_test_dataset_n2(void);
 extern int utc_nntrainer_dataset_set_property_for_mode_p(void);
 extern int utc_nntrainer_dataset_set_property_for_mode_n(void);
 
+/// since tizen 7.5
+extern void utc_nntrainer_lr_scheduler_startup(void);
+extern void utc_nntrainer_lr_scheduler_cleanup(void);
+
+extern int utc_nntrainer_lr_scheduler_create_p(void);
+extern int utc_nntrainer_lr_scheduler_create_n(void);
+extern int utc_nntrainer_lr_scheduler_destroy_p(void);
+extern int utc_nntrainer_lr_scheduler_destroy_n(void);
+extern int utc_nntrainer_lr_scheduler_set_property_p(void);
+extern int utc_nntrainer_lr_scheduler_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},
@@ -188,6 +205,9 @@ testcase tc_array[] = {
     {"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},
+    {"utc_nntrainer_optimizer_set_lr_scheduler_p", utc_nntrainer_optimizer_set_lr_scheduler_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_set_lr_scheduler_n1", utc_nntrainer_optimizer_set_lr_scheduler_n1, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_set_lr_scheduler_n2", utc_nntrainer_optimizer_set_lr_scheduler_n2, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
     // dataset tcs
     {"utc_nntrainer_dataset_create_file_p", utc_nntrainer_dataset_create_file_p, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup},
     {"utc_nntrainer_dataset_create_file_n", utc_nntrainer_dataset_create_file_n, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup},
@@ -220,6 +240,8 @@ testcase tc_array[] = {
     {"utc_nntrainer_model_run_p1", utc_nntrainer_model_run_p1, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
     {"utc_nntrainer_model_run_p2", utc_nntrainer_model_run_p2, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
     {"utc_nntrainer_model_run_n", utc_nntrainer_model_run_n, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
+    {"utc_nntrainer_model_get_weight_p", utc_nntrainer_model_get_weight_p, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
+    {"utc_nntrainer_model_get_weight_n", utc_nntrainer_model_get_weight_n, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
 
     /// since tizen 6.5
     {"utc_nntrainer_layer_create_p2", utc_nntrainer_layer_create_p2, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
@@ -318,6 +340,14 @@ testcase tc_array[] = {
     {"utc_nntrainer_dataset_set_property_for_mode_p", utc_nntrainer_dataset_set_property_for_mode_p, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup},
     {"utc_nntrainer_dataset_set_property_for_mode_n", utc_nntrainer_dataset_set_property_for_mode_n, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup},
 
+    // lr_scheduler tcs
+    {"utc_nntrainer_lr_scheduler_create_p", utc_nntrainer_lr_scheduler_create_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_create_n", utc_nntrainer_lr_scheduler_create_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_destroy_p", utc_nntrainer_lr_scheduler_destroy_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_destroy_n", utc_nntrainer_lr_scheduler_destroy_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_set_property_p", utc_nntrainer_lr_scheduler_set_property_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_set_property_n", utc_nntrainer_lr_scheduler_set_property_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+
     {NULL, NULL},
 };
 #endif // __TCT_NNTRAINER_MOBILE_H__
index c8e46476e3781a0b84d296f6b48294a5bb2d8c60..f68170b98c35cc29976b874eea7d02f494373738 100644 (file)
@@ -38,6 +38,9 @@ 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);
+extern int utc_nntrainer_optimizer_set_lr_scheduler_p(void);
+extern int utc_nntrainer_optimizer_set_lr_scheduler_n1(void);
+extern int utc_nntrainer_optimizer_set_lr_scheduler_n2(void);
 
 extern void utc_nntrainer_dataset_startup(void);
 extern void utc_nntrainer_dataset_cleanup(void);
@@ -76,6 +79,8 @@ extern int utc_nntrainer_model_compile_n(void);
 extern int utc_nntrainer_model_run_p1(void);
 extern int utc_nntrainer_model_run_p2(void);
 extern int utc_nntrainer_model_run_n(void);
+extern int utc_nntrainer_model_get_weight_p(void);
+extern int utc_nntrainer_model_get_weight_n(void);
 
 /// since tizen 6.5
 extern int utc_nntrainer_layer_create_p2(void);
@@ -174,6 +179,17 @@ extern int utc_nntrainer_dataset_add_file_test_dataset_n2(void);
 extern int utc_nntrainer_dataset_set_property_for_mode_p(void);
 extern int utc_nntrainer_dataset_set_property_for_mode_n(void);
 
+/// since tizen 7.5
+extern void utc_nntrainer_lr_scheduler_startup(void);
+extern void utc_nntrainer_lr_scheduler_cleanup(void);
+
+extern int utc_nntrainer_lr_scheduler_create_p(void);
+extern int utc_nntrainer_lr_scheduler_create_n(void);
+extern int utc_nntrainer_lr_scheduler_destroy_p(void);
+extern int utc_nntrainer_lr_scheduler_destroy_n(void);
+extern int utc_nntrainer_lr_scheduler_set_property_p(void);
+extern int utc_nntrainer_lr_scheduler_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},
@@ -189,6 +205,9 @@ testcase tc_array[] = {
     {"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},
+    {"utc_nntrainer_optimizer_set_lr_scheduler_p", utc_nntrainer_optimizer_set_lr_scheduler_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_set_lr_scheduler_n1", utc_nntrainer_optimizer_set_lr_scheduler_n1, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_set_lr_scheduler_n2", utc_nntrainer_optimizer_set_lr_scheduler_n2, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
     // dataset tcs
     {"utc_nntrainer_dataset_create_file_p", utc_nntrainer_dataset_create_file_p, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup},
     {"utc_nntrainer_dataset_create_file_n", utc_nntrainer_dataset_create_file_n, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup},
@@ -221,6 +240,8 @@ testcase tc_array[] = {
     {"utc_nntrainer_model_run_p1", utc_nntrainer_model_run_p1, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
     {"utc_nntrainer_model_run_p2", utc_nntrainer_model_run_p2, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
     {"utc_nntrainer_model_run_n", utc_nntrainer_model_run_n, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
+    {"utc_nntrainer_model_get_weight_p", utc_nntrainer_model_get_weight_p, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
+    {"utc_nntrainer_model_get_weight_n", utc_nntrainer_model_get_weight_n, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
 
     /// since tizen 6.5
     {"utc_nntrainer_layer_create_p2", utc_nntrainer_layer_create_p2, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
@@ -319,6 +340,14 @@ testcase tc_array[] = {
     {"utc_nntrainer_dataset_set_property_for_mode_p", utc_nntrainer_dataset_set_property_for_mode_p, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup},
     {"utc_nntrainer_dataset_set_property_for_mode_n", utc_nntrainer_dataset_set_property_for_mode_n, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup},
 
+    // lr_scheduler tcs
+    {"utc_nntrainer_lr_scheduler_create_p", utc_nntrainer_lr_scheduler_create_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_create_n", utc_nntrainer_lr_scheduler_create_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_destroy_p", utc_nntrainer_lr_scheduler_destroy_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_destroy_n", utc_nntrainer_lr_scheduler_destroy_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_set_property_p", utc_nntrainer_lr_scheduler_set_property_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_set_property_n", utc_nntrainer_lr_scheduler_set_property_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+
     {NULL, NULL},
 };
 #endif // __TCT_NNTRAINER_IOT_H__
index ed6b80ea0192f290dff2cd276268e34097f67cbb..a05805ee6dfcb1864ba7f747db8a5c172998044e 100644 (file)
@@ -38,6 +38,9 @@ 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);
+extern int utc_nntrainer_optimizer_set_lr_scheduler_p(void);
+extern int utc_nntrainer_optimizer_set_lr_scheduler_n1(void);
+extern int utc_nntrainer_optimizer_set_lr_scheduler_n2(void);
 
 extern void utc_nntrainer_dataset_startup(void);
 extern void utc_nntrainer_dataset_cleanup(void);
@@ -76,6 +79,8 @@ extern int utc_nntrainer_model_compile_n(void);
 extern int utc_nntrainer_model_run_p1(void);
 extern int utc_nntrainer_model_run_p2(void);
 extern int utc_nntrainer_model_run_n(void);
+extern int utc_nntrainer_model_get_weight_p(void);
+extern int utc_nntrainer_model_get_weight_n(void);
 
 /// since tizen 6.5
 extern int utc_nntrainer_layer_create_p2(void);
@@ -174,6 +179,17 @@ extern int utc_nntrainer_dataset_add_file_test_dataset_n2(void);
 extern int utc_nntrainer_dataset_set_property_for_mode_p(void);
 extern int utc_nntrainer_dataset_set_property_for_mode_n(void);
 
+/// since tizen 7.5
+extern void utc_nntrainer_lr_scheduler_startup(void);
+extern void utc_nntrainer_lr_scheduler_cleanup(void);
+
+extern int utc_nntrainer_lr_scheduler_create_p(void);
+extern int utc_nntrainer_lr_scheduler_create_n(void);
+extern int utc_nntrainer_lr_scheduler_destroy_p(void);
+extern int utc_nntrainer_lr_scheduler_destroy_n(void);
+extern int utc_nntrainer_lr_scheduler_set_property_p(void);
+extern int utc_nntrainer_lr_scheduler_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},
@@ -189,6 +205,9 @@ testcase tc_array[] = {
     {"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},
+    {"utc_nntrainer_optimizer_set_lr_scheduler_p", utc_nntrainer_optimizer_set_lr_scheduler_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_set_lr_scheduler_n1", utc_nntrainer_optimizer_set_lr_scheduler_n1, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_set_lr_scheduler_n2", utc_nntrainer_optimizer_set_lr_scheduler_n2, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
     // dataset tcs
     {"utc_nntrainer_dataset_create_file_p", utc_nntrainer_dataset_create_file_p, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup},
     {"utc_nntrainer_dataset_create_file_n", utc_nntrainer_dataset_create_file_n, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup},
@@ -221,6 +240,8 @@ testcase tc_array[] = {
     {"utc_nntrainer_model_run_p1", utc_nntrainer_model_run_p1, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
     {"utc_nntrainer_model_run_p2", utc_nntrainer_model_run_p2, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
     {"utc_nntrainer_model_run_n", utc_nntrainer_model_run_n, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
+    {"utc_nntrainer_model_get_weight_p", utc_nntrainer_model_get_weight_p, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
+    {"utc_nntrainer_model_get_weight_n", utc_nntrainer_model_get_weight_n, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
 
     /// since tizen 6.5
     {"utc_nntrainer_layer_create_p2", utc_nntrainer_layer_create_p2, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
@@ -319,6 +340,14 @@ testcase tc_array[] = {
     {"utc_nntrainer_dataset_set_property_for_mode_p", utc_nntrainer_dataset_set_property_for_mode_p, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup},
     {"utc_nntrainer_dataset_set_property_for_mode_n", utc_nntrainer_dataset_set_property_for_mode_n, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup},
 
+    // lr_scheduler tcs
+    {"utc_nntrainer_lr_scheduler_create_p", utc_nntrainer_lr_scheduler_create_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_create_n", utc_nntrainer_lr_scheduler_create_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_destroy_p", utc_nntrainer_lr_scheduler_destroy_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_destroy_n", utc_nntrainer_lr_scheduler_destroy_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_set_property_p", utc_nntrainer_lr_scheduler_set_property_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_set_property_n", utc_nntrainer_lr_scheduler_set_property_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+
     {NULL, NULL},
 };
 
index 8a1550e2f504d45b6751119ca64018f9be90aafc..4952440b3de2ad571ff657109f45752d013c0ba5 100644 (file)
@@ -38,6 +38,9 @@ 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);
+extern int utc_nntrainer_optimizer_set_lr_scheduler_p(void);
+extern int utc_nntrainer_optimizer_set_lr_scheduler_n1(void);
+extern int utc_nntrainer_optimizer_set_lr_scheduler_n2(void);
 
 extern void utc_nntrainer_dataset_startup(void);
 extern void utc_nntrainer_dataset_cleanup(void);
@@ -76,6 +79,8 @@ extern int utc_nntrainer_model_compile_n(void);
 extern int utc_nntrainer_model_run_p1(void);
 extern int utc_nntrainer_model_run_p2(void);
 extern int utc_nntrainer_model_run_n(void);
+extern int utc_nntrainer_model_get_weight_p(void);
+extern int utc_nntrainer_model_get_weight_n(void);
 
 /// since tizen 6.5
 extern int utc_nntrainer_layer_create_p2(void);
@@ -174,6 +179,17 @@ extern int utc_nntrainer_dataset_add_file_test_dataset_n2(void);
 extern int utc_nntrainer_dataset_set_property_for_mode_p(void);
 extern int utc_nntrainer_dataset_set_property_for_mode_n(void);
 
+/// since tizen 7.5
+extern void utc_nntrainer_lr_scheduler_startup(void);
+extern void utc_nntrainer_lr_scheduler_cleanup(void);
+
+extern int utc_nntrainer_lr_scheduler_create_p(void);
+extern int utc_nntrainer_lr_scheduler_create_n(void);
+extern int utc_nntrainer_lr_scheduler_destroy_p(void);
+extern int utc_nntrainer_lr_scheduler_destroy_n(void);
+extern int utc_nntrainer_lr_scheduler_set_property_p(void);
+extern int utc_nntrainer_lr_scheduler_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},
@@ -189,6 +205,9 @@ testcase tc_array[] = {
     {"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},
+    {"utc_nntrainer_optimizer_set_lr_scheduler_p", utc_nntrainer_optimizer_set_lr_scheduler_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_set_lr_scheduler_n1", utc_nntrainer_optimizer_set_lr_scheduler_n1, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
+    {"utc_nntrainer_optimizer_set_lr_scheduler_n2", utc_nntrainer_optimizer_set_lr_scheduler_n2, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup},
     // dataset tcs
     {"utc_nntrainer_dataset_create_file_p", utc_nntrainer_dataset_create_file_p, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup},
     {"utc_nntrainer_dataset_create_file_n", utc_nntrainer_dataset_create_file_n, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup},
@@ -221,6 +240,8 @@ testcase tc_array[] = {
     {"utc_nntrainer_model_run_p1", utc_nntrainer_model_run_p1, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
     {"utc_nntrainer_model_run_p2", utc_nntrainer_model_run_p2, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
     {"utc_nntrainer_model_run_n", utc_nntrainer_model_run_n, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
+    {"utc_nntrainer_model_get_weight_p", utc_nntrainer_model_get_weight_p, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
+    {"utc_nntrainer_model_get_weight_n", utc_nntrainer_model_get_weight_n, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup},
 
     /// since tizen 6.5
     {"utc_nntrainer_layer_create_p2", utc_nntrainer_layer_create_p2, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup},
@@ -319,6 +340,14 @@ testcase tc_array[] = {
     {"utc_nntrainer_dataset_set_property_for_mode_p", utc_nntrainer_dataset_set_property_for_mode_p, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup},
     {"utc_nntrainer_dataset_set_property_for_mode_n", utc_nntrainer_dataset_set_property_for_mode_n, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup},
 
+    // lr_scheduler tcs
+    {"utc_nntrainer_lr_scheduler_create_p", utc_nntrainer_lr_scheduler_create_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_create_n", utc_nntrainer_lr_scheduler_create_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_destroy_p", utc_nntrainer_lr_scheduler_destroy_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_destroy_n", utc_nntrainer_lr_scheduler_destroy_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_set_property_p", utc_nntrainer_lr_scheduler_set_property_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+    {"utc_nntrainer_lr_scheduler_set_property_n", utc_nntrainer_lr_scheduler_set_property_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup},
+
     {NULL, NULL},
 };
 
diff --git a/src/utc/nntrainer/utc-nntrainer-lr-scheduler.c b/src/utc/nntrainer/utc-nntrainer-lr-scheduler.c
new file mode 100644 (file)
index 0000000..24ea90c
--- /dev/null
@@ -0,0 +1,183 @@
+//
+// Copyright (c) 2023 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_lr_scheduler_h lr_scheduler;
+
+/**
+ * @function utc_nntrainer_lr_scheduler_startup
+ * @since_tizen 7.5
+ * @description Called before each test case
+ */
+void utc_nntrainer_lr_scheduler_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_lr_scheduler_cleanup
+ * @since_tizen 7.5
+ * @description Called after each test case
+ */
+void utc_nntrainer_lr_scheduler_cleanup(void)
+{
+  return;
+}
+
+/**
+ * @function utc_nntrainer_lr_scheduler_create_p
+ * @since_tizen 7.5
+ * @description create lr_scheduler test
+ */
+int utc_nntrainer_lr_scheduler_create_p(void)
+{
+  status = ml_train_lr_scheduler_create(&lr_scheduler, ML_TRAIN_LR_SCHEDULER_TYPE_CONSTANT);
+  if (train_supported == false)
+  {
+    assert_eq(status, ML_ERROR_NOT_SUPPORTED);
+  }
+  else
+  {
+    assert_eq(status, ML_ERROR_NONE);
+  }
+
+  ml_train_lr_scheduler_destroy(lr_scheduler);
+
+  return 0;
+}
+
+/**
+ * @function utc_nntrainer_lr_scheduler_create_n
+ * @since_tizen 7.5
+ * @description Test for creating unknown lr_scheduler
+ */
+int utc_nntrainer_lr_scheduler_create_n(void)
+{
+  status = ml_train_lr_scheduler_create(&lr_scheduler, ML_TRAIN_LR_SCHEDULER_TYPE_UNKNOWN);
+  if (train_supported == false)
+  {
+    assert_eq(status, ML_ERROR_NOT_SUPPORTED);
+  }
+  else
+  {
+    assert_eq(status, ML_ERROR_INVALID_PARAMETER);
+  }
+
+  return 0;
+}
+
+/**
+ * @function utc_nntrainer_lr_scheduler_destory_p
+ * @since_tizen 7.5
+ * @description Test for destroying lr_scheduler
+ */
+int utc_nntrainer_lr_scheduler_destroy_p(void)
+{
+  ml_train_lr_scheduler_create(&lr_scheduler, ML_TRAIN_LR_SCHEDULER_TYPE_CONSTANT);
+  status = ml_train_lr_scheduler_destroy(lr_scheduler);
+  if (train_supported == false)
+  {
+    assert_eq(status, ML_ERROR_NOT_SUPPORTED);
+  }
+  else
+  {
+    assert_eq(status, ML_ERROR_NONE);
+  }
+
+  return 0;
+}
+
+/**
+ * @function utc_nntrainer_lr_scheduler_destroy_n
+ * @since_tizen 7.5
+ * @description Test for destroying lr_scheduler that is passed to optimizer
+ */
+int utc_nntrainer_lr_scheduler_destroy_n(void)
+{
+  ml_train_optimizer_h optimizer;
+  ml_train_optimizer_create(&optimizer, ML_TRAIN_OPTIMIZER_TYPE_SGD);
+  ml_train_lr_scheduler_create(&lr_scheduler, ML_TRAIN_LR_SCHEDULER_TYPE_CONSTANT);
+
+  ml_train_optimizer_set_lr_scheduler(optimizer, lr_scheduler);
+
+  status = ml_train_lr_scheduler_destroy(lr_scheduler);
+  if (train_supported == false)
+  {
+    assert_eq(status, ML_ERROR_NOT_SUPPORTED);
+  }
+  else
+  {
+    assert_eq(status, ML_ERROR_INVALID_PARAMETER);
+  }
+
+  ml_train_optimizer_destroy(optimizer);
+
+  return 0;
+}
+
+/**
+ * @function utc_nntrainer_lr_scheduler_set_property_p
+ * @since_tizen 7.5
+ * @description Test for setting property
+ */
+int utc_nntrainer_lr_scheduler_set_property_p(void)
+{
+  ml_train_lr_scheduler_create(&lr_scheduler, ML_TRAIN_LR_SCHEDULER_TYPE_CONSTANT);
+  status = ml_train_lr_scheduler_set_property(lr_scheduler, "learning_rate=0.0001", NULL);
+  if (train_supported == false)
+  {
+    assert_eq(status, ML_ERROR_NOT_SUPPORTED);
+  }
+  else
+  {
+    assert_eq(status, ML_ERROR_NONE);
+  }
+
+  ml_train_lr_scheduler_destroy(lr_scheduler);
+  return 0;
+}
+
+/**
+ * @function utc_nntrainer_lr_scheduler_set_property_n
+ * @since_tizen 7.5
+ * @description Test for setting invalid property
+ */
+int utc_nntrainer_lr_scheduler_set_property_n(void)
+{
+  ml_train_lr_scheduler_create(&lr_scheduler, ML_TRAIN_LR_SCHEDULER_TYPE_CONSTANT);
+  status = ml_train_lr_scheduler_set_property(lr_scheduler, "invalid_property_key=invalid_property_value", NULL);
+  if (train_supported == false)
+  {
+    assert_eq(status, ML_ERROR_NOT_SUPPORTED);
+  }
+  else
+  {
+    assert_eq(status, ML_ERROR_INVALID_PARAMETER);
+  }
+  ml_train_lr_scheduler_destroy(lr_scheduler);
+
+  return 0;
+}
index 903591a8ae7957b3ba41e6ab4f3b5a491613597d..3e65ad40f9a96a29025633bebeacb1a8ccfaa42e 100644 (file)
@@ -1167,3 +1167,63 @@ int utc_nntrainer_model_save_load_format_bin_n(void)
 
   return 0;
 }
+
+/**
+ * @function utc_nntrainer_model_get_weight_p
+ * @since_tizen 7.5
+ * @description get weight from model
+ */
+int utc_nntrainer_model_get_weight_p(void)
+{
+  ml_train_model_h model;
+  ml_tensors_info_h weight_info;
+  ml_tensors_data_h weights;
+  ml_train_model_construct_with_conf(conf_path, &model);
+
+  ml_train_model_compile(model, NULL);
+
+  status = ml_train_model_get_weight(model, "outputlayer", &weights, &weight_info);
+  if (train_supported == false)
+  {
+    assert_eq(status, ML_ERROR_NOT_SUPPORTED);
+  }
+  else
+  {
+    assert_eq(status, ML_ERROR_NONE);
+  }
+
+  ml_train_model_destroy(model);
+  ml_tensors_info_destroy(weight_info);
+  ml_tensors_data_destroy(weights);
+
+  return 0;
+}
+
+/**
+ * @function utc_nntrainer_model_get_weight_n
+ * @since_tizen 7.5
+ * @description get weight from model
+ */
+int utc_nntrainer_model_get_weight_n(void)
+{
+  ml_train_model_h model;
+  ml_tensors_info_h weight_info;
+  ml_tensors_data_h weights;
+  ml_train_model_construct_with_conf(conf_path, &model);
+
+  ml_train_model_compile(model, NULL);
+
+  status = ml_train_model_get_weight(model, "unknownlayer", &weights, &weight_info);
+  if (train_supported == false)
+  {
+    assert_eq(status, ML_ERROR_NOT_SUPPORTED);
+  }
+  else
+  {
+    assert_eq(status, ML_ERROR_INVALID_PARAMETER);
+  }
+
+  ml_train_model_destroy(model);
+
+  return 0;
+}
index c76c9746ffad2cede0720182fa9f8488a0f872a5..a10c425f964dd1abb44701b42ebb1a72d721c381 100644 (file)
@@ -18,6 +18,7 @@
 
 static int status;
 static ml_train_optimizer_h opt;
+static ml_train_lr_scheduler_h lr_scheduler;
 
 /**
  * @function utc_nntrainer_optimizer_startup
@@ -181,3 +182,76 @@ int utc_nntrainer_optimizer_set_property_n(void)
 
   return 0;
 }
+
+/**
+ * @function utc_nntrainer_optimizer_set_lr_scheduler_p
+ * @since_tizen 7.5
+ * @description Test for set lr_scheduler
+ */
+int utc_nntrainer_optimizer_set_lr_scheduler_p(void)
+{
+  ml_train_optimizer_create(&opt, ML_TRAIN_OPTIMIZER_TYPE_SGD);
+  ml_train_lr_scheduler_create(&lr_scheduler, ML_TRAIN_LR_SCHEDULER_TYPE_CONSTANT);
+  status = ml_train_optimizer_set_lr_scheduler(opt, lr_scheduler);
+  if (train_supported == false)
+  {
+    assert_eq(status, ML_ERROR_NOT_SUPPORTED);
+  }
+  else
+  {
+    assert_eq(status, ML_ERROR_NONE);
+  }
+
+  ml_train_optimizer_destroy(opt);
+  return 0;
+}
+
+/**
+ * @function utc_nntrainer_optimizer_set_lr_scheduler_n1
+ * @since_tizen 7.5
+ * @description Test for set lr_scheduler owned by other optimizer
+ */
+int utc_nntrainer_optimizer_set_lr_scheduler_n1(void)
+{
+  ml_train_optimizer_h other_opt;
+  ml_train_optimizer_create(&other_opt, ML_TRAIN_OPTIMIZER_TYPE_SGD);
+  ml_train_lr_scheduler_create(&lr_scheduler, ML_TRAIN_LR_SCHEDULER_TYPE_CONSTANT);
+  ml_train_optimizer_set_lr_scheduler(other_opt, lr_scheduler);
+
+  ml_train_optimizer_create(&opt, ML_TRAIN_OPTIMIZER_TYPE_SGD);
+  status = ml_train_optimizer_set_lr_scheduler(opt, lr_scheduler);
+  if (train_supported == false)
+  {
+    assert_eq(status, ML_ERROR_NOT_SUPPORTED);
+  }
+  else
+  {
+    assert_eq(status, ML_ERROR_INVALID_PARAMETER);
+  }
+
+  ml_train_optimizer_destroy(opt);
+  ml_train_optimizer_destroy(other_opt);
+  return 0;
+}
+
+/**
+ * @function utc_nntrainer_optimizer_set_lr_scheduler_n2
+ * @since_tizen 7.5
+ * @description Test for set lr_scheduler passing null
+ */
+int utc_nntrainer_optimizer_set_lr_scheduler_n2(void)
+{
+  ml_train_optimizer_create(&opt, ML_TRAIN_OPTIMIZER_TYPE_SGD);
+  status = ml_train_optimizer_set_lr_scheduler(opt, NULL);
+  if (train_supported == false)
+  {
+    assert_eq(status, ML_ERROR_NOT_SUPPORTED);
+  }
+  else
+  {
+    assert_eq(status, ML_ERROR_INVALID_PARAMETER);
+  }
+
+  ml_train_optimizer_destroy(opt);
+  return 0;
+}