From: Jihoon Lee Date: Wed, 29 Jul 2020 07:57:07 +0000 (+0900) Subject: [ Meson ] Add app sanity test X-Git-Tag: accepted/tizen/unified/20200731.145711~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7b37442e79ecf20c427254751cf28795c48efbf5;p=platform%2Fcore%2Fml%2Fnntrainer.git [ Meson ] Add app sanity test This patch currently check if example apps are running fine. To make this better, we should add parameterized app test with golden result plus some negative cases rather than running 1 test per 1 app, it is not done because it is not the highest priority. This patch only ensures that it is running fine for current setup(ini and other stuff) So this tests does not guarantee that app is running fine for every cases. resolves #375 see also #374 **Self evaluation:** 1. Build test: [X]Passed [ ]Failed [ ]Skipped 2. Run test: [X]Passed [ ]Failed [ ]Skipped Signed-off-by: Jihoon Lee --- diff --git a/Applications/Classification/jni/main.cpp b/Applications/Classification/jni/main.cpp index 889f20d..f26f787 100644 --- a/Applications/Classification/jni/main.cpp +++ b/Applications/Classification/jni/main.cpp @@ -343,6 +343,7 @@ bool read(std::vector> &inVec, std::vector> &inLabel, std::string type) { std::string file = type + "Set.dat"; + file = data_path + file; std::ifstream TrainingSet(file, std::ios::in | std::ios::binary); if (!TrainingSet.good()) @@ -359,7 +360,7 @@ bool read(std::vector> &inVec, */ int main(int argc, char *argv[]) { if (argc < 3) { - std::cout << "./TransferLearning Config.ini resources\n"; + std::cout << "./nntrainer_classification Config.ini resources\n"; exit(0); } const vector args(argv + 1, argv + argc); @@ -367,7 +368,7 @@ int main(int argc, char *argv[]) { data_path = args[1]; srand(time(NULL)); - std::string ini_file = data_path + "ini.bin"; + std::vector> inputVector, outputVector; std::vector> inputValVector, outputValVector; std::vector> inputTestVector, outputTestVector; diff --git a/Applications/Classification/jni/meson.build b/Applications/Classification/jni/meson.build index 0c69823..1b3c553 100644 --- a/Applications/Classification/jni/meson.build +++ b/Applications/Classification/jni/meson.build @@ -1,9 +1,12 @@ +build_root = meson.build_root() +res_path = join_paths(meson.current_source_dir(), '..', 'res') + classification_sources = [ 'main.cpp', 'bitmap_helpers.cpp' ] -executable('nntrainer_classification', +e = executable('nntrainer_classification', classification_sources, dependencies: [iniparser_dep, nntrainer_dep, tflite_dep], include_directories: include_directories('.'), @@ -11,14 +14,32 @@ executable('nntrainer_classification', install_dir: application_install_dir ) +ini_in_path = join_paths(res_path, 'Classification.ini') +ini_out_path = join_paths(build_root, 'classification.ini') + +# change epoch to 5 +run_command('cp', ini_in_path, ini_out_path) +run_command(['sed', '-i', 's/Epoch\ \=\ 30000/Epoch\ \=\ 1/', ini_out_path]) + +test('app_classification', e, args: [ini_out_path, build_root + '/']) + classification_func_sources = [ 'main_func.cpp' ] -executable('nntrainer_classification_func', +e = executable('nntrainer_classification_func', classification_func_sources, dependencies: [iniparser_dep, nntrainer_dep], include_directories: include_directories('.'), install: get_option('install-app'), install_dir: application_install_dir ) + +ini_in_path = join_paths(res_path, 'Classification_func.ini') +ini_out_path = join_paths(build_root, 'classification_func.ini') + +# change epoch to 5 +run_command('cp', ini_in_path, ini_out_path) +run_command(['sed', '-i', 's/Epoch\ \=\ 30000/Epoch\ \=\ 1/', ini_out_path]) + +test('app_classification_func', e, args: [ini_out_path], timeout: 60) diff --git a/Applications/Classification/res/Classification_func.ini b/Applications/Classification/res/Classification_func.ini index db9fb42..b569653 100644 --- a/Applications/Classification/res/Classification_func.ini +++ b/Applications/Classification/res/Classification_func.ini @@ -18,14 +18,14 @@ epsilon = 1e-7 # epsilon for adam # Layer Section : Name [inputlayer] Type = input -HiddenSize = 62720 # Input Layer Dimension +Input_Shape = 32:1:1:62720 # Input Layer Dimension Bias_init_zero = true # Zero Bias Normalization = true Activation = sigmoid # activation : sigmoid, tanh [outputlayer] Type = fully_connected -HiddenSize = 10 # Output Layer Dimension ( = Weight Width ) +unit = 10 # Output Layer Dimension ( = Weight Width ) Bias_init_zero = true Activation = softmax # activation : sigmoid, softmax Weight_Decay = l2norm diff --git a/Applications/KNN/jni/meson.build b/Applications/KNN/jni/meson.build index f661ccb..67f95c7 100644 --- a/Applications/KNN/jni/meson.build +++ b/Applications/KNN/jni/meson.build @@ -1,3 +1,5 @@ +res_path = join_paths(meson.current_source_dir(), '..', 'res') + knn_sources = [ 'main.cpp', 'bitmap_helpers.cpp' @@ -5,9 +7,11 @@ knn_sources = [ knn_inc = include_directories('.') -executable('nntrainer_knn', +e = executable('nntrainer_knn', knn_sources, dependencies: [iniparser_dep, nntrainer_dep, tflite_dep], install: get_option('install-app'), install_dir: application_install_dir ) + +test('app_knn', e, args: [res_path + '/']) diff --git a/Applications/LogisticRegression/jni/meson.build b/Applications/LogisticRegression/jni/meson.build index c788590..52b189c 100644 --- a/Applications/LogisticRegression/jni/meson.build +++ b/Applications/LogisticRegression/jni/meson.build @@ -1,6 +1,9 @@ -executable('nntrainer_logistic', +res_path = join_paths(meson.current_source_dir(), '..', 'res') +e = executable('nntrainer_logistic', 'main.cpp', dependencies: [iniparser_dep, nntrainer_dep], install: get_option('install-app'), install_dir: application_install_dir ) + +test('app_logistic', e, args: [join_paths(res_path, 'LogisticRegression.ini'), join_paths(res_path, 'dataset1.txt')]) diff --git a/Applications/ReinforcementLearning/DeepQ/jni/main.cpp b/Applications/ReinforcementLearning/DeepQ/jni/main.cpp index 808da4e..67c8e16 100644 --- a/Applications/ReinforcementLearning/DeepQ/jni/main.cpp +++ b/Applications/ReinforcementLearning/DeepQ/jni/main.cpp @@ -86,7 +86,7 @@ /** * @brief Maximum episodes to run */ -#define MAX_EPISODES 50000 +#define MAX_EPISODES 300 /** * @brief boolean to reder (only works for openAI/Gym) diff --git a/Applications/ReinforcementLearning/DeepQ/jni/meson.build b/Applications/ReinforcementLearning/DeepQ/jni/meson.build index e035d5d..c15ab8b 100644 --- a/Applications/ReinforcementLearning/DeepQ/jni/meson.build +++ b/Applications/ReinforcementLearning/DeepQ/jni/meson.build @@ -1,3 +1,4 @@ +res_path = meson.current_source_dir() env_dir='../../Environment' deepq_sources = [ @@ -23,10 +24,12 @@ if get_option('use_gym') deepq_deps += dependency('boost') endif -executable('nntrainer_deepq', +e = executable('nntrainer_deepq', deepq_sources, dependencies: deepq_deps, include_directories: include_directories(env_dir), install: get_option('install-app'), install_dir: application_install_dir ) + +test('app_DeepQ', e, args: [join_paths(res_path, 'DeepQ.ini')], timeout: 60) diff --git a/Applications/Tizen_CAPI/meson.build b/Applications/Tizen_CAPI/meson.build index 763c400..818ee16 100644 --- a/Applications/Tizen_CAPI/meson.build +++ b/Applications/Tizen_CAPI/meson.build @@ -1,14 +1,18 @@ -tizen_capi_file_sources = [ - 'main.c' -] +ini_in = join_paths(meson.current_source_dir(), 'Tizen_CAPI_config.ini') +ini_out = join_paths(meson.build_root(), 'Tizen_CAPI_config.ini') -executable('nntrainer_tizen_capi_file', - tizen_capi_file_sources, + +e = executable('nntrainer_tizen_capi_file', + 'main.c', dependencies: [iniparser_dep, nntrainer_dep, nntrainer_capi_dep], install: get_option('install-app'), install_dir: application_install_dir ) +run_command('cp', ini_in, ini_out) +test('app_classification_capi_ini', e, timeout: 60) + + executable('nntrainer_classification_capi_file', 'capi_file.c', dependencies: [nntrainer_capi_dep, nntrainer_dep], @@ -16,11 +20,14 @@ executable('nntrainer_classification_capi_file', install: get_option('install-app'), install_dir: application_install_dir ) +test('app_classification_capi_file', e, timeout: 60) -executable('nntrainer_classification_capi_func', +e = executable('nntrainer_classification_capi_func', 'capi_func.c', dependencies: [nntrainer_capi_dep, nntrainer_dep], include_directories: include_directories('.'), install: get_option('install-app'), install_dir: application_install_dir ) + +test('app_classification_capi_func', e, timeout: 60) diff --git a/Applications/Training/jni/meson.build b/Applications/Training/jni/meson.build index 2f56016..8b080ac 100644 --- a/Applications/Training/jni/meson.build +++ b/Applications/Training/jni/meson.build @@ -1,12 +1,17 @@ +build_root = meson.build_root() +res_path = join_paths(meson.current_source_dir(), '..', 'res') + training_sources = [ 'main.cpp', 'bitmap_helpers.cpp' ] -executable('nntrainer_training', +e = executable('nntrainer_training', training_sources, dependencies: [iniparser_dep, nntrainer_dep, tflite_dep], include_directories: include_directories('.'), install: get_option('install-app'), install_dir: application_install_dir ) + +test('app_training', e, args: [join_paths(res_path, 'Training.ini'), res_path + '/'], timeout: 60) diff --git a/Applications/mnist/jni/meson.build b/Applications/mnist/jni/meson.build index 8edc232..28f37c5 100644 --- a/Applications/mnist/jni/meson.build +++ b/Applications/mnist/jni/meson.build @@ -9,3 +9,5 @@ executable('nntrainer_mnist', install: get_option('install-app'), install_dir: application_install_dir ) + +## @todo Add test after #376