1 // SPDX-License-Identifier: Apache-2.0
3 * Copyright (C) 2020 Jihoon Lee <jhoon.it.lee@samsung.com>
5 * @file layer_plugin_test.cpp
6 * @date 26 January 2021
7 * @brief This file contains the execution part of LayerPlugin example
8 * @see https://github.com/nnstreamer/nntrainer
9 * @author Jihoon Lee <jhoon.it.lee@samsung.com>
10 * @bug No known bugs except for NYI items
13 #include <gtest/gtest.h>
20 #include <app_context.h>
22 #include <layer_internal.h>
24 const char *NNTRAINER_PATH = std::getenv("NNTRAINER_PATH");
26 TEST(AppContext, DlRegisterOpen_p) {
27 ASSERT_NE(NNTRAINER_PATH, nullptr)
28 << "NNTRAINER_PATH environment value must be set";
29 auto ac = nntrainer::AppContext();
31 ac.registerLayerV1("libpow_layer.so", NNTRAINER_PATH);
33 auto layer = ac.createObject<nntrainer::LayerV1>("pow");
35 EXPECT_EQ(layer->getType(), "pow");
38 TEST(AppContext, DlRegisterWrongPath_n) {
39 ASSERT_NE(NNTRAINER_PATH, nullptr)
40 << "NNTRAINER_PATH environment value must be set";
41 auto ac = nntrainer::AppContext();
43 EXPECT_THROW(ac.registerLayerV1("wrong_name.so"), std::invalid_argument);
46 TEST(AppContext, DlRegisterDirectory_p) {
47 ASSERT_NE(NNTRAINER_PATH, nullptr)
48 << "NNTRAINER_PATH environment value must be set";
49 auto ac = nntrainer::AppContext();
51 ac.registerPluggableFromDirectory(NNTRAINER_PATH);
53 auto layer = ac.createObject<nntrainer::LayerV1>("pow");
55 EXPECT_EQ(layer->getType(), "pow");
58 TEST(AppContext, DlRegisterDirectory_n) {
59 auto ac = nntrainer::AppContext();
61 EXPECT_THROW(ac.registerPluggableFromDirectory("wrong path"),
62 std::invalid_argument);
65 TEST(AppContext, DefaultEnvironmentPath_p) {
66 /// as NNTRAINER_PATH is fed to the test, this should success without an
68 std::shared_ptr<ml::train::Layer> l = ml::train::createLayer("pow");
69 EXPECT_EQ(l->getType(), "pow");
71 auto layer = nntrainer::getLayerV1Devel(l);
73 std::ifstream input_file("does_not_exist");
74 EXPECT_NO_THROW(layer->read(input_file));
75 if (remove("does_not_exist")) {
76 std::cerr << "failed to remove file\n";
79 std::ofstream output_file("does_not_exist");
80 EXPECT_NO_THROW(layer->save(output_file));
81 if (remove("does_not_exist")) {
82 std::cerr << "failed to remove file\n";
85 EXPECT_NO_THROW(layer->getType());
86 EXPECT_NE(layer->setProperty({"invalid_values"}), ML_ERROR_NONE);
87 EXPECT_EQ(layer->checkValidation(), ML_ERROR_NONE);
88 EXPECT_EQ(layer->getOutputDimension()[0], nntrainer::TensorDim());
89 EXPECT_EQ(layer->getInputDimension()[0], nntrainer::TensorDim());
92 TEST(AppContext, DefaultEnvironmentPath_n) {
93 /// pow2 does not exist
94 EXPECT_THROW(ml::train::createLayer("pow2"), std::invalid_argument);