[test] Add haltests package
authorYongjoo Ahn <yongjoo1.ahn@samsung.com>
Fri, 7 Mar 2025 05:48:37 +0000 (14:48 +0900)
committerjaeyun-jung <39614140+jaeyun-jung@users.noreply.github.com>
Mon, 10 Mar 2025 07:11:17 +0000 (16:11 +0900)
- Add test binary `ml-haltests` in package hal-api-ml-haltests.
- Add some unit tests.

Signed-off-by: Yongjoo Ahn <yongjoo1.ahn@samsung.com>
CMakeLists.txt
packaging/hal-api-ml.spec
tests/ml-haltests.cc [new file with mode: 0644]

index 5ca0921f51e41e6df7e0a69cbf3377922f47487c..0a469af962aff1139e47366f875909301b63d704 100644 (file)
@@ -1,6 +1,8 @@
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 PROJECT(hal-api-ml)
 
+option(ENABLE_HALTESTS "Enable HAL tests" ON)
+
 SET(PREFIX ${CMAKE_INSTALL_PREFIX})
 SET(EXEC_PREFIX "${CMAKE_INSTALL_PREFIX}/bin")
 SET(INCLUDEDIR "${CMAKE_INSTALL_PREFIX}/include")
@@ -51,3 +53,22 @@ INSTALL(DIRECTORY include/ DESTINATION include/hal
                PATTERN "include/*.hh")
 
 INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc DESTINATION ${LIBDIR}/pkgconfig)
+
+IF(ENABLE_HALTESTS)
+SET(HALTESTS_SRCS
+       tests/ml-haltests.cc
+)
+
+pkg_check_modules(ml_hal_tests_dep_pkgs REQUIRED
+       gtest
+)
+
+ADD_EXECUTABLE(ml-haltests ${HALTESTS_SRCS})
+TARGET_LINK_LIBRARIES(ml-haltests
+       ${PROJECT_NAME}
+       ${pkgs_LDFLAGS}
+       ${ml_hal_tests_dep_pkgs_LDFLAGS}
+)
+
+INSTALL(TARGETS ml-haltests DESTINATION /usr/bin/hal)
+ENDIF()
index 6db1be4711ab815fc0468494821e9e935c05a336..61ba539fc8630850660ba3c619cef810f1a5c9c3 100644 (file)
@@ -2,7 +2,7 @@ Name:       hal-api-ml
 Summary:    hal-api-ml interface
 Version:    0.0.1
 Release:    0
-Group:      Development/Libraries
+Group:      Machine Learning/ML Framework
 License:    Apache-2.0
 Source0:    hal-api-ml-%{version}.tar.gz
 Source1:    hal-api-ml.manifest
@@ -13,6 +13,7 @@ BuildRequires: cmake
 BuildRequires: pkgconfig(dlog)
 BuildRequires: pkgconfig(glib-2.0)
 BuildRequires: pkgconfig(hal-api-common)
+BuildRequires: pkgconfig(gtest)
 
 %description
 hal-api-ml interface
@@ -21,25 +22,33 @@ hal-api-ml interface
 ### devel package #########
 %package    devel
 Summary:    hal-api-ml interface
-Group:      Development/Libraries
+Group:      Machine Learning/ML Framework
 Requires:   hal-api-ml = %{version}-%{release}
 
 %description devel
 hal-api-ml interface development package
 
+### hal test package #########
+%package    haltests
+Summary:    hal-api-ml tests
+Requires:   hal-api-ml = %{version}-%{release}
+
+%description haltests
+hal-api-ml tests package
+
 
 ### build and install #########
 %prep
 %setup -q
 
-%cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DCMAKE_LIBDIR_PREFIX=%{_libdir}
+%cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DCMAKE_LIBDIR_PREFIX=%{_libdir} -DENABLE_HALTESTS=ON
 
 %build
 cp %{SOURCE1} .
 make %{?jobs:-j%jobs}
 
 %check
-# (cd tests/unittest && LD_LIBRARY_PATH=../../ ctest -V)
+LD_LIBRARY_PATH=./ ./ml-haltests
 
 %install
 rm -rf %{buildroot}
@@ -69,3 +78,8 @@ rm -rf %{buildroot}
 %defattr(-,root,root,-)
 %{_includedir}/hal/*.*
 %{_libdir}/pkgconfig/*.pc
+
+%files haltests
+%defattr(-,root,root,-)
+%manifest hal-api-ml.manifest
+%{_bindir}/hal/ml-haltests
diff --git a/tests/ml-haltests.cc b/tests/ml-haltests.cc
new file mode 100644 (file)
index 0000000..e10fec2
--- /dev/null
@@ -0,0 +1,82 @@
+#include <gtest/gtest.h>
+#include <hal-ml.h>
+
+
+TEST(HAL_ML_PARAM, usecase)
+{
+  hal_ml_param_h param;
+
+  EXPECT_EQ (hal_ml_param_create (&param), HAL_ML_ERROR_NONE);
+
+  EXPECT_EQ (hal_ml_param_set (param, "some key", (void *) "some value"), HAL_ML_ERROR_NONE);
+
+  EXPECT_EQ (hal_ml_param_destroy (param), HAL_ML_ERROR_NONE);
+}
+
+TEST (HAL_ML_PARAM, create_n)
+{
+  EXPECT_EQ (hal_ml_param_create (nullptr), HAL_ML_ERROR_INVALID_PARAMETER);
+}
+
+TEST (HAL_ML_PARAM, destroy_n)
+{
+  EXPECT_EQ (hal_ml_param_destroy (nullptr), HAL_ML_ERROR_INVALID_PARAMETER);
+}
+
+TEST (HAL_ML_PARAM, set_n)
+{
+  EXPECT_EQ (hal_ml_param_set (nullptr, "key", (void *) "value"), HAL_ML_ERROR_INVALID_PARAMETER);
+
+  hal_ml_param_h param;
+  EXPECT_EQ (hal_ml_param_create (&param), HAL_ML_ERROR_NONE);
+
+  EXPECT_EQ (hal_ml_param_set (param, nullptr, (void *) "value"), HAL_ML_ERROR_INVALID_PARAMETER);
+  EXPECT_EQ (hal_ml_param_set (param, "key", nullptr), HAL_ML_ERROR_INVALID_PARAMETER);
+
+  EXPECT_EQ (hal_ml_param_destroy (param), HAL_ML_ERROR_NONE);
+}
+
+TEST (HAL_ML, create_n)
+{
+  EXPECT_EQ (hal_ml_create (nullptr, nullptr), HAL_ML_ERROR_INVALID_PARAMETER);
+  EXPECT_EQ (hal_ml_create ("there_is_no_available_backend", nullptr), HAL_ML_ERROR_INVALID_PARAMETER);
+
+  hal_ml_h ml;
+  EXPECT_EQ (hal_ml_create (nullptr, &ml), HAL_ML_ERROR_INVALID_PARAMETER);
+  EXPECT_EQ (hal_ml_create ("there_is_no_available_backend", &ml), HAL_ML_ERROR_INVALID_PARAMETER);
+}
+
+TEST (HAL_ML, destroy_n)
+{
+  EXPECT_EQ (hal_ml_destroy (nullptr), HAL_ML_ERROR_INVALID_PARAMETER);
+}
+
+TEST (HAL_ML, request_n)
+{
+  EXPECT_EQ (hal_ml_request (nullptr, "some_request", nullptr), HAL_ML_ERROR_INVALID_PARAMETER);
+
+  hal_ml_param_h param;
+  EXPECT_EQ (hal_ml_param_create (&param), HAL_ML_ERROR_NONE);
+  EXPECT_EQ (hal_ml_request (nullptr, "some_request", param), HAL_ML_ERROR_INVALID_PARAMETER);
+  EXPECT_EQ (hal_ml_param_destroy (param), HAL_ML_ERROR_NONE);
+}
+
+int main (int argc, char *argv[])
+{
+  int ret = -1;
+
+  try {
+    testing::InitGoogleTest (&argc, argv);
+  } catch(...) {
+    std::cout << "Exception occurred." << std::endl;
+  }
+
+  try {
+    ret = RUN_ALL_TESTS ();
+  } catch (const ::testing::internal::GoogleTestFailureException& e) {
+    ret = -1;
+    std::cout << "GoogleTestFailureException was thrown:" << e.what () << std::endl;
+  }
+
+  return ret;
+}