From dcab8863946f902b41b07a1bfc4b0f835c3d1bb5 Mon Sep 17 00:00:00 2001 From: Divya Shikre Date: Tue, 31 May 2022 16:17:42 -0400 Subject: [PATCH 01/85] Print log when PIDs dont use any GPU device. showpidgpus prints 'none' when no GPU devices are being used by the running process. Adding a fix to print a relevant message. Signed-off-by: Divya Shikre Change-Id: I165a6644a76c8e1c3c3cad676dcfd41eb1c4724f --- python_smi_tools/rocm_smi.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index 2224edd8ec..04dc643019 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -1613,7 +1613,10 @@ def showGpusByPid(pidList): if rsmi_ret_ok(ret): metricName = 'PID %s is using %s DRM device(s)' % (pid, str(num_devices.value)) - printListLog(metricName, list(dv_indices)) + if (num_devices.value): + printListLog(metricName, list(dv_indices)) + else: + printLog(None, metricName, None) else: print(None, 'Unable to get list of KFD PIDs. A kernel update may be needed', None) printLogSpacer() From 42f11bdd63368d26fa4910a5804073fd7c71a608 Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Thu, 9 Jun 2022 08:59:22 -0400 Subject: [PATCH 02/85] Remove python pyc file when uninstall rpm Remove python pyc file when uninstall rpm. Change-Id: I6520b51aac34060b5b90f94a016cec1827a4973f --- RPM/postun.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/RPM/postun.in b/RPM/postun.in index d54cd9b2ea..bb93d0fb73 100755 --- a/RPM/postun.in +++ b/RPM/postun.in @@ -4,3 +4,6 @@ if [ $1 -le 1 ] && [ "@ENABLE_LDCONFIG@" == "ON" ]; then rm -f /etc/ld.so.conf.d/x86_64-librocm_smi_lib.conf ldconfig fi + +# remove pyc file generated by python +rm -rf @CPACK_PACKAGING_INSTALL_PREFIX@/libexec/rocm_smi/__pycache__ From 2b8d0ad70ff698853e3974a15a3a99b527a3b732 Mon Sep 17 00:00:00 2001 From: Ori Messinger Date: Tue, 31 May 2022 06:13:56 -0400 Subject: [PATCH 03/85] ROCm SMI CLI: Fix setClockRange Error This patch changes the error handling for setClockRange. When a device does not support modifying a clock type (sclk/mclk), an error message is printed through the python CLI. Signed-off-by: Ori Messinger Change-Id: I37d9ea4189b1ca81e5deaab5efa6cfa4901b89b3 --- python_smi_tools/rocm_smi.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index 04dc643019..309bec4ecc 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -772,11 +772,13 @@ def setClockRange(deviceList, clkType, minvalue, maxvalue, autoRespond): printLogSpacer(' Set Valid %s Range ' % (clkType)) for device in deviceList: ret = rocmsmi.rsmi_dev_clk_range_set(device, int(minvalue), int(maxvalue), rsmi_clk_names_dict[clkType]) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, silent=True): printLog(device, 'Successfully set %s from %s(MHz) to %s(MHz)' % (clkType, minvalue, maxvalue), None) else: printErrLog(device, 'Unable to set %s from %s(MHz) to %s(MHz)' % (clkType, minvalue, maxvalue)) RETCODE = 1 + if ret == rsmi_status_t.RSMI_STATUS_NOT_SUPPORTED: + printLog(device, 'Setting %s range is not supported for this device.' % (clkType), None) def setVoltageCurve(deviceList, point, clk, volt, autoRespond): From b72c464ac098a0124f69e21d4d1aadf7ed0cbb42 Mon Sep 17 00:00:00 2001 From: Ranjith Ramakrishnan Date: Fri, 3 Jun 2022 12:03:27 -0700 Subject: [PATCH 04/85] SWDEV-321112 - Use GNUInstallDirs Use GNUInstallDirs variables to determine the location of LIBDIR, BINDIR, INCLUDEDIR, DOCDIR Note that CMAKE_INSTALL_LIBDIR is overriden, since the default for RHEL is lib64, but ROCm packaging wants it to be lib always. Distros or users can easily override this. Change-Id: I616152ccd2bc1f5a60bffa940312b38ca6e88c04 --- CMakeLists.txt | 21 +++++++++++---------- DEBIAN/postinst.in | 2 +- DEBIAN/prerm.in | 2 +- RPM/post.in | 2 +- RPM/postun.in | 2 +- oam/CMakeLists.txt | 6 +++--- rocm_smi-backward-compat.cmake | 8 ++++---- rocm_smi/CMakeLists.txt | 22 +++++++++++----------- 8 files changed, 33 insertions(+), 32 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 561a035b35..c9ed159b6b 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,6 +53,9 @@ set(ROCM_SMI_PACKAGE rocm-smi-lib) project(${AMD_SMI_LIBS_TARGET}) set(COMMON_PROJ_ROOT ${PROJECT_SOURCE_DIR}) +# Set default libdir to be "lib" for ROCm, distros/users can override this +set(CMAKE_INSTALL_LIBDIR "lib" CACHE STRING "Library install directory") +include(GNUInstallDirs) ## Verbose output. set(CMAKE_VERBOSE_MAKEFILE on) @@ -149,19 +152,17 @@ option(FILE_REORG_BACKWARD_COMPATIBILITY "Enable File Reorg with backward compat if(FILE_REORG_BACKWARD_COMPATIBILITY) include(rocm_smi-backward-compat.cmake) endif() -#TODO: Should use GNUInstallDirs to match distro standards -#This need fix in subdirectory CMakefile as well -#include(GNUInstallDirs) -set(LIB_INSTALL_DIR "lib") -set(INCLUDE_INSTALL_DIR "include") -set(BIN_INSTALL_DIR "bin") + +set(LIB_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}") +set(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}") +set(BIN_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") include(CMakePackageConfigHelpers) configure_package_config_file( rocm_smi-config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/rocm_smi-config.cmake - INSTALL_DESTINATION ${LIB_INSTALL_DIR}/cmake/rocm_smi + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/rocm_smi PATH_VARS LIB_INSTALL_DIR INCLUDE_INSTALL_DIR BIN_INSTALL_DIR ) @@ -175,7 +176,7 @@ install( FILES ${CMAKE_CURRENT_BINARY_DIR}/rocm_smi-config.cmake ${CMAKE_CURRENT_BINARY_DIR}/rocm_smi-config-version.cmake DESTINATION - lib/cmake/${ROCM_SMI} + ${CMAKE_INSTALL_LIBDIR}/cmake/${ROCM_SMI} COMPONENT dev ) @@ -190,11 +191,11 @@ export(PACKAGE rocm_smi) # Create the rocm_smiConfig.cmake and rocm_smiConfigVersion files # ... for the build tree install(EXPORT rocm_smiTargets DESTINATION - "lib/cmake/${ROCM_SMI}" COMPONENT dev) + "${CMAKE_INSTALL_LIBDIR}/cmake/${ROCM_SMI}" COMPONENT dev) #License file set(CPACK_RPM_PACKAGE_LICENSE "NCSA") -install( FILES ${CPACK_RESOURCE_FILE_LICENSE} DESTINATION share/doc/${ROCM_SMI} RENAME LICENSE.txt) +install( FILES ${CPACK_RESOURCE_FILE_LICENSE} DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/${ROCM_SMI} RENAME LICENSE.txt) ########################### # Packaging directives diff --git a/DEBIAN/postinst.in b/DEBIAN/postinst.in index 5fda052286..d916aa7b85 100755 --- a/DEBIAN/postinst.in +++ b/DEBIAN/postinst.in @@ -5,7 +5,7 @@ set -e do_ldconfig() { # left-hand term originates from ENABLE_LDCONFIG = ON/OFF at package build if [ "@ENABLE_LDCONFIG@" == "ON" ]; then - echo @CPACK_PACKAGING_INSTALL_PREFIX@/lib > /etc/ld.so.conf.d/x86_64-librocm_smi_lib.conf + echo @CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@ > /etc/ld.so.conf.d/x86_64-librocm_smi_lib.conf ldconfig fi } diff --git a/DEBIAN/prerm.in b/DEBIAN/prerm.in index 65ec3de3ad..bc9cc2ef33 100755 --- a/DEBIAN/prerm.in +++ b/DEBIAN/prerm.in @@ -12,7 +12,7 @@ rm_ldconfig() { rm_pyc() { # remove pyc file generated by python - rm -rf @CPACK_PACKAGING_INSTALL_PREFIX@/libexec/rocm_smi/__pycache__ + rm -rf @CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBEXECDIR@/rocm_smi/__pycache__ } case "$1" in diff --git a/RPM/post.in b/RPM/post.in index df1074537a..a7f518b81d 100755 --- a/RPM/post.in +++ b/RPM/post.in @@ -1,5 +1,5 @@ # left-hand term originates from ENABLE_LDCONFIG = ON/OFF at package build if [ "@ENABLE_LDCONFIG@" == "ON" ]; then - echo -e "@CPACK_PACKAGING_INSTALL_PREFIX@/lib\n@CPACK_PACKAGING_INSTALL_PREFIX@/lib64" > /etc/ld.so.conf.d/x86_64-librocm_smi_lib.conf + echo -e "@CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@" > /etc/ld.so.conf.d/x86_64-librocm_smi_lib.conf ldconfig fi diff --git a/RPM/postun.in b/RPM/postun.in index bb93d0fb73..72f4c565e2 100755 --- a/RPM/postun.in +++ b/RPM/postun.in @@ -6,4 +6,4 @@ if [ $1 -le 1 ] && [ "@ENABLE_LDCONFIG@" == "ON" ]; then fi # remove pyc file generated by python -rm -rf @CPACK_PACKAGING_INSTALL_PREFIX@/libexec/rocm_smi/__pycache__ +rm -rf @CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBEXECDIR@/rocm_smi/__pycache__ diff --git a/oam/CMakeLists.txt b/oam/CMakeLists.txt index 8cbf9dd918..7e96c85a49 100644 --- a/oam/CMakeLists.txt +++ b/oam/CMakeLists.txt @@ -101,12 +101,12 @@ target_include_directories(${OAM_TARGET} ## Add the install directives for the runtime library. install(TARGETS ${OAM_TARGET} EXPORT rocm_smiTargets - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${OAM_COMPONENT}) install(FILES ${COMMON_SRC_ROOT}/oam/include/oam/oam_mapi.h ${COMMON_SRC_ROOT}/oam/include/oam/amd_oam.h - DESTINATION include/oam) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/oam) # Generate Doxygen documentation if (DOXYGEN_FOUND) diff --git a/rocm_smi-backward-compat.cmake b/rocm_smi-backward-compat.cmake index 8d31ebf087..aa8fd9c49e 100644 --- a/rocm_smi-backward-compat.cmake +++ b/rocm_smi-backward-compat.cmake @@ -72,7 +72,7 @@ function(generate_wrapper_header) set(include_guard "${include_guard}COMGR_WRAPPER_INCLUDE_${INC_GAURD_NAME}_H") #set #include statement get_filename_component(file_name ${header_file} NAME) - set(include_statements "${include_statements}#include \"../../../include/${ROCM_SMI}/${file_name}\"\n") + set(include_statements "${include_statements}#include \"../../../${CMAKE_INSTALL_INCLUDEDIR}/${ROCM_SMI}/${file_name}\"\n") configure_file(${RSMI_WRAPPER_DIR}/header.hpp.in ${RSMI_WRAPPER_INC_DIR}/${file_name}) unset(include_guard) unset(include_statements) @@ -90,7 +90,7 @@ function(generate_wrapper_header) set(include_guard "${include_guard}COMGR_WRAPPER_INCLUDE_${INC_GAURD_NAME}_H") #set #include statement get_filename_component(file_name ${header_file} NAME) - set(include_statements "${include_statements}#include \"../../../include/${OAM_TARGET_NAME}/${file_name}\"\n") + set(include_statements "${include_statements}#include \"../../../${CMAKE_INSTALL_INCLUDEDIR}/${OAM_TARGET_NAME}/${file_name}\"\n") configure_file(${RSMI_WRAPPER_DIR}/header.hpp.in ${OAM_WRAPPER_INC_DIR}/${file_name}) unset(include_guard) unset(include_statements) @@ -127,7 +127,7 @@ function(create_library_symlink) add_custom_target(link_${file_name} ALL WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E create_symlink - ../../lib/${file_name} ${RSMI_WRAPPER_LIB_DIR}/${file_name}) + ../../${CMAKE_INSTALL_LIBDIR}/${file_name} ${RSMI_WRAPPER_LIB_DIR}/${file_name}) endforeach() file(MAKE_DIRECTORY ${OAM_WRAPPER_LIB_DIR}) @@ -155,7 +155,7 @@ function(create_library_symlink) add_custom_target(link_${file_name} ALL WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E create_symlink - ../../lib/${file_name} ${OAM_WRAPPER_LIB_DIR}/${file_name}) + ../../${CMAKE_INSTALL_LIBDIR}/${file_name} ${OAM_WRAPPER_LIB_DIR}/${file_name}) endforeach() endfunction() diff --git a/rocm_smi/CMakeLists.txt b/rocm_smi/CMakeLists.txt index 862199d3e3..c594eeb8af 100755 --- a/rocm_smi/CMakeLists.txt +++ b/rocm_smi/CMakeLists.txt @@ -108,29 +108,29 @@ file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) add_custom_target(link-rocm-smi ALL WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E create_symlink - ../libexec/${ROCM_SMI}/rocm_smi.py ${CMAKE_CURRENT_BINARY_DIR}/bin/rocm-smi) + ../${CMAKE_INSTALL_LIBEXECDIR}/${ROCM_SMI}/rocm_smi.py ${CMAKE_CURRENT_BINARY_DIR}/bin/rocm-smi) ## Add the install directives for the runtime library. install(TARGETS ${ROCM_SMI_TARGET} EXPORT rocm_smiTargets - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${ROCM_SMI_COMPONENT}) install(FILES ${COMMON_SRC_ROOT}/include/rocm_smi/rocm_smi.h - DESTINATION include/rocm_smi) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocm_smi) install(FILES ${COMMON_SRC_ROOT}/include/rocm_smi/${ROCM_SMI_TARGET}Config.h - DESTINATION include/rocm_smi) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocm_smi) install(FILES ${COMMON_SRC_ROOT}/include/rocm_smi/kfd_ioctl.h - DESTINATION include/rocm_smi) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocm_smi) install(FILES ${COMMON_SRC_ROOT}/python_smi_tools/rsmiBindings.py - DESTINATION libexec/${ROCM_SMI}) + DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${ROCM_SMI}) install(FILES ${COMMON_SRC_ROOT}/python_smi_tools/rocm_smi.py PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_EXECUTE - DESTINATION libexec/${ROCM_SMI}) + DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${ROCM_SMI}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/bin/rocm-smi - DESTINATION bin) + DESTINATION ${CMAKE_INSTALL_BINDIR}) # Generate Doxygen documentation find_package(Doxygen) @@ -157,9 +157,9 @@ if (DOXYGEN_FOUND AND LATEX_FOUND) add_dependencies(${ROCM_SMI_TARGET} docs) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf - DESTINATION share/doc/${ROCM_SMI} RENAME ${RSMI_MANUAL_NAME}.pdf) + DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/${ROCM_SMI} RENAME ${RSMI_MANUAL_NAME}.pdf) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../README.md - DESTINATION share/doc/${ROCM_SMI}/) + DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/${ROCM_SMI}/) else() message("Doxygen or Latex is not found. Will not generate documents.") endif(DOXYGEN_FOUND AND LATEX_FOUND) From 4dd2398f3db26b900d3b605495afac7540a1b3ac Mon Sep 17 00:00:00 2001 From: Elena Sakhnovitch Date: Thu, 19 May 2022 16:58:48 -0400 Subject: [PATCH 05/85] [rocm_smi.py] error feedback improvement Cleaning overally verbose error reporting system. Signed-off-by: Elena Sakhnovitch Signed-off-by: Sreekant Somasekharan Change-Id: Icc96086810b8dcfc426848b8c349a2572026c3bd --- python_smi_tools/rocm_smi.py | 19 +++++++------------ python_smi_tools/rsmiBindings.py | 21 +++++++++++++++++++++ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index 309bec4ecc..a1eb198e09 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -509,7 +509,6 @@ def printLog(device, metricName, value): logstr = 'GPU[%s]\t\t: %s' % (device, metricName) if device is None: logstr = logstr[13:] - logging.debug(logstr) # Force thread safe printing print(logstr + '\n', end='') @@ -2026,7 +2025,7 @@ def showProfile(deviceList): status = rsmi_power_profile_status_t() for device in deviceList: ret = rocmsmi.rsmi_dev_power_profile_presets_get(device, 0, byref(status)) - if rsmi_ret_ok(ret, device, 'profiles'): + if rsmi_ret_ok(ret, device, 'profiles', silent=False): binaryMaskString = str(format(status.available_profiles, '07b'))[::-1] bitMaskPosition = 0 profileNumber = 0 @@ -2058,7 +2057,7 @@ def showRange(deviceList, rangeType): odvf = rsmi_od_volt_freq_data_t() for device in deviceList: ret = rocmsmi.rsmi_dev_od_volt_info_get(device, byref(odvf)) - if rsmi_ret_ok(ret, device, 'od volt'): + if rsmi_ret_ok(ret, device, 'od volt', silent=False): if rangeType == 'sclk': printLog(device, 'Valid sclk range: %sMhz - %sMhz' % ( int(odvf.curr_sclk_range.lower_bound / 1000000), int(odvf.curr_sclk_range.upper_bound / 1000000)), None) @@ -2080,8 +2079,6 @@ def showRange(deviceList, rangeType): None) else: printLog(device, 'Unable to display %s range' % (rangeType), None) - else: - printLog(device, 'Unable to display %s range' % (rangeType), None) printLogSpacer() @@ -2294,13 +2291,11 @@ def showVoltageCurve(deviceList): odvf = rsmi_od_volt_freq_data_t() for device in deviceList: ret = rocmsmi.rsmi_dev_od_volt_info_get(device, byref(odvf)) - if rsmi_ret_ok(ret, device, 'od volt'): + if rsmi_ret_ok(ret, device, 'od volt', silent=False): for position in range(3): printLog(device, 'Voltage point %d: %sMhz %smV' % ( position, int(list(odvf.curve.vc_points)[position].frequency / 1000000), int(list(odvf.curve.vc_points)[position].voltage)), None) - else: - printLog(device, 'Voltage Curve is not supported', None) printLogSpacer() @@ -2790,10 +2785,10 @@ def rsmi_ret_ok(my_ret, device=None, metric=None, silent=False): returnString += ' %s: ' % (metric) returnString += '%s\t' % (err_str.value.decode()) if not PRINT_JSON: - if silent: - logging.info('%s', returnString) - else: - logging.error('%s', returnString) + logging.debug('%s', returnString) + if not silent: + if my_ret in rsmi_status_verbose_err_out: + printLog(device, rsmi_status_verbose_err_out[my_ret], None) RETCODE = my_ret return False return True diff --git a/python_smi_tools/rsmiBindings.py b/python_smi_tools/rsmiBindings.py index 090b85c3d8..7da7c2bc8c 100644 --- a/python_smi_tools/rsmiBindings.py +++ b/python_smi_tools/rsmiBindings.py @@ -69,6 +69,27 @@ class rsmi_status_t(c_int): RSMI_STATUS_UNKNOWN_ERROR = 0xFFFFFFFF +#Dictionary of rsmi ret codes and it's verbose output +rsmi_status_verbose_err_out = { + rsmi_status_t.RSMI_STATUS_SUCCESS: 'Operation was successful', + rsmi_status_t.RSMI_STATUS_INVALID_ARGS: 'Invalid arguments provided', + rsmi_status_t.RSMI_STATUS_NOT_SUPPORTED: 'Not supported on the given system', + rsmi_status_t.RSMI_STATUS_FILE_ERROR: 'Problem accessing a file', + rsmi_status_t.RSMI_STATUS_PERMISSION: 'Permission denied', + rsmi_status_t.RSMI_STATUS_OUT_OF_RESOURCES: 'Unable to acquire memory or other resource', + rsmi_status_t.RSMI_STATUS_INTERNAL_EXCEPTION: 'An internal exception was caught', + rsmi_status_t.RSMI_STATUS_INPUT_OUT_OF_BOUNDS: 'Provided input is out of allowable or safe range', + rsmi_status_t.RSMI_INITIALIZATION_ERROR: 'Error occured during rsmi initialization', + rsmi_status_t.RSMI_STATUS_NOT_YET_IMPLEMENTED: 'Requested function is not implemented on this setup', + rsmi_status_t.RSMI_STATUS_NOT_FOUND: 'Item searched for but not found', + rsmi_status_t.RSMI_STATUS_INSUFFICIENT_SIZE: 'Insufficient resources available', + rsmi_status_t.RSMI_STATUS_INTERRUPT: 'Interrupt occured during execution', + rsmi_status_t.RSMI_STATUS_UNEXPECTED_SIZE: 'Unexpected amount of data read', + rsmi_status_t.RSMI_STATUS_NO_DATA: 'No data found for the given input', + rsmi_status_t.RSMI_STATUS_UNKNOWN_ERROR: 'Unknown error occured' +} + + class rsmi_init_flags_t(c_int): RSMI_INIT_FLAG_ALL_GPUS = 0x1 From 6b6e8403378ae84ba8ee5d7f17f64ed7663332b5 Mon Sep 17 00:00:00 2001 From: Kent Russell Date: Thu, 16 Jun 2022 10:58:00 -0400 Subject: [PATCH 06/85] rocm_smi.py: Handle corrupted serial number If the FRU has been corrupted, then the serial number will come in with any manner of random bytes, which will cause decode() to fail spectacularily. Check that the serial returned by the kernel is alphanumeric, and print to the error log if not (then continue to the next device). Change-Id: If4f35b140b6089e02729b1490ed6b48d614a122a --- python_smi_tools/rocm_smi.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index a1eb198e09..de014a77f3 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -2161,6 +2161,10 @@ def showSerialNumber(deviceList): for device in deviceList: sn = create_string_buffer(256) ret = rocmsmi.rsmi_dev_serial_number_get(device, sn, 256) + if not str(sn).isalnum(): + printErrLog(device, "FRU Serial Number contains non-alphanumeric characters. FRU is likely corrupted") + continue + if rsmi_ret_ok(ret, device) and sn.value.decode(): printLog(device, 'Serial Number', sn.value.decode()) else: From 0f88f59ddd0483f3f169f51c85109b53b74851eb Mon Sep 17 00:00:00 2001 From: Elena Sakhnovitch Date: Thu, 9 Jun 2022 19:52:38 -0400 Subject: [PATCH 07/85] [rocm_smi.py] Hiding unnecessary N/A lines Hiding not applicable/unsupported sensors under INFO Signed-off-by: Elena Sakhnovitch Change-Id: I89c80ca7c6365ef3a2dd751a575ddf90044c8a2e --- python_smi_tools/rocm_smi.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index de014a77f3..f86870aa96 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -462,6 +462,26 @@ def printErrLog(device, err): logging.debug(errstr) +def printInfoLog(device, metricName, value): + """ Print out an info line to the SMI log + + @param device: DRM device identifier + @param metricName: Title of the item to print to the log + @param value: The item's value to print to the log + """ + global PRINT_JSON + + if not PRINT_JSON: + if value is not None: + logstr = 'GPU[%s]\t: %s: %s' % (device, metricName, value) + else: + logstr = 'GPU[%s]\t: %s' % (device, metricName) + if device is None: + logstr = logstr[13:] + + logging.info(logstr) + + def printEventList(device, delay, eventList): """ Print out notification events for a specified device @@ -1539,7 +1559,11 @@ def showCurrentTemps(deviceList): printLogSpacer(' Temperature ') for device in deviceList: for sensor in temp_type_lst: - printLog(device, 'Temperature (Sensor %s) (C)' % (sensor), getTemp(device, sensor)) + temp = getTemp(device, sensor) + if temp != 'N/A': + printLog(device, 'Temperature (Sensor %s) (C)' % (sensor), temp) + else: + printInfoLog(device, 'Temperature (Sensor %s) (C)' % (sensor), temp) printLogSpacer() @@ -1675,7 +1699,7 @@ def showGpuUse(deviceList): for ut_counter in util_counters: printLog(device, utilization_counter_name[ut_counter.type], ut_counter.val) else: - printLog(device, 'GFX Activity', 'N/A') + printInfoLog(device, 'GFX Activity', 'N/A') printLogSpacer() From 1432e5e040c7b982e693fdb2ee20e908950ee495 Mon Sep 17 00:00:00 2001 From: Sreekant Somasekharan Date: Mon, 20 Jun 2022 13:37:11 -0400 Subject: [PATCH 08/85] Add rsmi lib function to get memory overdrive value Change-Id: I515b51d5ce4baf966bb31714886a0d72330026bc --- include/rocm_smi/rocm_smi.h | 28 ++++++++++++++++++++++++++-- include/rocm_smi/rocm_smi_device.h | 1 + python_smi_tools/rocm_smi.py | 16 ++++++---------- src/rocm_smi.cc | 27 +++++++++++++++++++++++++++ src/rocm_smi_device.cc | 5 +++++ 5 files changed, 65 insertions(+), 12 deletions(-) diff --git a/include/rocm_smi/rocm_smi.h b/include/rocm_smi/rocm_smi.h index b57e7dfd1d..93e26c1cc0 100755 --- a/include/rocm_smi/rocm_smi.h +++ b/include/rocm_smi/rocm_smi.h @@ -2251,7 +2251,6 @@ rsmi_status_t rsmi_perf_determinism_mode_set(uint32_t dv_ind, uint64_t clkvalue) * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid * */ - rsmi_status_t rsmi_dev_overdrive_level_get(uint32_t dv_ind, uint32_t *od); /** @@ -2269,7 +2268,7 @@ rsmi_status_t rsmi_dev_overdrive_level_get(uint32_t dv_ind, uint32_t *od); * * @param[inout] f a pointer to a caller provided ::rsmi_frequencies_t structure * to which the frequency information will be written. Frequency values are in - * Hz. + * Hz. * If this parameter is nullptr, this function will return * ::RSMI_STATUS_INVALID_ARGS if the function is supported with the provided, * arguments and ::RSMI_STATUS_NOT_SUPPORTED if it is not supported with the @@ -2284,6 +2283,31 @@ rsmi_status_t rsmi_dev_overdrive_level_get(uint32_t dv_ind, uint32_t *od); * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid * */ +rsmi_status_t rsmi_dev_mem_overdrive_level_get(uint32_t dv_ind, uint32_t *od); + +/** + * @brief Get the memory clock overdrive percent associated with the device + * with provided device index. + * + * @details Given a device index @p dv_ind and a pointer to a uint32_t @p od, + * this function will write the memory overdrive percentage to the uint32_t + * pointed to by @p od + * + * @param[in] dv_ind a device index + * + * @param[inout] od a pointer to uint32_t to which the overdrive percentage + * will be written + * If this parameter is nullptr, this function will return + * ::RSMI_STATUS_INVALID_ARGS if the function is supported with the provided, + * arguments and ::RSMI_STATUS_NOT_SUPPORTED if it is not supported with the + * provided arguments. + * + * @retval ::RSMI_STATUS_SUCCESS call was successful + * @retval ::RSMI_STATUS_NOT_SUPPORTED installed software or hardware does not + * support this function with the given arguments + * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid + * + */ rsmi_status_t rsmi_dev_gpu_clk_freq_get(uint32_t dv_ind, rsmi_clk_type_t clk_type, rsmi_frequencies_t *f); diff --git a/include/rocm_smi/rocm_smi_device.h b/include/rocm_smi/rocm_smi_device.h index a21a64a9ce..aef25c2804 100755 --- a/include/rocm_smi/rocm_smi_device.h +++ b/include/rocm_smi/rocm_smi_device.h @@ -98,6 +98,7 @@ enum DevKFDNodePropTypes { enum DevInfoTypes { kDevPerfLevel, kDevOverDriveLevel, + kDevMemOverDriveLevel, kDevDevID, kDevDevProdName, kDevDevProdNum, diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index f86870aa96..91c455783d 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -1825,20 +1825,16 @@ def showOverDrive(deviceList, odtype): ret = rocmsmi.rsmi_dev_overdrive_level_get(device, byref(rsmi_od)) od = rsmi_od.value if not rsmi_ret_ok(ret, device): - printErrLog(device, 'Unable to retrieve sclk OverDrive level') + continue elif odtype == 'mclk': odStr = 'GPU Memory' - filePath = os.path.join('/sys/class/drm', 'card%d' % (device), 'device', 'pp_mclk_od') - if filePath: - try: - with open(filePath, 'r') as fileContents: - od = fileContents.read().rstrip('\n') - except: - printErrLog(device, 'Unable to retrieve mclk OverDrive level') - return None + ret = rocmsmi.rsmi_dev_mem_overdrive_level_get(device, byref(rsmi_od)) + od = rsmi_od.value + if not rsmi_ret_ok(ret, device): + continue else: printErrLog(device, 'Unable to retrieve OverDrive') - logging.error('Unsupported clock type %s', clktype) + logging.error('Unsupported clock type %s', odtype) RETCODE = 1 printLog(device, odStr + ' OverDrive value (%)', od) printLogSpacer() diff --git a/src/rocm_smi.cc b/src/rocm_smi.cc index f6d1638b0e..6c71343f8b 100755 --- a/src/rocm_smi.cc +++ b/src/rocm_smi.cc @@ -863,6 +863,33 @@ rsmi_dev_overdrive_level_get(uint32_t dv_ind, uint32_t *od) { CATCH } +rsmi_status_t +rsmi_dev_mem_overdrive_level_get(uint32_t dv_ind, uint32_t *od) { + TRY + std::string val_str; + CHK_SUPPORT_NAME_ONLY(od) + DEVICE_MUTEX + + rsmi_status_t ret = get_dev_value_str(amd::smi::kDevMemOverDriveLevel, dv_ind, + &val_str); + if (ret != RSMI_STATUS_SUCCESS) { + return ret; + } + + errno = 0; + uint64_t val_ul = strtoul(val_str.c_str(), nullptr, 10); + + if (val_ul > 0xFFFFFFFF) { + return RSMI_STATUS_UNEXPECTED_SIZE; + } + + *od = static_cast(val_ul); + assert(errno == 0); + + return RSMI_STATUS_SUCCESS; + CATCH +} + rsmi_status_t rsmi_dev_overdrive_level_set(int32_t dv_ind, uint32_t od) { if (dv_ind < 0) { diff --git a/src/rocm_smi_device.cc b/src/rocm_smi_device.cc index cd6956cad0..0d602f4595 100755 --- a/src/rocm_smi_device.cc +++ b/src/rocm_smi_device.cc @@ -85,6 +85,7 @@ static const char *kDevVendorIDFName = "vendor"; static const char *kDevSubSysDevIDFName = "subsystem_device"; static const char *kDevSubSysVendorIDFName = "subsystem_vendor"; static const char *kDevOverDriveLevelFName = "pp_sclk_od"; +static const char *kDevMemOverDriveLevelFName = "pp_mclk_od"; static const char *kDevGPUSClkFName = "pp_dpm_sclk"; static const char *kDevGPUMClkFName = "pp_dpm_mclk"; static const char *kDevDCEFClkFName = "pp_dpm_dcefclk"; @@ -225,6 +226,7 @@ static const char *kDevPerfLevelUnknownStr = "unknown"; static const std::map kDevAttribNameMap = { {kDevPerfLevel, kDevPerfLevelFName}, {kDevOverDriveLevel, kDevOverDriveLevelFName}, + {kDevMemOverDriveLevel, kDevMemOverDriveLevelFName}, {kDevDevProdName, kDevDevProdNameFName}, {kDevDevProdNum, kDevDevProdNumFName}, {kDevDevID, kDevDevIDFName}, @@ -388,6 +390,7 @@ static const std::map kDevFuncDependsMap = { {"rsmi_dev_busy_percent_get", {{kDevUsageFName}, {}}}, {"rsmi_dev_memory_reserved_pages_get", {{kDevMemPageBadFName}, {}}}, {"rsmi_dev_overdrive_level_get", {{kDevOverDriveLevelFName}, {}}}, + {"rsmi_dev_mem_overdrive_level_get", {{kDevMemOverDriveLevelFName}, {}}}, {"rsmi_dev_power_profile_presets_get", {{kDevPowerProfileModeFName}, {}}}, {"rsmi_dev_perf_level_set", {{kDevPerfLevelFName}, {}}}, {"rsmi_dev_perf_level_set_v1", {{kDevPerfLevelFName}, {}}}, @@ -794,6 +797,7 @@ int Device::readDevInfo(DevInfoTypes type, uint64_t *val) { case kDevUsage: case kDevOverDriveLevel: + case kDevMemOverDriveLevel: case kDevMemTotGTT: case kDevMemTotVisVRAM: case kDevMemTotVRAM: @@ -907,6 +911,7 @@ int Device::readDevInfo(DevInfoTypes type, std::string *val) { case kDevPerfLevel: case kDevUsage: case kDevOverDriveLevel: + case kDevMemOverDriveLevel: case kDevDevProdName: case kDevDevProdNum: case kDevDevID: From 5d5ba738db7fd1a20141df02170f338f65df9a13 Mon Sep 17 00:00:00 2001 From: Elena Sakhnovitch Date: Fri, 24 Jun 2022 11:56:46 -0400 Subject: [PATCH 09/85] rocm_smi.py: improve error output Match alignment of error output with general output signed-off-by Elena Sakhnovitch Change-Id: Id4334152f4ad5665ff37d5d47e6f7ca0107a9428 --- python_smi_tools/rocm_smi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index 91c455783d..084a9f7601 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -455,7 +455,7 @@ def printErrLog(device, err): global PRINT_JSON devName = device for line in err.split('\n'): - errstr = 'GPU[%s] \t\t: %s' % (devName, line) + errstr = 'GPU[%s]\t: %s' % (devName, line) if not PRINT_JSON: logging.error(errstr) else: From aa5cba122c5e0e16ad835db7f09ead2b9a1cd40c Mon Sep 17 00:00:00 2001 From: Sreekant Somasekharan Date: Mon, 27 Jun 2022 13:40:25 -0400 Subject: [PATCH 10/85] Fix documentation mistake related to get memory overdrive function. Changes made on rsmi_perf_determinism_mode_set function documentation as well for styling consistency. Change-Id: I09ce8139eb9cbda94352ac7725c4c9b9bb06bd59 --- include/rocm_smi/rocm_smi.h | 52 +++++++++++++++--------------- rocm_smi/docs/ROCm_SMI_Manual.pdf | Bin 504486 -> 506265 bytes 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/include/rocm_smi/rocm_smi.h b/include/rocm_smi/rocm_smi.h index 93e26c1cc0..2317158827 100755 --- a/include/rocm_smi/rocm_smi.h +++ b/include/rocm_smi/rocm_smi.h @@ -2226,8 +2226,8 @@ rsmi_status_t rsmi_dev_perf_level_get(uint32_t dv_ind, * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid * */ - rsmi_status_t rsmi_perf_determinism_mode_set(uint32_t dv_ind, uint64_t clkvalue); + /** * @brief Get the overdrive percent associated with the device with provided * device index. @@ -2253,6 +2253,31 @@ rsmi_status_t rsmi_perf_determinism_mode_set(uint32_t dv_ind, uint64_t clkvalue) */ rsmi_status_t rsmi_dev_overdrive_level_get(uint32_t dv_ind, uint32_t *od); +/** + * @brief Get the memory clock overdrive percent associated with the device + * with provided device index. + * + * @details Given a device index @p dv_ind and a pointer to a uint32_t @p od, + * this function will write the memory overdrive percentage to the uint32_t + * pointed to by @p od + * + * @param[in] dv_ind a device index + * + * @param[inout] od a pointer to uint32_t to which the overdrive percentage + * will be written + * If this parameter is nullptr, this function will return + * ::RSMI_STATUS_INVALID_ARGS if the function is supported with the provided, + * arguments and ::RSMI_STATUS_NOT_SUPPORTED if it is not supported with the + * provided arguments. + * + * @retval ::RSMI_STATUS_SUCCESS call was successful + * @retval ::RSMI_STATUS_NOT_SUPPORTED installed software or hardware does not + * support this function with the given arguments + * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid + * + */ +rsmi_status_t rsmi_dev_mem_overdrive_level_get(uint32_t dv_ind, uint32_t *od); + /** * @brief Get the list of possible system clock speeds of device for a * specified clock type. @@ -2283,31 +2308,6 @@ rsmi_status_t rsmi_dev_overdrive_level_get(uint32_t dv_ind, uint32_t *od); * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid * */ -rsmi_status_t rsmi_dev_mem_overdrive_level_get(uint32_t dv_ind, uint32_t *od); - -/** - * @brief Get the memory clock overdrive percent associated with the device - * with provided device index. - * - * @details Given a device index @p dv_ind and a pointer to a uint32_t @p od, - * this function will write the memory overdrive percentage to the uint32_t - * pointed to by @p od - * - * @param[in] dv_ind a device index - * - * @param[inout] od a pointer to uint32_t to which the overdrive percentage - * will be written - * If this parameter is nullptr, this function will return - * ::RSMI_STATUS_INVALID_ARGS if the function is supported with the provided, - * arguments and ::RSMI_STATUS_NOT_SUPPORTED if it is not supported with the - * provided arguments. - * - * @retval ::RSMI_STATUS_SUCCESS call was successful - * @retval ::RSMI_STATUS_NOT_SUPPORTED installed software or hardware does not - * support this function with the given arguments - * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid - * - */ rsmi_status_t rsmi_dev_gpu_clk_freq_get(uint32_t dv_ind, rsmi_clk_type_t clk_type, rsmi_frequencies_t *f); diff --git a/rocm_smi/docs/ROCm_SMI_Manual.pdf b/rocm_smi/docs/ROCm_SMI_Manual.pdf index 8f5857f007516b5cded854845bfcb89de03ba5ae..ac05a506e8e4ff3f033f33217df6fb9d929a9259 100644 GIT binary patch delta 261724 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
  • }~DwCHTAY8cZSQ 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𝔯4oSUy}-lPGH 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

    n`71H5z&bTe?Q!j$AV3Y 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%0D|s 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%0DHN>S;ig-Ac9f%$0Mo7?yB4MX_mlzuG%f!x>6 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 From cbb068ccac4564df1e407fa384ae5a4e9f8debd4 Mon Sep 17 00:00:00 2001 From: Ori Messinger Date: Mon, 18 Jul 2022 03:34:19 -0400 Subject: [PATCH 11/85] ROCm SMI CLI: Force RETCODE to 0 by Default The purpose of this patch is to set RETCODE equal to 0 by default unless an appropriate '--loglevel LEVEL' has been set. To allow a non-zero RETCODE value, you must use any loglevel that is not 'warning' or 'None' (default). You can set the loglevel in the CLI with: --loglevel Signed-off-by: Ori Messinger Change-Id: I9484a750206a3f464c59952304e72c59c3d12465 --- python_smi_tools/rocm_smi.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index 084a9f7601..c3c9142cb3 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -3281,6 +3281,12 @@ if __name__ == '__main__': if args.save: save(deviceList, args.save) + if RETCODE and not PRINT_JSON: + logging.debug(' \t\t One or more commands failed.') + # Set RETCODE value to 0, unless loglevel is None or 'warning' (default) + if args.loglevel is None or getattr(logging, args.loglevel.upper(), logging.WARNING) == logging.WARNING: + RETCODE = 0 + if PRINT_JSON: # Check that we have some actual data to print, instead of the # empty list that we initialized above @@ -3308,8 +3314,6 @@ if __name__ == '__main__': devCsv = formatCsv(deviceList) print(devCsv) - if RETCODE and not PRINT_JSON: - logging.debug(' \t\t One or more commands failed.') printLogSpacer(footerString) rsmi_ret_ok(rocmsmi.rsmi_shut_down()) From 8144dd4d8e4c354b653844d4329354c5bcecbb7a Mon Sep 17 00:00:00 2001 From: Divya Shikre Date: Fri, 15 Jul 2022 12:00:04 -0400 Subject: [PATCH 12/85] Add perf determinism to perf_level_string This fixes the 'unknown' value being displayed for Perf Level because of a missing mapping of RSMI_DEV_PERF_LEVEL_DETERMINISM to its string value. Signed-off-by: Divya Shikre Change-Id: I479c2baea450f0ff61640ad81cbd4d08ad56ff8e --- python_smi_tools/rsmiBindings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/python_smi_tools/rsmiBindings.py b/python_smi_tools/rsmiBindings.py index 7da7c2bc8c..90eb6b3fed 100644 --- a/python_smi_tools/rsmiBindings.py +++ b/python_smi_tools/rsmiBindings.py @@ -153,6 +153,7 @@ def perf_level_string(i): 5: 'STABLE_PEAK', 6: 'STABLE_MIN_MCLK', 7: 'STABLE_MIN_SCLK', + 8: 'PERF_DETERMINISM', } return switcher.get(i, 'UNKNOWN') From c5159fa6d15ece2657743844d1efcce27c563c42 Mon Sep 17 00:00:00 2001 From: Ranjith Ramakrishnan Date: Thu, 7 Jul 2022 00:02:59 -0700 Subject: [PATCH 13/85] Remove the default setting of cmake install libdir from source code Any default value if required should be controlled from outside. For ROCM, build script is setting the value to "lib" Change-Id: I12a2951307fe64e46a4e608476bfceb678bdc97d --- CMakeLists.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c9ed159b6b..3b778e174f 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,10 +52,8 @@ set(ROCM_SMI_PACKAGE rocm-smi-lib) project(${AMD_SMI_LIBS_TARGET}) -set(COMMON_PROJ_ROOT ${PROJECT_SOURCE_DIR}) -# Set default libdir to be "lib" for ROCm, distros/users can override this -set(CMAKE_INSTALL_LIBDIR "lib" CACHE STRING "Library install directory") include(GNUInstallDirs) +set(COMMON_PROJ_ROOT ${PROJECT_SOURCE_DIR}) ## Verbose output. set(CMAKE_VERBOSE_MAKEFILE on) From cd11d7530b19f0ae74537521f4ddfbf5e7934bcf Mon Sep 17 00:00:00 2001 From: "Galantsev, Dmitrii" Date: Thu, 11 Aug 2022 19:34:40 -0500 Subject: [PATCH 14/85] Remove python pyc file before uninstall I6520b51aac34060b5b90f94a016cec1827a4973f happens after uninstall, which leaves a dangling directory under /opt/rocm/libexec/rocm_smi. Removing __pycache__ before uninstall fixes the issue. Signed-off-by: Galantsev, Dmitrii Change-Id: I695bd085d4a43b678b563b4c35f6d2e8ddfa7d7c --- CMakeLists.txt | 2 ++ RPM/postun.in | 3 --- RPM/preun.in | 5 +++++ 3 files changed, 7 insertions(+), 3 deletions(-) create mode 100755 RPM/preun.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b778e174f..1c3446fd4e 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -253,8 +253,10 @@ set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSIO ## Process the Rpm install/remove scripts to update the CPACK variables configure_file ( "${CMAKE_CURRENT_SOURCE_DIR}/RPM/post.in" RPM/post @ONLY ) +configure_file ( "${CMAKE_CURRENT_SOURCE_DIR}/RPM/preun.in" RPM/preun @ONLY ) configure_file ( "${CMAKE_CURRENT_SOURCE_DIR}/RPM/postun.in" RPM/postun @ONLY ) set ( CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/RPM/post" ) +set ( CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/RPM/preun" ) set ( CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/RPM/postun" ) #Set the names now using CPACK utility diff --git a/RPM/postun.in b/RPM/postun.in index 72f4c565e2..d54cd9b2ea 100755 --- a/RPM/postun.in +++ b/RPM/postun.in @@ -4,6 +4,3 @@ if [ $1 -le 1 ] && [ "@ENABLE_LDCONFIG@" == "ON" ]; then rm -f /etc/ld.so.conf.d/x86_64-librocm_smi_lib.conf ldconfig fi - -# remove pyc file generated by python -rm -rf @CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBEXECDIR@/rocm_smi/__pycache__ diff --git a/RPM/preun.in b/RPM/preun.in new file mode 100755 index 0000000000..33acd7f401 --- /dev/null +++ b/RPM/preun.in @@ -0,0 +1,5 @@ +if [ $1 -le 1 ]; then + # perform the below actions for rpm remove($1=0) or upgrade($1=1) operations + # remove pyc file generated by python + rm -rf @CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBEXECDIR@/rocm_smi/__pycache__ +fi From 8b2bc318eb9d7933da6383c261301a6d6ec37d51 Mon Sep 17 00:00:00 2001 From: Elena Sakhnovitch Date: Fri, 19 Aug 2022 12:22:54 -0400 Subject: [PATCH 15/85] [rocm_smi.py] bugfix for non-alphanum parce issue --showdeviceid Fix for false-positive "FRU is corrupted" messages, since str(sn).isalphanum() triggers on empty struct. --showproductname fix script termination on non-alphanum product name Change-Id: I78d4998e156f9b0d9f45338bed2a0d30b789e220 --- python_smi_tools/rocm_smi.py | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index c3c9142cb3..db31e73ffe 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -2003,18 +2003,28 @@ def showProductName(deviceList): ret = rocmsmi.rsmi_dev_vendor_name_get(device, vendor, 256) # Only continue if GPU vendor is AMD if rsmi_ret_ok(ret, device) and isAmdDevice(device): - device_vendor = vendor.value.decode() + try: + device_vendor = vendor.value.decode() + except UnicodeDecodeError: + printErrLog(device, "Unable to read device vendor") + device_vendor = "N/A" # Retrieve the device series ret = rocmsmi.rsmi_dev_name_get(device, series, 256) - if rsmi_ret_ok(ret, device) and series.value.decode(): - device_series = series.value.decode() - printLog(device, 'Card series', '\t\t' + device_series) + if rsmi_ret_ok(ret, device): + try: + device_series = series.value.decode() + printLog(device, 'Card series', '\t\t' + device_series) + except UnicodeDecodeError: + printErrLog(device, "Unable to read card series") # Retrieve the device model ret = rocmsmi.rsmi_dev_subsystem_name_get(device, model, 256) - if rsmi_ret_ok(ret, device) and model.value.decode(): - device_model = model.value.decode() - # padHexValue is used for applications that expect 4-digit card models - printLog(device, 'Card model', '\t\t' + padHexValue(device_model, 4)) + if rsmi_ret_ok(ret, device): + try: + device_model = model.value.decode() + # padHexValue is used for applications that expect 4-digit card models + printLog(device, 'Card model', '\t\t' + padHexValue(device_model, 4)) + except UnicodeDecodeError: + printErrLog(device, "Unable to read device model") printLog(device, 'Card vendor', '\t\t' + device_vendor) # TODO: Retrieve the SKU using 'rsmi_dev_sku_get' from the LIB # ret = rocmsmi.rsmi_dev_sku_get(device, sku, 256) @@ -2181,7 +2191,9 @@ def showSerialNumber(deviceList): for device in deviceList: sn = create_string_buffer(256) ret = rocmsmi.rsmi_dev_serial_number_get(device, sn, 256) - if not str(sn).isalnum(): + try: + sn.value.decode() + except UnicodeDecodeError: printErrLog(device, "FRU Serial Number contains non-alphanumeric characters. FRU is likely corrupted") continue From dfd88b593ff95cf9542e4a48bd6284cd50227ae2 Mon Sep 17 00:00:00 2001 From: Ori Messinger Date: Wed, 31 Aug 2022 09:47:14 -0400 Subject: [PATCH 16/85] ROCm SMI CLI: Modify Column Header The purpose of this patch is to modify the column header of the default './rocm-smi' command from 'Temp' to 'Temp (DieEdge)' for clarity. Signed-off-by: Ori Messinger Change-Id: I127a9214be97a1185c3db010f1c9176d1f412ec9 --- python_smi_tools/rocm_smi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index db31e73ffe..bd9fc76edf 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -1315,7 +1315,7 @@ def showAllConcise(deviceList): print('ERROR: Cannot print JSON/CSV output for concise output') sys.exit(1) printLogSpacer(' Concise Info ') - header = ['GPU', 'Temp', 'AvgPwr', 'SCLK', 'MCLK', 'Fan', 'Perf', 'PwrCap', 'VRAM%', 'GPU%'] + header = ['GPU', 'Temp (DieEdge)', 'AvgPwr', 'SCLK', 'MCLK', 'Fan', 'Perf', 'PwrCap', 'VRAM%', 'GPU%'] head_widths = [len(head) + 2 for head in header] values = {} for device in deviceList: From 4658630d8d1947a449792eb853e2cabcc584db1c Mon Sep 17 00:00:00 2001 From: Alex Sierra Date: Fri, 26 Aug 2022 20:29:04 +0000 Subject: [PATCH 17/85] Avoid report PCIe peer devices with CPU XGMI iolinks Devices with CPU XGMI iolink do not support PCIe peer access. Therefore, they should not be reported as accessible links in the topology. Signed-off-by: Alex Sierra Change-Id: I3ee51796945dc0966200dee03886510e8f1846b7 --- src/rocm_smi.cc | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/rocm_smi.cc b/src/rocm_smi.cc index 6c71343f8b..c2cbb238c1 100755 --- a/src/rocm_smi.cc +++ b/src/rocm_smi.cc @@ -3490,7 +3490,7 @@ rsmi_topo_get_link_weight(uint32_t dv_ind_src, uint32_t dv_ind_dst, assert(false); // Unexpected IO Link type read status = RSMI_STATUS_NOT_SUPPORTED; } - } else { + } else if (kfd_node->numa_node_type() == amd::smi::IOLINK_TYPE_PCIEXPRESS) { *weight = kfd_node->numa_node_weight(); // from src GPU to it's CPU node uint64_t numa_weight_dst = 0; status = topo_get_numa_node_weight(dv_ind_dst, &numa_weight_dst); @@ -3522,6 +3522,8 @@ rsmi_topo_get_link_weight(uint32_t dv_ind_src, uint32_t dv_ind_dst, assert(false); // Error to read numa node weight status = RSMI_STATUS_INIT_ERROR; } + } else { + status = RSMI_STATUS_NOT_SUPPORTED; } } else { status = RSMI_STATUS_INVALID_ARGS; @@ -3597,7 +3599,7 @@ rsmi_topo_get_link_type(uint32_t dv_ind_src, uint32_t dv_ind_dst, if (ret == 0) { amd::smi::IO_LINK_TYPE io_link_type; ret = kfd_node->get_io_link_type(node_ind_dst, &io_link_type); - if (!ret) { + if (ret == 0) { if (io_link_type == amd::smi::IOLINK_TYPE_XGMI) { *type = RSMI_IOLINK_TYPE_XGMI; *hops = 1; @@ -3606,7 +3608,7 @@ rsmi_topo_get_link_type(uint32_t dv_ind_src, uint32_t dv_ind_dst, assert(false); // Unexpected IO Link type read status = RSMI_STATUS_NOT_SUPPORTED; } - } else { + } else if (kfd_node->numa_node_type() == amd::smi::IOLINK_TYPE_PCIEXPRESS) { uint32_t numa_number_dst; status = topo_get_numa_node_number(dv_ind_dst, &numa_number_dst); if (status == RSMI_STATUS_SUCCESS) { @@ -3622,21 +3624,14 @@ rsmi_topo_get_link_type(uint32_t dv_ind_src, uint32_t dv_ind_dst, else *hops = 4; // More than one CPU hops, hard coded as 4 } - - amd::smi::IO_LINK_TYPE numa_node_type = kfd_node->numa_node_type(); - if (numa_node_type == amd::smi::IOLINK_TYPE_PCIEXPRESS) { - *type = RSMI_IOLINK_TYPE_PCIEXPRESS; - status = RSMI_STATUS_SUCCESS; - } else if (numa_node_type == amd::smi::IOLINK_TYPE_XGMI) { - *type = RSMI_IOLINK_TYPE_XGMI; - status = RSMI_STATUS_SUCCESS; - } else { - status = RSMI_STATUS_INIT_ERROR; - } + *type = RSMI_IOLINK_TYPE_PCIEXPRESS; + status = RSMI_STATUS_SUCCESS; } else { assert(false); // Error to get numa node number status = RSMI_STATUS_INIT_ERROR; } + } else { + status = RSMI_STATUS_NOT_SUPPORTED; } } else { status = RSMI_STATUS_INVALID_ARGS; From 03fab6b2b63a74e55659ed3a92d987c68a9d4bd2 Mon Sep 17 00:00:00 2001 From: Alex Sierra Date: Fri, 26 Aug 2022 20:51:24 +0000 Subject: [PATCH 18/85] Consider invalid peer link type during topology report Invalid peer links are labeled as N/A during topology report creation. This invalid link type could be triggered by having a configuration with CPU XGMI iolinks and disable XGMI peer to peer access. This can be done by setting the driver parameter 'use_xgmi_p2p = 0'. Signed-off-by: Alex Sierra Change-Id: Ifb09a8f3266a3f07686615dfb45781d6cfe55e83 --- python_smi_tools/rocm_smi.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index bd9fc76edf..73016599e0 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -2425,6 +2425,8 @@ def showWeightTopology(deviceList): gpu_links_weight[srcdevice][destdevice] = weight else: printErrLog(srcdevice, 'Cannot read Link Weight: Not supported on this machine') + gpu_links_weight[srcdevice][destdevice] = None + if PRINT_JSON: formatMatrixToJSON(deviceList, gpu_links_weight, "(Topology) Weight between DRM devices {} and {}") @@ -2441,6 +2443,8 @@ def showWeightTopology(deviceList): for gpu2 in deviceList: if (gpu1 == gpu2): printTableRow('%-12s', '0') + elif (gpu_links_weight[gpu1][gpu2] == None): + printTableRow('%-12s', 'N/A') else: printTableRow('%-12s', gpu_links_weight[gpu1][gpu2].value) printEmptyLine() @@ -2468,6 +2472,7 @@ def showHopsTopology(deviceList): gpu_links_hops[srcdevice][destdevice] = hops else: printErrLog(srcdevice, 'Cannot read Link Hops: Not supported on this machine') + gpu_links_hops[srcdevice][destdevice] = None if PRINT_JSON: formatMatrixToJSON(deviceList, gpu_links_hops, "(Topology) Hops between DRM devices {} and {}") @@ -2484,6 +2489,8 @@ def showHopsTopology(deviceList): for gpu2 in deviceList: if (gpu1 == gpu2): printTableRow('%-12s', '0') + elif (gpu_links_hops[gpu1][gpu2] == None): + printTableRow('%-12s', 'N/A') else: printTableRow('%-12s', gpu_links_hops[gpu1][gpu2].value) printEmptyLine() @@ -2516,6 +2523,8 @@ def showTypeTopology(deviceList): gpu_links_type[srcdevice][destdevice] = "XXXX" else: printErrLog(srcdevice, 'Cannot read Link Type: Not supported on this machine') + gpu_links_type[srcdevice][destdevice] = "XXXX" + if PRINT_JSON: formatMatrixToJSON(deviceList, gpu_links_type, "(Topology) Link type between DRM devices {} and {}") return From 9a650b1378bdd0575233dfea71bcbc2ea7905dfb Mon Sep 17 00:00:00 2001 From: Ranjith Ramakrishnan Date: Sun, 14 Aug 2022 23:42:17 -0700 Subject: [PATCH 19/85] SWDEV-345870 - Correct install interface for new directory layout Install interface should provide /opt/rocm-ver/include as the include path Path /opt/rocm-ver/rocm_smi/include should be used only as part of backward compatibility support Change-Id: Idc1f663069356c6b1fbd492f45ef4637fc90e4eb --- rocm_smi/CMakeLists.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/rocm_smi/CMakeLists.txt b/rocm_smi/CMakeLists.txt index c594eeb8af..8401dbe858 100755 --- a/rocm_smi/CMakeLists.txt +++ b/rocm_smi/CMakeLists.txt @@ -84,9 +84,14 @@ target_include_directories(${ROCM_SMI_TARGET} PRIVATE target_include_directories(${ROCM_SMI_TARGET} PUBLIC "$" - "$" + "$" ) +if(FILE_REORG_BACKWARD_COMPATIBILITY) + target_include_directories(${ROCM_SMI_TARGET} + PUBLIC + "$") +endif() ## Set the VERSION and SOVERSION values set_property(TARGET ${ROCM_SMI_TARGET} PROPERTY From e9e3ba541eca1f3a28bcc56918299aa5d90a58ec Mon Sep 17 00:00:00 2001 From: Sreekant Somasekharan Date: Mon, 24 Oct 2022 16:13:23 -0400 Subject: [PATCH 20/85] [rocm_smi_kfd.cc] Handle return value from ReadSysfsStr function. Return value from ReadSysfsStr function that reads cu_occupancy file was not handled correctly. Modified the script to handle any fail conditions. Change-Id: I3c71e0f6f288f196ed1f833e8709255c2b6e78ee --- src/rocm_smi_kfd.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/rocm_smi_kfd.cc b/src/rocm_smi_kfd.cc index bf3227f81b..13aed64588 100755 --- a/src/rocm_smi_kfd.cc +++ b/src/rocm_smi_kfd.cc @@ -484,6 +484,7 @@ int GetProcessInfoForPID(uint32_t pid, rsmi_process_info_t *proc, cu_occupancy_path += "/stats_"; cu_occupancy_path += std::to_string(gpu_id); cu_occupancy_path += "/cu_occupancy"; + err = ReadSysfsStr(cu_occupancy_path, &tmp); if (err == 0) { if (!is_number(tmp)) { @@ -494,6 +495,8 @@ int GetProcessInfoForPID(uint32_t pid, rsmi_process_info_t *proc, // Collect count of compute units cu_count += kfd_node_map[gpu_id]->cu_count(); + } else { + return err; } } From e7ed902fd68085ecd20b0fa5e00011e53273856f Mon Sep 17 00:00:00 2001 From: Ranjith Ramakrishnan Date: Thu, 17 Nov 2022 09:29:18 -0800 Subject: [PATCH 21/85] SWDEV-366823 - Change pragma message to warning File reorganization feature was implemented with backward compatibility The backward compatibility support will be deprecated in future release. Changed the #pragma message to #warning for a smooth transition Change-Id: I281ad17949435fee4b508a2a7e112b6fa3365838 --- rocm_smi-backward-compat.cmake | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/rocm_smi-backward-compat.cmake b/rocm_smi-backward-compat.cmake index aa8fd9c49e..c5c40da29c 100644 --- a/rocm_smi-backward-compat.cmake +++ b/rocm_smi-backward-compat.cmake @@ -57,7 +57,20 @@ function(create_header_template) LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */\n\n#ifndef @include_guard@\n#define @include_guard@ \n\n#pragma message(\"This file is deprecated. Use file from include path /opt/rocm-ver/include/ and prefix with @prefix_name@\")\n@include_statements@ \n\n#endif") + */ + +#ifndef @include_guard@ +#define @include_guard@ + +#if defined(__GNUC__) +#warning \"This file is deprecated. Use file from include path /opt/rocm-ver/include/ and prefix with @prefix_name@\" +#else +#pragma message(\"This file is deprecated. Use file from include path /opt/rocm-ver/include/ and prefix with @prefix_name@\") +#endif + +@include_statements@ + +#endif") endfunction() #use header template file and generate wrapper header files From 76b5528feb244d5d24f8bed580578cbbba3dfc92 Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Mon, 14 Nov 2022 09:54:50 -0600 Subject: [PATCH 22/85] Remove the shared mutex if no process is using it If the code is crashed and the mutex may be in bad status. The user has to mannually remove it. The fix will remove the shared mutex if no process is using it. Change-Id: I18bf562f2e0a7de8b3f0cccf72d60950b0d9bb2d --- src/rocm_smi_device.cc | 2 +- third_party/shared_mutex/shared_mutex.cc | 53 +++++++++++++++++++++++- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/rocm_smi_device.cc b/src/rocm_smi_device.cc index 0d602f4595..0eade39ce5 100755 --- a/src/rocm_smi_device.cc +++ b/src/rocm_smi_device.cc @@ -41,10 +41,10 @@ * */ + #include #include #include - #include #include #include diff --git a/third_party/shared_mutex/shared_mutex.cc b/third_party/shared_mutex/shared_mutex.cc index 55fac1f5b5..ae211a81c3 100755 --- a/third_party/shared_mutex/shared_mutex.cc +++ b/third_party/shared_mutex/shared_mutex.cc @@ -1,5 +1,5 @@ /* -Modifications Copyright 2019 2020 Advanced Micro Devices, Inc. All Rights +Modifications Copyright 2019 - 2022 Advanced Micro Devices, Inc. All Rights Reserved. Copyright (c) 2018 Oleg Yamnikov @@ -34,8 +34,50 @@ THE SOFTWARE. #include // clock_gettime #include +#include +#include +#include +#include +#include + #include "rocm_smi/rocm_smi_exception.h" +// find which processes are using the file by searching /proc/*/fd +static std::vector lsof(const char* filename) { + struct dirent *entry = nullptr; + DIR *dp = nullptr; + std::vector process_id; + + dp = opendir("/proc"); + if (dp != nullptr) { + while ((entry = readdir(dp))) { + std::string id(entry->d_name); + // the process id should be a number + if (std::all_of(id.begin(), id.end(), ::isdigit)) { + process_id.push_back(entry->d_name); + } + } + closedir(dp); + } + + std::vector matched_process; + for (unsigned int i=0; i < process_id.size(); i++) { + std::string folder_name("/proc/"); + folder_name += process_id[i]+"/fd/"; + dp = opendir(folder_name.c_str()); + if (dp == nullptr) continue; + while ((entry = readdir(dp))) { + std::string p(folder_name+entry->d_name); + char buf[512]; + memset(buf, 0, 512); + if (readlink(p.c_str(), buf, sizeof(buf)-1) < 0) continue; + if (!strcmp(filename, buf)) matched_process.push_back(process_id[i]); + } + closedir(dp); + } + return matched_process; +} + shared_mutex_t shared_mutex_init(const char *name, mode_t mode) { shared_mutex_t mutex = {NULL, 0, NULL, 0}; errno = 0; @@ -81,6 +123,15 @@ shared_mutex_t shared_mutex_init(const char *name, mode_t mode) { pthread_mutex_t *mutex_ptr = reinterpret_cast(addr); + // When process crash before unlock the mutex, the mutex is in bad status. + // reset the mutex if no process is using it + std::vector ids = lsof(name); + if (ids.size() == 0) { // no process is using it + memset(mutex_ptr, 0, sizeof(pthread_mutex_t)); + // Set mutex.created == 1 so that it can be initialized latter. + mutex.created = 1; + } + // Make sure the mutex wasn't left in a locked state. If we can't // acquire it in 5 sec., re-do everything. struct timespec expireTime; From 248c6f79f4011bfecbd2a64c7276c92d1f8af0b8 Mon Sep 17 00:00:00 2001 From: "kent.russell@amd.com" Date: Thu, 8 Dec 2022 12:27:00 -0500 Subject: [PATCH 23/85] rocm_smi.py: Fix order of CE and UE reporting We append CE then UE, but in the table right after, it goes UE then CE. Fix the order of the table, and add capitals for consistency Change-Id: I208f37685508ab1e2ff83d3456620bbbf3a16268 --- python_smi_tools/rocm_smi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index 73016599e0..ce67112ce6 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -2146,7 +2146,7 @@ def showRasInfo(deviceList, rasType): row.append(ec.correctable_err) row.append(ec.uncorrectable_err) data.append(row) - printTableLog([' Block', ' Status ', 'uncorrectable err', 'correctable err'], data, device, + printTableLog([' Block', ' Status ', 'Correctable Error', 'Uncorrectable Error'], data, device, 'RAS INFO') # TODO: Use dynamic spacing for column widths printLogSpacer(None, '_') From 932feb6e490537d6113e02a4463e0a8739e03198 Mon Sep 17 00:00:00 2001 From: Ori Messinger Date: Wed, 7 Sep 2022 13:49:43 -0400 Subject: [PATCH 24/85] ROCm SMI CLI: Add --showtempgraph Feature The purpose of this patch is to add a new feature to the smi cli. Use ./rocm-smi --showtempgraph to print a persistant bar graph for each GPU's temperature. The bar graphs refresh continuously to show current temps, and the graphs change in a color gradient depending on the temperature. Signed-off-by: Ori Messinger Change-Id: I98902b76c42cc7281420759f5ebe8c78f7785e66 --- python_smi_tools/rocm_smi.py | 98 ++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index ce67112ce6..2b5e4eb0bb 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -2289,6 +2289,101 @@ def showEvents(deviceList, eventTypes): break +def printTempGraph(deviceList, delay): + # deviceList must be in ascending order + deviceList.sort() + devices = 0 + # Print an empty line for each device + for device in deviceList: + devices = devices + 1 + for i in range(devices): + printEmptyLine() + originalTerminalWidth = os.get_terminal_size()[0] + while 1: # Exit condition from user keyboard input of 'q' or 'ctrl + c' + printString = '' + for device in deviceList: + temp = getTemp(device, 'edge') + percentage = temp + if percentage >= 100: + percentage = 100 + if percentage < 0: + percentage = 0 + # Get available space based on terminal width + terminalWidth = os.get_terminal_size()[0] + availableSpace = 0 + if terminalWidth >= 20: + availableSpace = terminalWidth - 20 + # Get color based on percentage, with a non-linear scaling + color = getGraphColor(3.16*(percentage**1.5)**(1/2)) + # Get graph length based on percentage and available space + padding = (percentage / float(100)) * availableSpace + if padding > availableSpace: + padding = availableSpace + paddingSpace = color[-1] + for i in range(int(padding)): + paddingSpace += paddingSpace[-1] + remainder = 0 + if availableSpace >= padding: + remainder = availableSpace + 1 - padding + remainderSpace = ' ' * int(remainder) + # TODO: Allow terminal size to be decreased + if terminalWidth < originalTerminalWidth: + print('Terminal size cannot be decreased.\n\r') + return + # Two spare Spaces + tempString = (str(int(temp)) + '°C').ljust(5) + printString += '\033[2;30;47mGPU[%d] Temp %s|%s%s\x1b[0m%s\r\n' % (device, tempString, color, paddingSpace[1:], remainderSpace) + originalTerminalWidth = terminalWidth + time.sleep((delay / 1000)) + if terminalWidth >= 20: + for i in range(devices): + printString = '\033[A' + printString + print(printString, end = '\r') + + +def getGraphColor(percentage): + # Text / Background color mixing (Tested on PuTTY) + colors = ['\033[2;35;45m','\033[2;34;45m','\033[2;35;44m','\033[2;34;44m', + '\033[2;36;44m','\033[2;34;46m','\033[2;36;46m','\033[2;32;46m', + '\033[2;36;42m','\033[2;32;42m','\033[2;33;42m','\033[2;32;43m', + '\033[2;33;43m','\033[2;31;43m','\033[2;33;41m','\033[2;31;41m'] + characters = [' ', '░', '░', '▒', '▒', '░'] + # Ensure percentage is in range and rounded + if percentage > 99: + percentage = 99 + if percentage < 0: + percentage = 0 + percentage = round(percentage, 0) + # There are a total of 16 distinct colors, with 2 special ascii characters per + # color, for a total of 16*2=32 distinct colors for a gradient. + # Therefore every 100/32=3.125 percent the color gradient will change + stepSize = (100/len(colors))/2 + characterIndex = int((percentage % (len(characters) * stepSize)) / stepSize) + colorIndex = int(percentage / (stepSize * 2)) + returnStr = colors[colorIndex] + characters[characterIndex] + return returnStr + + +def showTempGraph(deviceList): + printLogSpacer(' Temperature Graph ') + # Start a thread for constantly printing + try: + # Create a thread (call print function, devices, delay in ms) + _thread.start_new_thread(printTempGraph, (deviceList, 150)) + except Exception as e: + printErrLog(device, 'Unable to start new thread. %s' % (e)) + # Catch user input for program termination + while 1: # Exit condition from user keyboard input of 'q' or 'ctrl + c' + getch = _Getch() + user_input = getch() + # Catch user input for q or Ctrl + c + if user_input == 'q' or user_input == '\x03': + break + # Reset color to default before exit + print('\033[A\x1b[0m\r') + printLogSpacer() + + def showVersion(deviceList, component): """ Display the software version for the specified component @@ -2923,6 +3018,7 @@ if __name__ == '__main__': groupDisplayTop.add_argument('-v', '--showvbios', help='Show VBIOS version', action='store_true') groupDisplayTop.add_argument('-e', '--showevents', help='Show event list', metavar='EVENT', type=str, nargs='*') groupDisplayTop.add_argument('--showdriverversion', help='Show kernel driver version', action='store_true') + groupDisplayTop.add_argument('--showtempgraph', help='Show Temperature Graph', action='store_true') groupDisplayTop.add_argument('--showfwinfo', help='Show FW information', metavar='BLOCK', type=str, nargs='*') groupDisplayTop.add_argument('--showmclkrange', help='Show mclk range', action='store_true') groupDisplayTop.add_argument('--showmemvendor', help='Show GPU memory vendor', action='store_true') @@ -3148,6 +3244,8 @@ if __name__ == '__main__': showAllConciseHw(deviceList) if args.showdriverversion: showVersion(deviceList, rsmi_sw_component_t.RSMI_SW_COMP_DRIVER) + if args.showtempgraph: + showTempGraph(deviceList) if args.showid: showId(deviceList) if args.showuniqueid: From 5c478e9eb90a9ec10942fc6567d506c8e6d6c51b Mon Sep 17 00:00:00 2001 From: Ori Messinger Date: Thu, 5 Jan 2023 11:53:04 -0500 Subject: [PATCH 25/85] ROCm SMI CLI: Fix --showproductname bugs This patch fixes a couple of --showproductname bugs, both of which are related to the device's SKU. Previously if a device with a non-standard VBIOS name was used, fetching that device's SKU wasn't working correctly. A standard VBIOS name should follow the following pattern: AAA-BBBBBB-CCC Where the middle section "BBBBBB" between the hypens is the SKU. Now, SKU can be correctly fetched even with a non-standard VBIOS name, and return 'unkown' if SKU does not exist. Signed-off-by: Ori Messinger Change-Id: I5899a859c6131c6048bb31a4305ddacbac3075a9 --- python_smi_tools/rocm_smi.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index 2b5e4eb0bb..6c0385a45a 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -2033,8 +2033,11 @@ def showProductName(deviceList): # Retrieve the device SKU as a substring from VBIOS ret = rocmsmi.rsmi_dev_vbios_version_get(device, vbios, 256) if rsmi_ret_ok(ret, device) and vbios.value.decode(): - # Device SKU is just 6 characters after the first occurance of '-' in vbios_version - device_sku = vbios.value.decode().split('-')[1][:6] + # Device SKU is just the characters in between the two '-' in vbios_version + if vbios.value.decode().count('-') == 2 and len(str(vbios.value.decode().split('-')[1])) > 1: + device_sku = vbios.value.decode().split('-')[1] + else: + device_sku = 'unknown' printLog(device, 'Card SKU', '\t\t' + device_sku) else: printLog(device, 'Incompatible device.\n' \ From 4d7f3f2bc759926d4a25441840006e42eae4176e Mon Sep 17 00:00:00 2001 From: Charis Poag Date: Fri, 6 Jan 2023 11:01:18 -0600 Subject: [PATCH 26/85] SWDEV-335697- Add support for dynamic partitioning Original updates: * Added .gitignore to help with future commits * Updated/added copyrights on modified or added files * Updated rocm_smi.h/.cc - Added 3 new SMI API functions: rsmi_dev_compute_partition_set & rsmi_dev_compute_partition_get - Added helpful maps/enums used in new get/set compute_partition API calls * Updated rocm_smi.py - Added --showcomputepartition - Added --setcomputepartition - Fixed a few mistypes * Updated rsmiBindings.py - added helpful class/dict/list * Updated rocm_smi_example.cc - Added helpful MACRO to detect if api is not supported. - Added current_compute_partition set/get rocm lib calls - Added helpful macro to discover future RSMI errors - Commented out test_set_freq, was having permission issues on a Navi21 * Updated rocm_smi_main.cc - Added helpful map to debug API calls, left in for future use - Added comment to better understand a non-class function returns * Added computepartition_read_write.cc/.h - Added get/set compute partition API test calls - Confirmed on devices that do not support the API calls, tests pass * Updated rocm_smi_test/main.cc - Calls new compute partition gtests Added following updates from review feedback: * Updated rocm_smi.h/cc - Removed C++ API calls, adding support for both C/C++ API calls could cause confusion and adds extra work for us - rsmi_dev_compute_partition_get -> Fixed an edge case where user gives a small buffer length size (smaller than data received), but does not receive the partial buffer back. google Tests are updated to reflect this find. * Updated rocm_smi_example.cc - Fixed test_set_freq, issue was that file was not writable. We now indicate this warning, so prior errors make sense. - General test code cleanup. Removed extra code, by creating loops for tests. * Updated rocm_smi_main.cc - Moved and got rid of an external reference to a map used for debugging RSMI enums, now is a const public reference. * Updated rocm_smi.py - Updated python code to identify NOT_SUPPORTED due to (currently) only a few GPU support the feature Change-Id: I4a567acbb59d6771fb64df08d19175fe3604fd1b --- .gitignore | 124 +++++++ include/rocm_smi/rocm_smi.h | 86 ++++- include/rocm_smi/rocm_smi_device.h | 5 +- include/rocm_smi/rocm_smi_main.h | 1 + python_smi_tools/rocm_smi.py | 66 +++- python_smi_tools/rsmiBindings.py | 25 ++ rocm_smi/example/rocm_smi_example.cc | 228 ++++++++++-- src/rocm_smi.cc | 134 +++++++- src/rocm_smi_device.cc | 13 +- src/rocm_smi_gpu_metrics.cc | 4 +- src/rocm_smi_main.cc | 75 +++- .../functional/computepartition_read_write.cc | 324 ++++++++++++++++++ .../functional/computepartition_read_write.h | 73 ++++ tests/rocm_smi_test/main.cc | 7 +- 14 files changed, 1111 insertions(+), 54 deletions(-) create mode 100644 .gitignore create mode 100755 tests/rocm_smi_test/functional/computepartition_read_write.cc create mode 100755 tests/rocm_smi_test/functional/computepartition_read_write.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..dc0fa0928c --- /dev/null +++ b/.gitignore @@ -0,0 +1,124 @@ +# +# NOTE! Don't add files that are generated in specific +# subdirectories here. Add them in the ".gitignore" file +# in that subdirectory instead. +# +# NOTE! Please use 'git ls-files -i --exclude-standard' +# command after changing this file, to see if there are +# any tracked files which get ignored after the change. +# +# Normal rules +# +.* +*.o +*.o.* +*.a +*.s +*.ko +*.so +*.so.dbg +*.mod.c +*.i +*.lst +*.symtypes +*.order +modules.builtin +*.elf +*.bin +*.gz +*.bz2 +*.lzma +*.xz +*.lzo +#*.patch +*.gcno +*.pyc +*current_compute_partition + +# +# Top-level generic files/folders +# +/[Bb][Ui][Ll][Dd] +*/[Bb][Ui][Ll][Dd] +/build +*/build +/[Gg][Tt][Ee][Ss][Tt][Ss] +*/[Gg][Tt][Ee][Ss][Tt][Ss] +/tags +/TAGS +/linux +/vmlinux +/vmlinuz +/System.map +/Module.markers +Module.symvers + +# +# Debian directory (make deb-pkg) +# +/debian/ + +# +# git files that we don't want to ignore even it they are dot-files +# +!.gitignore +!.mailmap + +### VisualStudioCode ### +!.vscode/settings.json + +# +# Generated include files +# +include/config +include/linux/version.h +include/generated +arch/*/include/generated + +# git generated dirs +patches-* + +# quilt's files +patches +series + +# cscope files +cscope.* +ncscope.* + +# gnu global files +GPATH +GRTAGS +GSYMS +GTAGS + +*.orig +*~ +\#*# + +# +# Leavings from module signing +# +extra_certificates +signing_key.priv +signing_key.x509 +x509.genkey + +#cmake files +CMakeLists.txt.user +CMakeCache.txt +CMakeFiles +CMakeScripts +Testing +Makefile +cmake_install.cmake +install_manifest.txt +compile_commands.json +CTestTestfile.cmake +_deps + +# +# ROCm files +# Removes generated config headers like rocmsmi64Config.h & oamConfig.h +# +*Config.h \ No newline at end of file diff --git a/include/rocm_smi/rocm_smi.h b/include/rocm_smi/rocm_smi.h index 2317158827..7c8aeb1d48 100755 --- a/include/rocm_smi/rocm_smi.h +++ b/include/rocm_smi/rocm_smi.h @@ -3,7 +3,7 @@ * The University of Illinois/NCSA * Open Source License (NCSA) * - * Copyright (c) 2017, Advanced Micro Devices, Inc. + * Copyright (c) 2017-2023, Advanced Micro Devices, Inc. * All rights reserved. * * Developed by: @@ -352,6 +352,26 @@ typedef enum { typedef rsmi_clk_type_t rsmi_clk_type; /// \endcond +/** + * Compute Partition types + */ +typedef enum { + RSMI_COMPUTE_PARTITION_INVALID = 0, + RSMI_COMPUTE_PARTITION_CPX, //!< Core mode (CPX)- Per-chip XCC with + //!< shared memory + RSMI_COMPUTE_PARTITION_SPX, //!< Single GPU mode (SPX)- All XCCs work + //!< together with shared memory + RSMI_COMPUTE_PARTITION_DPX, //!< Dual GPU mode (DPX)- Half XCCs work + //!< together with shared memory + RSMI_COMPUTE_PARTITION_TPX, //!< Triple GPU mode (TPX)- One-third XCCs + //!< work together with shared memory + RSMI_COMPUTE_PARTITION_QPX, //!< Quad GPU mode (QPX)- Quarter XCCs + //!< work together with shared memory +} rsmi_compute_partition_type_t; +/// \cond Ignore in docs. +typedef rsmi_compute_partition_type_t rsmi_compute_partition_type; +/// \endcond + /** * @brief Temperature Metrics. This enum is used to identify various * temperature metrics. Corresponding values will be in millidegress @@ -3470,6 +3490,70 @@ rsmi_is_P2P_accessible(uint32_t dv_ind_src, uint32_t dv_ind_dst, /** @} */ // end of HWTopo +/*****************************************************************************/ +/** @defgroup ComputePartition Compute Partition Functions + * These functions are used to configure and query the device's + * compute parition setting. + * @{ + */ + +/** + * @brief Retrieves the current compute partitioning for a desired device + * + * @details + * Given a device index @p dv_ind and a string @p compute_partition , + * and uint32 @p len , this function will attempt to obtain the device's + * current compute partition setting string. Upon successful retreival, + * the obtained device's compute partition settings string shall be stored in + * the passed @p compute_partition char string variable. + * + * @param[in] dv_ind a device index + * + * @param[inout] compute_partition a pointer to a char string variable, + * which the device's current compute partition will be written to. + * + * @param[in] len the length of the caller provided buffer @p compute_partition + * + * @retval ::RSMI_STATUS_SUCCESS call was successful + * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid + * @retval ::RSMI_STATUS_UNEXPECTED_DATA data provided to function is not valid + * @retval ::RSMI_STATUS_NOT_SUPPORTED installed software or hardware does not + * support this function with the given arguments + * @retval ::RSMI_STATUS_INSUFFICIENT_SIZE is returned if @p len bytes is not + * large enough to hold the entire compute partition value. In this case, + * only @p len bytes will be written. + * + */ +rsmi_status_t +rsmi_dev_compute_partition_get(uint32_t dv_ind, char *compute_partition, + uint32_t len); + +/** + * @brief Modifies a selected device's compute partition setting. + * + * @details Given a device index @p dv_ind, a type of compute partition + * @p compute_partition, this function will attempt to update the selected + * device's compute partition setting. + * + * @param[in] dv_ind a device index + * + * @param[inout] compute_partition using enum ::rsmi_copmpute_partition_type_t, + * define what the selected device's compute partition setting should be + * updated to. + * + * @retval ::RSMI_STATUS_SUCCESS call was successful + * @retval ::RSMI_STATUS_PERMISSION function requires root access + * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid + * @retval ::RSMI_STATUS_NOT_SUPPORTED installed software or hardware does not + * support this function with the given arguments + * + */ +rsmi_status_t +rsmi_dev_compute_partition_set(uint32_t dv_ind, + rsmi_compute_partition_type_t compute_partition); + +/** @} */ // end of ComputePartition + /*****************************************************************************/ /** @defgroup APISupport Supported Functions * API function support varies by both GPU type and the version of the diff --git a/include/rocm_smi/rocm_smi_device.h b/include/rocm_smi/rocm_smi_device.h index aef25c2804..d76ddfa4de 100755 --- a/include/rocm_smi/rocm_smi_device.h +++ b/include/rocm_smi/rocm_smi_device.h @@ -3,7 +3,7 @@ * The University of Illinois/NCSA * Open Source License (NCSA) * - * Copyright (c) 2017, Advanced Micro Devices, Inc. + * Copyright (c) 2017-2023, Advanced Micro Devices, Inc. * All rights reserved. * * Developed by: @@ -161,7 +161,8 @@ enum DevInfoTypes { kDevMemPageBad, kDevNumaNode, kDevGpuMetrics, - kDevGpuReset + kDevGpuReset, + kDevComputePartition }; typedef struct { diff --git a/include/rocm_smi/rocm_smi_main.h b/include/rocm_smi/rocm_smi_main.h index 126bbd7436..c6d5f077b9 100755 --- a/include/rocm_smi/rocm_smi_main.h +++ b/include/rocm_smi/rocm_smi_main.h @@ -113,6 +113,7 @@ class RocmSMI { uint64_t *weight); int get_node_index(uint32_t dv_ind, uint32_t *node_ind); const RocmSMI_env_vars& getEnv(void); + static const std::map devInfoTypesStrings; private: std::vector> devices_; diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index 6c0385a45a..8a5c664bb6 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -760,7 +760,7 @@ def resetPerfDeterminism(deviceList): if rsmi_ret_ok(ret, device, 'disable performance determinism'): printLog(device, 'Successfully disabled performance determinism', None) else: - logging.error('GPU[%s]\t\t: Unable to diable performance determinism', device) + logging.error('GPU[%s]\t\t: Unable to disable performance determinism', device) printLogSpacer() @@ -1305,6 +1305,37 @@ def setProfile(deviceList, profile): printLogSpacer() +def setComputePartition(deviceList, computePartitionType): + """ Sets compute partitioning for a list of device + + @param deviceList: List of DRM devices (can be a single-item list) + @param computePartition: Compute Partition type to set as + """ + printLogSpacer(' Set compute partition to %s ' % (str(computePartitionType).upper())) + for device in deviceList: + computePartitionType = computePartitionType.upper() + if computePartitionType not in compute_partition_type_l: + printErrLog(device, 'Invalid compute partition type %s' + '\nValid compute partition types are %s' + % ( computePartitionType.upper(), + (', '.join(map(str, compute_partition_type_l))) )) + return (None, None) + ret = rocmsmi.rsmi_dev_compute_partition_set(device, + rsmi_compute_partition_type_dict[computePartitionType]) + if rsmi_ret_ok(ret, device, silent=True): + printLog(device, + 'Successfully set compute partition to %s' % (computePartitionType), + None) + elif ret == rsmi_status_t.RSMI_STATUS_PERMISSION: + printLog(device, 'Permission denied', None) + elif ret == rsmi_status_t.RSMI_STATUS_NOT_SUPPORTED: + printLog(device, 'Not supported on the given system', None) + else: + rsmi_ret_ok(ret, device) + printErrLog(device, 'Failed to retrieve compute partition, even though device supports it.') + printLogSpacer() + + def showAllConcise(deviceList): """ Display critical info for all devices in a concise format @@ -2732,6 +2763,24 @@ def showNodesBw(deviceList): if nonXgmi: printLog(None,"Non-xGMI links detected and is currently not supported", None) +def showComputePartition(deviceList): + """ Returns the current compute partitioning for a list of devices + + @param deviceList: List of DRM devices (can be a single-item list) + """ + currentComputePartition = create_string_buffer(256) + printLogSpacer(' Current Compute Partition ') + for device in deviceList: + ret = rocmsmi.rsmi_dev_compute_partition_get(device, currentComputePartition, 256) + if rsmi_ret_ok(ret, device, silent=True) and currentComputePartition.value.decode(): + printLog(device, 'Compute Partition', currentComputePartition.value.decode()) + elif ret == rsmi_status_t.RSMI_STATUS_NOT_SUPPORTED: + printLog(device, 'Not supported on the given system', None) + else: + rsmi_ret_ok(ret, device) + printErrLog(device, 'Failed to retrieve compute partition, even though device supports it.', None) + printLogSpacer() + def checkAmdGpus(deviceList): """ Check if there are any AMD GPUs being queried, return False if there are none @@ -2905,6 +2954,8 @@ def relaunchAsSudo(): """ if os.geteuid() != 0: os.execvp('sudo', ['sudo'] + sys.argv) + #keeping below, if we want to run sudo with user's env variables + #os.execvp('sudo', ['sudo', '-E'] + sys.argv) def rsmi_ret_ok(my_ret, device=None, metric=None, silent=False): @@ -2936,7 +2987,6 @@ def rsmi_ret_ok(my_ret, device=None, metric=None, silent=False): return False return True - def save(deviceList, savefilepath): """ Save clock frequencies and fan speeds for a list of devices to a specified file path. @@ -3077,6 +3127,7 @@ if __name__ == '__main__': groupDisplay.add_argument('--showenergycounter', help='Energy accumulator that stores amount of energy consumed', action='store_true') groupDisplay.add_argument('--shownodesbw', help='Shows the numa nodes ', action='store_true') + groupDisplay.add_argument('--showcomputepartition', help='Shows current compute partitioning ', action='store_true') groupActionReset.add_argument('-r', '--resetclocks', help='Reset clocks and OverDrive to default', action='store_true') @@ -3121,6 +3172,10 @@ if __name__ == '__main__': groupAction.add_argument('--setperfdeterminism', help='Set clock frequency limit to get minimal performance variation', type=int, metavar='SCLK', nargs=1) + groupAction.add_argument('--setcomputepartition', help='Set compute partition', + choices=compute_partition_type_l + [x.lower() for x in compute_partition_type_l], + type=str, nargs=1 + ) groupAction.add_argument('--rasenable', help='Enable RAS for specified block and error type', type=str, nargs=2, metavar=('BLOCK', 'ERRTYPE')) groupAction.add_argument('--rasdisable', help='Disable RAS for specified block and error type', type=str, nargs=2, @@ -3158,7 +3213,7 @@ if __name__ == '__main__': or args.resetclocks or args.setprofile or args.resetprofile or args.setoverdrive or args.setmemoverdrive \ or args.setpoweroverdrive or args.resetpoweroverdrive or args.rasenable or args.rasdisable or \ args.rasinject or args.gpureset or args.setperfdeterminism or args.setslevel or args.setmlevel or \ - args.setvc or args.setsrange or args.setmrange or args.setclock: + args.setvc or args.setsrange or args.setmrange or args.setclock or args.setcomputepartition: relaunchAsSudo() # If there is one or more device specified, use that for all commands, otherwise use a @@ -3220,6 +3275,7 @@ if __name__ == '__main__': args.showpidgpus = [] args.showreplaycount = True args.showvc = True + args.showcomputepartition = True if not PRINT_JSON: args.showprofile = True @@ -3348,6 +3404,8 @@ if __name__ == '__main__': showVoltageCurve(deviceList) if args.showenergycounter: showEnergy(deviceList) + if args.showcomputepartition: + showComputePartition(deviceList) if args.setclock: setClocks(deviceList, args.setclock[0], [int(args.setclock[1])]) if args.setsclk: @@ -3386,6 +3444,8 @@ if __name__ == '__main__': setClockRange(deviceList, 'mclk', args.setmrange[0], args.setmrange[1], args.autorespond) if args.setperfdeterminism: setPerfDeterminism(deviceList, args.setperfdeterminism[0]) + if args.setcomputepartition: + setComputePartition(deviceList, args.setcomputepartition[0]) if args.resetprofile: resetProfile(deviceList) if args.resetxgmierr: diff --git a/python_smi_tools/rsmiBindings.py b/python_smi_tools/rsmiBindings.py index 90eb6b3fed..4502b1c62b 100644 --- a/python_smi_tools/rsmiBindings.py +++ b/python_smi_tools/rsmiBindings.py @@ -582,3 +582,28 @@ class rsmi_func_id_value_t(Union): _fields_ = [('id', c_uint64), ('name', c_char_p), ('submodule', submodule_union)] + +class rsmi_compute_partition_type_t(c_int): + RSMI_COMPUTE_PARTITION_INVALID = 0 + RSMI_COMPUTE_PARTITION_CPX = 1 + RSMI_COMPUTE_PARTITION_SPX = 2 + RSMI_COMPUTE_PARTITION_DPX = 3 + RSMI_COMPUTE_PARTITION_TPX = 4 + RSMI_COMPUTE_PARTITION_QPX = 5 + +rsmi_compute_partition_type_dict = { + #'RSMI_COMPUTE_PARTITION_INVALID': 0, + 'CPX': 1, + 'SPX': 2, + 'DPX': 3, + 'TPX': 4, + 'QPX': 5 +} + +rsmi_compute_partition_type = rsmi_compute_partition_type_t + +# compute_partition_type_l includes string names for the rsmi_compute_partition_type_t +# Usage example to get corresponding names: +# compute_partition_type_l[rsmi_compute_partition_type_t.RSMI_COMPUTE_PARTITION_CPX] +# will return string 'CPX' +compute_partition_type_l = ['CPX', 'SPX', 'DPX', 'TPX', 'QPX'] \ No newline at end of file diff --git a/rocm_smi/example/rocm_smi_example.cc b/rocm_smi/example/rocm_smi_example.cc index 08f7710451..58623c7c14 100755 --- a/rocm_smi/example/rocm_smi_example.cc +++ b/rocm_smi/example/rocm_smi_example.cc @@ -5,7 +5,7 @@ * The University of Illinois/NCSA * Open Source License (NCSA) * - * Copyright (c) 2017, Advanced Micro Devices, Inc. + * Copyright (c) 2017-2023, Advanced Micro Devices, Inc. * All rights reserved. * * Developed by: @@ -50,13 +50,14 @@ #include #include #include +#include #include "rocm_smi/rocm_smi.h" #define PRINT_RSMI_ERR(RET) { \ if (RET != RSMI_STATUS_SUCCESS) { \ const char *err_str; \ - std::cout << "RSMI call returned " << (RET) \ + std::cout << "[ERROR] RSMI call returned " << (RET) \ << " at line " << __LINE__ << std::endl; \ rsmi_status_string((RET), &err_str); \ std::cout << err_str << std::endl; \ @@ -70,6 +71,11 @@ } \ } +#define CHK_AND_PRINT_RSMI_ERR_RET(RET) { \ + PRINT_RSMI_ERR(RET) \ + CHK_RSMI_RET(RET) \ +} + #define CHK_RSMI_RET_I(RET) { \ PRINT_RSMI_ERR(RET) \ if (RET != RSMI_STATUS_SUCCESS) { \ @@ -85,6 +91,15 @@ } \ } +#define CHK_RSMI_NOT_SUPPORTED_RET(RET) { \ + if ((RET) == RSMI_STATUS_NOT_SUPPORTED) { \ + std::cout << "This function is not supported in the current environment." \ + << std::endl; \ + } else { \ + CHK_RSMI_RET(RET) \ + } \ +} + static void print_test_header(const char *str, uint32_t dv_ind) { std::cout << "********************************" << std::endl; std::cout << "*** " << str << std::endl; @@ -92,6 +107,10 @@ static void print_test_header(const char *str, uint32_t dv_ind) { std::cout << "Device index: " << dv_ind << std::endl; } +static void print_mini_header(const char *str) { + std::cout << "\n>> " << str << " <<" << std::endl; +} + static const char * power_profile_string(rsmi_power_profile_preset_masks_t profile) { switch (profile) { @@ -112,6 +131,33 @@ power_profile_string(rsmi_power_profile_preset_masks_t profile) { } } +static const std::string +compute_partition_string(rsmi_compute_partition_type partition) { + switch (partition) { + case RSMI_COMPUTE_PARTITION_CPX: + return "CPX"; + case RSMI_COMPUTE_PARTITION_SPX: + return "SPX"; + case RSMI_COMPUTE_PARTITION_DPX: + return "DPX"; + case RSMI_COMPUTE_PARTITION_TPX: + return "TPX"; + case RSMI_COMPUTE_PARTITION_QPX: + return "QPX"; + default: + return "UNKNOWN"; + } +} + +static std::map +mapStringToRSMIComputePartitionTypes { + {"CPX", RSMI_COMPUTE_PARTITION_CPX}, + {"SPX", RSMI_COMPUTE_PARTITION_SPX}, + {"DPX", RSMI_COMPUTE_PARTITION_DPX}, + {"TPX", RSMI_COMPUTE_PARTITION_TPX}, + {"QPX", RSMI_COMPUTE_PARTITION_QPX} +}; + static const char * perf_level_string(rsmi_dev_perf_level_t perf_lvl) { switch (perf_lvl) { @@ -128,6 +174,34 @@ perf_level_string(rsmi_dev_perf_level_t perf_lvl) { } } +static bool isUserRunningAsSudo() { + bool isRunningWithSudo = false; + auto myUID = getuid(); + auto myPrivledges = geteuid(); + if (myUID == myPrivledges) { + isRunningWithSudo = true; + } + return isRunningWithSudo; +} + +bool isFileWritable(rsmi_status_t response) { + // Clock files may not be writable, causing sets to + // return RSMI_STATUS_PERMISSION. If running as sudo, + // this means file is not writable. + // isFileWritable(ret) - intends to capture this + // response situation. + bool fileWritable = true; + if (isUserRunningAsSudo() && (response == RSMI_STATUS_PERMISSION)) { + PRINT_RSMI_ERR(response) + std::cout << "[WARN] User is running with sudo " + << "permissions, file is not writable." << std::endl; + fileWritable = false; + } else { + CHK_AND_PRINT_RSMI_ERR_RET(response) + } + return fileWritable; +} + static rsmi_status_t test_power_profile(uint32_t dv_ind) { rsmi_status_t ret; rsmi_power_profile_status_t status; @@ -355,13 +429,19 @@ static rsmi_status_t test_set_freq(uint32_t dv_ind) { uint32_t freq_bitmask; rsmi_clk_type rsmi_clk; + // Clock files may not be writable, causing sets to + // return RSMI_STATUS_PERMISSION even if running with + // sudo. See isFileWritable() for more info. + print_test_header("Clock Frequency Control", dv_ind); for (uint32_t clk = (uint32_t)RSMI_CLK_TYPE_FIRST; clk <= RSMI_CLK_TYPE_LAST; ++clk) { + std::string miniHeader = "Testing clock" + std::to_string(clk); + print_mini_header(miniHeader.c_str()); rsmi_clk = (rsmi_clk_type)clk; ret = rsmi_dev_gpu_clk_freq_get(dv_ind, rsmi_clk, &f); - CHK_RSMI_RET(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) std::cout << "Initial frequency for clock" << rsmi_clk << " is " << f.current << std::endl; @@ -380,19 +460,20 @@ static rsmi_status_t test_set_freq(uint32_t dv_ind) { " to 0b" << freq_bm_str << " ..." << std::endl; ret = rsmi_dev_gpu_clk_freq_set(dv_ind, rsmi_clk, freq_bitmask); - CHK_RSMI_RET(ret) + isFileWritable(ret); ret = rsmi_dev_gpu_clk_freq_get(dv_ind, rsmi_clk, &f); - CHK_RSMI_RET(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) std::cout << "Frequency is now index " << f.current << std::endl; std::cout << "Resetting mask to all frequencies." << std::endl; ret = rsmi_dev_gpu_clk_freq_set(dv_ind, rsmi_clk, 0xFFFFFFFF); - CHK_RSMI_RET(ret) + isFileWritable(ret); ret = rsmi_dev_perf_level_set_v1(dv_ind, RSMI_DEV_PERF_LEVEL_AUTO); - CHK_RSMI_RET(ret) + isFileWritable(ret); } + std::cout << std::endl; return RSMI_STATUS_SUCCESS; } @@ -406,13 +487,75 @@ static void print_frequencies(rsmi_frequencies_t *f) { std::cout << std::endl; } } + +static rsmi_status_t test_set_compute_partitioning(uint32_t dv_ind) { + rsmi_status_t ret; + uint32_t buffer_len = 10; + char originalComputePartition[buffer_len]; + print_test_header("Compute Partitioning Control", dv_ind); + /** + typedef enum { + RSMI_COMPUTE_PARTITION_INVALID = 0, + RSMI_COMPUTE_PARTITION_CPX, //!< Core mode (CPX)- Per-chip XCC with + //!< shared memory + RSMI_COMPUTE_PARTITION_SPX, //!< Single GPU mode (SPX)- All XCCs work + //!< together with shared memory + RSMI_COMPUTE_PARTITION_DPX, //!< Dual GPU mode (DPX)- Half XCCs work + //!< together with shared memory + RSMI_COMPUTE_PARTITION_TPX, //!< Triple GPU mode (TPX)- One-third XCCs + //!< work together with shared memory + RSMI_COMPUTE_PARTITION_QPX, //!< Quad GPU mode (QPX)- Quarter XCCs + //!< work together with shared memory + } rsmi_compute_partition_type_t; + */ + ret = rsmi_dev_compute_partition_get(dv_ind, originalComputePartition, buffer_len); + CHK_RSMI_NOT_SUPPORTED_RET(ret) + if (ret == RSMI_STATUS_NOT_SUPPORTED) { + std::cout << "Device does not support the compute partition feature." + << std::endl; + std::cout << "*********************************************" << std::endl; + return RSMI_STATUS_SUCCESS; + } else { + CHK_AND_PRINT_RSMI_ERR_RET(ret) + std::cout << "Original compute partition is " << originalComputePartition + << "." << std::endl; + } + + for (int newComputePartition = RSMI_COMPUTE_PARTITION_CPX; + newComputePartition <= RSMI_COMPUTE_PARTITION_QPX; + newComputePartition++) { + rsmi_compute_partition_type newPartition + = static_cast(newComputePartition); + std::cout << "Attempting to set compute partition to " + << compute_partition_string(newPartition) << "..." + << std::endl; + ret = rsmi_dev_compute_partition_set(dv_ind, newPartition); + CHK_RSMI_NOT_SUPPORTED_RET(ret) + std::cout << "Done setting compute partition to " + << compute_partition_string(newPartition) + << "." << std::endl; + std::cout << std::endl << std::endl; + } + + std::string myComputePartition = originalComputePartition; + if (myComputePartition.empty() == false) { + std::cout << "Resetting compute partition to " << originalComputePartition + << "... " << std::endl; + rsmi_compute_partition_type origComputePartitionType + = mapStringToRSMIComputePartitionTypes[originalComputePartition]; + CHK_RSMI_NOT_SUPPORTED_RET(ret) + std::cout << "Done" << std::endl; + ret = rsmi_dev_compute_partition_set(dv_ind, origComputePartitionType); + } + return RSMI_STATUS_SUCCESS; +} + int main() { rsmi_status_t ret; ret = rsmi_init(0); CHK_RSMI_RET_I(ret) - std::string val_str; std::vector val_vec; uint64_t val_ui64, val2_ui64; int64_t val_i64; @@ -424,98 +567,111 @@ int main() { rsmi_gpu_metrics_t p; rsmi_num_monitor_devices(&num_monitor_devs); - for (uint32_t i = 0; i< num_monitor_devs; ++i) { + for (uint32_t i = 0; i < num_monitor_devs; ++i) { ret = rsmi_dev_id_get(i, &val_ui16); CHK_RSMI_RET_I(ret) std::cout << "\t**Device ID: 0x" << std::hex << val_ui64 << std::endl; + std::cout << std::endl << std::endl; + std::cout << "Starting to call " + << "rsmi_dev_compute_partition_get()..." + << std::endl; + char current_compute_partition[256]; + ret = rsmi_dev_compute_partition_get(i, current_compute_partition, 256); + CHK_RSMI_NOT_SUPPORTED_RET(ret) + std::cout << "\t**Current Compute Partition setting: " + << current_compute_partition << std::endl; + ret = rsmi_dev_gpu_metrics_info_get(i, &p); - CHK_RSMI_RET(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) std::cout << "\t**GPU METRICS" << std::endl; ret = rsmi_dev_perf_level_get(i, &pfl); - CHK_RSMI_RET_I(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) std::cout << "\t**Performance Level:" << perf_level_string(pfl) << std::endl; - ret = rsmi_dev_overdrive_level_get(i, &val_ui32); - CHK_RSMI_RET_I(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) std::cout << "\t**OverDrive Level:" << val_ui32 << std::endl; ret = rsmi_dev_gpu_clk_freq_get(i, RSMI_CLK_TYPE_MEM, &f); - CHK_RSMI_RET_I(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) std::cout << "\t**Supported GPU Memory clock frequencies: "; std::cout << f.num_supported << std::endl; print_frequencies(&f); ret = rsmi_dev_gpu_clk_freq_get(i, RSMI_CLK_TYPE_SYS, &f); - CHK_RSMI_RET_I(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) std::cout << "\t**Supported GPU clock frequencies: "; std::cout << f.num_supported << std::endl; print_frequencies(&f); - char name[20]; - ret = rsmi_dev_name_get(i, name, 20); - CHK_RSMI_RET_I(ret) + char name[128]; + ret = rsmi_dev_name_get(i, name, 128); + CHK_AND_PRINT_RSMI_ERR_RET(ret) std::cout << "\t**Monitor name: " << name << std::endl; ret = rsmi_dev_temp_metric_get(i, 0, RSMI_TEMP_CURRENT, &val_i64); - CHK_RSMI_RET_I(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) std::cout << "\t**Temperature: " << val_i64/1000 << "C" << std::endl; ret = rsmi_dev_volt_metric_get(i, RSMI_VOLT_TYPE_VDDGFX, RSMI_VOLT_CURRENT, &val_i64); - CHK_RSMI_RET_I(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) std::cout << "\t**Voltage: " << val_i64 << "mV" << std::endl; ret = rsmi_dev_fan_speed_get(i, 0, &val_i64); - CHK_RSMI_RET_I(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) ret = rsmi_dev_fan_speed_max_get(i, 0, &val_ui64); - CHK_RSMI_RET_I(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) std::cout << "\t**Current Fan Speed: "; std::cout << val_i64/static_cast(val_ui64)*100; std::cout << "% ("<< val_i64 << "/" << val_ui64 << ")" << std::endl; ret = rsmi_dev_fan_rpms_get(i, 0, &val_i64); - CHK_RSMI_RET_I(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) std::cout << "\t**Current fan RPMs: " << val_i64 << std::endl; ret = rsmi_dev_power_cap_get(i, 0, &val_ui64); - CHK_RSMI_PERM_RET(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) std::cout << "\t**Current Power Cap: " << val_ui64 << "uW" <(val_ui64)/1000 << " W" << - std::endl; + std::cout << static_cast(val_ui64)/1000 << " W" << std::endl; + ret = rsmi_dev_power_ave_get(i, 0, &val_ui64); + CHK_AND_PRINT_RSMI_ERR_RET(ret) std::cout << "\t=======" << std::endl; } std::cout << "***** Testing write api's" << std::endl; for (uint32_t i = 0; i< num_monitor_devs; ++i) { ret = test_set_overdrive(i); - CHK_RSMI_RET_I(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) ret = test_set_perf_level(i); - CHK_RSMI_RET_I(ret) - - ret = test_set_freq(i); - CHK_RSMI_RET_I(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) ret = test_set_fan_speed(i); - CHK_RSMI_RET_I(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) ret = test_power_cap(i); - CHK_RSMI_RET_I(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) ret = test_power_profile(i); - CHK_RSMI_RET_I(ret) + CHK_AND_PRINT_RSMI_ERR_RET(ret) + + ret = test_set_compute_partitioning(i); + CHK_AND_PRINT_RSMI_ERR_RET(ret) + + ret = test_set_freq(i); + CHK_AND_PRINT_RSMI_ERR_RET(ret) } return 0; diff --git a/src/rocm_smi.cc b/src/rocm_smi.cc index c2cbb238c1..694015f13d 100755 --- a/src/rocm_smi.cc +++ b/src/rocm_smi.cc @@ -3,7 +3,7 @@ * The University of Illinois/NCSA * Open Source License (NCSA) * - * Copyright (c) 2017, Advanced Micro Devices, Inc. + * Copyright (c) 2017-2023, Advanced Micro Devices, Inc. * All rights reserved. * * Developed by: @@ -45,7 +45,7 @@ #include #include #include -#include +#include #include #include #include @@ -1678,13 +1678,30 @@ static std::vector pci_name_files = { "/var/lib/pciutils/pci.ids" }; - enum eNameStrType { NAME_STR_VENDOR = 0, NAME_STR_DEVICE, NAME_STR_SUBSYS }; +std::map +mapStringToRSMIComputePartitionTypes { + {"CPX", RSMI_COMPUTE_PARTITION_CPX}, + {"SPX", RSMI_COMPUTE_PARTITION_SPX}, + {"DPX", RSMI_COMPUTE_PARTITION_DPX}, + {"TPX", RSMI_COMPUTE_PARTITION_TPX}, + {"QPX", RSMI_COMPUTE_PARTITION_QPX} +}; + +std::map +mapRSMIToStringComputePartitionTypes { + {RSMI_COMPUTE_PARTITION_CPX, "CPX"}, + {RSMI_COMPUTE_PARTITION_SPX, "SPX"}, + {RSMI_COMPUTE_PARTITION_DPX, "DPX"}, + {RSMI_COMPUTE_PARTITION_TPX, "TPX"}, + {RSMI_COMPUTE_PARTITION_QPX, "QPX"} +}; + static std::string get_id_name_str_from_line(uint64_t id, std::string ln, std::istringstream *ln_str) { @@ -3697,6 +3714,117 @@ rsmi_is_P2P_accessible(uint32_t dv_ind_src, uint32_t dv_ind_dst, CATCH } +static rsmi_status_t +get_compute_partition(uint32_t dv_ind, std::string &compute_partition) { + TRY + std::string val_str; + + if (compute_partition.c_str() == nullptr) { + return RSMI_STATUS_INVALID_ARGS; + } + CHK_SUPPORT_NAME_ONLY(compute_partition.c_str()) + + DEVICE_MUTEX + rsmi_status_t ret = get_dev_value_str(amd::smi::kDevComputePartition, + dv_ind, &val_str); + + if (ret != RSMI_STATUS_SUCCESS) { + return ret; + } + + switch (mapStringToRSMIComputePartitionTypes[val_str]) { + case RSMI_COMPUTE_PARTITION_INVALID: + // Retrieved an unknown compute partition + return RSMI_STATUS_UNEXPECTED_DATA; + case RSMI_COMPUTE_PARTITION_CPX: + break; + case RSMI_COMPUTE_PARTITION_SPX: + break; + case RSMI_COMPUTE_PARTITION_DPX: + break; + case RSMI_COMPUTE_PARTITION_TPX: + break; + case RSMI_COMPUTE_PARTITION_QPX: + break; + default: + // Retrieved an unknown compute partition + return RSMI_STATUS_UNEXPECTED_DATA; + } + compute_partition = val_str; + return RSMI_STATUS_SUCCESS; + CATCH +} + +rsmi_status_t +rsmi_dev_compute_partition_get(uint32_t dv_ind, char *compute_partition, + uint32_t len) { + CHK_SUPPORT_NAME_ONLY(compute_partition) + if ((len == 0) || (compute_partition == nullptr)) { + return RSMI_STATUS_INVALID_ARGS; + } + + TRY + std::string returning_compute_partition; + rsmi_status_t ret = get_compute_partition(dv_ind, + returning_compute_partition); + + if (ret != RSMI_STATUS_SUCCESS) { return ret; } + + std::size_t length = returning_compute_partition.copy(compute_partition, len); + compute_partition[length]='\0'; + + if (len < (returning_compute_partition.size() + 1)) { + return RSMI_STATUS_INSUFFICIENT_SIZE; + } + return ret; + CATCH +} + +rsmi_status_t +rsmi_dev_compute_partition_set(uint32_t dv_ind, + rsmi_compute_partition_type_t compute_partition) { + TRY + REQUIRE_ROOT_ACCESS + DEVICE_MUTEX + + std::string newComputePartitionStr + = mapRSMIToStringComputePartitionTypes[compute_partition]; + std::string currentComputePartition; + + switch (compute_partition) { + case RSMI_COMPUTE_PARTITION_INVALID: + // Retrieved an unknown compute partition + return RSMI_STATUS_INVALID_ARGS; + case RSMI_COMPUTE_PARTITION_CPX: + break; + case RSMI_COMPUTE_PARTITION_SPX: + break; + case RSMI_COMPUTE_PARTITION_DPX: + break; + case RSMI_COMPUTE_PARTITION_TPX: + break; + case RSMI_COMPUTE_PARTITION_QPX: + break; + default: + return RSMI_STATUS_INVALID_ARGS; + } + + // do nothing if compute_partition is the current compute partition + get_compute_partition(dv_ind, currentComputePartition); + rsmi_compute_partition_type_t currRSMIComputePartition + = mapStringToRSMIComputePartitionTypes[currentComputePartition]; + if (currRSMIComputePartition == compute_partition) { + return RSMI_STATUS_SUCCESS; + } + + newComputePartitionStr = mapRSMIToStringComputePartitionTypes[compute_partition]; + GET_DEV_FROM_INDX + int ret = dev->writeDevInfo(amd::smi::kDevComputePartition, + newComputePartitionStr); + return amd::smi::ErrnoToRsmiStatus(ret); + CATCH +} + enum iterator_handle_type { FUNC_ITER = 0, VARIANT_ITER, diff --git a/src/rocm_smi_device.cc b/src/rocm_smi_device.cc index 0eade39ce5..4421599c13 100755 --- a/src/rocm_smi_device.cc +++ b/src/rocm_smi_device.cc @@ -3,7 +3,7 @@ * The University of Illinois/NCSA * Open Source License (NCSA) * - * Copyright (c) 2017, Advanced Micro Devices, Inc. + * Copyright (c) 2017-2023, Advanced Micro Devices, Inc. * All rights reserved. * * Developed by: @@ -121,6 +121,7 @@ static const char *kDevXGMIErrorFName = "xgmi_error"; static const char *kDevSerialNumberFName = "serial_number"; static const char *kDevNumaNodeFName = "numa_node"; static const char *kDevGpuMetricsFName = "gpu_metrics"; +static const char *kDevComputePartitionFName = "current_compute_partition"; // Firmware version files static const char *kDevFwVersionAsdFName = "fw_version/asd_fw_version"; @@ -290,6 +291,7 @@ static const std::map kDevAttribNameMap = { {kDevNumaNode, kDevNumaNodeFName}, {kDevGpuMetrics, kDevGpuMetricsFName}, {kDevGpuReset, kDevGpuResetFName}, + {kDevComputePartition, kDevComputePartitionFName}, }; static const std::map kDevPerfLvlMap = { @@ -413,6 +415,8 @@ static const std::map kDevFuncDependsMap = { {"rsmi_topo_numa_affinity_get", {{kDevNumaNodeFName}, {}}}, {"rsmi_dev_gpu_metrics_info_get", {{kDevGpuMetricsFName}, {}}}, {"rsmi_dev_gpu_reset", {{kDevGpuResetFName}, {}}}, + {"rsmi_dev_compute_partition_get", {{kDevComputePartitionFName}, {}}}, + {"rsmi_dev_compute_partition_set", {{kDevComputePartitionFName}, {}}}, // These functions with variants, but no sensors/units. (May or may not // have mandatory dependencies.) @@ -563,9 +567,6 @@ int Device::openSysfsFileStream(DevInfoTypes type, T *fs, const char *str) { if (env_->path_DRM_root_override && type == env_->enum_override) { sysfs_path = env_->path_DRM_root_override; - if (str) { - sysfs_path += ".write"; - } } #endif @@ -587,7 +588,7 @@ int Device::openSysfsFileStream(DevInfoTypes type, T *fs, const char *str) { fs->open(sysfs_path); if (!fs->is_open()) { - return errno; + return errno; } return 0; @@ -696,6 +697,7 @@ int Device::writeDevInfo(DevInfoTypes type, std::string val) { case kDevPCIEClk: case kDevPowerODVoltage: case kDevSOCClk: + case kDevComputePartition: return writeDevInfoStr(type, val); default: @@ -922,6 +924,7 @@ int Device::readDevInfo(DevInfoTypes type, std::string *val) { case kDevVBiosVer: case kDevPCIEThruPut: case kDevSerialNumber: + case kDevComputePartition: return readDevInfoStr(type, val); break; diff --git a/src/rocm_smi_gpu_metrics.cc b/src/rocm_smi_gpu_metrics.cc index 1f9fad479c..3f540bc850 100755 --- a/src/rocm_smi_gpu_metrics.cc +++ b/src/rocm_smi_gpu_metrics.cc @@ -3,7 +3,7 @@ * The University of Illinois/NCSA * Open Source License (NCSA) * - * Copyright (c) 2021, Advanced Micro Devices, Inc. + * Copyright (c) 2017-2023, Advanced Micro Devices, Inc. * All rights reserved. * * Developed by: @@ -280,7 +280,7 @@ rsmi_dev_gpu_metrics_info_get(uint32_t dv_ind, rsmi_gpu_metrics_t *smu) { return RSMI_STATUS_NOT_SUPPORTED; } - // Initialize the smu fiedls to zero as some of them only valid in + // Initialize the smu fields to zero as some of them only valid in // a specific version. *smu = {}; diff --git a/src/rocm_smi_main.cc b/src/rocm_smi_main.cc index 40541d9280..ca992d51ce 100755 --- a/src/rocm_smi_main.cc +++ b/src/rocm_smi_main.cc @@ -2,7 +2,7 @@ * The University of Illinois/NCSA * Open Source License (NCSA) * - * Copyright (c) 2017, Advanced Micro Devices, Inc. + * Copyright (c) 2017-2023, Advanced Micro Devices, Inc. * All rights reserved. * * Developed by: @@ -73,6 +73,77 @@ static const char *kDeviceNamePrefix = "card"; static const char *kAMDMonitorTypes[] = {"radeon", "amdgpu", ""}; +static const std::string amdSMI = "amd::smi::"; +const std::map amd::smi::RocmSMI::devInfoTypesStrings = { + {amd::smi::kDevPerfLevel, amdSMI + "kDevPerfLevel"}, + {amd::smi::kDevOverDriveLevel, amdSMI + "kDevOverDriveLevel"}, + {amd::smi::kDevMemOverDriveLevel, amdSMI + "kDevMemOverDriveLevel"}, + {amd::smi::kDevDevID, amdSMI + "kDevDevID"}, + {amd::smi::kDevDevProdName, amdSMI + "kDevDevProdName"}, + {amd::smi::kDevDevProdNum, amdSMI + "kDevDevProdNum"}, + {amd::smi::kDevVendorID, amdSMI + "kDevVendorID"}, + {amd::smi::kDevSubSysDevID, amdSMI + "kDevSubSysDevID"}, + {amd::smi::kDevSubSysVendorID, amdSMI + "kDevSubSysVendorID"}, + {amd::smi::kDevGPUMClk, amdSMI + "kDevGPUMClk"}, + {amd::smi::kDevGPUSClk, amdSMI + "kDevGPUSClk"}, + {amd::smi::kDevDCEFClk, amdSMI + "kDevDCEFClk"}, + {amd::smi::kDevFClk, amdSMI + "kDevFClk"}, + {amd::smi::kDevSOCClk, amdSMI + "kDevSOCClk"}, + {amd::smi::kDevPCIEClk, amdSMI + "kDevPCIEClk"}, + {amd::smi::kDevPowerProfileMode, amdSMI + "kDevPowerProfileMode"}, + {amd::smi::kDevUsage, amdSMI + "kDevUsage"}, + {amd::smi::kDevPowerODVoltage, amdSMI + "kDevPowerODVoltage"}, + {amd::smi::kDevVBiosVer, amdSMI + "kDevVBiosVer"}, + {amd::smi::kDevPCIEThruPut, amdSMI + "kDevPCIEThruPut"}, + {amd::smi::kDevErrCntSDMA, amdSMI + "kDevErrCntSDMA"}, + {amd::smi::kDevErrCntUMC, amdSMI + "kDevErrCntUMC"}, + {amd::smi::kDevErrCntGFX, amdSMI + "kDevErrCntGFX"}, + {amd::smi::kDevErrCntMMHUB, amdSMI + "kDevErrCntMMHUB"}, + {amd::smi::kDevErrCntPCIEBIF, amdSMI + "kDevErrCntPCIEBIF"}, + {amd::smi::kDevErrCntHDP, amdSMI + "kDevErrCntHDP"}, + {amd::smi::kDevErrCntXGMIWAFL, amdSMI + "kDevErrCntXGMIWAFL"}, + {amd::smi::kDevErrCntFeatures, amdSMI + "kDevErrCntFeatures"}, + {amd::smi::kDevMemTotGTT, amdSMI + "kDevMemTotGTT"}, + {amd::smi::kDevMemTotVisVRAM, amdSMI + "kDevMemTotVisVRAM"}, + {amd::smi::kDevMemTotVRAM, amdSMI + "kDevMemTotVRAM"}, + {amd::smi::kDevMemUsedGTT, amdSMI + "kDevMemUsedGTT"}, + {amd::smi::kDevMemUsedVisVRAM, amdSMI + "kDevMemUsedVisVRAM"}, + {amd::smi::kDevMemUsedVRAM, amdSMI + "kDevMemUsedVRAM"}, + {amd::smi::kDevVramVendor, amdSMI + "kDevVramVendor"}, + {amd::smi::kDevPCIEReplayCount, amdSMI + "kDevPCIEReplayCount"}, + {amd::smi::kDevUniqueId, amdSMI + "kDevUniqueId"}, + {amd::smi::kDevDFCountersAvailable, amdSMI + "kDevDFCountersAvailable"}, + {amd::smi::kDevMemBusyPercent, amdSMI + "kDevMemBusyPercent"}, + {amd::smi::kDevXGMIError, amdSMI + "kDevXGMIError"}, + {amd::smi::kDevFwVersionAsd, amdSMI + "kDevFwVersionAsd"}, + {amd::smi::kDevFwVersionCe, amdSMI + "kDevFwVersionCe"}, + {amd::smi::kDevFwVersionDmcu, amdSMI + "kDevFwVersionDmcu"}, + {amd::smi::kDevFwVersionMc, amdSMI + "kDevFwVersionMc"}, + {amd::smi::kDevFwVersionMe, amdSMI + "kDevFwVersionMe"}, + {amd::smi::kDevFwVersionMec, amdSMI + "kDevFwVersionMec"}, + {amd::smi::kDevFwVersionMec2, amdSMI + "kDevFwVersionMec2"}, + {amd::smi::kDevFwVersionPfp, amdSMI + "kDevFwVersionPfp"}, + {amd::smi::kDevFwVersionRlc, amdSMI + "kDevFwVersionRlc"}, + {amd::smi::kDevFwVersionRlcSrlc, amdSMI + "kDevFwVersionRlcSrlc"}, + {amd::smi::kDevFwVersionRlcSrlg, amdSMI + "kDevFwVersionRlcSrlg"}, + {amd::smi::kDevFwVersionRlcSrls, amdSMI + "kDevFwVersionRlcSrls"}, + {amd::smi::kDevFwVersionSdma, amdSMI + "kDevFwVersionSdma"}, + {amd::smi::kDevFwVersionSdma2, amdSMI + "kDevFwVersionSdma2"}, + {amd::smi::kDevFwVersionSmc, amdSMI + "kDevFwVersionSmc"}, + {amd::smi::kDevFwVersionSos, amdSMI + "kDevFwVersionSos"}, + {amd::smi::kDevFwVersionTaRas, amdSMI + "kDevFwVersionTaRas"}, + {amd::smi::kDevFwVersionTaXgmi, amdSMI + "kDevFwVersionTaXgmi"}, + {amd::smi::kDevFwVersionUvd, amdSMI + "kDevFwVersionUvd"}, + {amd::smi::kDevFwVersionVce, amdSMI + "kDevFwVersionVce"}, + {amd::smi::kDevFwVersionVcn, amdSMI + "kDevFwVersionVcn"}, + {amd::smi::kDevSerialNumber, amdSMI + "kDevSerialNumber"}, + {amd::smi::kDevMemPageBad, amdSMI + "kDevMemPageBad"}, + {amd::smi::kDevNumaNode, amdSMI + "kDevNumaNode"}, + {amd::smi::kDevGpuMetrics, amdSMI + "kDevGpuMetrics"}, + {amd::smi::kDevGpuReset, amdSMI + "kDevGpuReset"}, + {amd::smi::kDevComputePartition, amdSMI + "kDevComputePartition"} +}; + namespace amd { namespace smi { @@ -179,6 +250,8 @@ static bool bdfid_from_path(const std::string in_name, uint64_t *bdfid) { return true; } +// 0 = successful bdfid found +// 1 = not a good bdfid found static uint32_t ConstructBDFID(std::string path, uint64_t *bdfid) { assert(bdfid != nullptr); char tpath[256] = {'\0'}; diff --git a/tests/rocm_smi_test/functional/computepartition_read_write.cc b/tests/rocm_smi_test/functional/computepartition_read_write.cc new file mode 100755 index 0000000000..8e22022716 --- /dev/null +++ b/tests/rocm_smi_test/functional/computepartition_read_write.cc @@ -0,0 +1,324 @@ +/* + * ============================================================================= + * ROC Runtime Conformance Release License + * ============================================================================= + * The University of Illinois/NCSA + * Open Source License (NCSA) + * + * Copyright (c) 2017-2023, Advanced Micro Devices, Inc. + * All rights reserved. + * + * Developed by: + * + * AMD Research and AMD ROC Software Development + * + * Advanced Micro Devices, Inc. + * + * www.amd.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal with the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimers. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimers in + * the documentation and/or other materials provided with the distribution. + * - Neither the names of , + * nor the names of its contributors may be used to endorse or promote + * products derived from this Software without specific prior written + * permission. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS WITH THE SOFTWARE. + * + */ + +#include +#include + +#include + +#include "gtest/gtest.h" +#include "rocm_smi/rocm_smi.h" +#include "rocm_smi_test/functional/computepartition_read_write.h" +#include "rocm_smi_test/test_common.h" + +TestComputePartitionReadWrite::TestComputePartitionReadWrite() : TestBase() { + set_title("RSMI Compute Partition Read/Write Test"); + set_description("The Compute Parition tests verifies that the compute " + "parition can be read and updated properly."); +} + +TestComputePartitionReadWrite::~TestComputePartitionReadWrite(void) { +} + +void TestComputePartitionReadWrite::SetUp(void) { + TestBase::SetUp(); + + return; +} + +void TestComputePartitionReadWrite::DisplayTestInfo(void) { + TestBase::DisplayTestInfo(); +} + +void TestComputePartitionReadWrite::DisplayResults(void) const { + TestBase::DisplayResults(); + return; +} + +void TestComputePartitionReadWrite::Close() { + // This will close handles opened within rsmitst utility calls and call + // rsmi_shut_down(), so it should be done after other hsa cleanup + TestBase::Close(); +} + +static const std::string +computePartitionString(rsmi_compute_partition_type computeParitionType) { + /** + * RSMI_COMPUTE_PARTITION_INVALID = 0, + * RSMI_COMPUTE_PARTITION_CPX, //!< Core mode (CPX)- Per-chip XCC with + * //!< shared memory + * RSMI_COMPUTE_PARTITION_SPX, //!< Single GPU mode (SPX)- All XCCs work + * //!< together with shared memory + * RSMI_COMPUTE_PARTITION_DPX, //!< Dual GPU mode (DPX)- Half XCCs work + * //!< together with shared memory + * RSMI_COMPUTE_PARTITION_TPX, //!< Triple GPU mode (TPX)- One-third XCCs + * //!< work together with shared memory + * RSMI_COMPUTE_PARTITION_QPX, //!< Quad GPU mode (QPX)- Quarter XCCs + * //!< work together with shared memory + */ + switch (computeParitionType) { + case RSMI_COMPUTE_PARTITION_CPX: + return "CPX"; + case RSMI_COMPUTE_PARTITION_SPX: + return "SPX"; + case RSMI_COMPUTE_PARTITION_DPX: + return "DPX"; + case RSMI_COMPUTE_PARTITION_TPX: + return "TPX"; + case RSMI_COMPUTE_PARTITION_QPX: + return "QPX"; + default: + return "UNKNOWN"; + } +} + +static const std::map +mapStringToRSMIComputePartitionTypes { + {"CPX", RSMI_COMPUTE_PARTITION_CPX}, + {"SPX", RSMI_COMPUTE_PARTITION_SPX}, + {"DPX", RSMI_COMPUTE_PARTITION_DPX}, + {"TPX", RSMI_COMPUTE_PARTITION_TPX}, + {"QPX", RSMI_COMPUTE_PARTITION_QPX} +}; + +void TestComputePartitionReadWrite::Run(void) { + rsmi_status_t ret, err; + char orig_char_computePartition[255]; + char current_char_computePartition[255]; + rsmi_compute_partition_type new_computePartition; + + TestBase::Run(); + if (setup_failed_) { + std::cout << "** SetUp Failed for this test. Skipping.**" << std::endl; + return; + } + + for (uint32_t dv_ind = 0; dv_ind < num_monitor_devs(); ++dv_ind) { + PrintDeviceHeader(dv_ind); + + //Standard checks to see if API is supported, before running full tests + ret = rsmi_dev_compute_partition_get(dv_ind, orig_char_computePartition, + 255); + if (ret == RSMI_STATUS_NOT_SUPPORTED) { + IF_VERB(STANDARD) { + std::cout << "\t**" << ": " + << "Not supported on this machine" << std::endl; + } + return; + } else { + CHK_ERR_ASRT(ret) + } + IF_VERB(STANDARD) { + std::cout << std::endl << "\t**" + << "Original compute partition: " + << orig_char_computePartition << std::endl; + } + + if ((orig_char_computePartition == NULL) || + (orig_char_computePartition[0] == '\0')) { + std::cout << "***System compute partition value is not defined. " + "Skip compute partition test." << std::endl; + return; + } + EXPECT_EQ(RSMI_STATUS_SUCCESS, ret); + + // Verify api support checking functionality is working + uint32_t length = 2; + char smallBuffer[length]; + err = rsmi_dev_compute_partition_get(dv_ind, smallBuffer, length); + size_t size = sizeof(smallBuffer)/sizeof(*smallBuffer); + ASSERT_EQ(err, RSMI_STATUS_INSUFFICIENT_SIZE); + ASSERT_EQ((size_t)length, size); + IF_VERB(STANDARD) { + if (err == RSMI_STATUS_INSUFFICIENT_SIZE) { + std::cout << "\t**" + << "Confirmed RSMI_STATUS_INSUFFICIENT_SIZE was returned " + << "and size matches length requested." << std::endl; + } + } + + // Verify api support checking functionality is working + err = rsmi_dev_compute_partition_get(dv_ind, nullptr, 255); + ASSERT_EQ(err, RSMI_STATUS_NOT_SUPPORTED); + IF_VERB(STANDARD) { + if (err == RSMI_STATUS_NOT_SUPPORTED) { + std::cout << "\t**" + << "Confirmed RSMI_STATUS_NOT_SUPPORTED was returned." + << std::endl; + } + } + + // Verify api support checking functionality is working + err = rsmi_dev_compute_partition_get(dv_ind, orig_char_computePartition, 0); + ASSERT_EQ(err, (RSMI_STATUS_INVALID_ARGS || RSMI_STATUS_NOT_SUPPORTED)); + IF_VERB(STANDARD) { + if (err == RSMI_STATUS_INVALID_ARGS) { + std::cout << "\t**" + << "Confirmed RSMI_STATUS_INVALID_ARGS was returned." + << std::endl; + } + } + + // Verify api support checking functionality is working + err = rsmi_dev_compute_partition_set(dv_ind, new_computePartition); + // Note: new_computePartition is not set + // DISPLAY_RSMI_ERR(err) + EXPECT_TRUE((err == RSMI_STATUS_INVALID_ARGS) || + (err == RSMI_STATUS_NOT_SUPPORTED)); + IF_VERB(STANDARD) { + if (err == RSMI_STATUS_INVALID_ARGS) { + std::cout << "\t**" + << "Confirmed RSMI_STATUS_INVALID_ARGS was returned." + << std::endl; + } else { + DISPLAY_RSMI_ERR(err) + } + } + ASSERT_FALSE(err == RSMI_STATUS_PERMISSION); + + // Verify api support checking functionality is working + new_computePartition + = rsmi_compute_partition_type::RSMI_COMPUTE_PARTITION_INVALID; + err = rsmi_dev_compute_partition_set(dv_ind, new_computePartition); + // DISPLAY_RSMI_ERR(err) + EXPECT_TRUE((err == RSMI_STATUS_INVALID_ARGS) || + (err == RSMI_STATUS_NOT_SUPPORTED) || + (err == RSMI_STATUS_PERMISSION)); + IF_VERB(STANDARD) { + if (err == RSMI_STATUS_INVALID_ARGS) { + std::cout << "\t**" + << "Confirmed RSMI_STATUS_INVALID_ARGS was returned." + << std::endl; + } else if (err == RSMI_STATUS_PERMISSION) { + DISPLAY_RSMI_ERR(err) + // tests should not continue if err is a permission issue + ASSERT_FALSE(err == RSMI_STATUS_PERMISSION); + } else { + DISPLAY_RSMI_ERR(err) + } + } + + // Re-run original get, so we can reset to later + ret = rsmi_dev_compute_partition_get(dv_ind, orig_char_computePartition, + 255); + EXPECT_EQ(RSMI_STATUS_SUCCESS, ret); + + /** + * RSMI_COMPUTE_PARTITION_INVALID = 0, + * RSMI_COMPUTE_PARTITION_CPX, //!< Core mode (CPX)- Per-chip XCC with + * //!< shared memory + * RSMI_COMPUTE_PARTITION_SPX, //!< Single GPU mode (SPX)- All XCCs work + * //!< together with shared memory + * RSMI_COMPUTE_PARTITION_DPX, //!< Dual GPU mode (DPX)- Half XCCs work + * //!< together with shared memory + * RSMI_COMPUTE_PARTITION_TPX, //!< Triple GPU mode (TPX)- One-third XCCs + * //!< work together with shared memory + * RSMI_COMPUTE_PARTITION_QPX, //!< Quad GPU mode (QPX)- Quarter XCCs + * //!< work together with shared memory + */ + + for (int partition = RSMI_COMPUTE_PARTITION_CPX; + partition <= RSMI_COMPUTE_PARTITION_QPX; + partition++) { + new_computePartition + = static_cast(partition); + IF_VERB(STANDARD) { + std::cout << std::endl; + std::cout << "\t**" + << "======== TEST RSMI_COMPUTE_PARTITION_" + << computePartitionString(new_computePartition) + << " ===============" << std::endl; + } + ret = rsmi_dev_compute_partition_set(dv_ind, new_computePartition); + CHK_ERR_ASRT(ret) + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Attempting to set compute partition to: " + << computePartitionString(new_computePartition) << std::endl; + } + ret = rsmi_dev_compute_partition_get(dv_ind, current_char_computePartition, + 255); + CHK_ERR_ASRT(ret) + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Current compute partition: " + << current_char_computePartition + << std::endl; + } + EXPECT_EQ(RSMI_STATUS_SUCCESS, ret); + EXPECT_STREQ(computePartitionString(new_computePartition).c_str(), + current_char_computePartition); + } + + /* TEST RETURN TO ORIGINAL COMPUTE PARTITIONING SETTING */ + IF_VERB(STANDARD) { + std::cout << std::endl; + std::cout << "\t**" + << "=========== TEST RETURN TO ORIGINAL COMPUTE PARTITIONING " + << "SETTING ========" << std::endl; + } + new_computePartition + = mapStringToRSMIComputePartitionTypes.at(orig_char_computePartition); + ret = rsmi_dev_compute_partition_set(dv_ind, new_computePartition); + CHK_ERR_ASRT(ret) + IF_VERB(STANDARD) { + std::cout << "\t**" << "Returning compute partition to: " + << computePartitionString(new_computePartition) << std::endl; + } + ret = rsmi_dev_compute_partition_get(dv_ind, current_char_computePartition, + 255); + CHK_ERR_ASRT(ret) + IF_VERB(STANDARD) { + std::cout << "\t**" << "Attempted to set compute partition: " + << computePartitionString(new_computePartition) << std::endl + << "\t**" + << "Current compute partition: " << current_char_computePartition + << std::endl; + } + EXPECT_EQ(RSMI_STATUS_SUCCESS, ret); + EXPECT_STREQ(computePartitionString(new_computePartition).c_str(), + current_char_computePartition); + } +} diff --git a/tests/rocm_smi_test/functional/computepartition_read_write.h b/tests/rocm_smi_test/functional/computepartition_read_write.h new file mode 100755 index 0000000000..a2e3627fc2 --- /dev/null +++ b/tests/rocm_smi_test/functional/computepartition_read_write.h @@ -0,0 +1,73 @@ +/* + * ============================================================================= + * ROC Runtime Conformance Release License + * ============================================================================= + * The University of Illinois/NCSA + * Open Source License (NCSA) + * + * Copyright (c) 2017-2023, Advanced Micro Devices, Inc. + * All rights reserved. + * + * Developed by: + * + * AMD Research and AMD ROC Software Development + * + * Advanced Micro Devices, Inc. + * + * www.amd.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal with the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimers. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimers in + * the documentation and/or other materials provided with the distribution. + * - Neither the names of , + * nor the names of its contributors may be used to endorse or promote + * products derived from this Software without specific prior written + * permission. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS WITH THE SOFTWARE. + * + */ +#ifndef TESTS_ROCM_SMI_TEST_FUNCTIONAL_COMPUTEPARTITION_READ_WRITE_H_ +#define TESTS_ROCM_SMI_TEST_FUNCTIONAL_COMPUTEPARTITION_READ_WRITE_H_ + +#include "rocm_smi_test/test_base.h" + +class TestComputePartitionReadWrite : public TestBase { + public: + TestComputePartitionReadWrite(); + + // @Brief: Destructor for test case of TestComputePartitionReadWrite + virtual ~TestComputePartitionReadWrite(); + + // @Brief: Setup the environment for measurement + virtual void SetUp(); + + // @Brief: Core measurement execution + virtual void Run(); + + // @Brief: Clean up and retrive the resource + virtual void Close(); + + // @Brief: Display results + virtual void DisplayResults() const; + + // @Brief: Display information about what this test does + virtual void DisplayTestInfo(void); +}; + +#endif // TESTS_ROCM_SMI_TEST_FUNCTIONAL_COMPUTEPARTITION_READ_WRITE_H_ diff --git a/tests/rocm_smi_test/main.cc b/tests/rocm_smi_test/main.cc index 8dc7b51c9b..369c049042 100755 --- a/tests/rocm_smi_test/main.cc +++ b/tests/rocm_smi_test/main.cc @@ -5,7 +5,7 @@ * The University of Illinois/NCSA * Open Source License (NCSA) * - * Copyright (c) 2018, Advanced Micro Devices, Inc. + * Copyright (c) 2017-2023, Advanced Micro Devices, Inc. * All rights reserved. * * Developed by: @@ -81,6 +81,7 @@ #include "functional/mutual_exclusion.h" #include "functional/evt_notif_read_write.h" #include "functional/init_shutdown_refcount.h" +#include "functional/computepartition_read_write.h" #include "rocm_smi_test/functional/hw_topology_read.h" #include "rocm_smi_test/functional/gpu_metrics_read.h" #include "rocm_smi_test/functional/metrics_counter_read.h" @@ -267,6 +268,10 @@ TEST(rsmitstReadWrite, TestEvtNotifReadWrite) { TestEvtNotifReadWrite tst; RunGenericTest(&tst); } +TEST(rsmitstReadWrite, TestComputePartitionReadWrite) { + TestComputePartitionReadWrite tst; + RunGenericTest(&tst); +} TEST(rsmitstReadOnly, TestConcurrentInit) { TestConcurrentInit tst; SetFlags(&tst); From 99034af009ab141163c83a817d6ac8380370760d Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Fri, 13 Jan 2023 14:06:53 -0600 Subject: [PATCH 27/85] Add missing string header for memcpy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix compile error: ‘memcpy’ was not declared Change-Id: I54d1849a3a18901baac1e24986b82067eb2fd6b4 --- src/rocm_smi_gpu_metrics.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/rocm_smi_gpu_metrics.cc b/src/rocm_smi_gpu_metrics.cc index 3f540bc850..648b18a0e2 100755 --- a/src/rocm_smi_gpu_metrics.cc +++ b/src/rocm_smi_gpu_metrics.cc @@ -53,6 +53,7 @@ #include // NOLINT #include #include +#include #include "rocm_smi/rocm_smi_common.h" // Should go before rocm_smi.h #include "rocm_smi/rocm_smi_main.h" From 2b449fe58dde8a56660f1a28c016525da860c536 Mon Sep 17 00:00:00 2001 From: Elena Sakhnovitch Date: Thu, 22 Sep 2022 16:08:20 -0400 Subject: [PATCH 28/85] Measure api execution time Add new test to measure api execution time. Change-Id: I0ad10c822bad4a2ae04b5785173b4ff21996021d --- .../functional/measure_api_execution_time.cc | 173 ++++++++++++++++++ .../functional/measure_api_execution_time.h | 73 ++++++++ tests/rocm_smi_test/main.cc | 5 + 3 files changed, 251 insertions(+) create mode 100644 tests/rocm_smi_test/functional/measure_api_execution_time.cc create mode 100644 tests/rocm_smi_test/functional/measure_api_execution_time.h diff --git a/tests/rocm_smi_test/functional/measure_api_execution_time.cc b/tests/rocm_smi_test/functional/measure_api_execution_time.cc new file mode 100644 index 0000000000..d53f3b3fa1 --- /dev/null +++ b/tests/rocm_smi_test/functional/measure_api_execution_time.cc @@ -0,0 +1,173 @@ +/* + * ============================================================================= + * ROC Runtime Conformance Release License + * ============================================================================= + * The University of Illinois/NCSA + * Open Source License (NCSA) + * + * Copyright (c) 2022, Advanced Micro Devices, Inc. + * All rights reserved. + * + * Developed by: + * + * AMD Research and AMD ROC Software Development + * + * Advanced Micro Devices, Inc. + * + * www.amd.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal with the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimers. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimers in + * the documentation and/or other materials provided with the distribution. + * - Neither the names of , + * nor the names of its contributors may be used to endorse or promote + * products derived from this Software without specific prior written + * permission. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS WITH THE SOFTWARE. + * + */ + +#include +#include + +#include +#include +#include + + +#include "gtest/gtest.h" +#include "rocm_smi/rocm_smi.h" +#include "rocm_smi_test/functional/measure_api_execution_time.h" +#include "rocm_smi_test/test_common.h" +#include "rocm_smi_test/test_utils.h" + + +TestMeasureApiExecutionTime::TestMeasureApiExecutionTime() : TestBase() { + set_title("RSMI Measure API Execution Time"); + set_description("This test measures execution times for select APIs"); +} + +TestMeasureApiExecutionTime::~TestMeasureApiExecutionTime(void) { +} + +void TestMeasureApiExecutionTime::SetUp(void) { + TestBase::SetUp(); + return; +} + +void TestMeasureApiExecutionTime::DisplayTestInfo(void) { + TestBase::DisplayTestInfo(); +} + +void TestMeasureApiExecutionTime::DisplayResults(void) const { + TestBase::DisplayResults(); + return; +} + +void TestMeasureApiExecutionTime::Close() { + // This will close handles opened within rsmitst utility calls and call + // rsmi_shut_down(), so it should be done after other hsa cleanup + TestBase::Close(); +} + +void TestMeasureApiExecutionTime::Run(void) { + int64_t val_i64; + rsmi_gpu_metrics_t smu; + rsmi_temperature_metric_t met = RSMI_TEMP_CURRENT; + rsmi_status_t ret; + float repeat = 300.0; + bool skip = false; + + TestBase::Run(); + if (setup_failed_) { + IF_VERB(STANDARD) { + std::cout << "** SetUp Failed for this test. Skipping.**" << std::endl; + } + return; + } + + auto prev = std::cout.precision(3); + for (uint32_t dv_ind = 0; dv_ind < num_monitor_devs(); ++dv_ind) { + PrintDeviceHeader(dv_ind); + + //test execution time for rsmi_dev_fan_speed_get + auto start = std::chrono::high_resolution_clock::now(); + for (int i=0; i < repeat; ++i){ + ret = rsmi_dev_fan_speed_get(dv_ind, 0, &val_i64); + + } + auto stop = std::chrono::high_resolution_clock::now(); + auto duration = std::chrono::duration_cast + (stop - start); + + if (ret != RSMI_STATUS_SUCCESS){ + skip = true; + } + std::cout << std:: endl; + + if (!skip) { + std::cout << "\trsmi_dev_fan_speed_get execution time: " << + (float(duration.count()) / repeat) << " microseconds" << std::endl; + EXPECT_LT(duration.count(), 1000 * repeat); + } + skip = false; + + //test execution time for rsmi_dev_temp_metric_get + start = std::chrono::high_resolution_clock::now(); + for (int i=0; i < repeat; ++i){ + ret = rsmi_dev_temp_metric_get(dv_ind, 0, met, &val_i64); + } + stop = std::chrono::high_resolution_clock::now(); + duration = std::chrono::duration_cast + (stop - start); + + if (ret != RSMI_STATUS_SUCCESS){ + skip = true; + } + if (!skip) { + std::cout << "\trsmi_dev_temp_metric_get execution time: " << + (float(duration.count()) / repeat ) << " microseconds" << std::endl; + EXPECT_LT(duration.count(), 500 * repeat); + } + skip = false; + + //test execution time for rsmi_dev_gpu_metrics_info_get + start = std::chrono::high_resolution_clock::now(); + for (int i=0; i < repeat; ++i){ + ret = rsmi_dev_gpu_metrics_info_get(dv_ind, &smu); + } + stop = std::chrono::high_resolution_clock::now(); + duration = std::chrono::duration_cast + (stop - start) ; + + if (ret != RSMI_STATUS_SUCCESS){ + skip = true; + } + if (!skip) { + std::cout << "\trsmi_dev_gpu_metrics_info_get execution time: " << + (float(duration.count()) / repeat ) << " microseconds" << std::endl; + EXPECT_LT(duration.count(), 500 * repeat); + } + skip = false; + std::cout << "----------------------------------------------------------------------------" << std::endl; + + + } + std::cout.precision(prev); +} diff --git a/tests/rocm_smi_test/functional/measure_api_execution_time.h b/tests/rocm_smi_test/functional/measure_api_execution_time.h new file mode 100644 index 0000000000..6efc99c244 --- /dev/null +++ b/tests/rocm_smi_test/functional/measure_api_execution_time.h @@ -0,0 +1,73 @@ +/* + * ============================================================================= + * ROC Runtime Conformance Release License + * ============================================================================= + * The University of Illinois/NCSA + * Open Source License (NCSA) + * + * Copyright (c) 2022, Advanced Micro Devices, Inc. + * All rights reserved. + * + * Developed by: + * + * AMD Research and AMD ROC Software Development + * + * Advanced Micro Devices, Inc. + * + * www.amd.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal with the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimers. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimers in + * the documentation and/or other materials provided with the distribution. + * - Neither the names of , + * nor the names of its contributors may be used to endorse or promote + * products derived from this Software without specific prior written + * permission. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS WITH THE SOFTWARE. + * + */ +#ifndef TESTS_ROCM_SMI_TEST_FUNCTIONAL_MEASURE_API_EXECUTION_TIME +#define TESTS_ROCM_SMI_TEST_FUNCTIONAL_MEASURE_API_EXECUTION_TIME + +#include "rocm_smi_test/test_base.h" + +class TestMeasureApiExecutionTime : public TestBase { + public: + TestMeasureApiExecutionTime(); + + // @Brief: Destructor for test case of TestMeasureApiExecutionTime + virtual ~TestMeasureApiExecutionTime(); + + // @Brief: Setup the environment for measurement + virtual void SetUp(); + + // @Brief: Core measurement execution + virtual void Run(); + + // @Brief: Clean up and retrive the resource + virtual void Close(); + + // @Brief: Display results + virtual void DisplayResults() const; + + // @Brief: Display information about what this test does + virtual void DisplayTestInfo(void); +}; + +#endif // TESTS_ROCM_SMI_TEST_FUNCTIONAL_EASURE_API_EXECUTION_TIME diff --git a/tests/rocm_smi_test/main.cc b/tests/rocm_smi_test/main.cc index 369c049042..e707566599 100755 --- a/tests/rocm_smi_test/main.cc +++ b/tests/rocm_smi_test/main.cc @@ -78,6 +78,7 @@ #include "functional/xgmi_read_write.h" #include "functional/mem_page_info_read.h" #include "functional/api_support_read.h" +#include "functional/measure_api_execution_time.h" #include "functional/mutual_exclusion.h" #include "functional/evt_notif_read_write.h" #include "functional/init_shutdown_refcount.h" @@ -256,6 +257,10 @@ TEST(rsmitstReadOnly, TestAPISupportRead) { TestAPISupportRead tst; RunGenericTest(&tst); } +TEST(rsmitstReadOnly, TestMeasureApiExecutionTime) { + TestMeasureApiExecutionTime tst; + RunGenericTest(&tst); +} TEST(rsmitstReadOnly, TestMutualExclusion) { TestMutualExclusion tst; SetFlags(&tst); From 142dcfa8f4bb3724ce1d5cbf3441351430675fad Mon Sep 17 00:00:00 2001 From: Harish Kasiviswanathan Date: Sun, 29 Jan 2023 21:31:13 -0500 Subject: [PATCH 29/85] Don't depend on vbios_version sysfs file On APU's vbios_version string might not be exposed. Relying on vendor ID to detect AMDGPU is sufficient Signed-off-by: Harish Kasiviswanathan Change-Id: I08ef4b4bc7491a40f318791803aeaf261f7fac25 --- src/rocm_smi_main.cc | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/rocm_smi_main.cc b/src/rocm_smi_main.cc index ca992d51ce..f95ad528d6 100755 --- a/src/rocm_smi_main.cc +++ b/src/rocm_smi_main.cc @@ -543,15 +543,10 @@ static const uint32_t kAmdGpuId = 0x1002; static bool isAMDGPU(std::string dev_path) { std::string vend_path = dev_path + "/device/vendor"; - std::string vbios_v_path = dev_path + "/device/vbios_version"; if (!FileExists(vend_path.c_str())) { return false; } - if (!FileExists(vbios_v_path.c_str())) { - return false; - } - std::ifstream fs; fs.open(vend_path); From 56f9d6bfc0ea04020084b5dffa2d80bfe9b62c4b Mon Sep 17 00:00:00 2001 From: Ori Messinger Date: Thu, 2 Feb 2023 14:27:02 -0500 Subject: [PATCH 30/85] ROCm SMI CLI: Fix --showproductname bug This patch fixes a --showproductname bug, which is related to the device's SKU. If a device with a VBIOS value that cannot be decoded is used, that device's SKU cannot be parsed out of the VBIOS string. Now, when the VBIOS value cannot be decoded, an error will be printed instead of crashing with an 'UnboundLocalError' message. Signed-off-by: Ori Messinger Change-Id: I680a182e94107e782235b8a2477ab165988f7703 --- python_smi_tools/rocm_smi.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index 8a5c664bb6..5e6d2f2cdf 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -2069,7 +2069,9 @@ def showProductName(deviceList): device_sku = vbios.value.decode().split('-')[1] else: device_sku = 'unknown' - printLog(device, 'Card SKU', '\t\t' + device_sku) + printLog(device, 'Card SKU', '\t\t' + device_sku) + else: + printErrLog(device, "Unable to decode VBIOS value for device SKU") else: printLog(device, 'Incompatible device.\n' \ 'GPU[%s]\t\t: Expected vendor name: Advanced Micro Devices, Inc. [AMD/ATI]\n' \ From 02141a7f1d8a7227ad9783aabd04a12b1723caa0 Mon Sep 17 00:00:00 2001 From: Ranjith Ramakrishnan Date: Wed, 8 Feb 2023 14:24:56 -0800 Subject: [PATCH 31/85] SWDEV-366831 - File reorg backward compatibility message changed to #error Change-Id: I3d3b220b31f42140eab5404df790a130d2c238c4 --- rocm_smi-backward-compat.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rocm_smi-backward-compat.cmake b/rocm_smi-backward-compat.cmake index c5c40da29c..5f89f2e7f5 100644 --- a/rocm_smi-backward-compat.cmake +++ b/rocm_smi-backward-compat.cmake @@ -63,7 +63,7 @@ function(create_header_template) #define @include_guard@ #if defined(__GNUC__) -#warning \"This file is deprecated. Use file from include path /opt/rocm-ver/include/ and prefix with @prefix_name@\" +#error \"This file is deprecated. Use file from include path /opt/rocm-ver/include/ and prefix with @prefix_name@\" #else #pragma message(\"This file is deprecated. Use file from include path /opt/rocm-ver/include/ and prefix with @prefix_name@\") #endif From 00a6c78a51f3352298710db70c3f5d7b9c2e8fce Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Wed, 8 Feb 2023 09:48:58 -0600 Subject: [PATCH 32/85] Dispaly printable device name Fallback to other methods if the device name in sysfs is not printable. Change-Id: I20b22950399d4a515d2688b955248a3de3c61d05 --- src/rocm_smi.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rocm_smi.cc b/src/rocm_smi.cc index 694015f13d..e0f102b4a6 100755 --- a/src/rocm_smi.cc +++ b/src/rocm_smi.cc @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -1935,7 +1936,7 @@ rsmi_dev_name_get(uint32_t dv_ind, char *name, size_t len) { ret = get_dev_name_from_file(dv_ind, name, len); - if (ret || name[0] == '\0') { + if (ret || name[0] == '\0' || !isprint(name[0]) ) { ret = get_dev_name_from_id(dv_ind, name, len, NAME_STR_DEVICE); } From ae10e842afb62528501343fd3949e872a502180e Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Wed, 8 Feb 2023 09:10:17 -0600 Subject: [PATCH 33/85] rocm-smi --showxgmierr return error instead of error counter values The rocm-smi pass wrong arguments Change-Id: I3a3923abdd263d4af87f3ec90670bb16afa2ef9b --- python_smi_tools/rocm_smi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index 5e6d2f2cdf..e237c9da60 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -2476,7 +2476,7 @@ def showXgmiErr(deviceList): printLogSpacer('XGMI Error status') xe = rsmi_xgmi_status_t() for device in deviceList: - ret = rocmsmi.rsmi_dev_xgmi_error_status(device, xe) + ret = rocmsmi.rsmi_dev_xgmi_error_status(device, byref(xe)) if rsmi_ret_ok(ret, device, 'xgmi status'): desc = '' if xe.value is None: From 9ef376cd6135b64bc072aa343f2f75489e1958b9 Mon Sep 17 00:00:00 2001 From: Charis Poag Date: Mon, 30 Jan 2023 15:58:03 -0600 Subject: [PATCH 34/85] SWDEV-342812- Add NPS support Updates: * Added rsmi_dev_nps_mode_set and rsmi_dev_nps_mode_get * Added ability to set multiple SYSFS files in debug build * Added ability to see user's env variables set for debug build * Added tests for rsmi_dev_nps_mode_set and rsmi_dev_nps_mode_get * Added ability to restart AMD GPU driver, used in nps_mode_set * Updated ROCm_SMI_Manual.pdf to include new APIs * Added progress bar for long running python_smi_tools, used in setting nps_mode if runs longer than .1 seconds Change-Id: I6d61bedd28d7cba6aff432ad2d127ba741b7d15a Signed-off-by: Charis Poag --- .gitignore | 10 +- include/rocm_smi/rocm_smi.h | 100 +++++- include/rocm_smi/rocm_smi_common.h | 7 +- include/rocm_smi/rocm_smi_device.h | 4 +- include/rocm_smi/rocm_smi_main.h | 3 +- include/rocm_smi/rocm_smi_utils.h | 4 +- python_smi_tools/rocm_smi.py | 119 ++++++- python_smi_tools/rsmiBindings.py | 32 +- rocm_smi/docs/ROCm_SMI_Manual.pdf | Bin 506265 -> 522158 bytes rocm_smi/example/rocm_smi_example.cc | 172 ++++++++-- src/rocm_smi.cc | 220 +++++++++++-- src/rocm_smi_device.cc | 48 ++- src/rocm_smi_main.cc | 72 ++++- src/rocm_smi_utils.cc | 66 +++- tests/rocm_smi_test/CMakeLists.txt | 48 +++ .../functional/computepartition_read_write.cc | 2 - .../functional/npsmode_read_write.cc | 298 ++++++++++++++++++ .../functional/npsmode_read_write.h | 73 +++++ tests/rocm_smi_test/main.cc | 7 +- 19 files changed, 1198 insertions(+), 87 deletions(-) create mode 100755 tests/rocm_smi_test/functional/npsmode_read_write.cc create mode 100755 tests/rocm_smi_test/functional/npsmode_read_write.h diff --git a/.gitignore b/.gitignore index dc0fa0928c..632b6ea6c9 100644 --- a/.gitignore +++ b/.gitignore @@ -30,10 +30,9 @@ modules.builtin *.lzma *.xz *.lzo -#*.patch +*.patch *.gcno *.pyc -*current_compute_partition # # Top-level generic files/folders @@ -121,4 +120,9 @@ _deps # ROCm files # Removes generated config headers like rocmsmi64Config.h & oamConfig.h # -*Config.h \ No newline at end of file +*Config.h + +# +# Fake SYSFS files +# +/device/* \ No newline at end of file diff --git a/include/rocm_smi/rocm_smi.h b/include/rocm_smi/rocm_smi.h index 7c8aeb1d48..c478c045b8 100755 --- a/include/rocm_smi/rocm_smi.h +++ b/include/rocm_smi/rocm_smi.h @@ -124,8 +124,10 @@ typedef enum { RSMI_STATUS_BUSY, //!< A resource or mutex could not be //!< acquired because it is already //!< being used - RSMI_STATUS_REFCOUNT_OVERFLOW, //!< An internal reference counter + RSMI_STATUS_REFCOUNT_OVERFLOW, //!< An internal reference counter //!< exceeded INT32_MAX + RSMI_STATUS_AMDGPU_RESTART_ERR, //!< Could not successfully restart + //!< the amdgpu driver RSMI_STATUS_UNKNOWN_ERROR = 0xFFFFFFFF, //!< An unknown error occurred } rsmi_status_t; @@ -353,7 +355,8 @@ typedef rsmi_clk_type_t rsmi_clk_type; /// \endcond /** - * Compute Partition types + * @brief Compute Partition. This enum is used to identify + * various compute partitioning settings. */ typedef enum { RSMI_COMPUTE_PARTITION_INVALID = 0, @@ -365,13 +368,37 @@ typedef enum { //!< together with shared memory RSMI_COMPUTE_PARTITION_TPX, //!< Triple GPU mode (TPX)- One-third XCCs //!< work together with shared memory - RSMI_COMPUTE_PARTITION_QPX, //!< Quad GPU mode (QPX)- Quarter XCCs + RSMI_COMPUTE_PARTITION_QPX //!< Quad GPU mode (QPX)- Quarter XCCs //!< work together with shared memory } rsmi_compute_partition_type_t; /// \cond Ignore in docs. typedef rsmi_compute_partition_type_t rsmi_compute_partition_type; /// \endcond +/** + * @brief NPS Modes. This enum is used to identify various + * NPS mode types. + */ +typedef enum { + RSMI_MEMORY_PARTITION_UNKNOWN = 0, + RSMI_MEMORY_PARTITION_NPS1, //!< NPS1 - All CCD & XCD data is interleaved + //!< accross all 8 HBM stacks (all stacks/1). + RSMI_MEMORY_PARTITION_NPS2, //!< NPS2 - 2 sets of CCDs or 4 XCD interleaved + //!< accross the 4 HBM stacks per AID pair + //!< (8 stacks/2). + RSMI_MEMORY_PARTITION_NPS4, //!< NPS4 - Each XCD data is interleaved accross + //!< accross 2 (or single) HBM stacks + //!< (8 stacks/8 or 8 stacks/4). + RSMI_MEMORY_PARTITION_NPS8, //!< NPS8 - Each XCD uses a single HBM stack + //!< (8 stacks/8). Or each XCD uses a single + //!< HBM stack & CCDs share 2 non-interleaved + //!< HBM stacks on its AID + //!< (AID[1,2,3] = 6 stacks/6). +} rsmi_nps_mode_type_t; +/// \cond Ignore in docs. +typedef rsmi_nps_mode_type_t rsmi_nps_mode_type; +/// \endcond + /** * @brief Temperature Metrics. This enum is used to identify various * temperature metrics. Corresponding values will be in millidegress @@ -3512,7 +3539,7 @@ rsmi_is_P2P_accessible(uint32_t dv_ind_src, uint32_t dv_ind_dst, * @param[inout] compute_partition a pointer to a char string variable, * which the device's current compute partition will be written to. * - * @param[in] len the length of the caller provided buffer @p compute_partition + * @param[in] len the length of the caller provided buffer @p compute_partition * * @retval ::RSMI_STATUS_SUCCESS call was successful * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid @@ -3537,7 +3564,7 @@ rsmi_dev_compute_partition_get(uint32_t dv_ind, char *compute_partition, * * @param[in] dv_ind a device index * - * @param[inout] compute_partition using enum ::rsmi_copmpute_partition_type_t, + * @param[in] compute_partition using enum ::rsmi_compute_partition_type_t, * define what the selected device's compute partition setting should be * updated to. * @@ -3554,6 +3581,69 @@ rsmi_dev_compute_partition_set(uint32_t dv_ind, /** @} */ // end of ComputePartition +/*****************************************************************************/ +/** @defgroup NPSMode NPS Mode Functions + * These functions are used to query the device's NPS mode (memory partition). + * @{ + */ + +/** + * @brief Retrieves the NPS mode (memory partition) for a desired device + * + * @details + * Given a device index @p dv_ind and a string @p nps_mode , + * and uint32 @p len , this function will attempt to obtain the device's + * nps mode string. Upon successful retreival, the obtained device's + * nps mode string shall be stored in the passed @p nps_mode char string + * variable. + * + * @param[in] dv_ind a device index + * + * @param[inout] nps_mode a pointer to a char string variable, + * which the device's nps mode will be written to. + * + * @param[in] len the length of the caller provided buffer @p nps_mode , + * suggested length is 5 or greater. + * + * @retval ::RSMI_STATUS_SUCCESS call was successful + * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid + * @retval ::RSMI_STATUS_UNEXPECTED_DATA data provided to function is not valid + * @retval ::RSMI_STATUS_NOT_SUPPORTED installed software or hardware does not + * support this function with the given arguments + * @retval ::RSMI_STATUS_INSUFFICIENT_SIZE is returned if @p len bytes is not + * large enough to hold the entire nps mode value. In this case, + * only @p len bytes will be written. + * + */ +rsmi_status_t +rsmi_dev_nps_mode_get(uint32_t dv_ind, char *nps_mode, uint32_t len); + +/** + * @brief Modifies a selected device's NPS mode (memory partition) setting. + * + * @details Given a device index @p dv_ind and a type of nps mode + * @p nps_mode, this function will attempt to update the selected + * device's nps mode setting. + * + * @param[in] dv_ind a device index + * + * @param[in] nps_mode using enum ::rsmi_nps_mode_type_t, + * define what the selected device's NPS mode setting should be updated to. + * + * @retval ::RSMI_STATUS_SUCCESS call was successful + * @retval ::RSMI_STATUS_PERMISSION function requires root access + * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid + * @retval ::RSMI_STATUS_NOT_SUPPORTED installed software or hardware does not + * support this function with the given arguments + * @retval ::RSMI_STATUS_AMDGPU_RESTART_ERR could not successfully restart + * the amdgpu driver + * + */ +rsmi_status_t +rsmi_dev_nps_mode_set(uint32_t dv_ind, rsmi_nps_mode_type_t nps_mode); + +/** @} */ // end of NPSMode + /*****************************************************************************/ /** @defgroup APISupport Supported Functions * API function support varies by both GPU type and the version of the diff --git a/include/rocm_smi/rocm_smi_common.h b/include/rocm_smi/rocm_smi_common.h index dad39ad13f..fd124d3530 100755 --- a/include/rocm_smi/rocm_smi_common.h +++ b/include/rocm_smi/rocm_smi_common.h @@ -5,7 +5,7 @@ * The University of Illinois/NCSA * Open Source License (NCSA) * - * Copyright (c) 2018, Advanced Micro Devices, Inc. + * Copyright (c) 2018-2023, Advanced Micro Devices, Inc. * All rights reserved. * * Developed by: @@ -49,6 +49,7 @@ #include #include #include +#include #define CHECK_DV_IND_RANGE \ amd::smi::RocmSMI& smi = amd::smi::RocmSMI::getInstance(); \ @@ -165,7 +166,9 @@ struct RocmSMI_env_vars { // The integer value of sysfs field enum that is to be over-ridden. // Env. variable RSMI_DEBUG_ENUM_OVERRIDE is used to specify this. - uint32_t enum_override; + // A set of enum overrides, RSMI_DEBUG_ENUM_OVERRIDE now supports + // comma delimited values. + std::unordered_set enum_overrides; // Sysfs path overrides diff --git a/include/rocm_smi/rocm_smi_device.h b/include/rocm_smi/rocm_smi_device.h index d76ddfa4de..6b7b3baeca 100755 --- a/include/rocm_smi/rocm_smi_device.h +++ b/include/rocm_smi/rocm_smi_device.h @@ -162,7 +162,8 @@ enum DevInfoTypes { kDevNumaNode, kDevGpuMetrics, kDevGpuReset, - kDevComputePartition + kDevComputePartition, + kDevMemoryPartition }; typedef struct { @@ -215,6 +216,7 @@ class Device { void DumpSupportedFunctions(void); bool DeviceAPISupported(std::string name, uint64_t variant, uint64_t sub_variant); + rsmi_status_t restartAMDGpuDriver(void); private: std::shared_ptr monitor_; diff --git a/include/rocm_smi/rocm_smi_main.h b/include/rocm_smi/rocm_smi_main.h index c6d5f077b9..74aad3668b 100755 --- a/include/rocm_smi/rocm_smi_main.h +++ b/include/rocm_smi/rocm_smi_main.h @@ -5,7 +5,7 @@ * The University of Illinois/NCSA * Open Source License (NCSA) * - * Copyright (c) 2017, Advanced Micro Devices, Inc. + * Copyright (c) 2017-2023, Advanced Micro Devices, Inc. * All rights reserved. * * Developed by: @@ -113,6 +113,7 @@ class RocmSMI { uint64_t *weight); int get_node_index(uint32_t dv_ind, uint32_t *node_ind); const RocmSMI_env_vars& getEnv(void); + void printEnvVarInfo(void); static const std::map devInfoTypesStrings; private: diff --git a/include/rocm_smi/rocm_smi_utils.h b/include/rocm_smi/rocm_smi_utils.h index a8f4cfa848..527342d544 100755 --- a/include/rocm_smi/rocm_smi_utils.h +++ b/include/rocm_smi/rocm_smi_utils.h @@ -3,7 +3,7 @@ * The University of Illinois/NCSA * Open Source License (NCSA) * - * Copyright (c) 2018, Advanced Micro Devices, Inc. + * Copyright (c) 2018-2023, Advanced Micro Devices, Inc. * All rights reserved. * * Developed by: @@ -76,6 +76,8 @@ int WriteSysfsStr(std::string path, std::string val); bool IsInteger(const std::string & n_str); +std::pair executeCommand(std::string command, bool stdOut = true); + rsmi_status_t handleException(); rsmi_status_t GetDevValueVec(amd::smi::DevInfoTypes type, diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index e237c9da60..d235738703 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -18,6 +18,9 @@ import sys import subprocess import _thread import time +import multiprocessing +import trace +from io import StringIO from time import ctime from subprocess import check_output from rsmiBindings import * @@ -509,7 +512,7 @@ def printEventList(device, delay, eventList): data.message.decode('utf8') + '\r']]) -def printLog(device, metricName, value): +def printLog(device, metricName, value, extraSpace=False): """ Print out to the SMI log @param device: DRM device identifier @@ -530,7 +533,13 @@ def printLog(device, metricName, value): if device is None: logstr = logstr[13:] # Force thread safe printing - print(logstr + '\n', end='') + lock = multiprocessing.Lock() + lock.acquire() + if extraSpace: + print('\n' + logstr + '\n', end='', flush=True) + else: + print(logstr + '\n', end='', flush=True) + lock.release() def printListLog(metricName, valuesList): @@ -1336,6 +1345,76 @@ def setComputePartition(deviceList, computePartitionType): printLogSpacer() +def progressbar(it, prefix="", size=60, out=sys.stdout): + count = len(it) + def show(j): + x = int(size*j/count) + lock = multiprocessing.Lock() + lock.acquire() + print("{}[{}{}] {}/{} secs remain".format(prefix, u"█"*x, "."*(size-x), j, count), + end='\r', file=out, flush=True) + lock.release() + show(0) + for i, item in enumerate(it): + yield item + show(i+1) + lock = multiprocessing.Lock() + lock.acquire() + print("\n", flush=True, file=out) + lock.release() + +def showProgressbar(title="", timeInSeconds=13): + if title != "": + title += ": " + for i in progressbar(range(timeInSeconds), title, 40): + time.sleep(1) + + +def setNPSMode(deviceList, npsMode): + """ Sets nps mode (memory partition) for a list of devices + + @param deviceList: List of DRM devices (can be a single-item list) + @param npsMode: NPS Mode type to set as + """ + printLogSpacer(' Set nps mode to %s ' % (str(npsMode).upper())) + for device in deviceList: + npsMode = npsMode.upper() + if npsMode not in nps_mode_type_l: + printErrLog(device, 'Invalid nps mode type %s' + '\nValid nps mode types are %s' + % ( npsMode.upper(), + (', '.join(map(str, nps_mode_type_l))) )) + return (None, None) + + t1 = multiprocessing.Process(target=showProgressbar, + args=("Updating NPS mode",13,)) + t1.start() + addExtraLine=True + start=time.time() + ret = rocmsmi.rsmi_dev_nps_mode_set(device, + rsmi_nps_mode_type_dict[npsMode]) + stop=time.time() + duration=stop-start + if t1.is_alive(): + t1.terminate() + t1.join() + if duration < float(0.1): # For longer runs, add extra line before output + addExtraLine=False # This is to prevent overriding progress bar + + if rsmi_ret_ok(ret, device, silent=True): + printLog(device, + 'Successfully set nps mode to %s' % (npsMode), + None, addExtraLine) + elif ret == rsmi_status_t.RSMI_STATUS_PERMISSION: + printLog(device, 'Permission denied', None, addExtraLine) + elif ret == rsmi_status_t.RSMI_STATUS_NOT_SUPPORTED: + printLog(device, 'Not supported on the given system', None, addExtraLine) + else: + rsmi_ret_ok(ret, device) + printErrLog(device, 'Failed to retrieve NPS mode, even though device supports it.') + printLogSpacer() + + def showAllConcise(deviceList): """ Display critical info for all devices in a concise format @@ -2780,9 +2859,28 @@ def showComputePartition(deviceList): printLog(device, 'Not supported on the given system', None) else: rsmi_ret_ok(ret, device) - printErrLog(device, 'Failed to retrieve compute partition, even though device supports it.', None) + printErrLog(device, 'Failed to retrieve compute partition, even though device supports it.') printLogSpacer() +def showNPSMode(deviceList): + """ Returns the current NPS mode for a list of devices + + @param deviceList: List of DRM devices (can be a single-item list) + """ + npsMode = create_string_buffer(256) + printLogSpacer(' Current NPS Mode ') + for device in deviceList: + ret = rocmsmi.rsmi_dev_nps_mode_get(device, npsMode, 256) + if rsmi_ret_ok(ret, device, silent=True) and npsMode.value.decode(): + printLog(device, 'NPS Mode', npsMode.value.decode()) + elif ret == rsmi_status_t.RSMI_STATUS_NOT_SUPPORTED: + printLog(device, 'Not supported on the given system', None) + else: + rsmi_ret_ok(ret, device) + printErrLog(device, 'Failed to retrieve NPS mode, even though device supports it.') + printLogSpacer() + + def checkAmdGpus(deviceList): """ Check if there are any AMD GPUs being queried, return False if there are none @@ -3130,6 +3228,7 @@ if __name__ == '__main__': action='store_true') groupDisplay.add_argument('--shownodesbw', help='Shows the numa nodes ', action='store_true') groupDisplay.add_argument('--showcomputepartition', help='Shows current compute partitioning ', action='store_true') + groupDisplay.add_argument('--shownpsmode', help='Shows current nps mode ', action='store_true') groupActionReset.add_argument('-r', '--resetclocks', help='Reset clocks and OverDrive to default', action='store_true') @@ -3176,8 +3275,10 @@ if __name__ == '__main__': metavar='SCLK', nargs=1) groupAction.add_argument('--setcomputepartition', help='Set compute partition', choices=compute_partition_type_l + [x.lower() for x in compute_partition_type_l], - type=str, nargs=1 - ) + type=str, nargs=1) + groupAction.add_argument('--setnpsmode', help='Set nps mode', + choices=nps_mode_type_l + [x.lower() for x in nps_mode_type_l], + type=str, nargs=1) groupAction.add_argument('--rasenable', help='Enable RAS for specified block and error type', type=str, nargs=2, metavar=('BLOCK', 'ERRTYPE')) groupAction.add_argument('--rasdisable', help='Disable RAS for specified block and error type', type=str, nargs=2, @@ -3215,7 +3316,8 @@ if __name__ == '__main__': or args.resetclocks or args.setprofile or args.resetprofile or args.setoverdrive or args.setmemoverdrive \ or args.setpoweroverdrive or args.resetpoweroverdrive or args.rasenable or args.rasdisable or \ args.rasinject or args.gpureset or args.setperfdeterminism or args.setslevel or args.setmlevel or \ - args.setvc or args.setsrange or args.setmrange or args.setclock or args.setcomputepartition: + args.setvc or args.setsrange or args.setmrange or args.setclock or \ + args.setcomputepartition or args.setnpsmode: relaunchAsSudo() # If there is one or more device specified, use that for all commands, otherwise use a @@ -3278,6 +3380,7 @@ if __name__ == '__main__': args.showreplaycount = True args.showvc = True args.showcomputepartition = True + args.shownpsmode = True if not PRINT_JSON: args.showprofile = True @@ -3408,6 +3511,8 @@ if __name__ == '__main__': showEnergy(deviceList) if args.showcomputepartition: showComputePartition(deviceList) + if args.shownpsmode: + showNPSMode(deviceList) if args.setclock: setClocks(deviceList, args.setclock[0], [int(args.setclock[1])]) if args.setsclk: @@ -3448,6 +3553,8 @@ if __name__ == '__main__': setPerfDeterminism(deviceList, args.setperfdeterminism[0]) if args.setcomputepartition: setComputePartition(deviceList, args.setcomputepartition[0]) + if args.setnpsmode: + setNPSMode(deviceList, args.setnpsmode[0]) if args.resetprofile: resetProfile(deviceList) if args.resetxgmierr: diff --git a/python_smi_tools/rsmiBindings.py b/python_smi_tools/rsmiBindings.py index 4502b1c62b..8f70b63d90 100644 --- a/python_smi_tools/rsmiBindings.py +++ b/python_smi_tools/rsmiBindings.py @@ -66,6 +66,10 @@ class rsmi_status_t(c_int): RSMI_STATUS_INTERRUPT = 0xC RSMI_STATUS_UNEXPECTED_SIZE = 0xD RSMI_STATUS_NO_DATA = 0xE + RSMI_STATUS_UNEXPECTED_DATA = 0xF + RSMI_STATUS_BUSY = 0x10 + RSMI_STATUS_REFCOUNT_OVERFLOW = 0x11 + RSMI_STATUS_AMDGPU_RESTART_ERR = 0x12 RSMI_STATUS_UNKNOWN_ERROR = 0xFFFFFFFF @@ -86,6 +90,10 @@ rsmi_status_verbose_err_out = { rsmi_status_t.RSMI_STATUS_INTERRUPT: 'Interrupt occured during execution', rsmi_status_t.RSMI_STATUS_UNEXPECTED_SIZE: 'Unexpected amount of data read', rsmi_status_t.RSMI_STATUS_NO_DATA: 'No data found for the given input', + rsmi_status_t.RSMI_STATUS_UNEXPECTED_DATA: 'Unexpected data received', + rsmi_status_t.RSMI_STATUS_BUSY: 'Busy - resources are preventing call the ability to execute', + rsmi_status_t.RSMI_STATUS_REFCOUNT_OVERFLOW: 'Data overflow - data exceeded INT32_MAX', + rsmi_status_t.RSMI_STATUS_AMDGPU_RESTART_ERR: 'Could not successfully restart the amdgpu driver', rsmi_status_t.RSMI_STATUS_UNKNOWN_ERROR: 'Unknown error occured' } @@ -606,4 +614,26 @@ rsmi_compute_partition_type = rsmi_compute_partition_type_t # Usage example to get corresponding names: # compute_partition_type_l[rsmi_compute_partition_type_t.RSMI_COMPUTE_PARTITION_CPX] # will return string 'CPX' -compute_partition_type_l = ['CPX', 'SPX', 'DPX', 'TPX', 'QPX'] \ No newline at end of file +compute_partition_type_l = ['CPX', 'SPX', 'DPX', 'TPX', 'QPX'] + +class rsmi_nps_mode_type_t(c_int): + RSMI_MEMORY_PARTITION_UNKNOWN = 0 + RSMI_MEMORY_PARTITION_NPS1 = 1 + RSMI_MEMORY_PARTITION_NPS2 = 2 + RSMI_MEMORY_PARTITION_NPS4 = 3 + RSMI_MEMORY_PARTITION_NPS8 = 4 + +rsmi_nps_mode_type_dict = { + 'NPS1': 1, + 'NPS2': 2, + 'NPS4': 3, + 'NPS8': 4 +} + +rsmi_nps_mode_type = rsmi_nps_mode_type_t + +# nps_mode_type_l includes string names for the rsmi_compute_partition_type_t +# Usage example to get corresponding names: +# nps_mode_type_l[rsmi_nps_mode_type_t.RSMI_MEMORY_PARTITION_NPS2] +# will return string 'NPS2' +nps_mode_type_l = ['NPS1', 'NPS2', 'NPS4', 'NPS8'] \ No newline at end of file diff --git a/rocm_smi/docs/ROCm_SMI_Manual.pdf b/rocm_smi/docs/ROCm_SMI_Manual.pdf index ac05a506e8e4ff3f033f33217df6fb9d929a9259..05cf23122e58523ecefeaef2ca96cc1a26bd50e6 100644 GIT binary patch delta 241566 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 z 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

    TeW_3B|d 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 z�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

    FzT7yNqcf$#W31;|I1${nGrj5Sz%sxP( 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

    D1(({0^kc_MBURxiGI}{(SN`aRdU; zCGw)*rEyJY9DfY2gO}&UI*z2KU%&a?&NtycU(=^9?pO{3_3v-%L2o;RX>X#m}bx$0(dq}xwL z_xiy3{gtP@+J$@xc zn-?Bmhv0w_;N>1G;bQlsfJbX9q^E-ZvC+xuH6C@NyZ#TeF#bUNO3@S~hGK&pp+B;d zCl*Y~+OgWjH!d|agSzcMB6oQkc|!FOZ!JLbn?4}YU{ibn$7@6L)=}yM@Bb^U1=CgD zo))6o#(T;hL3j-!^j2n1@1E-PSr$SemLJr8bN_^8K4rO0lFjIEC@iDTFeA^fVD-st zTX;&@&dPesmJh+sh@Y{6V#`62z&`+`==TPUSuSeDC z5*yWaUly?vpZ>t1C`-bK5D@*b{GcQ&4i_JuUp0|aU84p~6ohkhDNcp*@i5Kfqm4>% zTdDZZWDwlDZ zm)^WeJ_WCtR&*>*yYnoS4S#?%Q=F-{zT)S%zrAlNb6@p|%MpbP<~guE>VKNi?GDY_ z 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 +mapStringToRSMINpsModeTypes { + {"NPS1", RSMI_MEMORY_PARTITION_NPS1}, + {"NPS2", RSMI_MEMORY_PARTITION_NPS2}, + {"NPS4", RSMI_MEMORY_PARTITION_NPS4}, + {"NPS8", RSMI_MEMORY_PARTITION_NPS8} +}; + static const char * perf_level_string(rsmi_dev_perf_level_t perf_lvl) { switch (perf_lvl) { @@ -184,7 +235,7 @@ static bool isUserRunningAsSudo() { return isRunningWithSudo; } -bool isFileWritable(rsmi_status_t response) { +static bool isFileWritable(rsmi_status_t response) { // Clock files may not be writable, causing sets to // return RSMI_STATUS_PERMISSION. If running as sudo, // this means file is not writable. @@ -492,35 +543,23 @@ static rsmi_status_t test_set_compute_partitioning(uint32_t dv_ind) { rsmi_status_t ret; uint32_t buffer_len = 10; char originalComputePartition[buffer_len]; + originalComputePartition[0] = '\0'; print_test_header("Compute Partitioning Control", dv_ind); - /** - typedef enum { - RSMI_COMPUTE_PARTITION_INVALID = 0, - RSMI_COMPUTE_PARTITION_CPX, //!< Core mode (CPX)- Per-chip XCC with - //!< shared memory - RSMI_COMPUTE_PARTITION_SPX, //!< Single GPU mode (SPX)- All XCCs work - //!< together with shared memory - RSMI_COMPUTE_PARTITION_DPX, //!< Dual GPU mode (DPX)- Half XCCs work - //!< together with shared memory - RSMI_COMPUTE_PARTITION_TPX, //!< Triple GPU mode (TPX)- One-third XCCs - //!< work together with shared memory - RSMI_COMPUTE_PARTITION_QPX, //!< Quad GPU mode (QPX)- Quarter XCCs - //!< work together with shared memory - } rsmi_compute_partition_type_t; - */ - ret = rsmi_dev_compute_partition_get(dv_ind, originalComputePartition, buffer_len); - CHK_RSMI_NOT_SUPPORTED_RET(ret) + + ret = rsmi_dev_compute_partition_get(dv_ind, originalComputePartition, + buffer_len); + CHK_RSMI_NOT_SUPPORTED_OR_UNEXPECTED_DATA_RET(ret) if (ret == RSMI_STATUS_NOT_SUPPORTED) { - std::cout << "Device does not support the compute partition feature." - << std::endl; - std::cout << "*********************************************" << std::endl; return RSMI_STATUS_SUCCESS; - } else { - CHK_AND_PRINT_RSMI_ERR_RET(ret) - std::cout << "Original compute partition is " << originalComputePartition - << "." << std::endl; } + std::cout << "Original Compute Partition: " + << (((originalComputePartition == nullptr) + || ((originalComputePartition != nullptr) + && (originalComputePartition[0] == '\0'))) + ? "UNKNOWN" : originalComputePartition) + << std::endl << std::endl; + for (int newComputePartition = RSMI_COMPUTE_PARTITION_CPX; newComputePartition <= RSMI_COMPUTE_PARTITION_QPX; newComputePartition++) { @@ -550,6 +589,59 @@ static rsmi_status_t test_set_compute_partitioning(uint32_t dv_ind) { return RSMI_STATUS_SUCCESS; } +static rsmi_status_t test_set_nps_mode(uint32_t dv_ind) { + rsmi_status_t ret; + uint32_t buffer_len = 10; + char originalNpsMode[buffer_len]; + originalNpsMode[0] = '\0'; + print_test_header("NPS Mode Control", dv_ind); + + ret = rsmi_dev_nps_mode_get(dv_ind, originalNpsMode, buffer_len); + CHK_RSMI_NOT_SUPPORTED_OR_UNEXPECTED_DATA_RET(ret) + if (ret == RSMI_STATUS_NOT_SUPPORTED) { + return RSMI_STATUS_SUCCESS; + } + + std::cout << "Original NPS Mode: " + << (((originalNpsMode == nullptr) + || ((originalNpsMode != nullptr) + && (originalNpsMode[0] == '\0'))) + ? "UNKNOWN" : originalNpsMode) + << std::endl << std::endl; + + for (int newNpsMode = RSMI_MEMORY_PARTITION_NPS1; + newNpsMode <= RSMI_MEMORY_PARTITION_NPS8; + newNpsMode++) { + rsmi_nps_mode_type_t newMemoryPartition + = static_cast(newNpsMode); + std::cout << "Attempting to set NPS mode to " + << nps_mode_string(newMemoryPartition) << "..." + << std::endl; + ret = rsmi_dev_nps_mode_set(dv_ind, newMemoryPartition); + CHK_RSMI_NOT_SUPPORTED_RET(ret) + if (ret == RSMI_STATUS_NOT_SUPPORTED) { + // do not continue attempting to set, device does not support setting + return RSMI_STATUS_SUCCESS; + } + std::cout << "Done setting NPS mode to " + << nps_mode_string(newMemoryPartition) + << "." << std::endl; + std::cout << std::endl << std::endl; + } + + std::string myNpsMode = originalNpsMode; + if (myNpsMode.empty() == false) { + std::cout << "Resetting compute partition to " << originalNpsMode + << "... " << std::endl; + rsmi_nps_mode_type_t origNpsModeType + = mapStringToRSMINpsModeTypes[originalNpsMode]; + CHK_RSMI_NOT_SUPPORTED_RET(ret) + std::cout << "Done" << std::endl; + ret = rsmi_dev_nps_mode_set(dv_ind, origNpsModeType); + } + return RSMI_STATUS_SUCCESS; +} + int main() { rsmi_status_t ret; @@ -577,10 +669,31 @@ int main() { << "rsmi_dev_compute_partition_get()..." << std::endl; char current_compute_partition[256]; + current_compute_partition[0] = '\0'; ret = rsmi_dev_compute_partition_get(i, current_compute_partition, 256); - CHK_RSMI_NOT_SUPPORTED_RET(ret) - std::cout << "\t**Current Compute Partition setting: " - << current_compute_partition << std::endl; + CHK_RSMI_NOT_SUPPORTED_OR_UNEXPECTED_DATA_RET(ret) + std::cout << "\t**Current Compute Partition: " + << (((current_compute_partition == nullptr) + || ((current_compute_partition != nullptr) + && (current_compute_partition[0] == '\0'))) + ? "UNKNOWN" : current_compute_partition) + << std::endl; + + std::cout << std::endl << std::endl; + std::cout << "Starting to call " + << "rsmi_dev_nps_mode_get()..." + << std::endl; + uint32_t len = 5; + char nps_mode[len]; + nps_mode[0] = '\0'; + ret = rsmi_dev_nps_mode_get(i, nps_mode, len); + CHK_NOT_SUPPORTED_OR_UNEXPECTED_DATA_OR_INSUFFICIENT_SIZE_RET(ret) + std::cout << "\t**NPS Mode: " + << (((nps_mode == nullptr) + || ((nps_mode != nullptr) + && (nps_mode[0] == '\0'))) + ? "UNKNOWN" : nps_mode) + << std::endl; ret = rsmi_dev_gpu_metrics_info_get(i, &p); CHK_AND_PRINT_RSMI_ERR_RET(ret) @@ -672,6 +785,9 @@ int main() { ret = test_set_freq(i); CHK_AND_PRINT_RSMI_ERR_RET(ret) + + ret = test_set_nps_mode(i); + CHK_AND_PRINT_RSMI_ERR_RET(ret) } return 0; diff --git a/src/rocm_smi.cc b/src/rocm_smi.cc index e0f102b4a6..645e1f6e6d 100755 --- a/src/rocm_smi.cc +++ b/src/rocm_smi.cc @@ -62,6 +62,7 @@ #include #include #include +#include #include "rocm_smi/rocm_smi_common.h" // Should go before rocm_smi.h #include "rocm_smi/rocm_smi.h" @@ -1696,6 +1697,7 @@ mapStringToRSMIComputePartitionTypes { std::map mapRSMIToStringComputePartitionTypes { + {RSMI_COMPUTE_PARTITION_INVALID, "UNKNOWN"}, {RSMI_COMPUTE_PARTITION_CPX, "CPX"}, {RSMI_COMPUTE_PARTITION_SPX, "SPX"}, {RSMI_COMPUTE_PARTITION_DPX, "DPX"}, @@ -1703,6 +1705,23 @@ mapRSMIToStringComputePartitionTypes { {RSMI_COMPUTE_PARTITION_QPX, "QPX"} }; +std::map +mapRSMIToStringNPSModeTypes { + {RSMI_MEMORY_PARTITION_UNKNOWN, "UNKNOWN"}, + {RSMI_MEMORY_PARTITION_NPS1, "NPS1"}, + {RSMI_MEMORY_PARTITION_NPS2, "NPS2"}, + {RSMI_MEMORY_PARTITION_NPS4, "NPS4"}, + {RSMI_MEMORY_PARTITION_NPS8, "NPS8"} +}; + +std::map +mapStringToNPSModeTypes { + {"NPS1", RSMI_MEMORY_PARTITION_NPS1}, + {"NPS2", RSMI_MEMORY_PARTITION_NPS2}, + {"NPS4", RSMI_MEMORY_PARTITION_NPS4}, + {"NPS8", RSMI_MEMORY_PARTITION_NPS8} +}; + static std::string get_id_name_str_from_line(uint64_t id, std::string ln, std::istringstream *ln_str) { @@ -2780,71 +2799,84 @@ rsmi_status_string(rsmi_status_t status, const char **status_string) { break; case RSMI_STATUS_OUT_OF_RESOURCES: - *status_string = "Unable to acquire memory or other resource"; + *status_string = "RSMI_STATUS_OUT_OF_RESOURCES: Unable to acquire memory " + "or other resource"; break; case RSMI_STATUS_INTERNAL_EXCEPTION: - *status_string = "An internal exception was caught"; + *status_string = "RSMI_STATUS_INTERNAL_EXCEPTION: An internal exception " + "was caught"; break; case RSMI_STATUS_INPUT_OUT_OF_BOUNDS: - *status_string = "The provided input is out of allowable or safe range"; + *status_string = "RSMI_STATUS_INPUT_OUT_OF_BOUNDS: The provided input is " + "out of allowable or safe range"; break; case RSMI_STATUS_INIT_ERROR: - *status_string = "An error occurred during initialization, during " - "monitor discovery or when when initializing internal data structures"; + *status_string = "RSMI_STATUS_INIT_ERROR: An error occurred during " + "initialization, during monitor discovery or when when " + "initializing internal data structures"; break; case RSMI_STATUS_NOT_YET_IMPLEMENTED: - *status_string = "The called function has not been implemented in this " - "system for this device type"; + *status_string = "RSMI_STATUS_NOT_YET_IMPLEMENTED: The called function " + "has not been implemented in this system for this " + "device type"; break; case RSMI_STATUS_NOT_FOUND: - *status_string = "An item required to complete the call was not found"; + *status_string = "RSMI_STATUS_NOT_FOUND: An item required to complete " + "the call was not found"; break; case RSMI_STATUS_INSUFFICIENT_SIZE: - *status_string = "Not enough resources were available to fully execute" - " the call"; + *status_string = "RSMI_STATUS_INSUFFICIENT_SIZE: Not enough resources " + "were available to fully execute the call"; break; case RSMI_STATUS_INTERRUPT: - *status_string = "An interrupt occurred while executing the function"; + *status_string = "RSMI_STATUS_INTERRUPT: An interrupt occurred while " + "executing the function"; break; case RSMI_STATUS_UNEXPECTED_SIZE: - *status_string = "Data (usually from reading a file) was out of" - " range from what was expected"; + *status_string = "RSMI_STATUS_UNEXPECTED_SIZE: Data (usually from reading" + " a file) was out of range from what was expected"; break; case RSMI_STATUS_NO_DATA: - *status_string = "No data was found (usually from reading a file) " - "where data was expected"; + *status_string = "RSMI_STATUS_NO_DATA: No data was found (usually from " + "reading a file) where data was expected"; break; case RSMI_STATUS_UNEXPECTED_DATA: - *status_string = "Data (usually from reading a file) was not of the " - "type that was expected"; + *status_string = "RSMI_STATUS_UNEXPECTED_DATA: Data (usually from reading" + " a file) was not of the type that was expected"; break; case RSMI_STATUS_BUSY: - *status_string = "A resource or mutex could not be acquired " - "because it is already being used"; + *status_string = "RSMI_STATUS_BUSY: A resource or mutex could not be " + "acquired because it is already being used"; break; case RSMI_STATUS_REFCOUNT_OVERFLOW: - *status_string = "An internal reference counter exceeded INT32_MAX"; + *status_string = "RSMI_STATUS_REFCOUNT_OVERFLOW: An internal reference " + "counter exceeded INT32_MAX"; + break; + + case RSMI_STATUS_AMDGPU_RESTART_ERR: + *status_string = "RSMI_STATUS_AMDGPU_RESTART_ERR: Could not successfully " + "restart the amdgpu driver"; break; case RSMI_STATUS_UNKNOWN_ERROR: - *status_string = "An unknown error prevented the call from completing" - " successfully"; + *status_string = "RSMI_STATUS_UNKNOWN_ERROR: An unknown error prevented " + "the call from completing successfully"; break; default: - *status_string = "An unknown error occurred"; + *status_string = "RSMI_STATUS_UNKNOWN_ERROR: An unknown error occurred"; return RSMI_STATUS_UNKNOWN_ERROR; } return RSMI_STATUS_SUCCESS; @@ -3718,12 +3750,8 @@ rsmi_is_P2P_accessible(uint32_t dv_ind_src, uint32_t dv_ind_dst, static rsmi_status_t get_compute_partition(uint32_t dv_ind, std::string &compute_partition) { TRY - std::string val_str; - - if (compute_partition.c_str() == nullptr) { - return RSMI_STATUS_INVALID_ARGS; - } CHK_SUPPORT_NAME_ONLY(compute_partition.c_str()) + std::string val_str; DEVICE_MUTEX rsmi_status_t ret = get_dev_value_str(amd::smi::kDevComputePartition, @@ -3811,14 +3839,18 @@ rsmi_dev_compute_partition_set(uint32_t dv_ind, } // do nothing if compute_partition is the current compute partition - get_compute_partition(dv_ind, currentComputePartition); + rsmi_status_t ret_get = get_compute_partition(dv_ind, currentComputePartition); + // we can try to set, even if we get unexpected data + if (ret_get != RSMI_STATUS_SUCCESS + && ret_get != RSMI_STATUS_UNEXPECTED_DATA) { + return ret_get; + } rsmi_compute_partition_type_t currRSMIComputePartition = mapStringToRSMIComputePartitionTypes[currentComputePartition]; if (currRSMIComputePartition == compute_partition) { return RSMI_STATUS_SUCCESS; } - newComputePartitionStr = mapRSMIToStringComputePartitionTypes[compute_partition]; GET_DEV_FROM_INDX int ret = dev->writeDevInfo(amd::smi::kDevComputePartition, newComputePartitionStr); @@ -3826,6 +3858,134 @@ rsmi_dev_compute_partition_set(uint32_t dv_ind, CATCH } +static rsmi_status_t get_nps_mode(uint32_t dv_ind, std::string &nps_mode) { + TRY + CHK_SUPPORT_NAME_ONLY(nps_mode.c_str()) + std::string val_str; + + DEVICE_MUTEX + rsmi_status_t ret = get_dev_value_str(amd::smi::kDevMemoryPartition, + dv_ind, &val_str); + + if (ret != RSMI_STATUS_SUCCESS) { + return ret; + } + + switch (mapStringToNPSModeTypes[val_str]) { + case RSMI_MEMORY_PARTITION_UNKNOWN: + // Retrieved an unknown NPS mode + return RSMI_STATUS_UNEXPECTED_DATA; + case RSMI_MEMORY_PARTITION_NPS1: + break; + case RSMI_MEMORY_PARTITION_NPS2: + break; + case RSMI_MEMORY_PARTITION_NPS4: + break; + case RSMI_MEMORY_PARTITION_NPS8: + break; + default: + // Retrieved an unknown NPS mode + return RSMI_STATUS_UNEXPECTED_DATA; + } + nps_mode = val_str; + return RSMI_STATUS_SUCCESS; + CATCH +} + +rsmi_status_t +rsmi_dev_nps_mode_set(uint32_t dv_ind, rsmi_nps_mode_type_t nps_mode) { + TRY + REQUIRE_ROOT_ACCESS + DEVICE_MUTEX + bool isCorrectDevice = false; + char boardName[128]; + boardName[0] = '\0'; + // rsmi_dev_nps_mode_set is only available for for discrete variant, + // others are required to update through bios settings + rsmi_dev_name_get(dv_ind, boardName, 128); + std::string myBoardName = boardName; + if (!myBoardName.empty()) { + std::transform(myBoardName.begin(), myBoardName.end(), myBoardName.begin(), + ::tolower); + if (myBoardName.find("mi") != std::string::npos && + myBoardName.find("00x") != std::string::npos) { + isCorrectDevice = true; + } + } + + if (isCorrectDevice == false) { + return RSMI_STATUS_NOT_SUPPORTED; + } + + std::string newNPSMode + = mapRSMIToStringNPSModeTypes[nps_mode]; + std::string currentNPSMode; + + switch (nps_mode) { + case RSMI_MEMORY_PARTITION_UNKNOWN: + // Retrieved an unknown NPS mode + return RSMI_STATUS_INVALID_ARGS; + case RSMI_MEMORY_PARTITION_NPS1: + break; + case RSMI_MEMORY_PARTITION_NPS2: + break; + case RSMI_MEMORY_PARTITION_NPS4: + break; + case RSMI_MEMORY_PARTITION_NPS8: + break; + default: + return RSMI_STATUS_INVALID_ARGS; + } + + // do nothing if nps_mode is the current NPS mode + rsmi_status_t ret_get = get_nps_mode(dv_ind, currentNPSMode); + // we can try to set, even if we get unexpected data + if (ret_get != RSMI_STATUS_SUCCESS + && ret_get != RSMI_STATUS_UNEXPECTED_DATA) { + return ret_get; + } + rsmi_nps_mode_type_t currRSMINpsMode + = mapStringToNPSModeTypes[currentNPSMode]; + if (currRSMINpsMode == nps_mode) { + return RSMI_STATUS_SUCCESS; + } + + GET_DEV_FROM_INDX + int ret = dev->writeDevInfo(amd::smi::kDevMemoryPartition, newNPSMode); + + if (amd::smi::ErrnoToRsmiStatus(ret) != RSMI_STATUS_SUCCESS) { + return amd::smi::ErrnoToRsmiStatus(ret); + } + + return dev->restartAMDGpuDriver(); + CATCH +} + +rsmi_status_t +rsmi_dev_nps_mode_get(uint32_t dv_ind, char *nps_mode, + uint32_t len) { + CHK_SUPPORT_NAME_ONLY(nps_mode) + if ((len == 0) || (nps_mode == nullptr)) { + return RSMI_STATUS_INVALID_ARGS; + } + + TRY + std::string returning_nps_mode; + rsmi_status_t ret = get_nps_mode(dv_ind, + returning_nps_mode); + + if (ret != RSMI_STATUS_SUCCESS) { return ret; } + + std::size_t length = returning_nps_mode.copy(nps_mode, len); + nps_mode[length]='\0'; + + if (len < (returning_nps_mode.size() + 1)) { + return RSMI_STATUS_INSUFFICIENT_SIZE; + } + return ret; + CATCH +} + enum iterator_handle_type { FUNC_ITER = 0, VARIANT_ITER, diff --git a/src/rocm_smi_device.cc b/src/rocm_smi_device.cc index 4421599c13..3c9fba6287 100755 --- a/src/rocm_smi_device.cc +++ b/src/rocm_smi_device.cc @@ -122,6 +122,7 @@ static const char *kDevSerialNumberFName = "serial_number"; static const char *kDevNumaNodeFName = "numa_node"; static const char *kDevGpuMetricsFName = "gpu_metrics"; static const char *kDevComputePartitionFName = "current_compute_partition"; +static const char *kDevMemoryPartitionFName = "current_memory_partition"; // Firmware version files static const char *kDevFwVersionAsdFName = "fw_version/asd_fw_version"; @@ -292,6 +293,7 @@ static const std::map kDevAttribNameMap = { {kDevGpuMetrics, kDevGpuMetricsFName}, {kDevGpuReset, kDevGpuResetFName}, {kDevComputePartition, kDevComputePartitionFName}, + {kDevMemoryPartition, kDevMemoryPartitionFName}, }; static const std::map kDevPerfLvlMap = { @@ -417,6 +419,8 @@ static const std::map kDevFuncDependsMap = { {"rsmi_dev_gpu_reset", {{kDevGpuResetFName}, {}}}, {"rsmi_dev_compute_partition_get", {{kDevComputePartitionFName}, {}}}, {"rsmi_dev_compute_partition_set", {{kDevComputePartitionFName}, {}}}, + {"rsmi_dev_memory_partition_get", {{kDevMemoryPartitionFName}, {}}}, + {"rsmi_dev_memory_partition_set", {{kDevMemoryPartitionFName}, {}}}, // These functions with variants, but no sensors/units. (May or may not // have mandatory dependencies.) @@ -564,9 +568,9 @@ int Device::openSysfsFileStream(DevInfoTypes type, T *fs, const char *str) { auto sysfs_path = path_; #ifdef DEBUG - if (env_->path_DRM_root_override && type == env_->enum_override) { + if (env_->path_DRM_root_override + && (env_->enum_overrides.find(type) != env_->enum_overrides.end())) { sysfs_path = env_->path_DRM_root_override; - } #endif @@ -698,6 +702,7 @@ int Device::writeDevInfo(DevInfoTypes type, std::string val) { case kDevPowerODVoltage: case kDevSOCClk: case kDevComputePartition: + case kDevMemoryPartition: return writeDevInfoStr(type, val); default: @@ -925,6 +930,7 @@ int Device::readDevInfo(DevInfoTypes type, std::string *val) { case kDevPCIEThruPut: case kDevSerialNumber: case kDevComputePartition: + case kDevMemoryPartition: return readDevInfoStr(type, val); break; @@ -1102,6 +1108,44 @@ bool Device::DeviceAPISupported(std::string name, uint64_t variant, return false; } +rsmi_status_t Device::restartAMDGpuDriver(void) { + REQUIRE_ROOT_ACCESS + bool restartSuccessful = true; + bool success = false; + std::string out = ""; + bool wasGdmServiceActive = false; + + // sudo systemctl is-active gdm + // we do not care about the success of checking if gdm is active + std::tie(success, out) = executeCommand("systemctl is-active gdm"); + (out == "active") ? (restartSuccessful &= success) : + (restartSuccessful = true); + + // if gdm is active -> sudo systemctl stop gdm + // TODO: are are there other display manager's we need to take into account? + // see https://en.wikipedia.org/wiki/GNOME_Display_Manager + if (success && (out == "active")) { + wasGdmServiceActive = true; + std::tie(success, out) = executeCommand("systemctl stop gdm&", false); + restartSuccessful &= success; + } + + // sudo modprobe -r amdgpu + // sudo modprobe amdgpu + std::tie(success, out) = + executeCommand("modprobe -r amdgpu && modprobe amdgpu&", false); + restartSuccessful &= success; + + // if gdm was active -> sudo systemctl start gdm + if (wasGdmServiceActive) { + std::tie(success, out) = executeCommand("systemctl start gdm&", false); + restartSuccessful &= success; + } + + return (restartSuccessful ? RSMI_STATUS_SUCCESS : + RSMI_STATUS_AMDGPU_RESTART_ERR); +} + #undef RET_IF_NONZERO } // namespace smi } // namespace amd diff --git a/src/rocm_smi_main.cc b/src/rocm_smi_main.cc index f95ad528d6..ba3649f66b 100755 --- a/src/rocm_smi_main.cc +++ b/src/rocm_smi_main.cc @@ -57,6 +57,7 @@ #include #include #include +#include #include "rocm_smi/rocm_smi.h" #include "rocm_smi/rocm_smi_device.h" @@ -141,7 +142,8 @@ const std::map amd::smi::RocmSMI::devInfoTy {amd::smi::kDevNumaNode, amdSMI + "kDevNumaNode"}, {amd::smi::kDevGpuMetrics, amdSMI + "kDevGpuMetrics"}, {amd::smi::kDevGpuReset, amdSMI + "kDevGpuReset"}, - {amd::smi::kDevComputePartition, amdSMI + "kDevComputePartition"} + {amd::smi::kDevComputePartition, amdSMI + "kDevComputePartition"}, + {amd::smi::kDevMemoryPartition, amdSMI + "kDevMemoryPartition"} }; namespace amd { @@ -305,6 +307,8 @@ RocmSMI::Initialize(uint64_t flags) { euid_ = geteuid(); GetEnvVariables(); + // To help debug env variable issues + // printEnvVarInfo(); while (env_vars_.debug_inf_loop) {} @@ -429,6 +433,31 @@ static uint32_t GetEnvVarUInteger(const char *ev_str) { return 0; } +static std::unordered_set GetEnvVarUIntegerSets(const char *ev_str) { + std::unordered_set returnSet; +#ifndef DEBUG + (void)ev_str; +#else + ev_str = getenv(ev_str); + if(ev_str == nullptr) { return returnSet; } + std::string stringEnv = ev_str; + + if (stringEnv.empty() == false) { + // parse out values by commas + std::string parsedVal; + std::istringstream ev_str_ss(stringEnv); + + while (std::getline(ev_str_ss, parsedVal, ',')) { + int parsedInt = std::stoi(parsedVal); + assert(parsedInt >= 0); + uint32_t parsedUInt = static_cast(parsedInt); + returnSet.insert(parsedUInt); + } + } +#endif + return returnSet; +} + // Get and store env. variables in this method void RocmSMI::GetEnvVariables(void) { #ifndef DEBUG @@ -437,15 +466,15 @@ void RocmSMI::GetEnvVariables(void) { env_vars_.path_DRM_root_override = nullptr; env_vars_.path_HWMon_root_override = nullptr; env_vars_.path_power_root_override = nullptr; - env_vars_.enum_override = 0; env_vars_.debug_inf_loop = 0; + env_vars_.enum_overrides.clear(); #else env_vars_.debug_output_bitfield = GetEnvVarUInteger("RSMI_DEBUG_BITFIELD"); env_vars_.path_DRM_root_override = getenv("RSMI_DEBUG_DRM_ROOT_OVERRIDE"); env_vars_.path_HWMon_root_override = getenv("RSMI_DEBUG_HWMON_ROOT_OVERRIDE"); env_vars_.path_power_root_override = getenv("RSMI_DEBUG_PP_ROOT_OVERRIDE"); - env_vars_.enum_override = GetEnvVarUInteger("RSMI_DEBUG_ENUM_OVERRIDE"); env_vars_.debug_inf_loop = GetEnvVarUInteger("RSMI_DEBUG_INFINITE_LOOP"); + env_vars_.enum_overrides = GetEnvVarUIntegerSets("RSMI_DEBUG_ENUM_OVERRIDE"); #endif } @@ -453,6 +482,43 @@ const RocmSMI_env_vars& RocmSMI::getEnv(void) { return env_vars_; } +void RocmSMI::printEnvVarInfo(void) { + std::cout << __PRETTY_FUNCTION__ << " | env_vars_.debug_output_bitfield = " + << ((env_vars_.debug_output_bitfield == 0) ? "" + : std::to_string(env_vars_.debug_output_bitfield)) + << std::endl; + std::cout << __PRETTY_FUNCTION__ << " | env_vars_.path_DRM_root_override = " + << ((env_vars_.path_DRM_root_override == nullptr) + ? "" : env_vars_.path_DRM_root_override) + << std::endl; + std::cout << __PRETTY_FUNCTION__ << " | env_vars_.path_HWMon_root_override = " + << ((env_vars_.path_HWMon_root_override == nullptr) + ? "" : env_vars_.path_HWMon_root_override) + << std::endl; + std::cout << __PRETTY_FUNCTION__ << " | env_vars_.path_power_root_override = " + << ((env_vars_.path_power_root_override == nullptr) + ? "" : env_vars_.path_power_root_override) + << std::endl; + std::cout << __PRETTY_FUNCTION__ << " | env_vars_.debug_inf_loop = " + << ((env_vars_.debug_inf_loop == 0) ? "" + : std::to_string(env_vars_.debug_output_bitfield)) + << std::endl; + std::cout << __PRETTY_FUNCTION__ << " | env_vars_.enum_overrides = {"; + if (env_vars_.enum_overrides.empty()) { + std::cout << "}" << std::endl; + return; + } + for (auto it=env_vars_.enum_overrides.begin(); + it != env_vars_.enum_overrides.end(); ++it) { + std::cout << *it; + auto temp_it = it; + if(++temp_it != env_vars_.enum_overrides.end()) { + std::cout << ","; + } + } + std::cout << "}" << std::endl; +} + std::shared_ptr RocmSMI::FindMonitor(std::string monitor_path) { std::string tmp; diff --git a/src/rocm_smi_utils.cc b/src/rocm_smi_utils.cc index 473d1e2b67..8c9fe39567 100755 --- a/src/rocm_smi_utils.cc +++ b/src/rocm_smi_utils.cc @@ -3,7 +3,7 @@ * The University of Illinois/NCSA * Open Source License (NCSA) * - * Copyright (c) 2018, Advanced Micro Devices, Inc. + * Copyright (c) 2018-2023, Advanced Micro Devices, Inc. * All rights reserved. * * Developed by: @@ -51,6 +51,7 @@ #include #include #include +#include #include "rocm_smi/rocm_smi.h" #include "rocm_smi/rocm_smi_utils.h" @@ -234,5 +235,68 @@ rsmi_status_t ErrnoToRsmiStatus(int err) { } } +std::string leftTrim(const std::string &s) { + if (!s.empty()) { + return std::regex_replace(s, std::regex("^\\s+"), ""); + } + return s; +} + +std::string rightTrim(const std::string &s) { + if (!s.empty()) { + return std::regex_replace(s, std::regex("\\s+$"), ""); + } + return s; +} + +std::string removeNewLines(const std::string &s) { + if (!s.empty()) { + return std::regex_replace(s, std::regex("\n+"), ""); + } + return s; +} + +std::string trim(const std::string &s) { + if (!s.empty()) { + // remove new lines -> trim white space at ends + std::string noNewLines = removeNewLines(s); + return leftTrim(rightTrim(noNewLines)); + } + return s; +} + +// defaults to trim stdOut +std::pair executeCommand(std::string command, bool stdOut) { + char buffer[128]; + std::string stdoutAndErr = ""; + bool successfulRun = true; + command = "stdbuf -i0 -o0 -e0 " + command; // remove stdOut and err buffering + + FILE *pipe = popen(command.c_str(), "r"); + if (!pipe) { + stdoutAndErr = "[ERROR] popen failed to call " + command; + successfulRun = false; + } else { + //read until end of process + while (!feof(pipe)) { + // use buffer to read and add to stdoutAndErr + if (fgets(buffer, sizeof(buffer), pipe) != nullptr) { + stdoutAndErr += buffer; + } + } + } + + // any return code other than 0, is a failed execution + if (pclose(pipe) != 0) { + successfulRun = false; + } + + if (stdOut) { + // remove leading and trailing spaces of output and new lines + stdoutAndErr = trim(stdoutAndErr); + } + return std::make_pair(successfulRun, stdoutAndErr); +} + } // namespace smi } // namespace amd diff --git a/tests/rocm_smi_test/CMakeLists.txt b/tests/rocm_smi_test/CMakeLists.txt index e7321d0b97..8aaacb9e91 100755 --- a/tests/rocm_smi_test/CMakeLists.txt +++ b/tests/rocm_smi_test/CMakeLists.txt @@ -49,6 +49,24 @@ endif() set(RSMI_INC_DIR ${ROCM_DIR}/include) set(RSMI_LIB_DIR ${ROCM_DIR}/lib) + + +message("") +message("Google Test Configuration init:") +message("-----------ROCM_DIR: " ${ROCM_DIR}) +message("-----------GOOGLE_TEST_FRWK_NAME: " ${GOOGLE_TEST_FRWK_NAME}) +message("-----------RSMITST: " ${RSMITST}) +message("-----------RSMITST_ROOT: " ${RSMITST_ROOT}) +message("-----------RSMITST_LIBS: " ${RSMITST_LIBS}) +message("-----------PROJECT_BINARY_DIR: " ${PROJECT_BINARY_DIR}) +message("-----------RSMI_LIB_DIR: " ${RSMI_LIB_DIR}) +message("-----------GTEST_LIB_DIR: " ${GTEST_LIB_DIR}) +message("-----------RSMI_INC_DIR: " ${RSMI_INC_DIR}) +message("-----------rsmitstSources: " ${rsmitstSources}) +message("-----------functionalSources: " ${functionalSources}) +message("") + + # # Determine RSMI Header files are present # (no external source dependencies) @@ -76,6 +94,21 @@ else() endif() endif() +message("") +message("Google Test Configuration (after lib check):") +message("-----------ROCM_DIR: " ${ROCM_DIR}) +message("-----------GOOGLE_TEST_FRWK_NAME: " ${GOOGLE_TEST_FRWK_NAME}) +message("-----------RSMITST: " ${RSMITST}) +message("-----------RSMITST_ROOT: " ${RSMITST_ROOT}) +message("-----------RSMITST_LIBS: " ${RSMITST_LIBS}) +message("-----------PROJECT_BINARY_DIR: " ${PROJECT_BINARY_DIR}) +message("-----------RSMI_LIB_DIR: " ${RSMI_LIB_DIR}) +message("-----------GTEST_LIB_DIR: " ${GTEST_LIB_DIR}) +message("-----------RSMI_INC_DIR: " ${RSMI_INC_DIR}) +message("-----------rsmitstSources: " ${rsmitstSources}) +message("-----------functionalSources: " ${functionalSources}) +message("") + string(TOLOWER "${RSMITST_BLD_TYPE}" tmp) if("${tmp}" STREQUAL release) set(BUILD_TYPE "Release") @@ -224,3 +257,18 @@ install(TARGETS ${RSMITST} LIBRARY DESTINATION ${PROJECT_BINARY_DIR}/lib RUNTIME DESTINATION ${PROJECT_BINARY_DIR}/bin) +message("") +message("Google Test Configuration:") +message("-----------ROCM_DIR: " ${ROCM_DIR}) +message("-----------GOOGLE_TEST_FRWK_NAME: " ${GOOGLE_TEST_FRWK_NAME}) +message("-----------RSMITST: " ${RSMITST}) +message("-----------RSMITST_ROOT: " ${RSMITST_ROOT}) +message("-----------RSMITST_LIBS: " ${RSMITST_LIBS}) +message("-----------PROJECT_BINARY_DIR: " ${PROJECT_BINARY_DIR}) +message("-----------RSMI_LIB_DIR: " ${RSMI_LIB_DIR}) +message("-----------GTEST_LIB_DIR: " ${GTEST_LIB_DIR}) +message("-----------RSMI_INC_DIR: " ${RSMI_INC_DIR}) +message("-----------rsmitstSources: " ${rsmitstSources}) +message("-----------functionalSources: " ${functionalSources}) +message("") + diff --git a/tests/rocm_smi_test/functional/computepartition_read_write.cc b/tests/rocm_smi_test/functional/computepartition_read_write.cc index 8e22022716..2e71322270 100755 --- a/tests/rocm_smi_test/functional/computepartition_read_write.cc +++ b/tests/rocm_smi_test/functional/computepartition_read_write.cc @@ -204,7 +204,6 @@ void TestComputePartitionReadWrite::Run(void) { // Verify api support checking functionality is working err = rsmi_dev_compute_partition_set(dv_ind, new_computePartition); // Note: new_computePartition is not set - // DISPLAY_RSMI_ERR(err) EXPECT_TRUE((err == RSMI_STATUS_INVALID_ARGS) || (err == RSMI_STATUS_NOT_SUPPORTED)); IF_VERB(STANDARD) { @@ -222,7 +221,6 @@ void TestComputePartitionReadWrite::Run(void) { new_computePartition = rsmi_compute_partition_type::RSMI_COMPUTE_PARTITION_INVALID; err = rsmi_dev_compute_partition_set(dv_ind, new_computePartition); - // DISPLAY_RSMI_ERR(err) EXPECT_TRUE((err == RSMI_STATUS_INVALID_ARGS) || (err == RSMI_STATUS_NOT_SUPPORTED) || (err == RSMI_STATUS_PERMISSION)); diff --git a/tests/rocm_smi_test/functional/npsmode_read_write.cc b/tests/rocm_smi_test/functional/npsmode_read_write.cc new file mode 100755 index 0000000000..e2356ea5f4 --- /dev/null +++ b/tests/rocm_smi_test/functional/npsmode_read_write.cc @@ -0,0 +1,298 @@ +/* + * ============================================================================= + * ROC Runtime Conformance Release License + * ============================================================================= + * The University of Illinois/NCSA + * Open Source License (NCSA) + * + * Copyright (c) 2017-2023, Advanced Micro Devices, Inc. + * All rights reserved. + * + * Developed by: + * + * AMD Research and AMD ROC Software Development + * + * Advanced Micro Devices, Inc. + * + * www.amd.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal with the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimers. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimers in + * the documentation and/or other materials provided with the distribution. + * - Neither the names of , + * nor the names of its contributors may be used to endorse or promote + * products derived from this Software without specific prior written + * permission. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS WITH THE SOFTWARE. + * + */ + +#include +#include + +#include + +#include "gtest/gtest.h" +#include "rocm_smi/rocm_smi.h" +#include "rocm_smi_test/functional/npsmode_read_write.h" +#include "rocm_smi_test/test_common.h" + +TestNPSModeReadWrite::TestNPSModeReadWrite() : TestBase() { + set_title("RSMI NPS Mode Read Test"); + set_description("The NPS Mode tests verifies that the memory " + "parition setting can be read and updated properly."); +} + +TestNPSModeReadWrite::~TestNPSModeReadWrite(void) { +} + +void TestNPSModeReadWrite::SetUp(void) { + TestBase::SetUp(); + + return; +} + +void TestNPSModeReadWrite::DisplayTestInfo(void) { + TestBase::DisplayTestInfo(); +} + +void TestNPSModeReadWrite::DisplayResults(void) const { + TestBase::DisplayResults(); + return; +} + +void TestNPSModeReadWrite::Close() { + // This will close handles opened within rsmitst utility calls and call + // rsmi_shut_down(), so it should be done after other hsa cleanup + TestBase::Close(); +} + +static const std::string +npsModeString(rsmi_nps_mode_type npsModeType) { + switch (npsModeType) { + case RSMI_MEMORY_PARTITION_NPS1: + return "NPS1"; + case RSMI_MEMORY_PARTITION_NPS2: + return "NPS2"; + case RSMI_MEMORY_PARTITION_NPS4: + return "NPS4"; + case RSMI_MEMORY_PARTITION_NPS8: + return "NPS8"; + default: + return "UNKNOWN"; + } +} + +static const std::map +mapStringToRSMINpsModeTypes { + {"NPS1", RSMI_MEMORY_PARTITION_NPS1}, + {"NPS2", RSMI_MEMORY_PARTITION_NPS2}, + {"NPS4", RSMI_MEMORY_PARTITION_NPS4}, + {"NPS8", RSMI_MEMORY_PARTITION_NPS8} +}; + +void TestNPSModeReadWrite::Run(void) { + rsmi_status_t ret, err; + char orig_nps_mode[255]; + char current_nps_mode[255]; + orig_nps_mode[0] = '\0'; + current_nps_mode[0] = '\0'; + rsmi_nps_mode_type new_nps_mode; + + TestBase::Run(); + if (setup_failed_) { + std::cout << "** SetUp Failed for this test. Skipping.**" << std::endl; + return; + } + + for (uint32_t dv_ind = 0; dv_ind < num_monitor_devs(); ++dv_ind) { + PrintDeviceHeader(dv_ind); + + //Standard checks to see if API is supported, before running full tests + ret = rsmi_dev_nps_mode_get(dv_ind, orig_nps_mode, 255); + if (ret == RSMI_STATUS_NOT_SUPPORTED) { + IF_VERB(STANDARD) { + std::cout << "\t**" << ": " + << "Not supported on this machine" << std::endl; + } + return; + } else { + CHK_ERR_ASRT(ret) + } + IF_VERB(STANDARD) { + std::cout << std::endl << "\t**" + << "NPS Mode: " + << orig_nps_mode << std::endl; + } + + if ((orig_nps_mode == nullptr) || + (orig_nps_mode[0] == '\0')) { + std::cout << "***System nps mode value is not defined or received unexpected data. " + "Skip nps mode test." << std::endl; + return; + } + EXPECT_TRUE(ret == RSMI_STATUS_SUCCESS); + + // Verify api support checking functionality is working + uint32_t length = 2; + char smallBuffer[length]; + err = rsmi_dev_nps_mode_get(dv_ind, smallBuffer, length); + size_t size = sizeof(smallBuffer)/sizeof(*smallBuffer); + ASSERT_EQ(err, RSMI_STATUS_INSUFFICIENT_SIZE); + ASSERT_EQ((size_t)length, size); + if (err == RSMI_STATUS_INSUFFICIENT_SIZE) { + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Confirmed RSMI_STATUS_INSUFFICIENT_SIZE was returned " + << "and size matches length requested." << std::endl; + } + } + + // Verify api support checking functionality is working + err = rsmi_dev_nps_mode_get(dv_ind, nullptr, 255); + ASSERT_EQ(err, RSMI_STATUS_NOT_SUPPORTED); + + if (err == RSMI_STATUS_NOT_SUPPORTED) { + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Confirmed RSMI_STATUS_NOT_SUPPORTED was returned." + << std::endl; + } + } + + // Verify api support checking functionality is working + err = rsmi_dev_nps_mode_get(dv_ind, orig_nps_mode, 0); + ASSERT_EQ(err, (RSMI_STATUS_INVALID_ARGS || RSMI_STATUS_NOT_SUPPORTED)); + if (err == RSMI_STATUS_INVALID_ARGS) { + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Confirmed RSMI_STATUS_INVALID_ARGS was returned." + << std::endl; + } + } + + /******************************/ + /* rsmi_dev_nps_mode_set(...) */ + /******************************/ + // Verify api support checking functionality is working + err = rsmi_dev_nps_mode_set(dv_ind, new_nps_mode); + // Note: new_nps_mode is not set + EXPECT_TRUE((err == RSMI_STATUS_INVALID_ARGS) || + (err == RSMI_STATUS_NOT_SUPPORTED)); + if (err == RSMI_STATUS_INVALID_ARGS) { + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Confirmed RSMI_STATUS_INVALID_ARGS was returned." + << std::endl; + } + } else if (err == RSMI_STATUS_NOT_SUPPORTED) { + IF_VERB(STANDARD) { + std::cout << "\t**" << ": " + << "rsmi_dev_nps_mode_set not supported on this machine" + << "\n\t (if rsmi_dev_nps_mode_get work, then likely " + << "need to set in bios)" + << std::endl; + } + return; + } else { + DISPLAY_RSMI_ERR(err) + } + ASSERT_FALSE(err == RSMI_STATUS_PERMISSION); + + // Verify api support checking functionality is working + new_nps_mode = rsmi_nps_mode_type::RSMI_MEMORY_PARTITION_UNKNOWN; + err = rsmi_dev_nps_mode_set(dv_ind, new_nps_mode); + EXPECT_TRUE((err == RSMI_STATUS_INVALID_ARGS) || + (err == RSMI_STATUS_NOT_SUPPORTED) || + (err == RSMI_STATUS_PERMISSION)); + if (err == RSMI_STATUS_INVALID_ARGS) { + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Confirmed RSMI_STATUS_INVALID_ARGS was returned." + << std::endl; + } else if (err == RSMI_STATUS_PERMISSION) { + DISPLAY_RSMI_ERR(err) + // tests should not continue if err is a permission issue + ASSERT_FALSE(err == RSMI_STATUS_PERMISSION); + } else { + DISPLAY_RSMI_ERR(err) + } + } + + // Re-run original get, so we can reset to later + ret = rsmi_dev_nps_mode_get(dv_ind, orig_nps_mode, 255); + EXPECT_EQ(RSMI_STATUS_SUCCESS, ret); + + for (int partition = RSMI_MEMORY_PARTITION_NPS1; + partition <= RSMI_MEMORY_PARTITION_NPS8; + partition++) { + new_nps_mode + = static_cast(partition); + IF_VERB(STANDARD) { + std::cout << std::endl; + std::cout << "\t**" + << "======== TEST RSMI_MEMORY_PARTITION_" + << npsModeString(new_nps_mode) + << " ===============" << std::endl; + } + ret = rsmi_dev_nps_mode_set(dv_ind, new_nps_mode); + CHK_ERR_ASRT(ret) + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Attempting to set nps mode to: " + << npsModeString(new_nps_mode) << std::endl; + } + ret = rsmi_dev_nps_mode_get(dv_ind, current_nps_mode, 255); + CHK_ERR_ASRT(ret) + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Current nps mode: " << current_nps_mode << std::endl; + } + EXPECT_EQ(RSMI_STATUS_SUCCESS, ret); + EXPECT_STREQ(npsModeString(new_nps_mode).c_str(), current_nps_mode); + } + + /* TEST RETURN TO ORIGINAL NPS MODE SETTING */ + IF_VERB(STANDARD) { + std::cout << std::endl; + std::cout << "\t**" + << "=========== TEST RETURN TO ORIGINAL NPS MODE " + << "SETTING ========" << std::endl; + } + new_nps_mode + = mapStringToRSMINpsModeTypes.at(orig_nps_mode); + ret = rsmi_dev_nps_mode_set(dv_ind, new_nps_mode); + CHK_ERR_ASRT(ret) + IF_VERB(STANDARD) { + std::cout << "\t**" << "Returning nps mode to: " + << npsModeString(new_nps_mode) << std::endl; + } + ret = rsmi_dev_nps_mode_get(dv_ind, current_nps_mode, 255); + CHK_ERR_ASRT(ret) + IF_VERB(STANDARD) { + std::cout << "\t**" << "Attempted to set nps mode: " + << npsModeString(new_nps_mode) << std::endl + << "\t**" << "Current compute partition: " << current_nps_mode + << std::endl; + } + EXPECT_EQ(RSMI_STATUS_SUCCESS, ret); + EXPECT_STREQ(npsModeString(new_nps_mode).c_str(), current_nps_mode); + + } +} diff --git a/tests/rocm_smi_test/functional/npsmode_read_write.h b/tests/rocm_smi_test/functional/npsmode_read_write.h new file mode 100755 index 0000000000..54eed75e01 --- /dev/null +++ b/tests/rocm_smi_test/functional/npsmode_read_write.h @@ -0,0 +1,73 @@ +/* + * ============================================================================= + * ROC Runtime Conformance Release License + * ============================================================================= + * The University of Illinois/NCSA + * Open Source License (NCSA) + * + * Copyright (c) 2017-2023, Advanced Micro Devices, Inc. + * All rights reserved. + * + * Developed by: + * + * AMD Research and AMD ROC Software Development + * + * Advanced Micro Devices, Inc. + * + * www.amd.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal with the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimers. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimers in + * the documentation and/or other materials provided with the distribution. + * - Neither the names of , + * nor the names of its contributors may be used to endorse or promote + * products derived from this Software without specific prior written + * permission. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS WITH THE SOFTWARE. + * + */ +#ifndef TESTS_ROCM_SMI_TEST_FUNCTIONAL_NPSMODE_READ_WRITE_H_ +#define TESTS_ROCM_SMI_TEST_FUNCTIONAL_NPSMODE_READ_WRITE_H_ + +#include "rocm_smi_test/test_base.h" + +class TestNPSModeReadWrite : public TestBase { + public: + TestNPSModeReadWrite(); + + // @Brief: Destructor for test case of TestNPSModeReadWrite + virtual ~TestNPSModeReadWrite(); + + // @Brief: Setup the environment for measurement + virtual void SetUp(); + + // @Brief: Core measurement execution + virtual void Run(); + + // @Brief: Clean up and retrive the resource + virtual void Close(); + + // @Brief: Display results + virtual void DisplayResults() const; + + // @Brief: Display information about what this test does + virtual void DisplayTestInfo(void); +}; + +#endif // TESTS_ROCM_SMI_TEST_FUNCTIONAL_NPSMODE_READ_WRITE_H_ diff --git a/tests/rocm_smi_test/main.cc b/tests/rocm_smi_test/main.cc index e707566599..e761ac4fd0 100755 --- a/tests/rocm_smi_test/main.cc +++ b/tests/rocm_smi_test/main.cc @@ -87,6 +87,7 @@ #include "rocm_smi_test/functional/gpu_metrics_read.h" #include "rocm_smi_test/functional/metrics_counter_read.h" #include "rocm_smi_test/functional/perf_determinism.h" +#include "functional/npsmode_read_write.h" static RSMITstGlobals *sRSMIGlvalues = nullptr; @@ -277,7 +278,11 @@ TEST(rsmitstReadWrite, TestComputePartitionReadWrite) { TestComputePartitionReadWrite tst; RunGenericTest(&tst); } -TEST(rsmitstReadOnly, TestConcurrentInit) { +TEST(rsmitstReadWrite, TestNPSModeReadWrite) { + TestNPSModeReadWrite tst; + RunGenericTest(&tst); +} +TEST(rsmitstReadOnly, Test) { TestConcurrentInit tst; SetFlags(&tst); tst.DisplayTestInfo(); From 77c950a4bf7d1bf4ef4749af171a47620f17baa1 Mon Sep 17 00:00:00 2001 From: Charis Poag Date: Tue, 14 Feb 2023 17:06:03 -0600 Subject: [PATCH 35/85] [SWDEV-381630] Add reset partition functionality Updates: * Added rsmi_dev_compute_partition_reset & rsmi_dev_nps_mode_reset * Added --resetcomputepartition and --resetnpsmode python smi calls * Added temp data files rocmsmi_boot_compute_partition_ & rocmsmi_boot_nps_mode_partition_, writes UNKNOWN if data cannot be read or device does not support * Cleaned up NPS & compute API documentation * Added creation and reading of API temp files (used in reset functionality) * Cleaned up output of rocm_smi_example * Updated rocm_smi_example to check if running with sudo permission before executing write API calls (cleans up erroneous output) * Added template specialization for storing temp data, requires specific rsmi_type_t enums (restrics what data can be stored) * Added storage of temp data, if temp files do not exist * Updated google tests for NPS & compute to include reset API calls Change-Id: I69895a466b97107617e6dbb355737b84499a76c9 Signed-off-by: Charis Poag --- include/rocm_smi/rocm_smi.h | 45 +++++- include/rocm_smi/rocm_smi_device.h | 2 + include/rocm_smi/rocm_smi_utils.h | 17 ++- python_smi_tools/rocm_smi.py | 96 +++++++++++- rocm_smi/docs/ROCm_SMI_Manual.pdf | Bin 522158 -> 526697 bytes rocm_smi/example/rocm_smi_example.cc | 51 ++++--- src/rocm_smi.cc | 41 ++++++ src/rocm_smi_device.cc | 123 ++++++++++++++++ src/rocm_smi_main.cc | 6 + src/rocm_smi_utils.cc | 138 ++++++++++++++++++ .../functional/computepartition_read_write.cc | 44 +++++- .../functional/npsmode_read_write.cc | 60 ++++++-- 12 files changed, 577 insertions(+), 46 deletions(-) diff --git a/include/rocm_smi/rocm_smi.h b/include/rocm_smi/rocm_smi.h index c478c045b8..3a80112264 100755 --- a/include/rocm_smi/rocm_smi.h +++ b/include/rocm_smi/rocm_smi.h @@ -3540,12 +3540,13 @@ rsmi_is_P2P_accessible(uint32_t dv_ind_src, uint32_t dv_ind_dst, * which the device's current compute partition will be written to. * * @param[in] len the length of the caller provided buffer @p compute_partition + * , suggested length is 4 or greater. * * @retval ::RSMI_STATUS_SUCCESS call was successful * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid * @retval ::RSMI_STATUS_UNEXPECTED_DATA data provided to function is not valid * @retval ::RSMI_STATUS_NOT_SUPPORTED installed software or hardware does not - * support this function with the given arguments + * support this function * @retval ::RSMI_STATUS_INSUFFICIENT_SIZE is returned if @p len bytes is not * large enough to hold the entire compute partition value. In this case, * only @p len bytes will be written. @@ -3572,13 +3573,30 @@ rsmi_dev_compute_partition_get(uint32_t dv_ind, char *compute_partition, * @retval ::RSMI_STATUS_PERMISSION function requires root access * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid * @retval ::RSMI_STATUS_NOT_SUPPORTED installed software or hardware does not - * support this function with the given arguments + * support this function * */ rsmi_status_t rsmi_dev_compute_partition_set(uint32_t dv_ind, rsmi_compute_partition_type_t compute_partition); +/** + * @brief Reverts a selected device's compute partition setting back to its + * boot state. + * + * @details Given a device index @p dv_ind , this function will attempt to + * revert its compute partition setting back to its boot state. + * + * @param[in] dv_ind a device index + * + * @retval ::RSMI_STATUS_SUCCESS call was successful + * @retval ::RSMI_STATUS_PERMISSION function requires root access + * @retval ::RSMI_STATUS_NOT_SUPPORTED installed software or hardware does not + * support this function + * + */ +rsmi_status_t rsmi_dev_compute_partition_reset(uint32_t dv_ind); + /** @} */ // end of ComputePartition /*****************************************************************************/ @@ -3609,7 +3627,7 @@ rsmi_dev_compute_partition_set(uint32_t dv_ind, * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid * @retval ::RSMI_STATUS_UNEXPECTED_DATA data provided to function is not valid * @retval ::RSMI_STATUS_NOT_SUPPORTED installed software or hardware does not - * support this function with the given arguments + * support this function * @retval ::RSMI_STATUS_INSUFFICIENT_SIZE is returned if @p len bytes is not * large enough to hold the entire nps mode value. In this case, * only @p len bytes will be written. @@ -3634,7 +3652,7 @@ rsmi_dev_nps_mode_get(uint32_t dv_ind, char *nps_mode, uint32_t len); * @retval ::RSMI_STATUS_PERMISSION function requires root access * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid * @retval ::RSMI_STATUS_NOT_SUPPORTED installed software or hardware does not - * support this function with the given arguments + * support this function * @retval ::RSMI_STATUS_AMDGPU_RESTART_ERR could not successfully restart * the amdgpu driver * @@ -3642,6 +3660,25 @@ rsmi_dev_nps_mode_get(uint32_t dv_ind, char *nps_mode, uint32_t len); rsmi_status_t rsmi_dev_nps_mode_set(uint32_t dv_ind, rsmi_nps_mode_type_t nps_mode); +/** + * @brief Reverts a selected device's NPS mode setting back to its + * boot state. + * + * @details Given a device index @p dv_ind , this function will attempt to + * revert its NPS mode setting back to its boot state. + * + * @param[in] dv_ind a device index + * + * @retval ::RSMI_STATUS_SUCCESS call was successful + * @retval ::RSMI_STATUS_PERMISSION function requires root access + * @retval ::RSMI_STATUS_NOT_SUPPORTED installed software or hardware does not + * support this function + * @retval ::RSMI_STATUS_AMDGPU_RESTART_ERR could not successfully restart + * the amdgpu driver + * + */ +rsmi_status_t rsmi_dev_nps_mode_reset(uint32_t dv_ind); + /** @} */ // end of NPSMode /*****************************************************************************/ diff --git a/include/rocm_smi/rocm_smi_device.h b/include/rocm_smi/rocm_smi_device.h index 6b7b3baeca..e3c94164ac 100755 --- a/include/rocm_smi/rocm_smi_device.h +++ b/include/rocm_smi/rocm_smi_device.h @@ -217,6 +217,8 @@ class Device { bool DeviceAPISupported(std::string name, uint64_t variant, uint64_t sub_variant); rsmi_status_t restartAMDGpuDriver(void); + rsmi_status_t storeDevicePartitions(uint32_t dv_ind); + template std::string readBootPartitionState(uint32_t dv_ind); private: std::shared_ptr monitor_; diff --git a/include/rocm_smi/rocm_smi_utils.h b/include/rocm_smi/rocm_smi_utils.h index 527342d544..f2f8d6ab8f 100755 --- a/include/rocm_smi/rocm_smi_utils.h +++ b/include/rocm_smi/rocm_smi_utils.h @@ -66,18 +66,23 @@ namespace amd { namespace smi { pthread_mutex_t *GetMutex(uint32_t dv_ind); - int SameFile(const std::string fileA, const std::string fileB); bool FileExists(char const *filename); int isRegularFile(std::string fname, bool *is_reg); - int ReadSysfsStr(std::string path, std::string *retStr); int WriteSysfsStr(std::string path, std::string val); - bool IsInteger(const std::string & n_str); - -std::pair executeCommand(std::string command, bool stdOut = true); - +std::pair executeCommand(std::string command, + bool stdOut = true); +rsmi_status_t storeTmpFile(uint32_t dv_ind, std::string parameterName, + std::string stateName, std::string storageData); +std::vector getListOfAppTmpFiles(); +bool containsString(std::string originalString, std::string substring); +std::tuple readTmpFile( + uint32_t dv_ind, + std::string stateName, + std::string parameterName); +void displayAppTmpFilesContent(void); rsmi_status_t handleException(); rsmi_status_t GetDevValueVec(amd::smi::DevInfoTypes type, diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index d235738703..cae7e0cef0 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -411,6 +411,30 @@ def getVersion(deviceList, component): return None +def getComputePartition(device): + """ Return the current compute partition of a given device + + @param device: DRM device identifier + """ + currentComputePartition = create_string_buffer(256) + ret = rocmsmi.rsmi_dev_compute_partition_get(device, currentComputePartition, 256) + if rsmi_ret_ok(ret, device, silent=True) and currentComputePartition.value.decode(): + return str(currentComputePartition.value.decode()) + return "UNKNOWN" + + +def getMemoryPartition(device): + """ Return the current memory partition of a given device + + @param device: DRM device identifier + """ + currentNPSMode = create_string_buffer(256) + ret = rocmsmi.rsmi_dev_nps_mode_get(device, currentNPSMode, 256) + if rsmi_ret_ok(ret, device, silent=True) and currentNPSMode.value.decode(): + return str(currentNPSMode.value.decode()) + return "UNKNOWN" + + def print2DArray(dataArray): """ Print 2D Array with uniform spacing """ global PRINT_JSON @@ -773,6 +797,66 @@ def resetPerfDeterminism(deviceList): printLogSpacer() +def resetComputePartition(deviceList): + """ Reset Compute Partition to its boot state + + @param deviceList: List of DRM devices (can be a single-item list) + """ + printLogSpacer(" Reset compute partition to its boot state ") + for device in deviceList: + originalPartition = getComputePartition(device) + ret = rocmsmi.rsmi_dev_compute_partition_reset(device) + if rsmi_ret_ok(ret, device, silent=True): + resetBootState = getComputePartition(device) + printLog(device, "Successfully reset compute partition (" + + originalPartition + ") to boot state (" + resetBootState + + ")", None) + elif ret == rsmi_status_t.RSMI_STATUS_PERMISSION: + printLog(device, 'Permission denied', None) + elif ret == rsmi_status_t.RSMI_STATUS_NOT_SUPPORTED: + printLog(device, 'Not supported on the given system', None) + else: + rsmi_ret_ok(ret, device) + printErrLog(device, 'Failed to reset the compute partition to boot state') + printLogSpacer() + + +def resetNpsMode(deviceList): + """ Reset NPS mode to its boot state + + @param deviceList: List of DRM devices (can be a single-item list) + """ + printLogSpacer(" Reset nps mode to its boot state ") + for device in deviceList: + originalPartition = getMemoryPartition(device) + t1 = multiprocessing.Process(target=showProgressbar, + args=("Resetting NPS mode",13,)) + t1.start() + addExtraLine=True + start=time.time() + ret = rocmsmi.rsmi_dev_nps_mode_reset(device) + stop=time.time() + duration=stop-start + if t1.is_alive(): + t1.terminate() + t1.join() + if duration < float(0.1): # For longer runs, add extra line before output + addExtraLine=False # This is to prevent overriding progress bar + if rsmi_ret_ok(ret, device, silent=True): + resetBootState = getMemoryPartition(device) + printLog(device, "Successfully reset nps mode (" + + originalPartition + ") to boot state (" + + resetBootState + ")", None, addExtraLine) + elif ret == rsmi_status_t.RSMI_STATUS_PERMISSION: + printLog(device, 'Permission denied', None, addExtraLine) + elif ret == rsmi_status_t.RSMI_STATUS_NOT_SUPPORTED: + printLog(device, 'Not supported on the given system', None, addExtraLine) + else: + rsmi_ret_ok(ret, device) + printErrLog(device, 'Failed to reset nps mode to boot state') + printLogSpacer() + + def setClockRange(deviceList, clkType, minvalue, maxvalue, autoRespond): """ Set the range for the specified clktype in the PowerPlay table for a list of devices. @@ -3228,7 +3312,7 @@ if __name__ == '__main__': action='store_true') groupDisplay.add_argument('--shownodesbw', help='Shows the numa nodes ', action='store_true') groupDisplay.add_argument('--showcomputepartition', help='Shows current compute partitioning ', action='store_true') - groupDisplay.add_argument('--shownpsmode', help='Shows current nps mode ', action='store_true') + groupDisplay.add_argument('--shownpsmode', help='Shows current NPS mode ', action='store_true') groupActionReset.add_argument('-r', '--resetclocks', help='Reset clocks and OverDrive to default', action='store_true') @@ -3238,7 +3322,9 @@ if __name__ == '__main__': help='Set the maximum GPU power back to the device deafult state', action='store_true') groupActionReset.add_argument('--resetxgmierr', help='Reset XGMI error count', action='store_true') - groupAction.add_argument('--resetperfdeterminism', help='Disable performance determinism', action='store_true') + groupActionReset.add_argument('--resetperfdeterminism', help='Disable performance determinism', action='store_true') + groupActionReset.add_argument('--resetcomputepartition', help='Resets to boot compute partition state', action='store_true') + groupActionReset.add_argument('--resetnpsmode', help='Resets to boot NPS mode state', action='store_true') groupAction.add_argument('--setclock', help='Set Clock Frequency Level(s) for specified clock (requires manual Perf level)', metavar=('TYPE','LEVEL'), nargs=2) @@ -3317,7 +3403,7 @@ if __name__ == '__main__': or args.setpoweroverdrive or args.resetpoweroverdrive or args.rasenable or args.rasdisable or \ args.rasinject or args.gpureset or args.setperfdeterminism or args.setslevel or args.setmlevel or \ args.setvc or args.setsrange or args.setmrange or args.setclock or \ - args.setcomputepartition or args.setnpsmode: + args.setcomputepartition or args.setnpsmode or args.resetcomputepartition or args.resetnpsmode: relaunchAsSudo() # If there is one or more device specified, use that for all commands, otherwise use a @@ -3561,6 +3647,10 @@ if __name__ == '__main__': resetXgmiErr(deviceList) if args.resetperfdeterminism: resetPerfDeterminism(deviceList) + if args.resetcomputepartition: + resetComputePartition(deviceList) + if args.resetnpsmode: + resetNpsMode(deviceList) if args.rasenable: setRas(deviceList, 'enable', args.rasenable[0], args.rasenable[1]) if args.rasdisable: diff --git a/rocm_smi/docs/ROCm_SMI_Manual.pdf b/rocm_smi/docs/ROCm_SMI_Manual.pdf index 05cf23122e58523ecefeaef2ca96cc1a26bd50e6..523a91b2bacee0950aa6d9196acf3e48e1c678f1 100644 GIT binary patch delta 218999 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

      LPLFyL>|pP7outeAn!VU02-n6!#%EVX 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 }gr=Mls>mQE4kcLks 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 ySl);vi8?3>FZfK zb_KjD=fon*Mx~tM)C%B{4=uv%N=-$dxg-8*1G!f8p^vyy_B#5*t+pu)mrGUKzOo(k zDzcM}ysY_Gr{c1?fIBt9NOuF4D|!74&5g1R<6$XV%dolvKs)?cup~R|Qr$vV{7}%) z;dH(c)XhJ#sV8$R)!a?df?{kn>{4Fsiu=+%Rie2!UGJ(^uN!eCaxuK^Rr8`u@=?Fc zZ(Uk);l6oQ@Sz2BBZA9DJx=fP)NrmV?iN#!?b%&^zFL`mqUcO-d8x^(6>%;S-Hl{Z z5#=PF=EST62)XQ9Qw*gazt&XHqPh^t|Hsy3dYflt#qi6>O{S^%=e!GcwoMD!gJL*6 zOnrLCTywueI{D$WZFLxJ@}l*X(EI}bjNbgSi_5GARqg7!Wkm<|EuDo$^l<)VFNxOp zS%}1A#T4eNcH>`cIhXyn`xc*-k1Gs4{*=t2Y`HNi}`<^ZDlEO{_m6Pz{^?3LshGq2d(dZ{51eenz2|>YZ0n)o3{z zYU6o`EK|$I#@4Zl{!Qh@KJQt{sDO9>2-6*{LB3|mfQFP#Viw=wVHa){?lRj+eNVff z@1+#)30(fC?7*?u$p7Q>okiCT4NV|GP7Dri5)oSHP zqNg5jkI&alJE3zfehxm~mO*&y=_&GGsL2fIvBsO8B*X3Fx#a@hhnh@G?eo$$=Ugi~ zDvtvpx=mCvX`OHQ`A zieuhS$eYMxcif!X6`zR&SXeVFqM&d>B}z*>Eik73w$rFX?NAU`;kPm^#_FUb%}O0J zqm0^~MacvMQlCivvCDeg`=sw&(|r zxnA>2iOfve{=SWXdy%Q3)L7H1<5-q;%dncHFlZyRKx7Ll9ZuB@E}bbZlgT9Ti#$2X z6u}e9OYhf{9^MxJ<`^?wwPs0|LcpF9p>E- zutT%$Tp+7^9mRk74themkmT$M5 z$0}y)_i~yq=#E7f0?BLPG69#gTEe8LdrVu=X13T(w3#>x#*T7=!qxf#CX4Zp*2h`F zt||oOnnjW%*+R-S&mcN+wA`%4O0`oMC&KR36#SsmGh6NxA>;^4oQd*I3Vy#PDiUQS zT!NCPa6a&udTUxzkG5mHRoaPl6qj&xU2wN{26mH@~NG{ntivjI2N z%bV+dTD9}PWq~&m*m}53{1Lz|{mV@@Dr$Ysv6n5JB8RCgp-ZOVPo^0yo9~LB$+lan^T-yE9T6$vSE~bFF~b0#zjIlfZrX#7y~d-8@|Yf(fHxK4 z*2(057Oc56Qx^;nwF7=DN5~cx$dD3A{#Yv^c7(hLDYtCyFX+9`D)_@|S&!5v!RvCI z7?QroMT-n7*>XB6OOZfIc8_pen}i^HBJ>uvZeP18L(fGmUOkIdJAJUTyAb<;qi9%~>sNPBZ5m=OQ32*u{ z7e%`cR5uErPKz#Vl-uL9mMtvO^(T*VdCLFA*E>cB5_H|du{p7A+sVY9*tRjTJDAwE zIk7qM#I|jl6MT7|_kQoXzwV#zuCq?39ad}`>Ig-8)ZlTE$9TMN>~`%+4QUc&QN2O2%rISapkvp zF?dk_@W=HVo>HoQ4dt(eVX1w3$a;k&v6_>~c{SAs_0R8HyEFWo=V&h%CTK1*N=`8; zFX)e7+xZPbB0Hco zlYjFxSbE+VB~vC0D7Wv4pSels&1g3lNa3*)r9=lcsGS|G|MIdeBt6d^uS|0Zc;v|9 zLR`#w)ws$rBQp*Eo`vg6dO-Kcl(KXLjc}%AgpJMJk3I!7_8d=N`1Xyg;M;+G|BQ zK>HHZE}<(aPacZl354JX8r2#=Uf6JUTh9p~--i~#uhOgjP(=_CL_qwpMjgDZMmU|x z@X%qtHZ#Zawm};!W{rKP_eHM{%@Om9=@2Aeke%8d2)-dnq{fh=iC4N!V=3So^q7g) zQG!92K+31=7OzrExprp6b@9ND%LM12khBmH5v7=~Y$=0{wqdF>gb^RARPr|>l;c(6 zizZ(zYFa%yWXSx`wlrvX;m9OB8XYIe6K&}V?Kz&*9;Lw=6O+eh-MMuIGsV6zWTs2bE~!5Bsin3nip&s#_0#s{&0lX*b9;W#_0 zr`eC3hBS{C<#VOenSU-EcbnfC7`bUu)eaN^MR*xf?0%LfW{Nc{Mx#Ib&mPRjdo

      Q9BE=a(`i>c5z}em?5(?z!H+OYi(s9iM2H?3-D?@J4lMg-B|dy;QUOck-4Ra zCd4c=nuV|IoPq)`e~``?|E@E?jD#&4!c5Rm(0t5-_$uqtlyAID;BAoqL&~@-k8Q#d z0E;(hrGZhph9qIeSMN~Be4qPIc=8ROZ?VXshZ`A@j=bv$j(zmdZ}IVF>wB1)qwR)y zm*MEzVEJA2%kZvN#hgx-<~&dK(I*>w;CuY%7+HAU|FGsm_w5_CJ2?(HTO08=$)hjv zzzTGiY|+Q4F%yX9jUrdeFm04e(!qc-#j`}=#UAoV#c-*YAg{A|*WL?`tQxJow4ln- zB0Unu;f%1;l(H{z(3mvOcEZ^5HD${#b$1qalNz-zQ??tUA`g3_D^43QLh87-r zl6OHygW$8u?1OvSNqF;E6i+vwt8=~a!^aQad&}^4(jW>`5*DZXEcPO5oMu4Q8W5p99v%$e?aO$~H{zDe{Sql*q!bi> z%U~9C<4I}O&Gu=XQsHW@5n13GdpP?7r|yykvZH9)T@~!+FBS?3|Q_7Ct+fb;(maC_wDHCpXKfw(JL5Ju7aZt&aF=J6e zgz!)Z+-?;9rxEiu;;wz9q+}7_D!!TxY_|1KBMQA($qeUOB6^NR&qgeoS> z&Bv!uO8%XDmx+aa-K{LfE!4IL&$Bh{7F=FQxw>uts7&Yw^|2SN=`Qm- zhRmEB|05~|I5ZFOq>?1&&;G&=_wh|{4s>qQ>XwI(kE5ZMi!R_TD`!)vB=-{V^5|mv zhedn2ww1d!*Kt4gK4;?T{ke0||IUQ`@-emL^YY-nwLUWTa`-uRa1J7k9P^QaKcw_l z$G#PE!0pAI61`T7e}tO3^4x&n%@(fTx?+cYr^vDXO@K{vP^Z4J@0J^TBcvFQ-rQsZRN5>-4~-=IVEdE_1>tp*a&nNI zT>T^$DK~C`^45v44Xm@8X()#_U}8R=l=V`z^y}YL93$=PtCO72-s#)7G5hH$9Yu#q zCu?Sa9y?$=|Gsj%_3@a34J(xdGjX1i@A5=kwMIW=ZybM>w#Q8=+Glv)tK+s3iE2qm-m3UQ_$ z&dJ9-W^t(G#XUc7&#xMvtXA4ROnv}OM+L(M&ZI(WSaed^`i^S`--`N@@(-{RegHz& zfOJxZu=ZY2oD1$hJrMyWB!kC%Bm+ zsZgI95n!nH=V(2#2+UoK%wTXGx{>@F8uvAcxsA7jdM>4s~sSD59NIK z8n(GRpI|zT2T}THIgR&`gFdYj2m-t;0q+L}A7r1KpI*;3z$@G5B4G9bhAIry9_|Pc zF^U(6qa0Thl!sOvrq`k9EKOTiWXO>pp!gUIjjH9X{Qr zvX_}?{r+W;TgCq|7tg{hrc-}Qq)ORXp&fzDGR z8J+*}j5IlkcUD83*MsAk|1I^|G`yu1z%&s>(F_ zP2k|0X%D{_stwAkoKv%!yDyh*P`guv1B*~hs(H;B3MxovNZkj1&KJ}IjQsx-rS#g^ z7`nj0R?clM@NeNmrW^MSJV5hl4&A{Z@iceC_TuntY@FY>qFYGtjW)hB?$Wz|%t7b;Ws%bcA$2c;&L3%xfgNa14cQ7- zV`MC}DhDz}{s!kb6Ng%tVpg3>asttp%o^n*D=_6U# zj!_7N3%hjgUVHDxd<;Nf7-iEOLMliH2OGj0E4^Bi@FPDcCXzz&NthRLjgG%oUW5`l zd)cMjjC1x48zwr+TG^^5VvcHUBJ|W4fEyN zG*v(xWWv{t+BbzHBi$3+N?N8f1J=Je#}r~C!L`&M%|lPXU{A$2yCvzCpOCE{5{DgT z<556XWBjFBdc?P~+vt;6UJioFVAeoo{g3^yemCmrUn>^-{zGZ z(m;8M=C3MC`IMLf@_m2>*?z6S7=sl^`5Jw%g}j%rJm)Pl{Rt}iLjB9Xx2pl zajhMMH=d?0-=t!oYF=+!I4*<-R0rFM@$l zi4xYh7xa~osJ_u$IsqyAHQ2Be@ECFE-}WLmrh8#oYtTPpwk2arkiXV@ zp(H&&CRQ_&O~&wj4IzoDI25cmWu5L}nFh?4k576I*9vUcVft@|PFZop2#4lbp;s2D zVim6GczO!V&2Lu+vgx*gGQGMw)E8@Q=E;2u)aSA*ft-`C=)UvB^7YK8?kCbsx)#6z zj+W&=4c&^4Gl*B!?LEH67f^mBwl zk)#_A%ZQfqQZ(`EW6_d9+X;dRQ|+;5cm*mmxBdF{9c$p(aA4abXLIc&z?fLk2+H^t zRCrZ1VmLeBaCm5CVX+VEeYRe3Jt$>G{kg;zkrHgB#kr(41+mrXM^yIX)k-d@d^5XP zu=)CM-Th_}Sf^phbuNkvWb%C>Fi107{3?bNkk8uZz!d`BU$*d5=?s492Hona!}xG8 zD`egrw0@f)e&9i_?U)Omx|l~C_k=R35$VRCm<%&5B!1rxbrM10O~LExfviU=-UKHN0so3sYbQyp5CR-V9hcO2B%d$D8B6a9;AkSL$S!(8 zKf%qe7;w=9|2~u zmoUcW*g}94VbfFz$!U@@Knp?{N-{ryCMO8q2n$v8Je2hfo8N~3^2G)oR!#Z4sSV_1 za}v}RH=3A!=+jVFplCu+Nryrg(>^i-}uc|<_@Rm@;k6iws@bkj8FmQ}v^H88lr0BYiJ4paYL&tYtd zG>XY9d)xJ{N58;oAKo=0wX0bH_81xa2%ixT32QY(d~dwhY?n!MUW(gM!W~R$(kw3K zn&)5pTrUCKBa9M@ImAfS7x8TwBya7GD4psUI)myiS(pBu?=;>xvf!&7HDdKWcY!8o5(^b22f%$ zE6kpQc``Oz$>?~&O79`G7yW7^)yRP55!BmJ>hJS)A|eakWnSe1-0vuV-7q@qK$0!Q z6r8@ND8ggE*7ifDh8u6cD8)=Qj+gY&2y4-2Nr0)=ooc`v1G@2G@;W zlCVGgf)>9mEb0vHQ3d_4+fn$iqW{qf$HS8$%H?yECA7@x8g(Fza z2b>Je0$rsa1f^j5CuQpZ1a#n^s__))NakGT_^X4{??6+674bIxwBbCu$fLGLgl(tE!qX!i2}Ve-J+N6v1#|ak^2U!jnTr ziQ{p&i-3k$th9!n*UduWgGe>E|hgXA0^@mFyT{G0R>95{+ z-qL+#7Y=PQPvdHo3z~4JCHlf(5FK*l!WoT~ z<86Dz!x*oBm!@v|=GtFoA#pBsB7Zl;OgCrf>WK}({nKX=E>SW(_42;>N2;MmMmYhf z(GvDK7G<;C+9{zrQIiU={k@1F74wT#+XXBSNfuOmvVVf0VSit4EUNdxdZ*85LJp?f zkRF_oc*Tue)~z{)2U+@Gz&5@-@oC9XLK>>Kjq*cz{_j$dlUVDk|Gd97$yM)pVaHRJ z5Yc@}V%K#t=6w6{nT14lwWuZG6B58`G1^nN5}bbNBD_5{GV=fi@h*j`QFqEaMw;t7 zFUSs{xnJTDj6hc@`$J_uPUF057Bc&wgQvp_&ztOmG zJ;Wao%D4#}Gw;I4qLGRPy` zxymQnKMQ zp8MvE!Vh5hk#qx697sP5Qfh!XpNPhmsx$~++>G}g|5ns`a(FJJx2;3cBz$@bf-l8; z=Lg|~`6&+ktV>=(44j%XGnj#O@9HK|s>9lYB(Y$6N_bRJt~=BZCVzXWMvh^{gEm>Z zS(@28-oE=(Dd|)wy>Ds^H62C1_jaefyp;mv*(OjWr>HclAd3;;5g5S0_gBc>+_Nmf z9JZrXpPSu)!RTr_P3Ybp4j0C_pLG0YzLSR_-0_=uCffuF>`T~|b;O2{e9Af{EE%y@ zS9mT5b1NTZUQf#n$p}|L>&zlg^)$jQJ3Ik!jFUXsDp$R*EQ_zGI~agRW0N*t-GUKMMWtrP~a!4tY7?;NX6-ZzUG0QQH*stGM7=->Wh zZITAt`T~_Af)C^ex#-zx`FyD+R4++Gf_JGg8g%an7fu|{9vDUNP)m!%pm&T7$s!`F z!<=t1ME9Kziosu9C-+ zXLAzcUx2QdyODexrb0YYcxc5Sue=>?g3cCdpeP*7g@~sTi*p1!^i~}0v9argS5Gro zOtf+Qp&K}lLiG|Nnb|Bo8)jKS^e~GgxW{N01x~OF08QGTp0bi4QiXdT#kQ_GbZs*u z22+n%Sg`~p#}6n@_NRZiR3o`wB2=~WTbiAx}{;JoD7hU&MjCm=Pa7M2E zCwm0rnKe^cU`~2L0z%5X5rkK>NwdEN{wAJ)a^)<=hk6 z59q-iUr)`K^y?_MhEKJf$Worv6~Popzw*J@_&p`Rv8^k1XNWe$Ck*EpzfQkTOry9Hp-UZdfj|g_+ zRtxA}fNPkSSa^){tPYn8q}w)Ir-&h!Y~w*TXhdq<`=`B&Mu*?<00bERf%w2ax|L!f zOzZF31~P}^c2t?zo7?Z|q-@0WnTYO3*p2+%jq)(H03sjTor`wR?xY;M!}k2hO?krhV{DY5 zQ%}hWCgZE`OeWu^&v?J5`Q_TdxcoI)7DqnksixrkH8F~r7RPP@c}vZq<&mBDv>;bK zW#u3?sfn^O{4D_-f^RGI3UTD17F5wUq2&MiQNUlGck?{H7sl~%otYe43ijQ z-jhMcX_^0e?-fBq>k^=D;)CG@#LoDYa*`Q zR<;r*VdyO`^)<$PT`)IGhx@lbewz41+{7o15PAM-ir$jFBV;UFqgB&;6&r@Klbfm-jn_n})U7YqrD8 zSohqrtKm+enm|MlW0P)U?ftRXA%2SR}uoY?pIzPz%~#KzSxZKaifH<*Qmv;o>+4bv{TO z>|Ywrj9+qKxb|8M7g_|ar4)KaAfks2yDeVjM7|NaF?u^<>*}R*K?yaC^IK_wfCNM^ zUoup#^1e)XWR92B9-Q_lP8>Iyy9a#m<(NgO{TElu;J3M6+`SwA&Xzf{0dC7&c|!;} zoUns=UHloaWS~et{)nV+GPcfWLlH?@XL9Bxi=zL@-SkEgSWFxOWu7}=kshO&t*y9} zsr^!2tvBXLJCvCK*}R^2ZWwu`+83QYJ;>~oP23LPK2q~Md$#xR=lJ_>7^yG|qUAbL2-VLBDt~qXXY{T( zqckQ5c$Lc4w;xs+97f}X{SNb;Dcf9xW5k3o9<0&bl78_ z=zVZf{)+T(EN7vE(RB0s&mqMu_w!8v(M{jo#y+xiH%$lkPPrl(W1KFfy4=C}>d?1s zC*_~#GDC(=uoD{Yu-=8|NX5^Vfidx#mW;iWG5wYmca4ZEkJ$Hvlx4oQiA>`c_2i?7 zoX!Slp<*8!q|Na)V+Ra7LgFSGduJwt>WVK+i%nDefs=z#!nqRIH?|+{EZu}&A`!jGJli$YcM`bo);3~T<&oWiFDPySrVE0aWH#&2+y7p(P zqV_~R#VSSL`J-ZinY6|1v=g|n%lFE3)G6yIXzqNY`#IIFL;rc2gy=51@yT2I(#~wT z6D|6hY+=++$9}i?&|%E?J_EG`&$P6_^>T?2SOR{fS?eW&vKGkr{7O}*SnjRJz}JVlazvJv3TqMY_h;TpF%~0rM+*iWsWOkWo?xIBv6|&+TFd&! zwA93f6U!@p0y*IWyef5nZgva#RsjNnep3fm?>9FNulf71z@%QpTl;C^p>*uSTC7l) zO*F9I{dqivae#>Na41=d*DK}VZ7wi`57&ar{c0(*%NYPoPkKs~!rFnmd|yHgO%u3_NRJ zZccB5MO!l<~=B&fYopZ*wsXg;ldODEvT;GMc<)bjq8|Ac4sqng_E%$87W~LB z9WWrMvWa|SP<5Jc&cUTKM>KOQv9i*mV(a7W=J}cJbsR_gW@!sIsi5ig`T3}&hUxN( z0$8njDbq0G2}zn@wlz{#lm)k;3y-*R)#tHL@xrUZU*>*asUyi>;w(B8!S|N->Ntcr zY)nA+v4j(xoUi^N7csYc8e0nRL*JorLI6%`Xy<%3{9utEhlr(VQTj7FUdZy5mms-d z`2yOJ6WwsI0b9BRIZ)0T50#RO7f(?zkV?u7^x_O=o8QE*NU8B%a_viI3NB3B;%5vX zSaAS3;%hcg4|rh~ub+Z#868&Y83A{vcdNFG{rpzn%Yv3z&j4JgY$*()xSs63h`$c&u{lv#4y&X0Sr5u z@<{nl*7t;3Q{vqn^Ww*J9uEr32YV(XK;!58YS-t57TK2Sozg|E`>#KO%9kS1(d7lf zoSa0;zn$$E{zR+e#uq@q!v{G=+5mN4S0O*EnUg)q1Ngh;?KTB`iH__w>OS5cyWyfg zeO@`cth;WOp5ESvWI;4pswbdg+f_!e47Cyb4?Q3JYjGuLc+RFgJ}+S| z4%0RH`G54dBzMEr9-69k;-~i`qz>_LWLhZ7l1R&ztrBi}+Y8Q5gR7pyZ$}9ej1&S$ zrAw1IWVRJ2x}pj!CDWM>_yDGiL&k6QP9#bahM+_c%L2=ZGM>d>)R^WlI^YTlFR@$t zeN7vFHQt$WkR{*4e)z}OnZ66>Pxm%Tfbw#&SVT(-p7(-RNI)>xrEJh_Z!W`WTWVZyz~Tp+|V{B zsFxrIinZV&jDy#k_p`0;k1YyMPpxsyU#3s&2LfpKC4}w^Mun)e^zWbo68JwbZh&Jg zMj{g^ehkT;PnCrGL*OU4((wngiCzKiigZ;@&|qf|$=PFtv?E2wn+KIcynLrM_9Lptu*!l)sx0VZHvgpmk!HD|e< zC*G-2e6k@?_`Q%!veS7=k;^&paa5yZDn0#9_u_QaMh1Ll891p5?;>3$L-95w?ID>I z#6pV9%C)$Y^n7@?w%?Uu+=;I2Oc#PV#jom~L*BQ?+Usm|TFB8+W@;vq!-ea)Nh{x~9RKZ=?}D!K zvFSPZpEtBdtDaSxkd(IW*d0N!#ucUl#`$T5Ckb%2s{5m=zM?+e+)yJJ4YQ`zAp^eQ z3GpeE8!>o1W4SbYy8JGSS9D4!()YodmIqSXmxIf%swsoED}{OE#%s$S@SpomU5)6t zIy4ncw^YN*LauxlDF#?;O4_ilaauDcTYbLd>AzmsH?B1t@<$?w8A%IZD4 z`3|tZ*f9P}Cqti#g4RzvVTGmCH_4sLqi^NOtl07#yAV@qHPHBKkE{5_0-Ir-bAI~0 zl$A;wWBNe0W`n3q2gi~h{}{cCyL@cu#aEg7ol~wI$-6+slF#2`cH+#U?9ysVrngAWW07-T829Fx6 zt{|`J>qj)z`!oD#gCVl)VV80^nb`@~UMJ&G6Ozp*<_-nm44L1l;jC+9@hQC%QjK{g zcjC6gbI<4_ZlGj64$9tzn!3|cWBIAAX$&=r@7pQgIAh%)aq;HVauMd>#kkWR10QCa zc(s?NhXQqH_O$t2(xxg3vv?3rEHIzEG=D0Xxm1RK1h>&zy3>v$hZ&Xj>9)w@VI21r zA%}w1)vWKrMVkanoBi>N#UXHTCaIw=thHS-H< z;lofR_KOXKGgX0QYSZ7YRWYLcd-DHd!Wgt}%pbw4d$uk5GzB_kK2lp^NxRV+s;?|( z!wJ(}=YMD1TPgTSAJ-a{YDG8t*X)m+juNFFwa4o3JoGoH;K;A>kK0jG&J-yRy5zd! zZ!Fx<-8}f+I{R3hiC(?s-+6q6daJ*gV+&d@;NT?Oc@@8VS<+9LtmIu&YEkE!hbnC3 z*_r<9B#f)&E0{0*=4O%S1=4p3qZ}(zSvp2Xwvy*a9|oUfzB%pK4l}5=KYxNijm-INy=nH{8J!fOcoCFJwLNG$}IA40R27%OVk;mtbTp&aJ|ybE}Dr8A4ZbM zdSPB@#B2yZz$hTaJsp+Xze4-*n8c|Jo5Wx7^$&!_by?f!^{mEYJ*J4)AY;W7`lEHxJ()U*Dp)lVdAhO>Yf-x5wS zG3f?Xg-iDpgX*tZGW3iH6t`a@DySZk)a<3PTa-!nW{Ja@zY3ZgE>TjS+WQFIZ6&9K zC_CQukwr=f)@IS-tt9tVgrmG8>6`EO3J5=uxgNhs{13$x4>wn8!3cB!G#d*$D>Ex+ zD(xsV{{JTAN1+qJIldUDl#n3sakzNkm?W&6oLz{ynK}P=M#&kdZUB>iRHhJFp3 z;C1!j+jm53pKW8z??=)t4s_T1z8`p{oDAkt>_kAsJ0AFV@*jDV%8@8Ky}KYJP4Z;w zw!Y$TH$q{-;zNO!;ZOKpX<)=11+^7|V4t>lT9_d~who>VKBXN*x@%Z3OsRG@7$M#G z`-O-rK2}`1bK`dVF+70kgC!cF8^~A^*M{D%$q%3!V=1-%ny1hxCR7Wce~?Kv7K=co zUcfIR^i>yFio}OOOZ7?h-C+vTMhe%7$seP+#bR-53xi^D#ZlQ&1}qzHU&^YPJ)E-iQX0&UIZNj%WAG2; zF_IztRlesFdmDg11>s+EaNJogx72%Y3(`et_O0WUSF{(DVN2A@i$yF>RI zG}i;;_L~ zkvgLWlv+FAGUp(VR2-a29Jihjq)2Lpn3qPG9aj#&K$(3sG(EmvEZ-3meFHp#ox>UR zG_t14>*v3JAAWwPA0M|Tp4*>?Hy%&dmnECenI1tk)RGwj)xbZMr`u&@hoelNJ=k&b zUR;+N4=0bvZwSe%?6nqYPOQw#axbWF{gG=|mzP&DeDmr=AJ@ANXKI2(pDa=ph)q(= z3g5t~0`La4wheds9P8oQXqi{V)U(tV+>gmxlCxoZI~D8ArZzzM?GfaftnBKgJq^=B zIs$@vJTu>Ae1NZ!|E8o>#WG6xj=AnLeXZIGR)|frBSxzg9%OaqefnJaE2l3?GK0M1 zw_YRz!(=OKZET2UY0!%EwdTSeqeOu}+Dn@xxkWU5Dgok;(YA^Z&7#odJ@VD`tPq*1 zD4lM@r5Y8hYy03f2m=Yo`i6X_;4rq5Qijo>3@<&n(11m$sub8i`Nwf9HQ!LblxEv2 zC`=y1L^X`okqB{fgW8br&Kmi-8R-MNi}cyASpFRsGsv<9_N17bCYv;5NUHOwS2)Rm zttHdd8{QO+tG)gYP<%6Pj+!B#6lq0PMipK7sGC2PIuAvK+$~tC-Q&SR`xg+zY|7Wb zMe{(_wxyKXu|H95vP+s4ex1E9@Ss*+s7jrnyi2rOMhDRseYu)fOSRd_oGST3J4x$c zo!$}$V$;aLpsK>5VXD%}KBZ%v)}qmbCvwzMZL-qI%14C}jLWXUaG*o})zb{~Hb-mt z%leqnN6SU_hx@nf0sU8!a|aBJs|nDmRc@~Op`RXH-*Skh-o{QRVU%oBsAH5|;b7e` z+Js|S3}^eVsMgR!+qhf=O%nl23gFm_FKrA?WrtgJ| zj$el_)@{MC<>ZCdFgh@=nGtA-w8X@2&iG}|7@I2Vy_}wVF5jy)HkyKjujwbQI93B^ z{gR(2fk^4Qc~PCvm6gUHs@g{cg(u+vNIkd|4G~WCCk?+pIY> z28-i!e(e0}po!Y>1kp{Rm=S}0!FSmkv z^v8CR=cf>j!MVvAQ%RSlN86HvHY<3Y%vO~WG)yig;?@gmEgCXeEQ`*j&s9!qnQ{aL z5Rj{JOw^g+c>Pv~{(wqLh5{B9^N3K<_Zr;{k7NP}#G&{{OE0eY8lMVwiUEMShvhB;Or zoK$M~GI>WI8gQ0vd-F`^F3#a#IrMr;P-N;DhBxZiaOx@k6P$r{G~YimZz)S8&hzd( zo+aW6?TarJy{EHgM!5Ej>Ex>mvXqIR(L`LX)g8j^qw;{0A>LD9ps=tayQQJaMN_%1 z4XQR`2E+!S`TFCFc+O#Na$T`e6|T_cy&OLirpYya#`g49D-bZ(3Mx=~%&fetP&<%c zB(66ngA1!%xdxAK!uAt>F6N+C=9>#HXbfVQ+&0i#+$f^wt+|>wjUGOi|E{!>NkT^2 z&l7&+?v8wQNtv-G9cyE8Jl(;}i2d{QNSE?s!YY9K!+_ zdI(GN{aI1$Ki~<)&lH0^kP1|Nss;2?M+#k^uUvOTxkr+(mbjtJvHZW{V{AywdH=`( zzvWy!LLe<#`?MkHXf>63CxxuZJClk6w+!Fk-&%d%FP}YxPlo`ZY-w?>x!c`cd`T|G zP9|Sn5rW$B{xBYc`1*23wcrX`-G!WLnKzf&KN6>8kWR4R@@c4jX{kovv%J%&IdLaN9VoOoqq7N7D8Iy zUUphg9?46uIA?j~Jc;NXjk@|%eX51)|GXwKhN23R=aduG(G!_pl?ECBLl&flkTfLX z<&HIkU|^2S@}ud4%sib^Zew2W)DxU)nFd*{fG*Xk#? zIV1zl#)x$2cg;N!|G1a%w#&)@>sk;l&>p^?e|AJC$KgCZF3bjg(s^db|hL?CG%5x+&KsMr6DEqM*pifPJsC`(*hhL}5clAiKiHwfd&T_w+ z6!T?(u;MgygaS9+$O*Ls(o%3bKja5KxAFGD-7X}tkZ?y^{chP%HSl$%ZIdMDo7}-#x8X4+I2=1Zi81B z`HwPvSt1WgTL;c+@o;$;KYK3*PhSL?;IjW#JU{{D+kK&W>xvIXIm^O8emgh+R_-v_ zqqFeI^L;uKcVWjjX%$5-cfsA9%|E$trv3py5RJ%(9{HU`Atumak=PsSC}#+P_*+6A6tSI#diow4CPMH za<1O+4ZcWUtD)ALl!|(?>Ga2daWMz{fj~##;O)ry_CHq$m$xZY9jY@aiS|5oKyI z`i4c{m7ZIc?()$jHuJT2<9&U@PyWaCMSmt%%hp^{zRUr8j=}oJ&dc-TW%l>d_^Oun zledb&lf*3nxw{L4T=Oc%ZTENPZr|6_inT4FEur@frJbpk_p>G9;Gw0Oci7iM+=nxw zu<;9`&8aItioM@=m+b0k`vA!4azy2Shq?d{H#adev4gQS96vuCld7kq88MTlvY9y? zleE35nFp~BGcgAbH;*11lZus>*?+I$m^6rWScut(S-z~w4h}B=v2uQ)DE}vuxx;^w zT>mF2My$gx%*?^TEGEXr$tlhw&de$*E+Nd#!^JMj!NtbLCCbLeB1ruI^!cyL*RABt z>@8d@iCNgckP=CFr~rx$3q$fL?Je)7KI_}_$-^w?NuJOZd~=P=JFrj=C^=rk-I>e0 z-Xc+MR!-(e(0{|fOhS&~VWOCN!PwJ?!Jqmlv?X+V$fAV%IIrCS!cCur2NwlbcY$uN z_VSMM`Gtk2aOC!m_V$j1>T0Lg(yNvF%WCnf*m{cTiROfhFu)Y~zP`$wkA4N(dAYit zAmKa|Va>HUC_!tuZo`z1I6V|>jjZ`SL7cj{`Ty(eJHX-Un#ZH}&PMMg!4lEC1W^)1 zv_$WO)rsyBQKCl=f*?u|f*?^=Sp-2s^xh-t>TT`+lK1_7?faGQ|2+GQHG5{x%$$49 zoS8ZI-j_JAGtS;yX-;gDrro{|EgHVos<_MXn>Qe8jojJzEgL#&@4E}}TQv05>bT$J zxAO0)RdkmuGxzVWHF4)Ev-Iz-)o>Rrv+(bz)pLiIS^2luDg*AauwPpl9x}bPPuw|R zmXqzZYPX-kEGD}k5lV%VV~5pF2{A+ythQ9gyWJ&D(^QWRozGNe3Ui#!RfwwtxWuwG8B zcDh<3*nCtq;2O6nH%ZyO=NhspWK@r2FWA~b7ZOjhck>$CMz0eQ7>AU?9LFK5rlISw z^|8Bh;&a@SxV2GB(E2{e1^(J}2>ql*?dL@Ad1j+zkFU?JZB=&!CUdg1v~PX*RwxN$ zJ5kw5hi>Jwo?vHJg_-7kkqKRe`PODF5&3jOju`ZSO`1mA=(9f6LiG)LExxlX!!#zh zq2Isjd*o*NAmXwrk8D`BZKM%}+3|QQl}uLaDKW&iVcO%1b|1`Tx(;8I8x0P}7uBWE zMKi?ceAz=%8pW00e^e4XVB-=Rc0_0TY}uJd{&f#LSlwuDx^pe0AWw;)%E zbpQbau-c@fzep|C9HU|5cVwI>)n!mw@?bl8Pr@d?!m_kVHbs}ObF|XLYBAqU)FFT= zQvtd4v0y?X8)A2ONGW!~WRTP){;@+;K3R9XtF97immlkv5*WacId`_zT+k!e917iv z{m`j*h%|xWjctK%S6%cU6R7^N1S;4Zuh9Yc8YF>~Lpe5fXJfy7jcr)u5hDZ7j6k*J z+d5sge};kV&S@FoO$|3os^W9Z`97AYEb^Wm-xQ-coAy!zekJ8 zpbmC%eQfJv3H-7dS8W6=jSKAFlkaGlx4S{Lv(;ccFH2CZ^W}%?a?5C-Y=PaSDojj3 zwUcDVHvi1qjZRxa^pdw^_l+@snE2QNr0r%&-7Z7Jc)x16B1=`DRrDm8kc{n~g1@)= z?HBvWPEwyAPlHwB(+)McRQ*LE49W9t9C2OIH>lOf3<_)xS_0qjD1SG{d$$CQ- z&`ytXk5gnHa)PndlO(#`ksgbyR6cYQZWzO!^z@ z!sGcJ-zj~GZE_>*VZFrpV-A?(*q_-a!#MM2`sFPsxn;l5fl=_Msbz-?!?fMnXzbtY9>g0%@XsKTyl$2rt9gW@mWNRi*D;y?@!T#nP!9OLCU z4e9!i^3bKXLo~OprXR(t1v_wk?9iz)x=n^t>l%<%h0g{4NwcO~sk)ifTE7CWj*G{w zqltSK7?~sOb9~)l3F^6x{X?ER@0Khdw{iE7H78t-QXEh%n`TVPH>P{oYM01oK{Lrz zTa;L8L6R9Ie5~XSEzm2M`PqK>7+fXI7lT_>5*aM07+Oi>lBbA`#&io?@e++J7#INJ znY1ZV>9J!gR|R*T4NIzPxZ7%5;j%EEu`Ttjut1o0kZ3n5LI3cxa!TM%+|nHh#65=4 zIxezy3P7yYeJ6EETcWe@Hpxu#pLNn%^>U!xTt>Mr*U9=i$3(k%Mx&`oy~|~?56fyN zY6%>s+UU(HYZ`&-r%2*^w@I6OxOa$66Jw}M?1l*GW3Hx^@`*`83`1id#D*q~B234M zh$$;6=6O>WcQI)v^o7n=wX8WH%|S;R_?4TMq;oTZ_EE|=reBuQTy%H+dRFd;(kfqP z59o({kz%964C*da7NhN8UI6+ahSJ=x^|P`yp4ymwDeEQGh-}S=5qMTZZKc`Av6^5R zX`vBZXXd1tE6a0i-9cX~U&e*vaaAW+5%I7jd{Ye3fZMskttr%DD&vQMTB?OWCeP~J zl}D5A{o~Q32mW}pAv=~SuFtfom0|hM)CIz9U>UKYSF=j2ud{XYa=bE&_U6R8hbzN1 zYM7>YKSKt4vNf4 z89;yNtH7ym0<}9`Qr$NqWnuI2fBc&E>k-v(EZxIbu`oBId6|?zrD#jn6l)1n82%^`|rv z9gVG2hr#gXE4x>vc=h2poddN zZ2a+XYYU)ik6dOAvumI1PAQ9phtlq70I!<~e|PPBJ>)A?3oNso90 z?f0j0$i;myi}fX^ne3+=irhZnROsQMC$(L&hXkt(l>m`hc#_WcQIN-V&hI3$--!Zm z;hnN!J^6ZvnegEY%47?HZ=rd1#*$wDkyTZ*edebs9kci$f&u71ZV3U z@Y8QKTbs&E4+ipsb*v;{0h3>f$32>X_oY=Va8O#Cn zJ~Y~UbSw2bnvJzI7sYqzb>#ug^94-vN@5s^EJ{{hTr@Yvfw59j_1us1^o zzbgf37rX^t9>>x0`lfgW{-{8_d~`x=XX$v8U-L_|yEo@zJ6qEOMA4n=auh7s28sc= z1!*sjk5yc$7=p#P?X4_@6FRV;JV@w3Jj;zFh)VxY0RQMA0$cgP{{jF6wyYNa{V(BL zog{t+X40i*nW?jlCX=5k4jr+#Y>Y^x)H+bE)SkI2d7bn~BKDPPk@4Tv(0GfD6Q@WiwgFa z&l*f^`s&6Pd>^T}6P7KF{6T;W7ClM6iO!_IOwwV;T2F#$l*wBLKkaKOu2fIlq@?A}q zE_r?TS4nhVpJ&{D^5Bat`fc3Cr0AMUk@Zg34!S+3C8sT?6$nLBjF;X_a_A|@xLs2C zKtT2A;+^6Jq3s;d+3GN`lqYfmAG;7gCpm|nGX*5%!HJ@fMA_N8z1+i9YM)?_pqaY< z+`Vd}fFR0xDn?zrWKiS1Lz3eVvAX-~>z|9wlQM^_!<^*!gF8MNyvv-*;7+TAhS^jy z>bIyr#%Wl%&bwOBBk4{@*Ob3*OYvq7Vw3~?$^D=F@yyD%ory-BDJ zvH}ofjNGs~@BAU+o3KgF7|!8Jt=ZuwRH)dO3BS=MzNdqN&t0B~+8&!xWNM~F zz%RCsTi6IZ70Hx*0y8{OCyfH#roTcZ6T*xWVL_Ds(GQ>B{ubu@Fyy528l;W=G4Xx# zoBa0$7o|;l;c<>nvYlT7D0#+ino2stH9&YLVj=l*s)QU=Qi!#(MZT33+PW7;jy~;x z2O%raT^y@Um9iRfRVeIp&U63co5$l4&Q}Yq^fcSWK{S9`Fhf^#x$(?XGloFb2GK-r zpZ(3{8G}Pz8RNLsPFxle_I-b%8LCb-{=xHz{cOk;x4-SPXBV(Nd4{(Waf_+zO$3oE zk#oyS&XTe?Dw7wqz0~n}wB^)-4FUyp=bw!)q|b5A^_H%OCJshuz>i1ei2xEb6$1W1 zC@wlg-J30(r(^HPHj#glVwEWvZ-+d)MaKtsU>>LOg~1N}Ou=|G@ESDA2@CB$Rep4$ z$ju8I&@^K#fWK9iHrb0?EIi%6<)h3H=J|5JB538UTN1X3K3B*UyE9|;b%tzl`tFn< zIiLI{#|jTH`+D4*fYf7KEWO)V_aerHfX>+^BOkeLL~sx5#5nZ72yJo(=URvN7i8$7vMk+Y4qZif&WRV_5zcEQ}F-YVP}`3y{Nh z3<+YD!P%fM#4~O3!2>a6nr$VQYRWNOPy~=h0% ze#Q3-F~?~qgva>yXd49lo62H+v@5}TSE9jFx5Iq5gS2@<<1lbPG)SNDkd&mSsW7!*@NZpDkBm5uK(uls%+ z&G{K6uq#aK^1w?doktk5xNfOnLbt-*-4KYJZn24hKBykO=skaw#o@$ZQ-i)eamnzT z?#4r%PRp;1-SK*fOT$`-aosGT11ne zJmv2lSv?IN0L^g4=QSE)P>J=du$y#JBod&z8Vvshi4^AzTJlp`?f7!_L^7wy-f0|% zj&wpHkTxQ?t#jdbPAh>bgV?yK9KY$-lIe6vI{WWT z^mj)APmq8h--XR6!i`$`-niB1ylP^=NMHRFk%FAn3%O@ps18GUqdyzh%~!)t^;k-> z_kLO(4K_(LR#80*IW*Hh6D&ogP2)vygkrF63+*!dr*D0~=ygEb#J9RhV4T9ob#`tC z-9NH&A?Dq9{!pwtep)qAFg;HCcDC0BK`~1w;9=8gDkZUml2U87G&mozYngb*dD6=9 zY9mzgI~m>AyQI4hgV~dFi9IZsb(vAG5nkE=U~<+bd?$Yf|>q#Zxk@zDzR(`?!wu^!<=7etg(S;Pxhd(wGr4Qn{xv}ayzDp)MG7kZ8*K~csgfeR2h7Nkb_UGI5v*ZxoHfOrasEQv9st##L0F<@ zvvKp~U2-&>K+eFWXit!WXZbrsZj}^o>jv6M>Tx3ymnQue+hR$Y0x4qfn*wnH_?hE! zre7GjG7R!49bRANzp%ODc1h{zR!cvHqi5e1hbD%TP5@6f;TtR+tyr!s%q_z8*_=7Q z;_mz7Yt7wk4E~Pd^C5Yh^{lw~xUH7w800zR5`jsc@ zS?>_z)8@o`{2KlApJhr{`Z|4VFtcN|dz54utdgF(i{0ZKT7tzW7Iu%*20rkr7Fs#x zPw0V7jU;lOtdT7gTI~y!_a*-1XZj}heQW>q`6hL%_2xT(-Q~;Z&}anj!2bCjJ1~744-Rau9<3El(uy zz+@zV2tE^0U2R17`l8eJ{#FpBVND*ovwfGiDgNWxQzD0z-UWz28&~n&Z`UG8_m@RN zBf)*+GDzf)PSav#kR)pfjC4SgGq+m#Br=0G0#{^5^ztY4?gVh6ZoNaD-MaU41!ZP> zCRlOxqhPp(+s zZR@kKqmab_gUNI}4x~7w_4q7yc|QRaH-zp3t#SbDf$|J=xumt-eoPwuR(?%@C9?OH zC6Lc{%COqb{`l3!;d5ev=NB%fXz>bkCP4f8!&PD+7#Ij<7;V)Y!D8*DmO&2o~3 z1@|S0MeUx#eUXA-+oKD?ZIs!CWMgnz?%$eqz#EU#(BJBFrz`Oe+vGsYvj!$!N^wOb zc(L38KR35_#V2j2h|C3ux*k!(EgAi1g*xVzsT12~Drw#k4F`x1TysjxCUZP(6|n?6Ra+*YcyA06^8Q zq-+F^(^$L%{i;tsrt{n;yW4}Mb`%FtJ?TKu#GA^_H)`(WWen0vzwv}$pd>g~lEC8z z&qZ`L;f;q^gNe=@Mfahdvz*w-KV`d`YDrYAXNnK;S9oNy@NrES1#!FU%jZd#@no?W zC9SYungz7mb@VP8N9t9Reu$i#DUc&kp_MhN*B9@k`bDrj?m=Cfm}O2vmWRlLfcyP|giJY`r)3388`-O(=14O6r zumd;zo9n47UYUDVs}|maf$QFj>Q4h=IuDXAM+r6CC+7pG;gG~}2jT)0^17!QYf-aqGKjOLX5{R$Fy zc=y+D^+DABz`_#edzOsR*@5-vD_xdfelp;786o&;dlJIm^^EJO9m%6gMLPcohl830 zuf^7*_~*bj3(l-O;V{{G8QF@0yftg)77dzk0>IgXx5Y|G;GKx9ovGY8tH?zee81qc zN7I;gx`B=tp;Sb;&pDlQa$r(>nFm9R^_JE`+7m^tBP&=hXb|wWBIUyS7EdyMUJ*5- z`Fzj@$Hd3)C7dM@oFysbLzyc)(`G)BfF`r>JAK7(VTNQvlTU@y7d<`s(#JhLrPBvI zJ$ceQJUzwJ8$3M)(?5E8UTx~}NsF!*ppCwxp?@shjD|D|eE@IR!|@xr>I<~~4Ej<6 z?=CQqAxxXcEGRz`MCa9)FM?T^)+Z8z$^D;1ulZf%Z+Y`h0kl1zGi)oav;!F$y45q;itZ%7#Wc&hIQj7mA&q_i~4BO1+8t?Bgj#BfRs=lXqqM z$C~c9+WeuCbSsr29ieILusJl!)8zM_c=O8L>b$mJ zB?-g%o=Lk^{fRlxkxsEXKV1`(OY=>*utJi~>YNPu&QImsjhj8$c^fy|vM9+47jA!0 zH16#CsXYO7gwB^6t)(8CX`fa6LYWEOouH=Bq?o5>(~!kc&!V&kiZsE?h`;Mi(yyO^ zK65jcKT$;8;Eiv{iW?U+9q_yhmmf#7dE0Oh;UnG;fwOj%7$h7@Mjvf31)t5Gsr)#K z&%0t?j4}YPwIGM3-Fs}$?qGu6w26FKhDY`>y6z9BV*_e*RP#JUeu@lqn{WHO)Q-qd zLBLX02;=M$#!UeUe2ksdBFO;7ap2C$;V7DyFv+_~R05yYKZAT?`>Rszf#z8T! zA7}6dgDy9|A?V*yA_c+b3w2#=M&^95P>oxHYZoW+U11f^KUI>7wLKeqW&4+?M?eS5 z%kyV#0uuO{Nn2(Y@xZHL=P|4^wv|-o@N`)}@Uh#!+#+A+@vyB#WQV8I_(A&L*$rLr zIiP7ip`-HMcK2M_G)^y!_EG=P>U>zDAG@Dy7Gp?E9u~J6LB=%=|H$!SpB*7Hm@eT* z;@l$agX7)0-%mzX@Hz_UKr>1f#m41bnd1}=TeU+*9%WbT0|I=HLcX<&=pe}f z@&jV+fp2Pl`i-PUkYbN;DLd@fui3w^#k2?uUtht99r&g-P>3=Zyx@C^PN@OV>ZpYH z-rQ9>zihPw<3TiZ4V}6V+;2vw2B4wk(V=U;;n{Y-d~LC;6Su}&>*aQ{*|uM&RN{Vh zvuz3=buhvfuO`FyvGvHP-e!5H@k%y!0H%>N0dS#a6E9rU&~@NiA;r>Ff+4&lTaER= zD_f0aA2=#;qf3@mY!UVk0fO!91Hyyt@O}On=(JvWUBhGW52?r&Z$EI%W@~$$ZXY1A zw&qU@<{O3e>M?~(Bv*K5F~4N^T0%A$^KaFS6IP52W_7?5j}0i%>VgYOx-wKr$vQM? zplYCSoA5!q4mP0_@OX`#WghZPK@qt7hYH2N4z{x_1fNv92WAZ5!)PcSw$7>Q1g8LK z6VUX&Xao8fCIW=gA~XJQld2!&d@ntLu{!pQb%iQ3&9LFs{?xe!xXxVK?-c&dCGOmE z%av|LQD|*^|Ls>^Zt{W9bg@Qq2pB72-e+@~ORYhx16R`g!&IQAU@yCdqSF0?^? z7tGYo`ToeU=(Yo1-P88~>xge+q2*5%gmDkToQv3-v=`iFr};arPX^k)?X zD1(eBJ_#@_#+Y@Pnu+6It}eNmQOpV?2U@T2QXmXM$;^cbEIZ z6wp+E8{yAoaH4s>!A#r|=yQ#1UUEv)uRp-cc!I-+P;Rmbn0~s>)%ZMJ8{N6FEufmq z;Fo*-)SPr*5w|KKRE9bipX)}uaXQ}RM%$e2#oS?X00ZtEZSak zqlx6`!O^p)iWGFuZs=fHg~uxfU`7|+H(pYYe7RN1R#;bolQc0}j;Av|>V!=-HtK{s zG&1UhlQcXEIN|C19NomG8XDci9r`i4iIenwbTb0Wm7KKILIP7|p1Mrck9j&?I_mRE zAyxCVLutC79=h&)3Cn-ruProak%t;&pz}kA9(REIwyOftnXA;AFS5&RhJpN@KaoSi z?}{?Ck=R8A?A+{RkA3JWRZHcQu?5hed(0Rkz|%52n5J!|o)z0H%l8;}GkWg|k|kzq zp-<|GpEFd6D!D3Jiz(SEzAjKn_|5BxPJ!#;DpHFn87O`(SiK*Q7{GUqoD2U7i~RQQ zz%Pf$58-9$w`!;d$)7;bJ+lnsf_QQ)>>+R62ltjs7a2!1X#w^EHhTJ~WpYatRvulH z9$8#y8}mf!N)g)VqWP<*|Ci-6mnY~t{)?0Yp!XEMoD-#JxrX(HJ_?8Im&1)z$=uSn zkEen^gkSYV`VKyP!MBc11>2%;R^_F!`O&dgzlEx41>Tv$q#*q<`&}q<9#!`<+4$55 zSphQb0N}eWO8VI1pn}-qo82Zw zh@?`IVu84lpQ3m0e)!g1-3<)Zk+*mXet(b!;``KB*0=(ucfM}K_E`G{*F?W*%e&UW zTuH6)k&OS^!;Od&@*cHNV0j0K&w1UfEiwRqj7v4-$jvg!-)kUj@I_zEFUW_tu%gc+ zQtiAWj66vJ5=wB^@y{89hV4Vb^CtVT{mXS&6m;S0H3BV+sNyB%#U9X zRF$@hNV>-*Z;$cgcw}?V%O!q@)?<9^M?fQoxh&TrG3o{7jI48yF)f`UWDuBy+-=k> zJhJkx(!2gR=VIi&qUjLR256|B+CatmWB!9VuL}kKnwFbb9~+-nu|z7<)VnFTk>2RX z2$QX(qh1ZZDUJ1X3OFtSD4%pB5`E0ZJR(N$5(u~uW-fFSIO68)x#bMuKi4FdoYmP^~5!}Z7IA{O-+e-<_0pgv>7Pq+xj1NqIKsm+* z?OZ(A;oM?pFeS@ecF5yLq5im*Y$VDuEh<=PiP^wMvp6c`w`)bjQ#hJ*_<}b!FxDMn z5ImGNQh5(llGh?{GZCn~+j#-iWKV?*YEjQfZ%5o1y#|#8+O)EL>~1=2W-3;gdqjvElNHm zAmK>0tU+OhV@WoTTxHM@>A$`R3lO2aud?$)m7lg%g=57f7C}!A`BpNGblwv|WC;W@ zXfJTsC1%T?hkaFlLpMJ`@quYRpF)lv1jFV^FXN{|zABH$7t?Ss-m;`id6iCRn>U7^ z7Q54>db}7rxQY47@r8kkGq)`IAbRoEQmQ_kud|EzzJlQXotlU?Sup4J&Ehg&_|LNV zq04DZSorJ!TfoKbwUePqZ2>-WE+rF_KRLq7;x=cKha41q<`?p}UM-O;g}@yefp(fm z#Sg7s^%&yw5GAEASbvJz>~pfge=S3V1FSN~;PL||ry9+?(+;pDKKFNfX@2l!FdJlLtqwUT8?5|-m|QkTMb?#?3&Suxm}eax z!>4i1TByI)sj#l#IKbet7+`rIE5zQvRK*34b%f&OQJ(&p&lzDE5_uTAqC(uS!J4}J zOU+Ll{b0fRf%-=*fFWf;Jtk|gyvy1xq^ z@uWzV{8W3_j8oetHbyFK&a;7;SdkR)W@(+%jORqEdsMAibJy#CLA@MNtI^E!qAX9c zf1|X{X~^?K>Yt$gO%7||-(*w!oUP?|og~7(5zb;ttR&n>&98L(fn58Na3k(Wo77`6 zhTx3wy5~X#?f$H$r0M;)0`N((Oh|@?Z>f_lu8x;mFc@-v_56L~8P|wxn9)jni+Kj$NkI(8Lc4(O%bFIO%Q$5%# zg-q-T&hOkIVgxm6xf+;Gl=eyg3JUn=l<3-%MilmqJPit`D0>~H%%jQ1*%ef+os+U? zxzC8cj3eJYH9Z+yKEr!7_pSB5O;jA88dA{mbw1Qn>WcdH_-30-EEF z4Lyo?yxDhYwyF3sBxvrGvfJxnmq)E?ckC4}`07gHb*ku=A@x7w>pv^Sccy7AXRp_5 z1X9X;eDp-(c`Z$pT}$zsQyN%*>#cA%ykN?CT@oQALIwI^_!``bgbUpZ9t) z!@SuJG%j9zsZUB9uaSL@iZE98D7}m6BDwE$eDrMaEMA^xq63L*1q_~b%g1th!}Shb zs@1kt94!`6b;yPGl;-95x^rZz{0wg-Q1^8IB-O+1)=^`u4L0?LQP`dsq(w)<#cI64 z!C*9C7Ff+hi_IRzfA~PQ5!tac^<$Ej*HvH*bvz5`#-$*WXN@}c#loo(ydFYWVcZe2 zwX<^Se)33hBoU6#gMs$20`GHe5#H`+>9B}38wuzJ%gOxM9dPzbF@kAAM+sntj|zM! z9?MMj{sqDg(dsG6Nc6n^^}J7vGL@KN&Gn?29MnU`)r<&VK*I3h#}DD<+QTj)xHsPi z<^K@UPRut^+pa+Q$!H9BYRA!+b2b5ovKAhC`JD3VyZKRpo;rhPlipSp()6*P)Fb_p zpQ%{Q#g($W%lc6xfu3tvH2(n5dL861Nzfb6wEIbzCu7}9*(x4n(o4+e6jgte|HGNR z-Fc@U*6*Rz5SD|B9i?2-+C%Adb!IVTt^R{zWT3+ul}6WX)zu9>!gk=ZCn}@ z3!f60$GqH6hpn^5#K=AHE85lGNK2Z5zm6>bKOD(&ZTw^p5s_@}Mry>lxCbOHW-`t$ z9dmby|KCx-|2O5oPPpjTy}l`4JY}TP7a>B-#k+rK7bXPIVtc!GFYE)XDV(rsmHr2ZYla;$IlZq z2Jf6C6$tus89O!|OehT2ePQZO+aWZ?BGBC|PE<(2e$V-kD}`c*qsbE2R7Ktva#Ze}e-4Z_N&Fg29^t zgWgQVZcxfmX`_qvXdCXfxDUMbjAX`TCn)rYp>cK&^u5-{)uQ;DBx0qI2YZ-=KPBM z^T@Y%Fi9xw6BI(R={di%hTsy2sOJ6`)VYpesM+-tsH2HkNE3|fsA{;hcf>{TEZCs- zp8NRkSsSbDo{@6_qp8oZMD=mX5gSMSv|jUfzpJ#*mkE!*8jh^rINLE4qpO3x>;bBP zkcVP21sg0Z$cx-LZH;Ola z`^l)H*eb6#z4}uEnUe;!+`i)zDK>o0X;3<|LtwfG5+!Iv*9`OeRdq1edr_@8&bwo? zewEA+GeIg8U6}5a{L&8u|4Vo z?>zf-9MF3vI#baRDLzwy41yNkKnBGgInE!W)MjJ1V;}UY0h?V`eB9<;RRsa2(QJ1D zOc$f*yGA9NAvvp(&7H_k;EUOjpS;v&leF&XuO~GNo`;W3B_UfWMy^(aHB>Z&r<0s+Q zdvJN_TJWU8WLhU=`De0^#>>&az$SPYXyp-@yrW~#3Ha~|7CqC2hH#`D73^l~&Ls8t zKk{Wki^cuhSAmOJlk-LSN4{FT+l%PR4nUrpGvx@$(xbW@cuv)J93PAnyr#A+Thhq$ z7n3e|Cy)7UljE~v`7q?b>Hj8Xj8-e!T*T5Ut>?90fLth=#M;r%dkc%8nRq-qexj2+VfOfGuqxzX^1@o z@}nlQP+0_;_w=gWRkKw4ACyqTJmtTM|3)tCL0;DK(~no}1oX=HKP6y>3gvO#t3gDj z(*B_2Fl3xvIEHl9Ni=sLp>Zy50nv*_|3Cr%1oy9_)S2MmP20yKbzbA@|8sVY|M_K( z{jz`x#*}5xhiNMR3ShvLreadBootPartitionState(dv_ind); + // Initiate reset + // If bootState is UNKNOWN, we cannot reset - return RSMI_STATUS_NOT_SUPPORTED + // Likely due to device not supporting it + if (bootState != "UNKNOWN") { + rsmi_compute_partition_type_t compute_partition = + mapStringToRSMIComputePartitionTypes[bootState]; + ret = rsmi_dev_compute_partition_set(dv_ind, compute_partition); + } + return ret; + CATCH +} + +rsmi_status_t rsmi_dev_nps_mode_reset(uint32_t dv_ind) { + TRY + REQUIRE_ROOT_ACCESS + DEVICE_MUTEX + GET_DEV_FROM_INDX + rsmi_status_t ret = RSMI_STATUS_NOT_SUPPORTED; + // read temp file + std::string bootState = + dev->readBootPartitionState(dv_ind); + // Initiate reset + // If bootState is UNKNOWN, we cannot reset - return RSMI_STATUS_NOT_SUPPORTED + // Likely due to device not supporting it + if (bootState != "UNKNOWN") { + rsmi_nps_mode_type_t nps_mode = mapStringToNPSModeTypes[bootState]; + ret = rsmi_dev_nps_mode_set(dv_ind, nps_mode); + } + return ret; + CATCH +} + enum iterator_handle_type { FUNC_ITER = 0, VARIANT_ITER, diff --git a/src/rocm_smi_device.cc b/src/rocm_smi_device.cc index 3c9fba6287..e8e89aa9cb 100755 --- a/src/rocm_smi_device.cc +++ b/src/rocm_smi_device.cc @@ -48,6 +48,7 @@ #include #include #include + #include #include #include @@ -1146,6 +1147,128 @@ rsmi_status_t Device::restartAMDGpuDriver(void) { RSMI_STATUS_AMDGPU_RESTART_ERR); } +template rsmi_status_t storeParameter(uint32_t dv_ind); + +// Stores parameters depending on which rsmi type is provided. +// Uses template specialization, to restrict types to identify +// calls needed to complete the function. +// typename - restricted to +// rsmi_compute_partition_type_t or rsmi_compute_partition_type_t +// dv_ind - device index +// tempFileName - base file name +template <> +rsmi_status_t storeParameter(uint32_t dv_ind) { + rsmi_status_t returnStatus = RSMI_STATUS_SUCCESS; + bool doesFileExist; + std::tie(doesFileExist, std::ignore) = readTmpFile(dv_ind, "boot", + "compute_partition"); + // if temporary file exists -> we do not need to store anything new + // if not, read & store the state value + if (doesFileExist) { + return returnStatus; + } + uint32_t length = 128; + char data[length]; + rsmi_status_t ret = rsmi_dev_compute_partition_get(dv_ind, data, length); + rsmi_status_t storeRet; + + if (ret == RSMI_STATUS_SUCCESS) { + storeRet = storeTmpFile(dv_ind, "compute_partition", "boot", data); + } else if (ret == RSMI_STATUS_NOT_SUPPORTED) { + // not supported is ok + storeRet = storeTmpFile(dv_ind, "compute_partition", "boot", "UNKNOWN"); + } else { + storeRet = storeTmpFile(dv_ind, "compute_partition", "boot", "UNKNOWN"); + returnStatus = ret; + } + + if (storeRet != RSMI_STATUS_SUCCESS) { + // file storage err takes precedence over other errors + returnStatus = storeRet; + } + return returnStatus; +} + +// Stores parameters depending on which rsmi type is provided. +// Uses template specialization, to restrict types to identify +// calls needed to complete the function. +// typename - restricted to +// rsmi_compute_partition_type_t or rsmi_compute_partition_type_t +// dv_ind - device index +// tempFileName - base file name +template <> rsmi_status_t storeParameter(uint32_t dv_ind) { + rsmi_status_t returnStatus = RSMI_STATUS_SUCCESS; + uint32_t length = 128; + char data[length]; + bool doesFileExist; + std::tie(doesFileExist, std::ignore) = readTmpFile(dv_ind, "boot", + "nps_mode"); + // if temporary file exists -> we do not need to store anything new + // if not, read & store the state value + if (doesFileExist) { + return returnStatus; + } + rsmi_status_t ret = rsmi_dev_nps_mode_get(dv_ind, data, length); + rsmi_status_t storeRet; + + if (ret == RSMI_STATUS_SUCCESS) { + storeRet = storeTmpFile(dv_ind, "nps_mode", "boot", data); + } else if (ret == RSMI_STATUS_NOT_SUPPORTED) { + // not supported is ok + storeRet = storeTmpFile(dv_ind, "nps_mode", "boot", "UNKNOWN"); + } else { + storeRet = storeTmpFile(dv_ind, "nps_mode", "boot", "UNKNOWN"); + returnStatus = ret; + } + + if (storeRet != RSMI_STATUS_SUCCESS) { + // file storage err takes precedence over other errors + returnStatus = storeRet; + } + return returnStatus; +} + +rsmi_status_t Device::storeDevicePartitions(uint32_t dv_ind) { + rsmi_status_t returnStatus = RSMI_STATUS_SUCCESS; + returnStatus = storeParameter(dv_ind); + rsmi_status_t npsRet = storeParameter(dv_ind); + if (returnStatus == RSMI_STATUS_SUCCESS) { // only record earliest error + returnStatus = npsRet; + } + return returnStatus; +} + +// Reads a device's boot partition state, depending on which rsmi type is +// provided and device index. +// Uses template specialization, to restrict types to identify +// calls needed to complete the function. +// typename - restricted to rsmi_compute_partition_type_t +// or rsmi_compute_partition_type_t +// dv_ind - device index +template <> +std::string Device::readBootPartitionState( + uint32_t dv_ind) { + std::string boot_state; + std::tie(std::ignore, boot_state) = readTmpFile(dv_ind, "boot", + "compute_partition"); + return boot_state; +} + +// Reads a device's boot partition state, depending on which rsmi type is +// provided and device index. +// Uses template specialization, to restrict types to identify +// calls needed to complete the function. +// typename - restricted to rsmi_compute_partition_type_t +// or rsmi_compute_partition_type_t +// dv_ind - device index +template <> +std::string Device::readBootPartitionState( + uint32_t dv_ind) { + std::string boot_state; + std::tie(std::ignore, boot_state) = readTmpFile(dv_ind, "boot", "nps_mode"); + return boot_state; +} + #undef RET_IF_NONZERO } // namespace smi } // namespace amd diff --git a/src/rocm_smi_main.cc b/src/rocm_smi_main.cc index ba3649f66b..187b25241e 100755 --- a/src/rocm_smi_main.cc +++ b/src/rocm_smi_main.cc @@ -373,6 +373,7 @@ RocmSMI::Initialize(uint64_t flags) { // 1. construct kfd_node_map_ with gpu_id as key and *Device as value // 2. for each kfd node, write the corresponding dv_ind // 3. for each amdgpu device, write the corresponding gpu_id + // 4. for each amdgpu device, attempt to store it's boot partition for (uint32_t dv_ind = 0; dv_ind < devices_.size(); ++dv_ind) { dev = devices_[dv_ind]; uint64_t bdfid = dev->bdfid(); @@ -387,7 +388,12 @@ RocmSMI::Initialize(uint64_t flags) { uint64_t gpu_id = tmp_map[bdfid]->gpu_id(); dev->set_kfd_gpu_id(gpu_id); kfd_node_map_[gpu_id] = tmp_map[bdfid]; + + // store each device boot partition state, if file doesn't exist + dev->storeDevicePartitions(dv_ind); } + // Leaving below to help debug temp file issues + // displayAppTmpFilesContent(); } void diff --git a/src/rocm_smi_utils.cc b/src/rocm_smi_utils.cc index 8c9fe39567..3a2443ddd4 100755 --- a/src/rocm_smi_utils.cc +++ b/src/rocm_smi_utils.cc @@ -43,6 +43,8 @@ #include #include #include +#include +#include #include #include @@ -61,6 +63,7 @@ namespace amd { namespace smi { +const std::string kTmpFilePrefix = "rocmsmi_"; // Return 0 if same file, 1 if not, and -1 for error int SameFile(const std::string fileA, const std::string fileB) { @@ -298,5 +301,140 @@ std::pair executeCommand(std::string command, bool stdOut) { return std::make_pair(successfulRun, stdoutAndErr); } +// originalstring - string to search for substring +// substring - string looking to find +bool containsString(std::string originalString, std::string substring) { + if (originalString.find(substring) != std::string::npos) { + return true; + } else { + return false; + } +} + +// Creates and stores supplied data into a temporary file (within /tmp/). +// All temporary files are removed upon reboot. +// Allows all users/groups to read the temporary file. +// +// For more detail, refer to mkstemp manpage: +// https://man7.org/linux/man-pages/man3/mkstemp.3.html +// +// Temporary file name format: +// ___ +// - prefix for our application's identifier (see kTmpFilePrefix) +// - name of parameter being stored +// - state at which the stored value captures +// - device identifier +// +// dv_ind - device index +// parameterName - name of parameter stored +// stateName - state at which the stored value captures +// storageData - string value of data to be stored +rsmi_status_t storeTmpFile(uint32_t dv_ind, std::string parameterName, + std::string stateName, std::string storageData) { + // Required tags needed to store our files + // Files name format: + // ___ + std::string fullFileName = kTmpFilePrefix + stateName + "_" + + parameterName + "_" + std::to_string(dv_ind); + bool doesFileExist; + std::tie(doesFileExist, std::ignore) = + readTmpFile(dv_ind, stateName, parameterName); + if (doesFileExist) { + // do not store, if file already exists + return RSMI_STATUS_SUCCESS; + } + // template for our file + std::string fullTempFilePath = "/tmp/" + fullFileName + ".XXXXXX"; + char *fileName = &fullTempFilePath[0]; + int fd = mkstemp(fileName); + if (fd == -1) { + return RSMI_STATUS_FILE_ERROR; + } + + chmod(fileName, S_IRUSR|S_IRGRP|S_IROTH); + write(fd, storageData.c_str(), storageData.size()); + close(fd); + return RSMI_STATUS_SUCCESS; +} + +std::vector getListOfAppTmpFiles() { + std::string path = "/tmp"; + DIR *dir; + struct dirent *ent; + std::vector tmpFiles; + + if ((dir = opendir(path.c_str())) != nullptr) { + // captures all files & directories under specified path + while ((ent = readdir(dir)) != nullptr) { + std::string fileDirName = ent->d_name; + // we only want our app specific files + if (containsString(fileDirName, kTmpFilePrefix)) { + tmpFiles.emplace_back(path + "/" + fileDirName); + } else { + continue; + } + } + } + return tmpFiles; +} + +// Reads a temporary file in path provided +// If file does not exist, returns an empty string +// If file exists, returns content (which could be an empty string) +std::string readTemporaryFile(std::string path) { + std::string fileContent; + std::ifstream inFileStream(path); + if (inFileStream.is_open()) { + inFileStream >> fileContent; + } + return fileContent; +} + +// Used to debug application temporary files (idenified by kTmpFilePrefix) +// and their content +void displayAppTmpFilesContent() { + std::vector tmpFiles = getListOfAppTmpFiles(); + if (tmpFiles.empty() == false) { + for (auto &x: tmpFiles) { + std::string out = readTemporaryFile(x); + std::cout << __PRETTY_FUNCTION__ << " | Temporary file: " << x + << "; Contained content: " << out << std::endl; + } + } else { + std::cout << __PRETTY_FUNCTION__ << " | No temporary files were found" + << std::endl; + } +} + +// Attempts to read application specific temporary file +// This method is to be used for reading (or determing if it exists), +// in order to keep file naming scheme consistent. +// +// dv_ind - device index +// parameterName - name of parameter stored +// stateName - state at which the stored value captures +// Returns: +// boolean - if temporary file exists +// string - content of temporary file, if it exists (otherwise, an empty +// string is returned) +std::tuple readTmpFile(uint32_t dv_ind, + std::string stateName, + std::string parameterName) { + bool fileExists = false; + std::string tmpFileName = kTmpFilePrefix + stateName + "_" +parameterName + + "_" + std::to_string(dv_ind); + std::string fileContent; + std::vector tmpFiles = getListOfAppTmpFiles(); + if (tmpFiles.empty() == false) { + for (auto &x: tmpFiles) { + if (containsString(x, tmpFileName)) { + fileContent = readTemporaryFile(x); + fileExists = true; + break; + } + } + } + return std::make_tuple(fileExists, fileContent); +} } // namespace smi } // namespace amd diff --git a/tests/rocm_smi_test/functional/computepartition_read_write.cc b/tests/rocm_smi_test/functional/computepartition_read_write.cc index 2e71322270..660866df68 100755 --- a/tests/rocm_smi_test/functional/computepartition_read_write.cc +++ b/tests/rocm_smi_test/functional/computepartition_read_write.cc @@ -269,13 +269,13 @@ void TestComputePartitionReadWrite::Run(void) { << computePartitionString(new_computePartition) << " ===============" << std::endl; } - ret = rsmi_dev_compute_partition_set(dv_ind, new_computePartition); - CHK_ERR_ASRT(ret) IF_VERB(STANDARD) { std::cout << "\t**" << "Attempting to set compute partition to: " << computePartitionString(new_computePartition) << std::endl; } + ret = rsmi_dev_compute_partition_set(dv_ind, new_computePartition); + CHK_ERR_ASRT(ret) ret = rsmi_dev_compute_partition_get(dv_ind, current_char_computePartition, 255); CHK_ERR_ASRT(ret) @@ -290,6 +290,46 @@ void TestComputePartitionReadWrite::Run(void) { current_char_computePartition); } + /* TEST RETURN TO BOOT COMPUTE PARTITION SETTING */ + IF_VERB(STANDARD) { + std::cout << std::endl; + std::cout << "\t**" + << "=========== TEST RETURN TO BOOT COMPUTE PARTITION SETTING " + << "========" << std::endl; + } + std::string oldPartition = current_char_computePartition; + bool wasResetSuccess = false; + ret = rsmi_dev_compute_partition_reset(dv_ind); + ASSERT_TRUE((ret == RSMI_STATUS_SUCCESS) || + (ret == RSMI_STATUS_NOT_SUPPORTED)); + if (ret == RSMI_STATUS_SUCCESS) { + wasResetSuccess = true; + } + ret = rsmi_dev_compute_partition_get(dv_ind, current_char_computePartition, + 255); + CHK_ERR_ASRT(ret) + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Current compute partition: " << current_char_computePartition << std::endl; + } + if (wasResetSuccess) { + ASSERT_STRNE(oldPartition.c_str(), current_char_computePartition); + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Confirmed prior partition (" << oldPartition << ") is not " + << "equal to current partition (" + << current_char_computePartition << ")" << std::endl; + } + } else { + ASSERT_STREQ(oldPartition.c_str(), current_char_computePartition); + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Confirmed prior partition (" << oldPartition << ") is equal" + << " to current partition (" + << current_char_computePartition << ")" << std::endl; + } + } + /* TEST RETURN TO ORIGINAL COMPUTE PARTITIONING SETTING */ IF_VERB(STANDARD) { std::cout << std::endl; diff --git a/tests/rocm_smi_test/functional/npsmode_read_write.cc b/tests/rocm_smi_test/functional/npsmode_read_write.cc index e2356ea5f4..f5bcabf048 100755 --- a/tests/rocm_smi_test/functional/npsmode_read_write.cc +++ b/tests/rocm_smi_test/functional/npsmode_read_write.cc @@ -221,11 +221,11 @@ void TestNPSModeReadWrite::Run(void) { EXPECT_TRUE((err == RSMI_STATUS_INVALID_ARGS) || (err == RSMI_STATUS_NOT_SUPPORTED) || (err == RSMI_STATUS_PERMISSION)); - if (err == RSMI_STATUS_INVALID_ARGS) { - IF_VERB(STANDARD) { - std::cout << "\t**" - << "Confirmed RSMI_STATUS_INVALID_ARGS was returned." - << std::endl; + if (err == RSMI_STATUS_INVALID_ARGS) { + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Confirmed RSMI_STATUS_INVALID_ARGS was returned." + << std::endl; } else if (err == RSMI_STATUS_PERMISSION) { DISPLAY_RSMI_ERR(err) // tests should not continue if err is a permission issue @@ -251,13 +251,14 @@ void TestNPSModeReadWrite::Run(void) { << npsModeString(new_nps_mode) << " ===============" << std::endl; } - ret = rsmi_dev_nps_mode_set(dv_ind, new_nps_mode); - CHK_ERR_ASRT(ret) IF_VERB(STANDARD) { std::cout << "\t**" << "Attempting to set nps mode to: " << npsModeString(new_nps_mode) << std::endl; } + ret = rsmi_dev_nps_mode_set(dv_ind, new_nps_mode); + CHK_ERR_ASRT(ret) + ret = rsmi_dev_nps_mode_get(dv_ind, current_nps_mode, 255); CHK_ERR_ASRT(ret) IF_VERB(STANDARD) { @@ -268,6 +269,45 @@ void TestNPSModeReadWrite::Run(void) { EXPECT_STREQ(npsModeString(new_nps_mode).c_str(), current_nps_mode); } + /* TEST RETURN TO BOOT NPS MODE SETTING */ + IF_VERB(STANDARD) { + std::cout << std::endl; + std::cout << "\t**" + << "=========== TEST RETURN TO BOOT NPS MODE SETTING " + << "========" << std::endl; + } + std::string oldMode = current_nps_mode; + bool wasResetSuccess = false; + ret = rsmi_dev_nps_mode_reset(dv_ind); + ASSERT_TRUE((ret == RSMI_STATUS_SUCCESS) || + (ret == RSMI_STATUS_NOT_SUPPORTED)); + if (ret == RSMI_STATUS_SUCCESS) { + wasResetSuccess = true; + } + ret = rsmi_dev_nps_mode_get(dv_ind, current_nps_mode, 255); + CHK_ERR_ASRT(ret) + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Current nps mode: " << current_nps_mode << std::endl; + } + if (wasResetSuccess) { + ASSERT_STRNE(oldMode.c_str(), current_nps_mode); + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Confirmed prior nps mode (" << oldMode << ") is not " + << "equal to current nps mode (" + << current_nps_mode << ")" << std::endl; + } + } else { + ASSERT_STREQ(oldMode.c_str(), current_nps_mode); + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Confirmed prior nps mode (" << oldMode << ") is equal" + << " to current nps mode (" + << current_nps_mode << ")" << std::endl; + } + } + /* TEST RETURN TO ORIGINAL NPS MODE SETTING */ IF_VERB(STANDARD) { std::cout << std::endl; @@ -277,18 +317,18 @@ void TestNPSModeReadWrite::Run(void) { } new_nps_mode = mapStringToRSMINpsModeTypes.at(orig_nps_mode); - ret = rsmi_dev_nps_mode_set(dv_ind, new_nps_mode); - CHK_ERR_ASRT(ret) IF_VERB(STANDARD) { std::cout << "\t**" << "Returning nps mode to: " << npsModeString(new_nps_mode) << std::endl; } + ret = rsmi_dev_nps_mode_set(dv_ind, new_nps_mode); + CHK_ERR_ASRT(ret) ret = rsmi_dev_nps_mode_get(dv_ind, current_nps_mode, 255); CHK_ERR_ASRT(ret) IF_VERB(STANDARD) { std::cout << "\t**" << "Attempted to set nps mode: " << npsModeString(new_nps_mode) << std::endl - << "\t**" << "Current compute partition: " << current_nps_mode + << "\t**" << "Current nps mode: " << current_nps_mode << std::endl; } EXPECT_EQ(RSMI_STATUS_SUCCESS, ret); From b40933b895c86d1a4a118eab1d9c6dbe9ccedb14 Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Tue, 21 Feb 2023 14:27:55 -0600 Subject: [PATCH 36/85] Use Unified Changelog Template The CHANGELOG.md is added to track changes. Change-Id: I33547cb7f1596b4b8abf206aebdd664649d4d19f --- CHANGELOG.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..381efe9b17 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log for ROCm SMI Library + +Full documentation for rocm_smi_lib is available at [https://docs.amd.com/](https://docs.amd.com/category/SMI%20API%20Guides). + +## rocm_smi_lib for ROCm 5.5.0 + +### Optimizations +- Add new test to measure api execution time. +- Remove the shared mutex if no process is using it. + +### Added +- ROCm SMI CLI: Add --showtempgraph Feature. + +### Changed +- Relying on vendor ID to detect AMDGPU. +- Change pragma message to warning for backward compatibility. + +### Fixed +- Fix --showproductname when device's SKU cannot be parsed out of the VBIOS string. +- Fix compile error: ‘memcpy’ was not declared. +- Fix order of CE and UE reporting in ROCm SMI CLI. +- Handle error return value from ReadSysfsStr function. From 55bc2e2072fd2ff50e60a75670075441b6ae32e5 Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Fri, 24 Feb 2023 08:38:18 -0600 Subject: [PATCH 37/85] Memory usage division by zero The showAllConcise with division by zero error. Change-Id: I469f1b9f268842cd51662be6f9036f555a8949b2 --- python_smi_tools/rocm_smi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index cae7e0cef0..743ed16107 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -1539,7 +1539,7 @@ def showAllConcise(deviceList): else: gpu_busy = 'Unsupported' memInfo = getMemInfo(device, 'vram') - if memInfo[0] == None or memInfo[1] == None: + if memInfo[0] == None or memInfo[1] == None or float(memInfo[1]) == 0: mem_use = 'N/A' else: mem_use_pct = '% 3.0f%%' % (100 * (float(memInfo[0]) / float(memInfo[1]))) From 0d3558945b641a827f6dbecfd3c67bb283281b7c Mon Sep 17 00:00:00 2001 From: Charis Poag Date: Mon, 20 Feb 2023 15:16:06 -0600 Subject: [PATCH 38/85] [SWDEV-335697] Add RSMI_STATUS_SETTING_UNAVAILABLE for dynamic partition Updates: * Added RSMI_STATUS_SETTING_UNAVAILABLE for rsmi_dev_compute_partition_set - gives users better error output when attempting to set compute partition to values not listed in available_compute_partition SYSFS * Updated python --setcomputepartition to provide better output when receiving RSMI_STATUS_SETTING_UNAVAILABLE * Updated all test & example files to check for RSMI_STATUS_SETTING_UNAVAILABLE when doing rsmi_dev_compute_partition_set Change-Id: Ida5d54880d9b9b6e4a0468cdb962fdc0c18d6257 Signed-off-by: Charis Poag --- include/rocm_smi/rocm_smi.h | 4 ++ include/rocm_smi/rocm_smi_device.h | 1 + python_smi_tools/rocm_smi.py | 3 + python_smi_tools/rsmiBindings.py | 4 +- rocm_smi/docs/ROCm_SMI_Manual.pdf | Bin 526697 -> 527272 bytes rocm_smi/example/rocm_smi_example.cc | 19 ++++-- src/rocm_smi.cc | 44 ++++++++++-- src/rocm_smi_device.cc | 4 ++ src/rocm_smi_main.cc | 5 +- src/rocm_smi_utils.cc | 2 +- .../functional/computepartition_read_write.cc | 63 +++++++++++++----- 11 files changed, 119 insertions(+), 30 deletions(-) diff --git a/include/rocm_smi/rocm_smi.h b/include/rocm_smi/rocm_smi.h index 3a80112264..d690050783 100755 --- a/include/rocm_smi/rocm_smi.h +++ b/include/rocm_smi/rocm_smi.h @@ -126,6 +126,8 @@ typedef enum { //!< being used RSMI_STATUS_REFCOUNT_OVERFLOW, //!< An internal reference counter //!< exceeded INT32_MAX + RSMI_STATUS_SETTING_UNAVAILABLE, //!< Requested setting is unavailable + //!< for the current device RSMI_STATUS_AMDGPU_RESTART_ERR, //!< Could not successfully restart //!< the amdgpu driver @@ -3572,6 +3574,8 @@ rsmi_dev_compute_partition_get(uint32_t dv_ind, char *compute_partition, * @retval ::RSMI_STATUS_SUCCESS call was successful * @retval ::RSMI_STATUS_PERMISSION function requires root access * @retval ::RSMI_STATUS_INVALID_ARGS the provided arguments are not valid + * @retval ::RSMI_STATUS_SETTING_UNAVAILABLE the provided setting is + * unavailable for current device * @retval ::RSMI_STATUS_NOT_SUPPORTED installed software or hardware does not * support this function * diff --git a/include/rocm_smi/rocm_smi_device.h b/include/rocm_smi/rocm_smi_device.h index e3c94164ac..c975baae55 100755 --- a/include/rocm_smi/rocm_smi_device.h +++ b/include/rocm_smi/rocm_smi_device.h @@ -162,6 +162,7 @@ enum DevInfoTypes { kDevNumaNode, kDevGpuMetrics, kDevGpuReset, + kDevAvailableComputePartition, kDevComputePartition, kDevMemoryPartition }; diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index 743ed16107..f99b7f3261 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -1421,6 +1421,9 @@ def setComputePartition(deviceList, computePartitionType): None) elif ret == rsmi_status_t.RSMI_STATUS_PERMISSION: printLog(device, 'Permission denied', None) + elif ret == rsmi_status_t.RSMI_STATUS_SETTING_UNAVAILABLE: + printLog(device, 'Requested setting (%s) is unavailable for current device' + %computePartitionType, None) elif ret == rsmi_status_t.RSMI_STATUS_NOT_SUPPORTED: printLog(device, 'Not supported on the given system', None) else: diff --git a/python_smi_tools/rsmiBindings.py b/python_smi_tools/rsmiBindings.py index 8f70b63d90..d3a81ee411 100644 --- a/python_smi_tools/rsmiBindings.py +++ b/python_smi_tools/rsmiBindings.py @@ -69,7 +69,8 @@ class rsmi_status_t(c_int): RSMI_STATUS_UNEXPECTED_DATA = 0xF RSMI_STATUS_BUSY = 0x10 RSMI_STATUS_REFCOUNT_OVERFLOW = 0x11 - RSMI_STATUS_AMDGPU_RESTART_ERR = 0x12 + RSMI_STATUS_SETTING_UNAVAILABLE = 0x12 + RSMI_STATUS_AMDGPU_RESTART_ERR = 0x13 RSMI_STATUS_UNKNOWN_ERROR = 0xFFFFFFFF @@ -93,6 +94,7 @@ rsmi_status_verbose_err_out = { rsmi_status_t.RSMI_STATUS_UNEXPECTED_DATA: 'Unexpected data received', rsmi_status_t.RSMI_STATUS_BUSY: 'Busy - resources are preventing call the ability to execute', rsmi_status_t.RSMI_STATUS_REFCOUNT_OVERFLOW: 'Data overflow - data exceeded INT32_MAX', + rsmi_status_t.RSMI_STATUS_SETTING_UNAVAILABLE: 'Requested setting is unavailable for current device', rsmi_status_t.RSMI_STATUS_AMDGPU_RESTART_ERR: 'Could not successfully restart the amdgpu driver', rsmi_status_t.RSMI_STATUS_UNKNOWN_ERROR: 'Unknown error occured' } diff --git a/rocm_smi/docs/ROCm_SMI_Manual.pdf b/rocm_smi/docs/ROCm_SMI_Manual.pdf index 523a91b2bacee0950aa6d9196acf3e48e1c678f1..3a3ec7aa6f9428734840c6ed2459fafa04032f93 100644 GIT binary patch delta 133186 zcmZsCV{m1`+HR7aWMbR4ZQHgnu|2_#Cbo8*Ol;e>ZDV3hCQk00d+PhDZq==N`dwZ9 zWBusvs`WltXGtVwAd)&5LkMmbP!JV>HksWJ6Bx#!xDm>*!BP0D<-pX82%I^Z`hS73k(X+-y`rA6A`7sp|!i_t7-*sk@On?O!h$H<$5Fdz>sme!w0NY8EtdkZOed)_PlO!Oo zSy5c`?R^csjR1DW{&x(H9p2|Vv(TR~kY7{&zz8JwqR}_I4b+na^%bfyJxEQ-+ZocS znp;J}m`k#((<~Ch-QAY;UBz&&#F<5M zsj?S3F0RF|wK|naj>S9X&@r9`m$bjXfBU-6wpEv%v}$H;{}C}$uzyNra(3VUckpTWM zqRF6fuo#?*8zmh7eE=)xwZOwQ)#iz)X63W4AiZd1Z=QZB>Sr>D zVIfH2JHWhND8oND?)j2v6_O80veZs&Wj90yY<+N8(3qGp!S^1LKat~>d~O>KP{C#zDI6Ne~DTC9rO%H0bZ#Ifdi7+h2 zu%-`tP{M}}oA68@C?-g_6}KOL$!VI3y<5DTE=Mkz`MlFs_V5TXl$5}*m0NWP4G1Sk zIzYo&I$F57yIPt${AcErY{CHK#nWT9RNc#&mV%TE7Cq(QM??81=QVe*a21l3|a} z<{sQPuYcMzy*atZ}nIvth}Nz!{jXXu*b-a?XVm-^S9$+TD8Y@LvC0 z7PFqe0VhsEJ_allZFlvzBUZp{(`a;Zx~b}Rou$BSD|)%<(ryt;0^*a)!^jW@k^01&2`RAp63K4WL=+E$!(S;a>>KmEKsI)7(d5C8yy3>|&KLD2x|%ySMn|L9r8(-%)pkZ2>6Gli z9wKMxGf}>zl4L}AARZ1Xs8$h=5p|2^oV>ux`Q-J%g0H8u{lyQyi8q*`nw2Y|IEFS# z+on#3C!i|r>1?*klcHsbG5O#XhvMPf_+-*Ki@WmjW!fAq6R!{^nS080vDTw2Uf6pe6n`6ECE( zZd`6|QXR|~eAIu>5d&HuG;jVCWWuf?6RI(mC(m!uefbtehP22|0{J3_MPxNuddkqu zEc`9)c)lbGxKWVtlS*C%*vE4ddvL{(4psU7lbfsiV7QhLU93oq-~x&Lo?VY2s*@P& zK{*g1u8;%KyonoLU%enrWCVhPDktd{65m&!A9hM(iw!-&P6G93c^}Rb8hX^SI!Df_ zs87ZQjq(GSI`-ZfokFi^&^~d!ZgWnp518pW2Gs~R@GmsN4|Yb7BX%700i_p5<<|mQ$<{j6J<|q-0b-~vV_0Cm7#*+HTibXL6m&g!&yRj z94KwH=3ctecJnB_2;BWvIH~mSiHQuB4k&&vu(jhkImiS*u@`IK!x!1@D+a%krIgNwoJHB1h@oN+Xs9b`l_YD8Jez)*{a9AECI?LZ^m23;n^z5s3{= z-j;D|ZurphjgcYR$fxpXh7jJ zCPgHcXw6qUV8VB?g!e2UjS}{@szrBwwqnJ+$_+w6g|V})A_QuZjv)a!dt}EfjDzQq zP9B_y@%ks3aI|!V1pirMH<9Ub^6?nKAMG#Y2STuIwa7 zQ^%Ne-ETp`#PuiDTcs>D`tU2H>35WqYqY8rpF%ek9{%ZlrETM?OV`@Z30AVwAJtJ7 z24v@zQLBFs=!b>;YBm8CP`gyt*q=?@`!I&=lquzc)C8#mMRbJ>qO9Cm+NMViCe76! z+NK0l_@p&F#-3kajClvf$lvELFvAy*L*I~X2(gn{P0+#FL8#E*Fj_r%0dWwZU#tME zRy+Z~-ZuzNHV`T%fDUNrMA(k#|5Q6?{#HP*RzLyK577y`fb|=zp9#KN))a z89EYR|K*Q-jJv73InI+iyV_G`_kDu3x)}LO(DY5QLI7(eDB?G6Fe~ zHn}{qwANrAb%h8~fu}z-NE6EK?Bd-mJFx6hW2?OGqRB?bw_>eKDs0!xx~Xr1kFH`x zFYUrg#R`WUx)Ec>r_wd3V_Tmi=|LMI3#Li=Ju7jnxGdHTRJ8WPM7G#QGD)89?~Z~} z+4MAmT;(K2wlk1T@))LKBY~FC%&JVuOrOD=Ml>>mmHC*9LMe1Z4_8B->{Et|Qi}%5 zEM0=E` zSW+C3Am4_dV0Lzgbo|zJIV<`Q!Zr1K@S|$z!fZgl{1}4Gr{;8q$0z1&OV1Q}R;x2s zvyYWsz|;2p_4?c3t)GAg^Y-<6a;f8!+57QQHy?0-Jo$JSxD)F=*G&}f8Bel-gQHTV+q^_H9r z!1DLOT2iROTEbI3L2SwALbs%fz&6|e#hz;nySpO1A^5eH*Rl)rce}qS+(r(6db{&S zX9ad`eE2+pwhuu|0c$nTzr`y{A(Vsnc=Z*??IGhNgQtqIJ;5+rG^itv5Cow!wr<*u5NO&0`iRn$SQ zafBc9GgisfDVMk{p)8lnVs~AsI$gi9_<`g8!ieI^OUpHvqo&4h6N?&?I%-5EHk~;Z zj}eZ%8pL~T7|F=a`3mdeV~8ycIYk(zG`DsVzO(ZwxqedFi3sbw)d?OnmX|bfZ=!aW zxHf3($PlZJGQTSEH@?LTR{j*QBxY2QdQ4%6PFhX6Nv&$smkOpVa?^*#x)(!Upa+@< z-jQ7~@{`^b--^4-SDdq}eIBGG43bAWUZyE;O@@W&^S!+Zf1X_)gXuKmR(2%E3xBycmdrJKLsvTl)S8GQdVt7;454dJzU#nXOWGIaE;s`ZQ{sObn@;_sA5 zS*J8JiWrtPGla>B#J~#1GV8x<*z;b;8ZE_&Z?s^RX{6}?HpFN0!z9Ev?aR?rgwe15)ue!knk>WnWXk30J_eU>#ies|$W_t8TvrY%h>b`q%e2{izi8`0pLc|Zu@&G(XBhEIS`-_A(qgDFbL)o zlJ+42br&(xl(VK9Sf--D;0i2N>)w$YZg)35HzVNjB&_q#lg_k`LgPQ7^Kr9F(Cao# zXIvqXahZBr*e)ty!qN$WPDwm=E7-9|5Ji(TtzmQz7^g z%^rG_wb3f_Nxpwd2-39-9_A&c@Hub`=5b{R8GczM5O?!2UU|%5QVCd*?=Ig9U!hy~ zK&RoB@e*BjQZq#ZE@+$TF-67#o#-)DPS#S?k;J<{qyklCPSv93LC7wBWEp#r9$5j> zSp^?Zz9?-(QtZY;*)d?6%#Tidg&yHQ^U* zl}wH2|B6WylL=5`Fipg*-O`XL<`k!XKh}lDmm*n(JXSEmCLgB_-(9R}&wm}onWRqF zchE5=lIecZ0F=t z|6C;@ssvB%z-4JpQIA|HDv0s#;7YqOof$mYWzrj>oehxj>ERRK12inj)CU2%t~wQ} z={2#7)ZnUNQffwMw%ajpLs!XYpmE#?dy6I^P4 zoeX=M#wAZ1m-+AY*Mwit4p?temL7?Bun))IWt8YMQ2i-a{~eiBo|*0_K@dM>wZ%w= zPiL*csQqV-mLrM`oXjnLi*66z0=gmK>}E$`9tah60WqxEDzOI{0aC@y5qB;Eq1_L@ zTZ=DmhO3+sJ23dJUslFCf$%^R5e3rap7od%=?;#{j_AQzUJHyr#PV2x*J4LCHSf#U zc#jpGBd*$B)elb^SB;$+WALh21x!N*8k?h@?5x)!2p4PZ4c3A<`BAh5pZXfFt)#>EPfr*+jqhndl`=%?%q`mW0s2Hr(%t4 za>9^gW4h8O5_L4&rGbH*WJ{rl`1}exLUV#nm-!JYY5HX?_~r!Eec#uyB`9$EIEn@B zmN{gKcKhJOZm*K>hT&+u>0E{R`DF_5fC(51i*TLuU7sgaGPq^57GOs@2(d~4iWQQ#%HcC3^l}%wv0407xpo89>07xLhL%_GzE=7R# zH_)93IC?9$Cg1=9gn9@-Z)MN{7{jCvfMd4in*ai!K@jawXss+(fN2T!x=H)h@7`ry@itb^cOxS zAl!`fa=}x+It(9nJ+bB~3VZcNO=UPk39}dhz=p{9$YhAf;7~-Pb6DF#B2&`9Y?b5> zmkX$HSS5InaGfSN)!NX|p)l4{0U(5Nba3>lBNh*J+`{c%7Fn?FA z=P`bY_jMmA^h4dy@HyMNsoR?*D5VB9_7;lhX+2UyAR4r(y7bYTnX||+I1nHYw6kI= z*xMf7lSp}oD^~(B?4In$DAvo_j#A#&2Ps|}CB$d098^fNnv56oNn3mcXhaQEf}Kj3 zz>h^Gp>9YBHT>n^*7GItdf9Ly+j~s=TD<}ip_8|+hx;`?BGbRoU%nRv4|q*@!<{$l zE0r4^6NJ0Y@l&a+Q}!Pg``--Yv%TS`hnXGSe4A8TYaRw7V??~8hB1ceY}`27R2@+$ zFdh}ng__#!kAaPZokk_saglwcL3xU}&q1%qFHM!mK$iDsm>xuIsU^(Lq1h-r>^WXN=%{)ZIw!-w@2zvuV2XK=WE*GQ1-@mhBmpo@u zwLTV@P?jrlq)-JJXd@FD7y|u$A6&g}P1-&;N}cqz?;ET_OV~_ z_8p>OgP1G0FC9Eayl5r`apdLYJ2gUYm*=mWr>(%r!BGIp3)P8@dytp}!-qfB2ZCn=*cK5D6p8XlVVje6E#8k}D>*eeh~_330S36a!I#7%m7SV#F7cx+!3v@2^38vqFt6m3O(nF z@Z3SiQDTkr*XJz)IsBq`D*(uE0OWj!O@4bwre+QZcpVDxV^dA6$fC@m)WWKEDeR!| zY>O~Wg1yAfS>}QdY}1oZZ!xohhb~(7cmXy78w}mYE#04CEbZyJ?jo9zrW#pwc0^M@ zD25A&&{1R*q(X2X z19kUU=>V;(XbCA-GEBy zS2iT3L$3XYtQ%xkJF2+!x40H7vOx};su>BRm%oySP~o48xO&7V5iJLOmo<+QX?@lsL5+;(t<&N9+Bp7lr34 z(?P$9eVixc(1%CM6f(Bjm^TYPJYXe@-?s7snoBDA{ zEMc5y@DYxNcYQ(9{DOhStjUVvBiUc>QD zBR_g$adzVvZ{mo*oMUvJpIFTzZwSe4 zMyTv5cpE#v7J_LU+$3w%MgY5*!BTS_)Bb^+!UywQMupmpT8+95eIarS_CGh(tz;&H z&+0t8{QsStuJMk}@Lt0ejxA^iE<&z(CrX1!ft@SxK^II;a14*6KsF2z`(_~a^RU%Y z*-`kHRtXFA`afQdC(rhNoa|Rx%{u1w`rQu#E#T`@G#YhtttV}aC~9=vuv%mXI`W1T zg4d51FXd7ayM;XBhn!{|byfucKgwo2ax7|eu_$sPO_5ET2^)h7NoAm?x?2FMG6sJd zE(0ecI2m!vP!gkuVFJ^9CH+CTMNJqxTC{grGy$leZ>|$xh<@85t1Ei-J%f#@u?PacOSxFBV{IX z*>Qtw^k?%dQBPt!YIYM#$X?fs?+K;_4tZR0J=+t3>(0`+cZQxQ6=5E^;9d=|HmL-s zoXWN?h|ck*(gG+!v(1Z_RPRrUt#1^cI$;S>aSp<-H1zo7xXoXpD|$l+7qn2oTt;@a zsi;&sJPmIn#v5x`t&tcQ)&t<}7t|^k^w+Fw9;x5kVJ-9LU4>9Mu5+1X4urPRK!ait zx>MajfrpXYjOEio(GM3id4%%%Q`vcp`F>t>{Q*2qNa1+T`?iu;yoP|+O zLXI#*aLw^hf9L(08bL2QCE+0V*VQ&~g72d~(pahRpku35&)M57KKeNUEbvJlXJwzF z%6R(o*EB{}d4eTHrra-cf?ze2*$$HBcAq>6zf8)x-Pbw^!~$qAudY`x6~oG4YcH&` z(Z$|aej!T{?GTZfF$fQ>3nEK$uOjE8AE<6w?_j8~DNNutq-R8h-?Clc9Qw1VR>9flMwXu&pjBKahE4%;eE3l+FXaECE>S&Ki8$5TEGUKpuLTCvS? z3c+)#wiTf%wL`ePk+`?!o6Eoo)N5~mpxC0SUT=QP4&s#=S=c(Sh~I8hI9WO&+i_xa zQyamr&4g}o5hg3CcplQQKQqYM1VLg^Z^-Qu`Fm`yrqH_;^%SMUlvt=@8`RJkqaM_Z zRdU@FvrhmJWR(OW7 z+fXGVx<8)7DMT{I?c_~vXcm;Gs*=NTdwdVB!ePX_)fCwxuqpqbJptp0vJmfFT`K?puRmC^+3({(r;}glh?y=Z)e5lDE6b ziHlvw5WADCNsS8n2>?L*zdb$ge2e!xgpv1=xKpgtj}I^b&=2XMlx}Uk6252n*!6_l zd>)l!`jK@d`D9Zms4mJE^e(it3M||NYcdE{p*I=jY za6|CzSxjX2;7PHmYUeUhsCp3gn;(|rDU$LtLlO$oweJ20vz0NuC$QW=U+z!Eq(7YH>I0=*R>46qONUpDg<4S<9LX9I!%GqYN;(*Skf zAURlASV1mk5VW9caR597CpYLW9)cFQtiKsY(2DB6Tf1j|KVZ7;4GszDk%$bUKw%K1 zU=0<0a*rn)+QHN!AAEVsK2WOlDs0|L8o9?oX{q$BSRXd4KPN~^(o&ZZ)hibHY1l`s ziA{l%0gvZ;A*@^0-k}1Zyy|ThsX|nf4@&6>EvcG^qL3=oeb+@=a`h~SRFVKPY08|; zQb3hRkYfMLH>?&Flg~s8usE}YEbqYE!I=4k3eqr$<*ic%l73?{Fc@fkXOv;dk}wR8 zOfn$*qc86XOZB~)>DTG<8s$Z-kw`FH^CvW3>K0H&RPh}@hFI=i3r85^qGhk8$&oFy z0xr1{zPWP08ov<7*nYT^^wtAtrag(`s%_^Cyg|-2Cwa%^Gui4G>QC8L@*ZJ(vVu~3 z`pK=mb!mZBl~jPeAof={ljA3XS7#`*+@ldqxcv!{N)T}PtxV{;+Y0AA2?aU9m8R+= z7A;B*SQutDeTxVwM!PNSY-)4fq65p)*ByRBPiit}UAFaY5U=PUoyS?h7qh9w4cTxNyBj3+rC;cJV z9_#<&jwL-G%oj#aH-7bG4xT(rPF4;MpPXgg&E0&x-royjXEE2*l)k*`D?^{XoG@qA zavKN8f1H>-On32zI?2+&by$+267|{B&ks(gkkO0YJly_PT@yeAW(gY$cEV-V4iMMW zdhR;4*7gG1tG{-TY%=f1(rk!MZR%WRTC$`iJj8jFJibP6*R8Ohy~Ol0$V{so9geZu zPaYald9;-Af0B`9X1ItFXmA_OOlnNB`hKFtVm_#pNh+9XMjM=ml=QUq{CKeK{CFQ< zRo?CT;o;%G)`N2njAO~OoRNtDTs6k}Q)HR%u35;E1O+;zZeaWQM2>q0!jPn5%siQ2q5tp=J~t8!J=KY{6}`BWxqW>h(3 z>6H+I{eC7%!0tGzMV=GgMTuY}xr`gnWBQ^HXo}u5N19vh1>IS@c{S zM6qN7P;ySPPEu#%S21Ca&&7)@y&6*>)p2Q5ii_n-jwZzsX;2oMT+-smW)DVeyZ^bL zd(?sLdEZItfo%zD=odqDWxteJ&!8L5OMVV63A1W8zeX%v%|+WJw&M~zZw~e>uad%D z)KS-8oGGx6dgl*8F-a~7xui{NDR&9O;ZR|JAP4!=zMfNIMswizlSYfHsR&!+^$Qf# z0L`g%Lo3;$!|zA9vT>QeL;C0_DAKh+;Ot_wOuVA05Q zK)Vy`rUpwAs#|#7QU)~@vI{v&Io4{2jO<9=&s6YhLK$D;>j0KMOke!Hs4nEbp8@{x zdqkZ-^l^i~&=F%vWivH0d=a--8xcT08$}v);{drHWLS+GL%Y;+A@@?L{yx7vPWG z0xYbQR{hHarNMSNlhYPS=y~ zi_ZY<0+9{f8OGM-3ncQ^G>L7kWZ?4QP3M$&MoIAJM9N=IkOD4Mv2*bXq*{iEoDC-8Ki$>7UGW`~I6`_*A&2BR}S^By0wN(Y1T1VroPKNP5A zlNkROptK8!qkpgyqLk^C9fKN=W80-VBEvfFT3}tMLj~g_&vTiJi3*C$9&X%$laGaV zY`j-V=>2B|+5_1#Fw7g5ng z834-)_9@RNyQP1diOBN9!YUAv7QTVQApU^iGEdT^Cb>3jY^BrggbFA&u|$s5txs z0{`n9tsX@b2(=D?0l~@Ds#OL+g#2&I=~)G+1%UJZ%SK|f^3?&%0RPq3Ya0RPkl>vE zx5Gqafn!#%bhL7}CSm{Av}8@KkIdE924d7*I!`dEL91R2%^iF=YF zn?0izB2XO#BS{WH;hQN0L>{21-`hzfu!X_ViCZM0M6yZlY%)=mGe>-ojN&;FD@PNVb)TVRRs5gCJnXmkNwy8qM^`gu7COGQVZ*xwW2WVT> zydBz*-0Yw7!xnRBW5tk>+ko`kG&E&|n&yO8%CMAe3UlHyO4$(8aZ=hpMal{eEEnhx z*jV?&b8JU*hG8Dl_0Qf|;n@u)Xj0->7vvWSh*G#(bf7yUVJAj=s42NFNLX&czcdZd+MG z=zHq0bP~}Ql$_`rG?1nyA5RITH-X{L>4%~tdfcN%Sn4`o|Cds6{3r^Ms57d!24 zI5+cT9f_VX`5Kn_S$&*HTsmfsfUl?P>jw~M6t>7bJIh?7q}1E#sQvL|JTvp<@A|qt zeB5QwgD?iQzkHUb^yT;ZIJpMQ&JO5Q&>oauOsvCLt2YlM2i~T!nl@S=q0U1#GlyHv zhArNNEead?0a>#H*x#@3&0f!(y+0P$Nxv>s_CtrYB;?TbbnJg|GO3$I57TIr%QrH3 z#4`T-a7;8|FpVoG1?oBQ?ie)1JDhcGk1dThmef+IlBYG|amcyvl(3|w8cK1b zYh`)k)_O)^P#qj{O0dkQmrpD+-5xS5^%L$(JOp<%fMq63iO@*`=Zdn#>`}a?vMS!W zxi|7eg6rf;Qq0I%H$SBj?^=~OcM+KP>mUHVgi2qZ@jxV^F_{P6p?TE4m&bVFo*%Uh zKWkz(gxDtbm@G|kp*&3UTqW4x`KQ4k@n~-dc%j~*vc08WUWQ*ZpFZ7I@KM%?eQS^) zRh6B9K+3P;*50l-+cgfseQ1pREaS4}Hm?T)BbQeQ`j_os92_NMzXv~_kARoi<=gY^ zx*w`Qoqs1CM)_|S?4+4L6o~|DnQNF!j~@{y&Q?D=rmP+-qrVUY_lm}T&#|z#1X|@_ zKcatJ2btnq>n1`yeWIRyI)EF~7-Pr%gUwztVzN<#soyHTIC0QH|A0PwPHiWZh5>D~+ zYVdna7x15%F=Qby8`gk^m&n-8qPSo79h!vV@)=|D_tyA)MG#aehSY63HD+N?PFHN* zdX!fjbXrDPj2@9QEu55Y>G}$7#VC~sN?}8Dv(8LfT*Oy@lr#&w1y!Gg2DMl}Vo$M( zJV3bGp_ftkm#by4JoztI%(WWwmXYL*CzC4kV4#DOy(SSmaBYQqk{C?|2h`4F+bG_= zOmnhMRp)IO8P|Eo|2Zr*8&#!jgW=KWBO$rd_`c`jVo1$IV^0Q+A&WwzgD~_CT5;)sOn|vRbA%+m z4){I>5l9`nwG>IDhJ9t~34>2jrs;amw8mgJMUcj)3+wE1BCX@cb?GB|e#&ZjA%Ub6 zpw}|ca@n%IA=d{s?pC>`qaob&oEa-A4u0oQEvb9oRWfc5rQNu2PtFh^CTDhCuN!$F!bl#vYDZrkwI8?RE;{{}y!dNSXI;8_zs^hV>0TcAYN-CLqzQE% z(&?M4w{n#@Iw)*!q<1v4I@pFo$e4-$jREnN=luCCPl!yMH~u|IyLmu8y=g z%*i%(ynieIarc9lpazK(7@T%Qi#oAY!5MhVIYeL$b~=X=Ak9G}&#e)0qJ^<*(J*sCo=x_8O8mi&Vl}kZEitbzPwey~ z`TO!fg|3~fd^vh^-y()KoqWadZ%q9lmx{7Qp zE-GikC4ugX|N4`|aexj9)DZITlbx6!vvZ%rF?l?fYS0hPK%FjS+#s%35PD}yPRs6# z*-6~J!z-n109A*2#!%<)w<+hqJ>s=%easI2-Y3i;<-+VdJxH4S9J0N* z{PC&(0mEjhtM5;-wa_-$CRiJEZ*&WEcl67$yp63B87MSmvFksq&sK*Kfht5wiM=H3 zxo^NHe=GHFzD^!tf|DPbP7Rb`W{2$)4Qe^?&rV3qisRiF$%OSl9fW)+cTCn?Ft=`- z7|RukwG!XV1~hs!9`$Cds(Au^SwsP@VHGQWTjQCxb(UEBKaO$4j-j8&LJZ39y4Nj6 zD%6Jh6Qb$n26bgz%JPfj1MX9v;P0_}n9ml1-acq&qr0CrUMsWkc$MmvbS@J%a>+$o zw&@p{7C9>mC+10Hf!5)tJ2EgbAGDM#yj7BQst&WFMoF@$bL>`)T4I^lS`Y&>WIR?lF z{EtpOJ_!Iq{)^g(wo@Z61NlyeFo|9{+o}8S{z@(_l)M>_e{K130Rt5srC|aLE5{hT3eBGNhZyG4RZJ=% zb60Snj=@;YcefyZdPUt1+oNDli6x=NxFky%3LM%rc=j-oE6k-fEKokx)()l&u(-RD z&_*c-*Qi`n8^f9bwL~6e$%V3u?x^ul5Hk^8=DEoPT7S&drP599J@1afK}$NWGbSq{z#G)C9G z1H&2_?NU>|@lrM2mh7;Q_y9JY5DhHx$~k`Jf{g{x5(Up_UI`Y9K7+&rSPPF;OWRzZ zpV~xP>CEM7hbuJ9=LfY_-rPMvWsABi{7h%m?9_L;lnpP{$j}3X$lLqQ?44xu*K1>I z{Bg;v>V*zVO~xOwjxX?qAkc{7m7qtH&H>|6WuFVqdG-9WxVcipA0ygudb$P%4yWK( zYfVe{h!ly|ZwM|`88BlLAV|+_kuG7Q4Z3;Z9Sc>TEsEXBEAfyk2i~d~#?7z6~x{RysZ@K6Peo zUOXLMJx(J#J-uCg-oN?u_I~(34P#?JKe6L zC>{oU9WHN9ZYtJm!e4*8-3_!3*;Nk&3>u2fv!_p-*5>uOct^A#Aqy7F16zuBAV^hzO!lm4-avsjT%ICsWw)Ax?!DI91u&NQgz@2XID@W6F zG!8!{vP+T?CiYJHWT9Q~j9Zz_tayyMWI0Q_jsK<44k_MXEQVXmqjJI?#zu*_Ouu7D zquwH-HH$w%fFO(i%WPVTR{{f*K7xb~_VU&C-L%)s;P@sFIPhHJi%6Hq`aJ3Qv~B#g zLW{LtA=CwH^LhW#>E(2-*|L^0O*1rfk%Ad_rf{~JY6vT-TtDzm5+j*m4(6d-3jY*E zj|$I5kqyjYV_yIp8|6FB9?&B%jmiNh*KO{ypuN>IJlXRz$Aqhp{?ch(F7r7SRuSm! z=yKS3$(LV|<*$sY%e&C+CuER423d3Pw2VFzf?eXuo^>E`;s!#+# z6a!=tV^LPOKBXIjJ4`C+`rck#{rGpAmYlc{#Tk|=V_0Ju%q&Y#5$f{Js}{q`fuc$n zD$XjhmF!>wg(;Rk9QP@&eln6Hv`89KP3-JXv`;QI-&n-giP|*~QNcx={lM{8%Jw*p z=f~cF;s*c$sOhs9BbUHxRsX~d+De5FQ}H8{F^F&ON5l9s5byy1XU?O%l>~p`IJX1v z%DmVEfuyeROBVbOMbYgRrqkz$j`#BW5RaEo zwpZcw)D>F!{;w1*x>1a-Uq;1K!A;F*Yvdn>07Pc|s^H0Ep zM%^yt!gK`D$;@65{6>Hk9ma_jG^KmC&!APx8KW4 zyOz|A&S^^}$MjbgDN|IX){|$^CY?_*CklgKBFp(gq)fRfgGyiON$-vSEahy!Oj!K^ zlD-L*&{kp=4V2O7k@I!&9I-8N+zPC83I34!g=&GY5L#fAh@s*=ar)~<(mZY8%!Dm| zv412$M(^a;$_|}F-Yh#EvTxlsFL;GZ8S58u&K?rXZws31SQ&xK*~othhGuLJhDUUJ z*np^RAA%OoTb7>QPaC16S%pMSBn2uxpnU9aJco3vjF=>aCQFc0|Ey7Mbw@TDlAJn0kVv3(JqEs!p+{d zzO~Q3@f+m5p3kWO97<*PRW15s)-4&L!B{04yZXgas8aX-zrT-OMqn*fxnl(LfqtuH z@Kw0P1U{-^!i^~&EIN!j^&S&5g=FJ$mVa{{kH^N5r!9}iLW9jJQ~NQLT{qD?D1VU` zIMA+2m132ADfY$WDfFddLpKvB)-eqX40)THHL$Q6rl&J0C}2~S_@JgGdf@7U{->;` zCC0W`xR1Wu{9ccj7zzeHQ@Tij%bYU)!exxwrKMJm4|SgUwX&37pSr7ITMBaypqCO? zj^nebBPy7iTN?76v7OQSiE#1<-bqCyesW3*^HF~sDDZ8JviE^RGCZqcrvl`hWNu)GND)i=blKf{*S?mT4Wvnhq1Se4I^lx1Y>4) z%*@Qp98=6OGcz-dnVFd}W@ctPX2;CT%y{|syWPFh?T?d2H8s^zk2KPBS69FHdZ`5C zjm&7=NN^IPNkgZW1ca^P7k1qnm^Of`JUTyb0Ry!Or9vZpga$ZDEPP6Hjj zGA58oI~km9>F0W>g97e*ivIF?K^sx~`v}8vgfjIpWqcnAAc5Iw6KWe%yfEWyt{PA$ zI*)wCJ)~};ZM?uXEGihq{YY}hCy^<^b{Y6MZnW`cA0<(jsF$n8Z>e#nqeX8KbZ*eZer|bN zr(XFqioHXpb6jspITx>a>Ua`_CNKzHSQI1P6?|jHY*;#`Z+w>EAtR?VJ2Z-qvW8tb zheBybn@<|QkFknA0GI?DL>UxbRK=VRZXh!p+ z7pq?X-w!@Q91&|&o8TtD&RlF_eae+l$Y4I-+Bk%msIeJ`$c5RsDh}%%QfG*X&q8-n zppU2SZaGUYqILTsE}~@`#IzS2F7cu5oV|2pCiTv6IcSu9fmuW?m>pg5rK%KeN?oedAxU> zBK={bmg|Kj^b|%d?NxYHL>-VMR3?tv#1W#b??l6Ye1M?^dYxLc){tU^2BW?oLGA9U zyFZ6ZkAFr0D_wkfyE23z6=lzzwahXi&E1|Z&2I%>q}_WWPfNB>Ej?dg@h8l|G2D;p zVH24xc0Js0`-xlk#fJRUHclLua0$=&TT5!Gp_hOEuS577K()zRI)vgGPh2`jUvx9ZI7?fRhnM3E;P`50xH68x&&-RC|)kgZQ> z$V&g2tE;PdsbQC7~JJiF2?>1sE{<`g@!_T0i}rbXOPndfC0rHS3tJ zepFs#9PQ`q5WM_se0xWrC-i3dZa_6hnq0@N%(&dTyw&w8um}DQ*&?6%4E(+Lw10T` z75evWMtVEDVw{>j@_AeO*-?pk@%sLL?S*tBrLQQG!i_l2U&zN~b@k>+T1oir z7)fV5yGsKJjfh!lL+q4uFfE_ok4<4slQ^pV@P>K{VlJolc zzFv29H5ICfI}!G+Q7k{0sbXr}Dcp%95|EOE`YV04e+)6WqNA*r^#jF6`m1HZgnY23 z72_D}RI_pY2fFZ-U-?ZT?DoZFDD>%fr9kkwNZPzPs6(jyO{n^$2cvl26c;@_Swh-* zOzVIr?(Ob7dMG~?=2~kf4tk$=a-;W*hLjoQ<a4y*v$XArZ^Ph8_f;fobU{jcQ2u}%b(<*8Ft7#9b6w}k^>&i zlFSw>OKFTr=A>R5+`Ww#FrbYj-lH$><0aSW)Ei$EQZ7=_Y>{?U#3OFI3LyJ}zu$vW z=TBiA6ytfMf9nzs7NE5tD~r0rYmMUDXOkNrD7xc96pazBEX5!+Tzo^35xVt_jPJ!u z5&TW>S&{H9$zj1r-m*th5;R?e@R#G(7>d2iVeSF+e)!O>Irr`pd*;C?@06P(cm*~G zj~1~?Y~w7qpP!4-^l5~*5ioK}NoK!q$J;<;^e0$$#7+bDL4I>!PmyELS)Wz|8Hv-`!#KcmXXa)Q?Ld5 za}r4i$%_T%xKO@fT_&1}to`>u<(mO=f*YHqvJ=eIyT3{+^s=J6!$6r3T9WuAhJ(O3 z8ygJQRki}+Ix!M9%?eUVw+#Ay(pysQHyz5HT_LJx7g&$o@jc`p)JFIgvdMBt8!Ys= zYw3TlI1tF$tUN#;%OgbT^Z#f{BpFSiAM)&L(na%he{+rYx!p)rM6cI7la{}s{wGb; z1FsBAjQw|}(vp@N(*{VC#X5wjZOE_Q`-bq#6q?tO5atd1xDp07KmR^bA*Li*864!O z{HClSC(F6`c`|n+zM4l-(;NLHha$u`;UUsT510;w<|eq`9o-*s-l1;?>1u%{9YF2xrIO7J_^Pu)1tQ20BRe`MYJZ zzFD5(*wq@Z0fH+F{K$vP?I+?!)cxg!&%wH4DZj1LeI>2wa?eUA@Mt7F13c@WcaIs=Vbi{)n(E{v4}ejXJAhW zp`;m!G3$_)0e7N_5c!}3>H};iB4^^JTNP#80$KKBZNMbtaI*Z=yPrF0q2ZS$j~$P z4o4i^PXrj&6_uY{LFTB#tMx>vC;RA?@a;*tj67^9dXs6Xv)V0Z1YLN$_hD6YiC@=) zhVq#yK0ss25wTx_Qvn+m+wW-h+CLU?%D%r2X0px;9PPyW5ZXAi)Jey?ZMas}@fbFB z-`%*hwRLiGmnv`<);{V_NsU%)7(~kh4FPc+GBeroJSq!!e=tN?TSm~KVo(+mXkAJL z-&gcQsZbmtG3|L|V`0b-^O3hHB+GxM0xxMH zwHG(rqK#u?|4a?wKD3ELpn5-&%FIf3@ZCC=uGhY{b&OG$e9NnU?Y%EBXezXJmOz+? z3hadKG@Rh}NMzjsR(OP2j8T9r*y($pV6&SQSb0@`N;gm2E~KOfff?Q7i0NsKF(8d` z3F=E1$^?Y&RbTkcZB37H=#N#}FizDh-FFch$3$7ukugYYiTMsj+fOLV;vm}pCZeqW z3XA_KB2qnr^+SNL{TFZW`2hw%{i`U(yMUm9GIOUgCxK9>c0zz-gB-UkLV&Y^0Mk9r zkh+Yn0g*K3XWy^@bbs@`8>+DN%}59Pt{fk`?O|Kwr~u`>=nehj;C#+oq}lis7rdVZ z?hCPCoOnM$-JyR7dHC)_cC&_U#Ok==;ghHZrsN2!l9(Fi#8UV&@*z}Wvhzhq3lQUx zP7QKE6$!!ifpNY~DE<~O_*EE}Ngifs#ryp|-9GZ~s8WSgs5BbPC~mrlp&s!;CD5*T zjxYk|cKn)J1qDtF+-$@ewZLKU$Ywx(|4>|aD&X*++sy*4A==$(eZ$F>?-z_sBWV3# z-~tQUF2=owD&!cbLMl~YbuJveV-(Ukn!ACVdf6tEAHaTO7)DE8Afc2LJquGvd%pUZ zh0@EUo9pW_`2!;Oc-M3O{#9Hj&%Ua(0s^--UJpi+5@G2NFxf{{4%aMIxP&lk>5xBh z+emRBo$b@`z7%l%d3u+aGT9w^mvKFKHQ=6D24U7J3n%GKlvq$ba|*I?p!-p~?K_Tg zIPpU98O5BrX`U8<^H_*&l4`K`+1nPD-A5EciE|p)`+n+2C^aCOET+ob#~U!g1xiTl zsV@Hc=mF;oB(>hV?ax2C!yT#X?;c^M++hEgZJ8|3+Y_2yXhd(um9|BiVuT>(usHtPT(xR7~_==GY2j0!p7R1sKkYEakpRGWWy zY-Jtrz3085nR$Pz!h!r*sWwDem*|*Pc8k;+Sa1wbhMd$9SnygfBY-W{6AqjJH1<6; z0}fmeq%n0B4%`HEJUvwy9=scUDK?;$_q?2cOo$qfy$k>CfN5|x6%7HLl;G)1SFjuJ zF?%cz;ofY^H4EB=SFUpLO+cM2yG%DPRRsZ@3t);UILCMT`Imm5B^Jy&lGw%a$DkrKuh9b~Ip%od*5Nw`(Z>H6nl&5=!avR?(z7PbR$K z#u`=HUuQU9BrxU6uSDQ;7qN z>Hi+MI1~M!Xb@Tc*D9EmorN_uUK4~G(9($|Z;AG~(o>9GNwthe7l&a2C1W;4(+9(9 zCUjk5!uds$ys_-?bbhfmHBvKe;8JlB&U%tjWNSEZJX=*!fJmOegYHr|$QDE_-RRHa zL5h?B9z7T+@gRYtWNNppZ@oDhxbj#8pZ*>mOiY<-#Fmt&CO)oUc*DSwggX0gA(E%? zPM_#cW^6a)zsr$vB4mMPYe6)z*3zruoR|ScvARhQ<`ki(=!nIYfCRE$Ikp8M%i-vu z0Xa2RtS<>u=|^h*jf%P(odhs8w{C?aaIklA5|$bG74;b~(AU5Vd!fguu+OYzyTGFOn@SH7%PUS0kIoIX1Wuwg=aJGkH`!D zJBrsy9+*V4{u{lQ^Zhd7~xA5?-nV6jQ*uPwEt(7^c57a1~G`J61x==h&>XwtK zuf%W@mCpW}lL}Ei>H-1ZQGqZTRh9qEJS~jwH&)Zj&3?2=};mpk3gb-62bCnI$Uep}~CZ93`Z5QyyX(b`Y}#A_|1Mw!7k3SxpuXq@%0-(;PJ;!zU(fcKr`pd#kXW z6ZBAcnYFyZ=>9}71s(PxZ~zB0LGhegg99JT6(^5_$+lv{1uL=FN==Cs&8Zj01iwos z@KMhl%>}s~GA4!@GM!f3%0FbD&}=e{gG%Ru7BZ_(@N$|cUtQhvKHtHi{dIbI`RVQQ zF|_BsDe$#)vGJv&^Y!}K*f_5SGE3y`^RaferSo-2yDIRHj=Xsacsxf04TGCC>603X zOU+|#UrF#}w?2*j`=P+D>uK z8(L}JDh2G=X)bbW1-C4Yqqhb>6Amx}9>HI+Ukgv~)m?=@|MZ7isD1 zL-31NACx795ef&+`{nZHVy#ASd8L1GMRo*P_e@*A3wkdEpr#Z%_Q~dss;{x4;q&y~ zT;d)=sk2FSg~3|*l)lb<>$u|>vs)MTFTLIpp2h)tpzm$0xrV&fnX$93|K5Gnk5pxxYT33Y3$&~Jw_m6dbc1Tg= z_&6i+wY2ru$7}gvQ7Lm3GpkQWnYi#i9h-|Mo#M%W36FegpClWsIW%i5#2YUaHd8mj z6~T0io!!@a)TIdn3l=Hbf7?zg>$as$(Qja+cy5FT>qlOC&h)WFc|s8L{86vs7O>WF zC!R-M`}15|_9k4=c!p=q+zg;FEbaY-XBJgeumDt-on>B(iiI8WALxQ+Cte@Et@Qehs3gIpG(sca=J8u2}DkY;j3&W6IQMHt|n z?%ef|+vvh_dEW88x0-;vlV+Z}bkifft!9fhN@v`>@1`*)F@@AW1x$J*-3E6A0;&9h$gz%v=k`9_Q`|5^zlQ&;iD$82SLg#7dO zV#5>QVj4aSP*2GYJBUY~M_pg|Y>wvN^ygh?fC^y@qQ$slJ(&fj^>Y(sASlS}38D1_ z1pOedxUD$?u=32eR)ek7xDD%>cP%}w3A3i z28$eG>WrJq!5J*dnVTGmRQJWY1zjq4p+uLBpN!}Y4AAmTW;@GhmdN*iCoc1~tUe3T z8lUG&ta%Vds_6o8a7HqBciq~~P>Zm94k1yd=$g2EoE6e<7JVZ18Cw{sravYf7dG1 z$T~n8A1+uo@k|%{o3x1BL709Q>pKgErzPK%X3D|2>^%icTEkYdN@_J_Bw*#x0wB3A zluF$FJs^yhf4loiUpxp93{?A(YtFM7eKf3S2hja29i4Bdh#S*5a4#czAsyuf#js(A zQ*Z)b;io{RT?qZb?AA}FGcx>uu9UGMrWFzDgI@|5 z&7ic=sQe4GnY0V_CL|5FCI{yt!t&jbZ5UNcKsyR&lKoaq4c5w5KUCV*B%XlKo(QxA z4ctG*4d@#}#^Aby(eRj*sWPoslB}SQrlH_Gq-X{gnA1f&pC99b4tq^Ex+j9`AP-t< zG}BEDZz@uSc%d?=31OR}O>@!~Q__kZq`_6Kj{<;?B8_;vmmR{E+@ws0H6^_ol%>8LkyXEFbUUST7g}|5*!!r! zxx(bxWVFF^h!)L_dEKJ5F%KjBwK}8l+1|M0c9J9a(542}`v1Cs|M|RxUnG;lpwVu8 zl2H8rbhur|>SPu-HN4C&vX!s0JdYL(iV#U%u*wG{@g+_ZlvA_X|82BX$uu*x>BWS9 zILe-<8X5NBp}ifXEi;Y``f^h|PB7Q~x9N|LV~y01Zem0i#doitG>;i7e*hiFlLVPm z?e_gS@+VN$bBM}k?OvX13Aun1oYblr5sZ;tHJu$V!ZM|v9tXu)Q>zp{TFy%TGAfS{ zLzSq3qR_2O)+6v74hTjJFn65DTM)@o4y{FtVs7=E@uKhLzYa3uv5Uy&;}euC8KTPOBsH}kvODx{no#`X(!5cjOZKnymh55 zk0J}Lj4U%}DM>IxR0MEMNV35ynArEcI~gnsJ;OIDmO4KcAz&}7u!rI11tW(f zCjKmh&;KMYTW^OZkHrdc^c#-Iw_WEHcH>2B8U9-~G=F$(aX?K%h+q<6cg$j$2)e?h zb4$mxVEG>RRAw~*S4>xdCuL-f{-v|rz;dbZJjEX4+4Q*RId9~P~cof7- zRO3($Jf69+uVo5%4^?5-4?%No1?)M9I@zq2G#YNvOzJ<95Qp5Qk0L2wpv~Cu9;psL zz|sH9y+&_|#{=JnPE|w%r%tW;0S*t!!TLWcRluaSPNeZj{J#aD17R0q3o8i=DXS2c zHQWV5rLd%Dtr~QEZinGTx(OTT+t%CQMK^h4Z5g3s?{ZZA?~2{Sv8Y(5+d@Nh-hLD# zc&N~01Rg^w^CEAmaL(~~ncEP2(@z5gsQ4ExX{c~hyBlHZ#FqWMtOuAX_qgOU+!K8o zTj1w|KJ^mkZQoe6T~gp(BtP%+AHv)LV!UN7XG!?a=s%%F)|&~Uj^XYSF`?>801~9+ zhVHP;>>0l|{g?^T*S`BoAV}n=nlruP?dNx%1hNsmXG!W8)|ri@U)NEnvBsFvQGrUX zwBks~-d&;o(nGmg)`x=a{1ghkzq0P(2p!q|Z078-F1Z?oTE5 z2|r(0yC(B2>TqYCTu6puC*Fvcl7KH>lV0boE-R3LC8pecZm=3LgVycu0VkXQV54DT zCB{;iG7P$>4=zAF)JdT@VM>$OQOI%%oc|P0T;WA!&A2(0qBH-kt;fnH1MiLl38ZW* zf3l_ZwTx1d?pWZZcZHYU{2d9(r<9=l=Z?uxGFO39+IL(_1Yo)YJF(Z?w+4OY3FtKL z8E?k$sXA`be0}t-YQv+S>~1p8CBWnd>iikicG|U{yAOiA3|<#+nic5znGPR9?yW#C zH}!WH>ub5Wyie#>O6o`eAx0R$VKlN=Q0j{66P41FKxL5TCL?5hroua^hhr=_H^A`W zp{~%)9h!Gk98?U*Rf16icFa_sJ;C|Dllt(3R!fW5{OHvwLw7p>HzS9;bU0?us9frB z&+y304=?SjVKh3-$Jv`V%jM?>?w-D~NA9jRyS%<`PF~J(S4YksfOp{f63EE`zCH)i z2)hwRadtY60I$!dBSCMOrO48w8q+U#Z>yU>enow9!9c@qk^DcR77ubcPd%FX-3 z&3nyNj|ad9_`V+wynQZR^?cpb2zu*%zP&{(u-x^(Hx8nKF?-CO2Z-sXi~fAp!?hXD z6NhJ=}M2B#V*Pn zxnIX-SzQI<%{RZ5glfm*din)&u$Ck@MB$85{!<6#x)zob1-MA7vT{zuKp}NGADdiH z)6&+_=7cg0f*0G=)7e87QVx9d$wHMyJpH7|C>`hJn5gm{`fPXDf>gzG@T#``3zZX^ zQQ+18l$RAszAXXVN%N7kt-aXwT_90^q?$0%H#p$MhqQHIwnFyXSK zJI@>o@@$VS0i9=3%N-Wu-0(pj=|z#Q{La60HW$&lqS)XF+-Ogu$%gTcVUf0zxNOr|9m>Ey2O||OoN#?ZD!VtpB&=vPcmvP+B zvhw2Uw}uoLQHv09m8z_=0$$_CF$k^jQDqbi+C>~Dk)18JHG~x0|HvaVWXRcDakLQ$ zhZl(10_iCzo~+Sjfpv0=o3EhM+A>BpGv`J|twc6DG;a`*Mx)h9PXoBl%rVW< zS~Kj}NnIvYnwU2GR1h9#a{x4M84N z1F9MJA4PucyJu88bk)7_GyR#SkQUyR=!@g!K&0@tRUxygxIqoZ>2MY;b=H0)Z<$ZG zD)M)bT_rT11AW|A*l^}P%xJBK80?*x*l0E*6MB87dbe$u2p#lzhZ7@SxO7IoY~(dN z5M}Un7+(gIdZ6flmbBr~x{oF4RW2MwKJplMu$gfSCX4LfSPw}egZmosTcV4IN;?x4 zV5aQ^C~T;F*hO5d?@1&quA92mm}(K_8MXQE2Qn3xZt?)-RwkMpVGxx!}c>>Z%2+ zM-VAFSm$DLi17KDk)^Kog5qGYUG>iWux1`Xb~JBtMm=B%FKNcQGjC^BCKtu_(hu*A z8*(*FH&GpT8OAnbjFV$;1h-5ib6U#20sS_mL8y;vm_dI9KG62vxGql_ekyqvFtniG zM+7lRdAf6yNQf>Yi&DxFX2nVfG?(cW!n8;@S*eIyC z4fQ0@7?xm~ov$H!50(pd%jYZwuIL=VB@5}xtrw+egZx%%`HZPbS7;XK=y7xVCp!DR zq!U5wBbTfxf4?EpZFdBZ(-EncE7QX<>p2RYh^5HQyH=+VA)SFmqL218qDh;IkYutJ z)cdu_Lr=tGue8ZaXxhG&lJB!Bzj$a;1A3v&`Abg0w2xXIn|hlwuA*~K`O{e zgYjT#MASGhzeZ=&$GRF2zP;yd)0W$BBC1#6Jj~Pr{wrhHaN#hf^snmg0_bx*cf|#L zIV2`#Fz^*QCK%yvLpAdY7&(KPiXlTi46bAI2Q+sSV>ee0TJPaAbP0dXE)#!hMUzad zQ+U%=cLi3E16z^&7`~^g5ww%?q-sa<%WH+-SrZ}Es((2s^DnD`6fz8pyp0(#cJK=H zen#}uf9hA=2WT-hF-L+QFM>!-4P^un?^~SSTOaqSJ>E}WzFeVa1Kgy@{a-KFm{(gq zopIg{*{vwPFRPde()$$$j5Y6JVIgmJ`=LSw>oxr@Jo}yyh0}V5c-=Wz{d+GH(>+`{ zJ?X%kyZ6(C#!Ef$x#aEn36{gZ<@0_cRQ_20JP!3W@+9bUJijH1-M;y@hbOqO)$_IH zFsa5;M1ULyN}$LmVzig;y%t@lSYuiN-K*Fs-6>f8ihr%1T4&h$C>fF+tStSsyS<~eKvH4)+cYP$ol z?m@6S)uxHeqGWIf+>H5 z!&(>)p=l1|XHs-X#H!<2#*N8p{Gb}&vxpys-qackeYGFWZ%@l|H{|udjS((M;yuW9tS2n6JfzAS`tL&c zFD{Wj`f(!){qzM{xW;-F19oc8VRoS1tAfHMyW6xn3YBTp3O3>xR6F$g$QvvGraw)f z7g4n5gJ=_z9)hGur^EI{Q=xtKI;Q;t6_&dvcN^iRv*Xv&tL6`@5`1(r=l5>`@R?zOTYEtq5o7 z^B_1#(`?L6nMtW;t5S@ng#He+3yR>oNXV}J#}e%}0uvglChPSfn#+AJ2^FcYfdOIC za2*Q;Y3V-ZiUO$7!Y|-9%7`UlRpR7__iJ>v8Wjp-w!Foa^WDksLc(KTx8L z{2mOuZ@1CbH9|#q|7~w1?IYt!f(e-$KVHDuRHp)wpw8;n=lK_OrHRp?IV9&S6c%MX z%&jG9n!0IYaAh(*u|kH_jgV9w-NMPtlV0mL$ewoTA)&DN)c_LOb14(jL%yi9{&8<5`x@bOC>zLO1FZc zml50G@E_ba*nB4ky)A@)WIwD7{%0GM1#w{9;ornp%yC*-$tv8D=weJK z`JkwJt<}b>{HuQcJ(W$jk8CUV*2?a!7k-{isCr`DzyyXBi-lKYjpaA_6{fcD!%#~i zv6Q?RY3=NoF>kFo5&~@Yk@4Lmb$G!-i9)%LGwfU4vpkPq2^T74>^)oxZ-0ISZ0Vxq zSVhPj-XEaSU!hs#x5q*kTXAcoj>2GUySwpKV8Sa_66zhP3dsOMH28WVh4y4r@4~99^{Pz$>8LXWRJS8`N^s!7pY zJA=f@e@$<H8mWRjKOUoVe5rsDc|K_>-d-VNavRa6#l^pkmX%c3 zpACGZ(b-lKu^loI1p#4Ze~{93IkyWsA)*LlEc64gyhQnwL8$h1o@ayVE#GPwM_uyP zfeVRgtarrp98GIcHQI&k1)gk}=6HVHE;RCavE zX&6w+#!OPm+E=Zy%8WMa!bXFR}S?h0A#2Z7cQ=^{hA2!vqEAY%V8{ z4>g!k0)0uhErysGcABaVF}4oA`-E+~3>wr?-t(umISKYA`gM|w>3+R22B zHK8?dWPR!MdkKcUz_aIfr)U=vvdiDhJACIbL1_JNwh-{Ez;OcHaJj~U5@@v5v{Wef z9goP6L>`c^M+J`l3ozhh{;wtrIu|$<^ncL$-&+)gz}cbxkt=ujsgT&1{}=LrjfI>0 zzsLjatyq&58{e&-UA|^UGcjp&@?PleL3`Xhi1lS83k0M5+^K>oxmw=Hk}n^@9PCMo zGiN@b#?fz)_#0l+#gg$PJ@TPPkYktjKjLJecvAP7Z_~F0VHN#1hLxmBjsj9LyE|0E-Oe%6v{8R+ zbVL|oYqC(Wx*Fj!GJ{M}By&?GHvITPpWiQGI|)z?hMoK5JcjN2j$X81Eb|*D(+F*k5eH8F_iz# z<6^r1Y!_lmvX`nIok7+!D8nFg*6{;Y(w^JDHPjtV=%q!2-47z`?UmURd32~!6AJ9Y zVM$~n5D>{7s*!tfuJBM~g6vkd3T|&#ZhqMy4TB{PhQeBf{nkqwY zI{S&WBjJC?LSN9%Q-_DeCSe}5-c6XKP*7SX>F-~(Zm~ka4EoF3hSCtO>qrWi4luB` zL7SbUbcLkR*I$5%frhBH(iCJB*wDZ;Yb~TPX*E_QGrH&#^{L|0m<9$~!wy+P(`%^= zS*OjFDE#?%a!*Lw&xWC38dI75YAa?f!={yM!eXNP(?~|$4ezHO0B2+})oyEZv#b5( zQM9W=_iHV)~*ent#~+J9#D1!P|`_HwE9cU9AlI zh;w$Lk7edYGPK>!7|YnrW!uef`+4x#v9@MJpkQ=M_ar*u9<6{^g3YezlfAK~w z@GH#HMGCs0rWP1TNq|E#PEna3G=*lLCb%{|)-W?!Eww}}ZHup4$3_{*kb^^i^pudt zRiWn|!C7cfrJSAA4b99qBs^N66miI<&q){>FJuO(b4o7r8HPqOE!fm?lx!3jA|@w} zU&?AjTDiiCC>6cE9V`VJR!1BS1MM7SaWzm~rH*o>5nMb~;uQ^X@rT;2oulNLNceD! zGS^7gtl3JWg)#2>jAXQ!gPs%O4U`e`LlT;KLs)X1{ZV)j#A*k&T8A*QSBAnb0t{!R zMlsQU;qMNzOHE$2KuBR0!;PiLfvD#vO^a!9$fhEecRvP*pn?Lw@T)mwkx{SJ{zeNA z-@sD~;-D3b#O!1bBf~Y??jr2(^Eis3%rc8u=p2UOM#no3!-?m;gIp4$PHi)&I2dw& zl`vmjZTgtIUH!>e0@^=vZxDgajVVq+gfw@xOMy<{z|{g`y;{MrMPeXg^|E&JO> zZAH2Uqb(inWE_zM75ia=3+IIM34zET=hXPNK4K|8WvrcB54mW-j{eyowJlvxyD7$ zo5=R9Xvu(iDK+VIU-h3wi3eZAtzp?sSiQ9JW7pI{XG;#Q;A~J9=syI;GWPK*wKA!o z>{V30D>A|qbOhkFiub&A?RnDkEaXA6G>xL;6)=*N$MNlSS4P{n(BCR^q~NY zakcGSDhh>bw~@)Kue+X@uzrZ!biWgpu%|U7!4Kemp#Ax5t;H?XQ4fl@`5S+C_hVBF zT0A;|?vB<{-{J=?ua9J3joOs%h8|2l=T>i{9Tdhv>&sz9O>E}XaPB|t_fOC49%{iD zHO`*C^}UM?FWwsDw{H5Qw>6}zRd)awb?AD!D(s=|>HfHL@DQrcf?q_e$)Pr~>7l+N z+6SO_Z$BPV(YA~}&&UQA+NXL6AR8e&A$<}0aYk_l*=IsQPCo|prQ~EBH529&vQqXN z$x6w&>BlVo8@fx#O5N`yJ0j<19P^Nxl5x~c_!lB1Tf<%&@LTj->a7u02h#{_g=~kk zKuFmSb@?=~3Q*|%!Ry>qgplHC4zO{xk*^S&vmBE+ijQPUqUhiGF0PlH6&PJkt}VqM z2QmvCKGi&7CxR})+71m$qI_F1_`~FhW08OkyT;lA$)61+H;~h)ESC&j)<(V)ej7&6 zxr9{mOT zcA`}s9>i93%+m_8%~n0phS3|`xy1~BKl}*-{D!La-9$NM)F>zqY{w;(41`k>!mVqT z?F|7PZb|$TI7{XiY$8p>4>(EkMuVL0@4rXwLPg;Og7K;$JI=?PJSDP|^Nb-z=?wb% zTU^Rc^BR7TD{CewLY@{hGwE2&E5}ULIWMHCy9;i`!fHMHUeP8vHhLkSa6jQWemi8$ z)8F+bc@SU~{h5YUr>wLd`%a#lcBC&)Sx6zV(7(S2`Ae9t4&mK80Ei%VPi}k^&~m7H zp0gm8GF?FEC~uE~nR*mnwTN=hvkQ_-Vy1MwkZg*RClH@4q_HhBcHM&|f1JgFp^E7Z z!i^4B>WobGh9-YjbZzb}tdrvOZDw?PM*XSjuvy zX|9PRTTBoPr7sJH2Wkz4OX+Iqv(j6hhoo?$O-Zm&(_Mm8VV4$+o+^Fzba*h_vNh<8 z{1oJx@EfPon7EtwgFIRlEhXNEmszOd?B+(M)|~xf>F&*=dbtW4aHFM2_!PBqpfMqA z_lJ0m!32vOlN)7wek3n`x*{}(I|h> z+T2Q+{m$?^K=t`Sad+!WsQ*Y$74MXsL;VWC*{w1l8(~GpM`gW!M^q;JLFD#hb52Eu zum9UkGF^9~BXHuy8N>?2y&Ro>=Vl+k;K2C8({evl)FJrCoL4r@bV-OzC*#D%<>n?2 zf^W?cGLiSRzm-UQEZ5}w)NGJ9JNF~Xhma`AxUNWIyIUMU?NG!bumPFl1{;ZPMxF^N zJ(Xamkz+rQCOr@;d>FSif`&+_0E|{hQcB5e8jD*KfUJ!Na2P3W#YfU)O~2nhwr%H8 z%#h^Mi=4^w-L_4EDU{1MS#t{U0_^ahc!aaja$zNx(6UVle|BAe!=PtYP5#T6I&J$` z{Al#K7Z@Yz}81XX%HMxuSp;oTmj4e-4r9dWL7LQOW}V4=>wuNy0$Fg4g><& z5dpZLm_Ee|>7t^4?KhLFbolfQo0Dr82-*~M>X%e^$u5{ol@6)bds&?D&L@9m6g^`d z$?`qfVe+QKFBw>k+oQd(w$l4zXH_6Ifvs_8_?1Nb<_}o$KTqB`tk16M!1G19gUg=s zd`Ej1nZAMh`w!fzBW9y87eFOl$1(Cx=L~2^X<~LBS9^Qwsuo^9sgm-|tSFBtMUX4=$Z^eSnfcXBO%m2i{bJcj`QVCX7fB7BHCtEFz?iRgCU!cBbXGad zclxgV!3bW{>ip1C%Xj3QP!Er8p8MMmBoZ-4pHYCyBq^MPSBvlh160t`@&^5$`X@k$ zLkPS*PHwaS&-PCyUwfG?iyvHIR?+0aeSJf^5)h$w%1!1jRo<(^1xWnZJt?C=akSOaAo*$qc7IQv&!+I|BMQ@kUJ*AlvYFAO!o7i5> z#|E_m2_vzpq~Vnks2b5^^*B<->_Eb(C0YDmNz~N+R3c#)Potr3)6|>Wv*C(ZrKbA545$b$$z<6k`ch*hD z_>Q^$No^w7>ErbF_;c$@+bdxh_Bqh0@RoYob99?6E-c}s!H(&98-fv~xpy<;3 zlTGxB8%-U2WTzMu=cQ}2Uj3vC z(UJVkeNlC;XR7hASfB^R0u?5odwyP{lMMY}`PK8y`LfrO`qe(6aUPimpgXKW(NdCXpFXdEQZ9Grk~Q$_G8hLY5_+H-j?%K*i@ zDzF`xUxGSn;mk=3$~E*LV{SAm5t+KkZ31VXe8`S`cY1>rO$EQZfl(9oU)dWxqWt5x zjn%o;R`_izRh_#Vm0;?uo(I@X{}*BJ99&z}{C&pGjcq$Owr$(C?GxK}Zfx7Oo!rIc11A%IV@!c}W*hXAe z^ZORF%BM*cejPQQPUrPNbkC%t`-Hm!|R6!@IA( z!BYgjWcElvf7zUr{Z1kcD9e4$Qg_Q5Tt_J8$-kJDK=wxN>);rr99T3b{l{YPmhO9D zPsl@CC4WcyZ;Y?{g>^wL@evR_)-d-!DH0C0G)Ipg2ttbnm=qK+TPv_3m;@9EBg20a zB+M-TPlAM*gW>;9kZ9YJu{-(Y>CgYPW}uG~N743a7_5e(fNB~vJPRWaa_lan8%d++ zHl*q2)oK;EjAZhr?yc-&9w_3;y5C*I4R^#ZkB+9JH@;$;*3Sz|m=U3<*1e^D-Jt)H z1J^Qwp?(z|AP*kaT6jnKy~6uptW$;X@k>dIcF~QZi9$FYFhr}yfJxfPap4N&7)4SV z1WPv)Wrfts5eoxMpnIP+ui zq_NKi3mpfY>@ zFhB2B{Wo!S9oQk9=zg$B181-VxKOjMm{`nN%m9eWfaQd31$dV0=F!k0$hGSZpCK~} z=MK1#^X`p@a3*mpc~4K;?f_pz8mrK=6CN(Nx^z0x zq4voS5cDgmUucdfSjA*z9@7ED7So`G4Xjf)iU`D>8G}*8Un&~nz10J17?BZ7TXBZ? ztYKd^7~+>+9(6)OgF9Wfm;$uQ{BB&RITh_q*vG zzQ?0|gdce-_Z#}2p5N{pCxG6rw>)#g1TG_oIEa z^GF+K3R?iaxQ=TrDyhk61S7Go!L{ugVbVO04nzMp#(z<4PItrizjtJ#YK` z*YDGN@0;b%Yf}vAV6mzVF0`gWXyYSl>VB;sUoSVeC#{7c#nl?R0yyfGX7+;>at8p^ zzweck7nPGO1WwUtP+5ux*Ei_ zHO?In9}cHrqOB{r>L^1pkqJq<>@gUAr_`m6Q}wvHE4G(HjlsyJ)0CyZ+0qs0gxVzZ zB`s674!<=N$C5w3mfqS%%#HTW5<+sY>fKzW%ETYVLiP)E6AW{Q-V!y$yD`S6u~dkP zF(`(I)Zh|d(uJ?yQLGbZ-kAZ-=z>eR=KhdWm1J}sn0cR)Rlm!pi5}IYC`rZEhygE* z7@^PzgyicvT1zQ3cg`-&&_q)?WQ}YSkv@P2h`^?Auq6^B{@$LB#VJhD0MPbshgcPZ zDsWF<&~>QlB@2L2kTxe@7{eqK$~BL0dPhjO&@6Z_a?S`>dH0v}PmMf7+Lb{SHD+L( z0VFdTxA9G1t}yP?7;{2}bas{zPPDY7+-j&9~9)mkoD zR@^sbTwP_bFm|X@ISNYp@zV0C)hRa?-4ix)X4Fyes4$T@>K$S7qW-9FF^VIYVdjDxf8(u)ZOvmLJrDlF}A6qqF0~oXr(a@qIqC_RnONpzk>d^9K9$U|LGEW+*6XYfxTTFSC zC?fpulh7RllPRnzqGokkI%VU>TFc2+E6Dltf*i-kGgEe_FGQR{DjZa*WI1H`bm0 z%BeM#9-}T{3_YVtyVH+KDf!^E#}Zw7xpu5~P}EDXs|QuM41~y5p~K|`di&J4E#A=E zdvW9P{qb9kLlf>9KFf@Y-v9D^pRyKoE)f^t3sr4Ffn5rT)NNe`>_MG|^=|RW@fBFt z3^xaxs#?Qu0URc0l-QT9EZ)^293sMN#g__9;Pzz7!HeCv%bcv2ddLl8KCG;;R<(p< zFB!@ZcRMYjwQSvcR0qBB)%jV5ESiXMS~o@AC3!yRj_=Vn-Ga-=9YC8s!v^Xcq(uBA zgui6-FYO^_K+Y4eED%8R%CR^a6M1l3?5;xlsPCH10Pza&T$9U+M*%!)T#+H2)dFx~~|^J+#s+*Ua)5aGhMWfW?!Rl2DZbv;EZS@d)`JHD*0COC}*K)>tL zsHeEewej2i9~$;lr>TGa;BooO6^6UJK5m0*bsiZfJ%$!S~kcK*Z!@Kk8>f@R|o zI~WN#0AkNzZN1OD#^fA8?nsx?)OJJfGH{$*+z6dg!m0B;gfmBqy3DoXxvI_EFhMMB z-q5C;U}j#AJ8W+!|2ph(4$DkC-0Z(x^1+RP(DE9>Q`%QU_kz%{q%Rna;r9b0aceq6 zDrH+^sKa*4N-H-Jw6e6jl+ei{Xl$Xkm<(c{0WgFI4p!8znq5aZRj7^s1mckFLsHls zB0pp`v9v!rN-GyJ+gXAXXS%dsG4$8&>r30RQ1yY=nQyTd&~Kq?`wDAGL!-@iAI^uzvAmEU(7b_2Bv;=Y_tNn+Vv<=E&R^vexILyz}g;8CkVo1E%_K_3veD zWGZ3J|H>n(`>M~>Yd>vC5kA$*fyaMIn_thQhA&ZbUNbynMuj!PGu~vui1-?_)FfJX zQ^{sU>rGqZkhqfi4`b?6vH%#1Vl)j&K|2Ox$)fG7xYEcM4CoqylDhCI=nhK0Z+v?z z(mtQf+b33<#y&PO(dC<|{5I#(@%5U08qvi(EgIj;LKN{c@BEZuNoL78b7h@)aCY}? z{G%Fy>1S3tIBp^zYB;nn_HC-88k_%XVJ$7^l%2M;l2dlh%v=O4WtSYY{Ev-^b#jST zxlv~N|2-)*V>E+tgRz5Q0p|~40ROMU8(6X_Jzl4#Zd6qnR;7Es?&{spSO*pfld6}y0_f{_|QkHalLK_;U8)Kn6 z$Dv-u-TLJYP((xD_yfM9i=w_WhrF4s$Vx@l5Hzp=Th;47DXT)(v6;ezOHK@IsM!%y z{R|(u_6=V4i2ia2zul)dG^oEO*jtiaqevGWc)z~gKM%HqFS&5FdM51^0cO@a#th;y z!38%Rx#m(KOs?L_aLbk6r*lmof3vB7N&O@@Bb05G#2ed>OmxKI%DnMytsWFS#4Ze> z-dy1+!g+IFZumC|e(^tbW=(p%lRv}+v*72nIW2*3=lqakEaC`ZPOr4J9|fRtzfo7x znC;>dmZ^*M%LR+=Or;3O0jJ)!B`2RR)EaU1k6B`Ye?paB&0K5$*1w$;&&%f&{u=RU zI)^r$Xuqnst=P$A&ga4eo&UjuSPN63E$A8k>dP)8SE(dR!=@y^p}g)o7fs{c)%pa< zx}rQK-OOu-JGZ_ZmWZR36~lB*4sgOP&t96#+aCA=v=_7={0BOiwoD9;0K&kK#<&88 z+8W{kb_V%B{VQqyVDSG@U-=I;a9YPU4wv2Ot44pGAnA9vNq3z@AII)Y>k03SD*sfbR3b;U?EOV~w2P3c)I;1b28kIKktn|1 zfDj+Tppi>ZJSBQQ31PW?P#mK_u1feuw3mfUB684$$f0E_+XkpaEN!nKfV=gN&U6{U zC2=Oi;U^p}M2s}`1%ZwlMH|8cS3UePkx{jYK46Jr0m`IfcFdnL&!;(y1I#`NPf*62 z1O$CU?5%duE(xvVxKHp-@aoNeE9%c62`^7g_GZFb74Re8{yuA=ptl;%Q)ZGESZk>y zj^;Wib3qBO6r6eUO@ir}{g{*#qcPQkJr2Z# zi*{xp_4A#U2JJD3$(n8uVyE~gbJMXVKBNtx{yp2!b6N4yB5m z6oZDLSfXpjRXZ`oHGol6m$h1h4*Q2hW@l4V0n(8_^^}iViB!D_q(`brAYG4LTqo6M zWrBcGhn*4ztr2rD2*$nz2@PF&7Zi-T^=I{G*8k^Y9f+&pU=Xpgzvv?XSq-%QLZ^y6 z5tr14R%+js9-x-gMUB>iSX`Bzd6Qh$gWZIYvKj(kSsog`3|DE%lomA&DyF6!YC4MQ z^V3CX1)cqhSV;!-Or$0~5j$0<#l-#vVjM%21)!_Nan9+q^Vxqrj{3c=bKGJAB>Wz9DJ(&J{AKbI$r~h`^i3=krwLCuM zYbl?p3#QfNbiWi~udry~ZyxZslwYEbaWGC3txiT_6b%u3bs9=#pcb0pEc=}iV>r|F zm>lUM(kf#*6S@WU9bbxW%infOM)Gk^qPNU50Fd96$0zyLZEJNOefM&Au|k-v|9;uK zot&0;4;!rie!V_^b7E$j~o$t?1K|W^KSW z1QlB|vOF8!axCpBTp^1)6alG*U(xi4;gUX?0z z12#^CAH5X1F?E2BU>{1>4r1XokOZL*iF;j&BA&h%KGWD&-RFF@F#BE0eKYH>I+bi$ zWt%LhlS;5(geT`1J^z0As~LaNN;vGqZ3 zd|JLoQT{2JYyw_MK>9hB9$EU*7y0p;0#K_HSpkn=QJ%)GY7I5VNbgHTM}@Ezr!feW zJ`(Q|a+DD=zxx7Y3643)osGj408{IiU}e`S38~CIXy|7K$cA*%W;QqdEdgt5o}xq@ zPfa!do1+CGWAi0$wH|MV(IH{QUX^T$ib{0y6I!wbtKhJbwmZ-LVV0)^D+RkK24p0^ ze=Rv-egYjPXhD-qnlec}N|}|aQLdn3gl0TvSc&X4Gq`6uwJ_YA zb?$35b2LjNLeO(bwX7jXWz6k=?KgeXLe(1Lg62wvw>oDTQs{ zM5>--wT!0gf>b*N`Q`7*1VscXC~#KqHO7(w9Yqu#CmKDnd(SQcCvFP>F^BmAwM+tHyrxoMl*ihk>8M=oP=;9^V(run z%KW5V8bGKlAFa!r74j&6K0UfP@qaxXH_#3l#%MT+o6+PBG45#kXKiuFwQ>tEQ z*dTf-d4it68yy~E(#Q^>@7iXnofEQ!&piBPiZ3-40+f3F`TL(1VJ8UsFU>cfK`@T= zzD>ZT{Bak=e}ch2Kw4@pt3zlxiE*)7{9qFcUG~fGuSg2@Ssp=&+)2G63IU=VWZZzH zij({v2K9Jzlouf>X$u?Qit=@xeHE*7<&DN?VftZDl9ebRt#?rRxV5Xdze#-*X(2j@ z8GWK!0u78fxT((C6P!h}^8Ph9n;=%x@M!+%93aJ#rIJv~fMUx`x~8@hJP4Q+8&6>x zySX-}C79wrp?b zzl%DhinT+NJ_Py9ZVNANJffkK$-xg*npO?K)uE$?HOZ`{z=nUTASb*@7VU<~I{74< zrU}j|o5V(6i{LgymdO_B1-T~sc!%VQY=d2*Yf@Df;J-Fb+r&lk|I@I}Hr^uHBHLh_ zXq#k{WwJrKLH=LUOx9tSF5j3(~I()_^MIUa=WM^ zt7A(FKk%pkQW@_O2Sb^fXGp77xa%i{1XU}^niqitqer>%E(1ss{o|#yt-)4s!s*$4 zcQBRqDWGeOgykACai>f3x}K)BpNh)^LpbF&b)}ifUGwykGpr?GR2cU+o1zDw)1==W z9Kn;99e*d5|BT}mByWb`M5q&$o{o7QVTY|og1=|l=+C`Z6OvWf*p|yoqsB$@l&i{G zW<*n7LZ!tAdmOj)n@WuxU6GW1`l$6CtDKXljRzwp@IzeKfbHaI=i+o3AShq06F&{< zQ9pd4!(P?;4rBp_Vg4+bZj0J#MA(?zIPeEO6^~=5FomTDNm{|DgiTQ*dswxrVJ2UC zVxW!Sz9Rh|H1ynfzi9uACeJbnp1`k<%;TT*teTaVTs=^{d3-m0JL>^NIxnD3Xif5K zSIVH;`QWPd)zJ8S4`S?H05DwKJd-_QbF4e9AFf)hFaB0pEfG9%M2 zh<61lNS8_L&0dWzjlR3Q=Dro-bNf^iQqf|ZmEl?oJV|4LH?dEHT1T4KKK6WWT(PfC z#<;)AsujCG{LrA9fM`)psP2$=tBbBrOB-UN&)4?ER1ULkuB162UxM)UZ#V7j5yISK zKa^cuqjmtBJd5pb%hMs}Iv--ukoLLooV6OP7c{Ol%cOrgGD$;Ltn|w0%15dYg*)BE z1V=AAjs0;xO=+l%R~{VrYiIiP{oE|0HtkK?6>`L}Kg&YncSO13og?pEh&vvR#k-VNXMsd4TUxd$}d8 zBy4n#=^g^|`v#-GzM6YO9q`YjjgaycLH4#qw=M|5%y46 zo=4{|HTC%yR67*(KqL8MEa|dUuI5I`D&ULksr`{ z!cT=#-rFWx6oSY!KM5{|#lYdu9dic<~$&BY@?queazzH~@8kA%Q8{ST0Lao}DW2JmHzQ5-AO9{Qgg|y#Ntgi) zed3tG;s$)<0I$D$5zPF4Wvw1tt};e=Qj0hg`TmF( z!b;*TvV&20_&c}{XP(%o@a-Pj7`j3x4^gCs{FSFP{RK8Ze!y?VKfn zKDzTsRmLN!dXQU^by0{si7#uiPGdN0l0+3rNUJO;AsAovvUp>8IzmVfW5;_b97yl* zXg^as3vX;%XmE7A-|c+&-fTvR-T)s&J(FZ)WP%lH^cM`PV!tY7mLz5Oj(;W(Cgg@P zJ31<^c90TNA9)d5_v*t22QXBg7TTGfMO=fgmQTyW zC#__l>z!Q=nts?_$txkIGS3^r`|sPv?3MkB(*4)uVL$FcF5sMVoYbX9hIEE^+3XUL z35ZfKHIb)9X+_uOEC6y9NlGBT5lQ@_|Dhq{=eyrqe}-Or<$7=F55HD0TA;W0y^q<8EG}z9CS{^RnOy z0uxkL?H56GSu>3wSfctHtI9K>q!)Kc@UN3ri-7SVMgREUPGcRdbq_>O8s4kAq1OG% zKoSOHp#G4nDG^xO%Ps3`EXz6&O4H7eWlxcfLk|lG9U#Ds7%^zI!`J#uqH(Xp0)lDS zwtAsCTMy9Yt-*1QO3+iOh!SqaJRDH_;PQJ|#=_xnllQZ%rSCktE>5f;u@?Hx?A znesX4Pqc-?rt(iH^>r;~a!Q@K4GtSxGKoZN8iXQ5TcqW56bfFSN+d)zU?mNtC5va? z(iXtN4)DyLI!=0d$klqq4Fn@%73_bZ!C} zX`?dh9TJM^*6*xs&iN(Y8G<)3yCN5XF5@izAHdIngU3|yQHi``36zV4M=B2UuH|By z?;!j(wX3W+$xaU9cgdMCx<9FNd~`%0GM<#oqM9iPAF9)s|JQsU>f6`K+rNYT>ss)^ zgBr+qW(g!8m6WcQ^_~4Lj<0cks6>$=SjKe0oL>aAHG8yXf~^tBgF6O=&fyi63gQ_) zC;-7F;W{~g0%IPjHCrwlVfN_3rO!adCk@dy&Nff!fA6f;K?$}(4-n6P$_l9)Cdi3q zT6_w|lPPd|f{&&{?*Aa-&TF8!%u9cHS|H&*uj3R|;RH^Smbza@1F#E8O?e z-vU9iem&oG9~Mb7*r4Ocg;ux()-}{jD)oi2bxPu2rW?AvirI>=Gh{jMn`{XaGV7@4 zT~?CJ+EchMUVQD26c6pN?Uu{P_Jr+L3hvp$PyyItt(Lmuq_RQP>Hi|XHngMW^@ad6 z`U3xd(CFuOeM6182pHXGqPTqRx#l4OhjEBdmC5Wk> zIyH{NdIJE)@COLAF>~?SD(r{A`0t6rGC*%cv3eDl$km9|q) z55B%^w=O_W4A) zRnIDc3k6|pfC0&1Qed|wAxf_AqAH>wRY)og9lHx8i1n4M$j%cqX7K~O5V?Yqk@G81 zJ%e)xryn@~VRbE(-1LK`!VCTE<@`31rN{cExt+*mwXz`MW%!QrY#lkY_~Z}xfir|9 zq-E5{^ymkJ_W^2*KCw*mNmW6=F_YS=K?8jy|0-HpT1T&n+Xz31bCaE%mKe=&^Z0t^~8+W0>?gOQD ztLUtZS{_zrPgG*!z9}+sBuYR!*H{ZbO-@7_A5M%JqbKl;gzaHOy8!_|pza5s8BrSp zUv??pW)5y}|I?S27+7#Bbl3k1SVJlwr}+_J9#du8F0D&LZhop5Zr-Topi~#HrflZb)`RC@g=aSqb;fd~|-FNd~hAU;<%951}fsYyfAD zn6d|D`hpX{szhMbBp4k4DG@q?l8QY<%R>fXMgTjiX9Dh*8_m@_3BEsTI<_7*Ha_>P zUe5hEnl5^`H@_~dUY@?}D%@*%h5P}H?~~V^TkN&Moo#S$w1^L{uo|BS0 z6UP-Pbq#=boL?>h85`YBo%}a|&CadXYXtZAyPq`wdn^0uzmp5TlI>aE2Z_xW!3jj` z^uehKUd5GH@t0+F_1AYN-6$6-vh-e;dT^p0&oXRem6Qg-Wrd~^PG|gNY9KAkU#=#S z`K0&Vx$>%uva+pEjUa(4K4F4#=WmN!Ute2KPwellH`fS&CsTlX8|UVweJ$X;8^%Sh z$T??{HXw{>#_)14^Fha$w>N^!h0)K%2p$jQ!8B9DCv7)Hf;C6;HMjx+{cB@VedneW zX7ITunJC6#oB@Jg@QiU8cqZ$Z0jT$c-Da1bScM-u6|?sr6Fg2?qXbYVv3st{Q-opj zIRo*g;Is}Pf>b2N6ge;4dVf1lUc1EqOg^dwvz%ruc>{h!{g{gc{~{UDpYij779}4l zQIRv7092EkCIB4@^{Pvc9E1sVCbi3lBGu}Z! zX03tFs`3D>fgUJ5jpk5A`T#+FyCyap)93|R44`TV*6RK53bysV{>#n5p0D|0@~hOV z`5hv2X=BivW;(Ik{@A;>w-@K)-MD?_+E>3c>+9mvzD5(5;YV|61JSTilxoNms$NMg z_QMviux zjOO-!TrdBCD&IRnH)-Ppn;b+*klq=@@d0AR5#FeE&b5AAc_S7z2D+Y2HHmJwr%BiV zD_wqBN5Yu=U#{n_Ws2e=+NnaR-Y1QaS~A+^SHmQTP!*+<0|CjuzA}Zb=Wc)@QimRs zOTOX3DSM)(lF)-!7%ZpDWeyaIXI!ay;ZLSo1OzGLO3+qf=QqfObhGwF^96{hK>;Sg zqUtPnx18+~x&(+g%<&UvNcD_qaxnTPj&-L}(bkU}B^TxbYLkcxPX=N#Ph;laJN}u>to=4KS+t-Lc$K{>ZD0T{*?_&Lm8GZ%3FrN`;V=+h`ta1k`V| zS!~WzeEUAQ_36>Ze4)3hkFdJhTJk)-*4lh~QO^Ikx*GN{+e@+gBs?F23$fZURWRuS zZ)7N~y=u`hvM9YxFx&f@{Kg_nH9D1)=PYw8^YK^@gz;u#8N1(73}~mA8t1>HaxCSu zH#UP{_G4#kwM~f$q;kSA(lDgYFATp-F*fHO%_4;q#U8f|$>>9ya#`6AvyI9uO=aZQ zy^S7&`KY68^G*oj)lTKGE!|Q6*FYwhS}L6_&f9Ac(P(QxkOsn;?M%g>kwD>KJ#YIQ(k;9wXrZ*D)_xbO`#a9cVYt?C$o{qjia>Jjjs?^4#z~gzMNmw%txZ{I~A?g zLnlR!3W{!}*0$%5q{`ZKb_ury(<KAVQ293mw>NFuJuvYS8Gct~3uD)SRoXBgtSg|3Rr+^TYg}iT(O_D^jU@x2-dwhGnc-hmV{B&0Zt2-=k>7Ax znvu|To87uF|`gB277ck0#}nCo<*sw}{w4ry*h;`|GT{MjEM zt^X^B$Cd`n0rn#R$;|M-PK#)0I~Pcx`n{;%QX-sP(ZI)L%uAY*x2h(sS6rfsCSzJ7 zHUuV3_wFpZ1W^WBJ5)YLw48mtar^c-3))Q6+2}s<$$Itr?!_Jv&;AJAdbW^?)f{Ln z6pj(Cn3(ZC>xx`5Q*V7ul(gl^r1^E|{K4RTF+~dTVu8uC4Se6D21J+Ue;VH}?@x&i zxb79hfbsz4UK+Li^;gSqkNL~ZN z1rgnX$uhzikZdvQ0GTAj;Q?dz$(|`VuFwU^nu*M$8B6S3*!uc!L3=>}c3j`P+E9c+ z8UPRHw+riI?Qi>!yOTr*>Be*3X(8rZv2m4vuPPi;D6xeHJ_CgVkI&cb6B!S^DMzw<-drZrhk|; zuOBqiL(Gti66h=c0*mIOQ{hgwUW*F!EnJlZ|Evo=K}^jpN=2j~3$+P@6z*KB3H!pn zV`ta9({#EE0JD)IQd!>|~&94!1 zs1OT!tP>H&w)u)NjLebu9SKJ5mj0uATQvEXIb@jqFQbE)a@OHsEGeCm$0modY-&It zgt16RHy-U_c{81%<5V-wJT`DP-@48eeCLjFSNT^rAS9H(wcSypF1*Ehki7bYzwu?2 zfzG%ym=S)6!*gbPX~RI(=J#n)=Cqo6!(t*OLnuSnn*cjV>o4}3X3qqUUjw_%Vq`9Z zb7uku(LAlv_^J3RR^VV5+OpsWH(w_k7u*1b4j;_eb3;*{QyO^(zK|e1iD^|3P$(yd z3n9oSfD~E?Z-8t@5UHWKa~U@X(BH*-Lw$VsdCaA32~s>wc&mDxCC~2n;sLvwUdWYN zis*|u!nCrm0k6e5^^RsuOp0~l+zb7H@q-i-JaaFr8n^O6n-Y-EXvgimuJrH~OJc38 zyzxd!xZ!t)iz(5Lhc_yT7f{>C2x1J;&N|mjz_8?TxTuazy(IspwIr))2F~BmE(PoF z3zcEQx*}5Bzb47V3rdY#f~O)W>Yh>^Pjt}(qotr4AV{xJTcnkHgVRI3m|On7#D-75C;(P3;U4$8mldr4KB2mn(_T-MT#POr_ z_gA+ZUb2fd4<86G%ZIyqm-8=Rus8WE1Ema7fPGKBr+eRsZM4(8THr(QQ{Tp67rb)E*fw3O zr4Cs<%O-ic#b?#l_oEp+;|IK|ydKgE3pItDO6-!*5XCvGe&#Vaz-|tjXf)y>8hdSp z2}wOqC!Xk~g6oW4;H7~tnKx|JmmkO4l=Kq5P3N~4x{x~}7>~HGmm4C+@$Tf}h#EVl z+$l_b+@>{lpG77OAeqgIC-c$Y3kpJ4FZ`TX6Qwhev+i|!1?hHty9Eh}%Deh6sa1zt zhk=wM=skrQ&j;JU7KMbmVdJtuHmJSAQZjzB`9hLMNw}^VdeI~)i^;0_cy}DG25;)A zN)R!1KoQO>WQz^nVwwmsH+8JAze|Y)sz01T+%XhYS(F7IP||u6G@i!I|LO(m&e7KS zjrpoySx1=`4!shEL`{h-F1FjgL2TU;&p51`iMq<6MUM{vss2C_Q*{p9Gjt;x5(!8Q>yzQV4jV6>O)B4s-Q12O(ra+)mBtun(nD2XpYQFo z$gNc|$!=p3?qQ^N-L-3x>`py&|d@i2IxjWbM5i~T_(2sGq=ZHyQ5 z+lualp~ZalO{k`ag3sqEruVo_d{?%~4Xhtb@@HKFJOjZ%fUAeg>=+9?UbBVNkQk@Z z;23yH;5N2m?46&yt_lG~dL~b2grPAapPkiMr z_{W#gs8Ds@qdD4kLK!3n#f4yp)PfnQ_6>Hle4;Y-_+|2ia`#4YrG%>Dcmv@(&g-Nm*8}6i7DJA&yOpc;d z?MvPJSahONr3+)(^fzPK?_8R$2}X9-Fw-|vF92i=#Q%)#5#Girecz-F<>)PqyzFN> zj0Tk|W@PQ7I__s|eY;0%#!!T`?U%^fo(L!&@g`04CWUtvoo2Aap?J*h6@>o)ogJG2 zr+l@lW^Xcq40g?0YnG?WLXM;@f~D>dkcCbDy3NZo3HF@(=ZJ&t$0zvg`6lOwjg$E%VFLajQ^xf;|9>tQ$&V{J?HSMwL_=Fl;L^d zK+ERB4w0S}(jtP0b%|q-_ZHBe4#ofk_1&DsH0PM+-Ptt3A(2J223i;99jwx3vCGbACd)h{YhZBo0#=2J?^L2?IUJ+-sbWnO~Jt;r=00PK5x2;{0~w z!1Rl!0X%aYh}s-(+r8}|w83thViNbi1Ko{-)Xeb~J7(DlC zIb7By+hJ(3pM6r|=T#YA?qO&q8Nmi_8=&0q)4GbmXg499iDQFZIo$UDd&TYlSuwn` z@>0$HKi2^$ha%2HI*Xt%TbwcIHofbN+S00B4(YYp+}$)xA&`^T@ZfXv=RMG8QP)^W zz&MCwmn`6Le0eraes@pW%bJgS;f*{H(rs4+#0upOkR}bzqzkgaRHF`ex<0&{XOy#3 z-|Teb*H3SE3CGA!V}0Dc@99kVj6FTl+y;Su6)plkWs(JIvR&)sbwhL({B(kdi1Hom zgDp!H;fyi`c{m9e!9o@y2Ji#J!nOJCJl#+D!EWqo1Iq#b;=5B{DhGo+V5oK%f)FCH zobo>d5-hPnG-AU_5}7HWAv*d7GZiP%KpXVjwN)kl_{&c{_=7 zx<%g(shC3i(sK-&j}%Vy)KP#)<*M*Ylgc{94wmE%oQDuf{a!rI;~KJdEP?8E{6^Df z?(+=6&mNSQ4ww+nC_c2*9%r@TeqFKUQkenbJdd#Z5li;7SqEH^imO?%h8gN4U|ndS z9~OTXsr;_>Gt}eT-2d0V)&2d&_3Gs9`|n>K5>c}>*f9OR9RVMu&+iawtbb0G2=arX z|8zJvs~0kna;j-%Jh!TsK15(6+(MEpI;GQfDmih_Jp>HML(>kF={b-Y+}Z_{&Ud$Q zL>yDkT=})yq#78$U%JN3;4xK4jrRZu%kH87%U`np7fuht^1uFK3~TB-|K&jSJyCx} z!dG~t`&SQ3nsr@5)SqKnx?xDk5m9Q;Xuy^Q=vCKnbCAK+@uZOV?-M`Sc6KSIsdK+E zyeW9lp5x>`Sy&uPOZ4o|DP>qt@|q}>K>n@avD1N_pqEFzwe?7OP5!X#(iu4?%;ttq zH+Z>a>#<7GhGRDX@W6lWfh6FaVL{d!l<~$D%D}pg4xHJ+11Vf18TQd4k!@$!ckS^V z-3IA-KQ$ckx#GPBwBNTGNH{>;q-_^DFZSDy2;_kZ;Qs68>&FyE6>%X7JlhOz{NR+$ zTiIh_U7DEz79i3$G;*k0H3zfoXHI9>u6_nKnPPuo3*LwV#J*JjhJVCw0n?o0;WqyQ z7Vj&;6>33+oHUU?F;A6#_+azKRWwALiUI~!oFIfVe6>PgiuA7N)DFqg%(Rh8B9Lx3 zK|RKBr7{;Hp;bw^Pi2G}Q1VE$7*ef%ytR%ECqy@@^`OeqB0iTK1HUs(joKJrK61G| zAz0kK@LVT4TY02^gCtZC0tu!R zmdRnNsZ7O_pHC~4-Re(MB@-6-`Y%Y_7dHHwwN|kW5X?U(3fZI0S^v9=(#HK>A22}N zG5--Vw?5ii*XPa);p&_O?~|_ctHqO-72$fHBl4yZkU%=4cLlcLz`K!Nz$HD1aq2H^ zmA%CAS^*0LlD&IOO7Wx1FZ6EUu_GydL^2FCVLk>aj_15!pmI>m_R~>9oq#E}@#JK7 zd6#^~EwS&CM4OiHI!W0Rw}1PHypU}v%Cc4;(3Es7hp6U8h8VV0&xaU_3Gh|+4@Loz z;4_K_;BTSVK(ZEeGE=hf7a5TA>duysR%ii%6feojQ^3)bfzgU?ws=CYU zz>}y~;jqU@8GFY}phkyiyJfI;oy|dPCWO0kc$L%MlK#GvYMGPkLp@ep;}kvinZ7Zv z|M{y;c+UGX7lMm8dYiAfd;%n((XBobJ+u)BH&V!6i5wzRs#rHg3pWseHZ9(%LfNQb z86dNpEXsYIICI-pc8rtQFbCOM)uTDa!hKi46+h| zxee)*;~CYCsaJe}6oQ%D=r{;A>Ov59diQbm9@OdAa&GJ?VqPXq-?ala zRWvTum{e|?kGDVFsqX_+eL+z)xtAEe)}6L0dSSBhW*{vRKK}#9UPqS$r0bSdknCk8 zT6(S|b(4nH>}w1fR$+M^}i@BE{uOrS{`e)=6GuE1N{PpWzHuH(%){TnvyO&O6Aeae5Db$*th-S zgive@b;#U`zi$laLuYSu6TtqvHCH^@ZFqZ+6_qHGP}~i<|B6dUoVx>$1l$av}<^??q40HIay3x4=>T|*q;-k27-|~v3(8!!BU&M*nMSpz=R)bV8>7?E+i+1U>NCo)?vk| z5QE5uqA+rP&N>MhTq&*vj()Ap zxf!`7W=&Fd>qngQsyHUOoH#=p1xvl3;&l8%)@P25O5m`R1Z*Wq60yJUxm%in@LHz+ zsKGa&S}%TDyv#-ZuHz{c%d{2!4zDwoi^GHVD{rw3_KgSPTGB{iMv~RZ$`$MWDsg2s8!w{DdbWJrch_UP`hJ96h z%aJPyiexv6{~GE$IsNg=zL10KR!FB&yeAe`(ICKBr*V0OHyt&Q?C{GN4@H;&^%}7k z=V=-ITDmTr%Cf;@At_{%CxbrUh44F784-D!mC&R=7%@5nETa+gI0_$7BPt~`Bwfd1 zfBETmp%+kUb*RIWZe2P_GAf3}V_tsK+^dz<&3kt!>GBdt!cIyplTpWu7UQFwMQ17fL?puQYqk5dOR=XQH2W@;B&@JCh}8wYqv?upy_0-XhO$xz;w(h5 z0`dxfJGzMUVy(B3*@fWxYT@yzldk!!)g)Gw#p((_GOtIDDh8L3!{7`6p zvnPybLr4A$rm+G?Xpn2}%p8b?2Y0hKM^Hfb8Q{s4)#uwsCk(LR&ea;-Rx$wM(5}lZ zfw^l4PI~$I5EKr>0yVUSaJwLC97_M6@n=?_h+VO%7e1S7V(UsIy@dN~;$%-8D%S#v z8255S#bo7&;nv(cB-%uti95Y&+V=IE8H>oCy%k0Xf4U1}Q2Ql_qHq$`&s zBXv#6AkU6)6_wdDt8Yw><#!u1xfp)3>UZ*Zi)st)6bL?A6l=yL4|~mM$*tzbidP(45Ki>M<6j&Xat!F(tbl zWf-jCh0}3u2k+d1>~{ss3`^njVPL%{OC~nRVd(Akg)gQXe$h5s)Cj3pX`fl_2u^8a zG@HubNr0s9JGOFx=X57Te~=D(kPv8Ee{0R@B310(YfOYzLeD|L16r^M%|Mp_X`9j9R(+`@>z@2X2lc841rhDPhI8xXn?U~Eo?#D_rbN)SpQi{ zmKHxY`TVO)GSx_GCxvBGoF>_|3qnibN{X8G)2gK42>8x{AWv-K_tG7h^5afJM-p>) zLup)mHI=sU)h`z!*~7EPAPdo=)b$!|mfd2*kzir6fHM;~Ffk>AiRrHKMOF04C~jRG zC7{R;j(lBE?e;De{hld}SFMyV{dDxRl+-=(8_+_v6dQgoPU!&_akS=lDGW(ghjE#J z5iBlh%J3Hx;$Y}GW9-mmfI7pAzN{8}cFtHjhd~N%LsOu`So($JQofw*bq|AinNa`sDPIF(P_BhiGpvE*!0Nwc=S+ z2w1ZD>R7?KEzHl&X3B_>^XmM0H*U*eb1LK6lYwUVCR}@iA^^96wUG@#FvubuCG5_o z1wd%_V;Uu1-ag!%RvQ`dCDOUvPt2%iZ(V-D8jf=CygyCH9+~rv zoO9oJIlR-j)GqZCh3Aa+GeoR6jfHJ3o{ssRc5dV;m12iLc zK2^`Kw3doTqEQ$a_7JZC{1I`s__=WD@ziwHM#;XEpasB=wvUwfji)ac+8S1ocE%B8 z2NR_t_qgs^duL z<>V>Hn#O^_(k$u(gVc<`#F#-eol2Bo+k=UCCk~E^Y#6KA3aMumx?q9~tzdvFHie0l z+O;r3EJn((#hG<)7O7D64rE1tx%hf>O&RUFrkk7tVIohgCaV45&1!!Z!I83CeEEK& zja<-vq;xHwFxnjzYhgX)>>vuA2qsFk;#wN_m^_p49A}EI2`d$l{GJP*3=2 z7$usND%%)h)?Wm2nrRE$PNYoOB9w`*+?B2>BYVdJ`U_PjyF?gSz@Yd$Ort!SY#Tb0 zZHmR&z8N>8^mB&B4C_1Nu^B_jYRUafGz~V|RK@hRv&{L8tC}wxG76|rvQCQs09~g( zwC7|ai5MTSrT_PJ%^<*DqFAPoB_UEwD*|?enonp7foolZ+P##beRxJxl;p^D7wmw* zLfdHFrWwNmW@m|a5s5x=Ua=Pg=%q^(t7 zSsd^Bx4kG=UA1Y=@`1-u?>46I%kGzh@XcQoNm3Dmbq%IT>6P1S2&NH*zW#QLD<|(h z_O~m0pu(`mU3RvuPH#@mzg>$|__r!U8nmF0icmWYp}zCxWLeoKRR6`p$4*VE5oK3QxXO8-$g z#1HczEVZk|6?O;?zYb{s`2BWM#s4Ke`I^)I0n{kTwCu8U3;y;dc=cKL`5L(vlrhBfC3q>7p`&`^@Ar~rs<6oy@V|-E5<*d~+|&RjdMuI^HFW$(WZRXsmF6-0 z9BSIGGxIb0_XBs#1+uQ1-EU302ti51hP@F_6DNHsO>oJl)tJ;8`XEw}CHbdXtzP97 zgLGD%#ediyKbwCBgc0%e(v*WA52tV%Dgcw+O&@v&7(_+td8{93+)gPULH-Juk`UM| zGaNWSC?t0p`YcZv=yQo=bAp%ofJwO0NSZNqG=^XVA&;hEOxZE`60yoCB`WZ0#&`ET z37FFU0)89O_(iTil@sGbBiOf24q@hrF-HN43^Az@pOR&WnU<}I$PQKX=K$@%GYvS- z7mrjwAslO3>W;BcW{`;Hy7LVg z|AaB#PwZLNpN?n?x6A}bft1Ej#J_-0vDnZq3%DS~#!&8%^~D%MQr`6P><-x>(1by; ze6yP5tVYooq0&dM2;OymV2^xie$+UTI!&>A%|AzHh;%;pr5;rAJ7ht7pi~VpNw@0v zb8i*ER1VMzc9fBIhHumQ9`KHjd>}CuzVJ0Z*%04l@<#TZ%vlpK)BK zUJ;(3U&@gxS1L%e;0ABWv(o|G?rYHkYtB1e4fV=n*=?wV20II71ko2t+fYuBMQd;b zZP4sXLR8n(r)+_^Kg;HMhb#~Du3)x)=KF5-a-Z!BX2O$*?93b_P6%nF1^AJ%QNKsy zTKMdMzDmKc>vn-l)CFNVSkD7zTnovk4JKc$@@x;*Wc^vhWGp({P6DXfjZ zeht#^S!%qyZZ+D4w$l)3hDF@)J(V^s`LS;rUD0zXQXruC6W1Y906HsC0N+98T~Mc{ z39Bpr=XVP-A!*^CtPdO7OU$)HQcJ$_kLbOql`AZWO2du+C~mSSK2CRkiOJ7q>#S2V-Rb?JuGo5$gu`!<&`ZBPGJs=PhYCFM zl=~C@o|=q@FD2XGM+Y3diI{k)2%78P&-Qw$`O<+ILxiF0Orrxn#F=lIJO>iFdd2z! z`<96Uhx+Q@qaJ`0&o8D#n(t#ngkVj3G-K-^N_m;W`Yy5{MVl!G{*ea^v+}&V#jpD| zwHubb<*@+K$UenIR{$QIqQ-jcLQUwU3t7Afsl*vz#}MfuF1oK6|LQ)RS|m{t)JGJe zDsu?O=i*7C-|lnV;`u|?eWA1Ebd5zkLJZY<;A`W7*#vUTW((leXy|vTJ;8@Fn&2Dj zkc70hv*4prql9BJP3Yl4v6;`P#V!TIIMqb-!-U{rX@pBQpxsS2uiqJ7T{b~AcE>TC z)+ONc|EZpjAaYg6!CF1_Oi)7?L|9+UK!n2(JBD4C?e8f@&0qMPfQbRxsl^&fria+R zeX)(m0|spFUfy|huN%~DauVb^15)SeeysQifxbaCq=p(Ia2Dy4h${xWiIP2cTMaGe zyprn#EpHEC*{?!kXtTvoozUW!3HBj6KqX4(35v44~ubBWyh%>`r@Np}-w-^j`0XC>X4oS;M`1<{L^Ki~)C> z7L*c>flb7<2BE-^g}9c~P|~XE$$=LCy1on?bB+Oghgu4~rd^S&MO1fAi}^W?Q|S%a zeiZE6l?jI|u4s=)2oW?fqydks$G_*!SNWly-~vq(;}TwFda2zmr517K(zS0uZ-FKS zXW%!JJ5bnD{KZQ==z2arlgt<+?(zPodOjwe^xCu&dI&qg)AkDw_PBae)-w5Ln3CY> zD8^k!jc3ia;fi)%+9wU0iZ>EaPI2D!3a4VK=)1^@nOW5tc7^&sy9}QxPdEh~nwg)h zMRE1{_nxjNM^Oi?p@asn_D#bsy{ldN!7le6%(=`Z>elD|RBB~04G|in5a8$E$&O%vloy_^&#ri`EME zZZ5bJu4c@_zpgpZ;WP}ZPlv2CVf}^K?{PY^wOWaY1aRma__80tgA({D<*T8Xqx_e-o?xH z+sjfT*S=3Upvz{rqJJ`W_76-Xkz&Q@1M)-GX629Q28cnwyOx~LT_A!+w(!j!K_DWM zGV^^1*73AE(5-tZ*aID@DQg_7D(UAI@xglYTtoK6IIjfs>6C=65eX^RQ^94CVJW&@9GE|HrW$`$n>%NiD}U&4M4;H3)A1QS{pr{v*_~RNv;X5)EB{K7 z55}z{1mnP+LCg=*P%yvRNB_+8+mFG)MbkmMoIMoB#c)`h5l-H{x~R94`HDhHkuL45#JNM?b4EX~}+%UyS9D0^^5xDHeN zDSIRY9dll{IpQX>G32UtF_uKt4l|L5#Z^H&tqI!K$&fz>*eE=|0e4HCkt+PrnBZ4T zn@f}rezh~`<7b)a%5xt9m&97gg_Hm0y}?0+qY<%jnk`Jq_dxr7%r#S3%OWA_f#Ypt z>BdeA+!rB{p;}2?7mho?XKazgR3R5a+ z_F7|1G!+=12QJQSc)9TlyuC&DX0sa}We4k;TiP zP(b?RKo`_+Pai8~Zg@t+kS8*4@|!2mO%;!;QfU{?KaBajrPvgo$*0awoqm^j;R`4L z$ljh9rT9)3x8A(xA&-$ph>ppDvU6cai^*txn6&C*06FT_);ikS_&2g3bEX?<=CI78 zv^oo8LXtUNXRsZMcogwcXLzbO`{kXGy3c>XQ|$JnH-#0L{NhUwosyfBdeRBWXY&h6 zJbz%a)Wfid`(-BUzNXvtyz-V5dA&;HD|`3tjR7c&v^>30Q^szdIvZPAVm*bhVxJdl zVutsU17y_5{=t*u%OWW*+Jax-DZ#vG7Cj)dYGt43(;g77oNWpQ)%qtpb+Wu@vlU}$ z*?A6A@lqI=BF6c3xMIP;>qx3@3t4hbq+04B)1_SMZEn6lnbg}-Y1W|Qpo=xn9N5aV zT|UFy0DQSes1;kpx_fUnxI40XPv4pdS1|Pb1Ui}t$VCewZ^WSrr=c{}R;6y%fN$Ed zjpt=q6=m?`93}^6G`k6a9!NN@z9>}m!YtCxumiH9I1yX4d${&7BCEQWHE?v6_z>8G z6;|<(3wkeHo=*&Ud|Iyhb7nofIB;XGpyzuBkDFi90Mzd|63OV#s3fF9M$^-aoa3ZU zz^Glv6*cDT^RQTM-N&{b5W0k3Sf_O z2=JeC2*@?e2(@;EVyHs=B24T(UxV-XF=s_r#|?sPDdK{uiE8}*l7*#`y6!qWooMjq zW}T2WV4}D#PaTHNVfoaNT1DmeuI$bRPV46K z*(RF2B#DIe4>d=+9_IEy+I5A`I|PtpM3A{PKr;_&4Z*{u8|ISuv-9)mcXV_Ue-EAC za{V-NS~i{8+fO0k38-d`EFbb3jgmGsTlchc)UQ&%TsOJk_VDnoAcue@B<%+&+U@ga zBU}5D?ZL4)#$bhFkUwUuwhs>iwnr)9KcjQe^lD^pFm{(r-QBO|>n*o`zM7wS<5wo_ zQx*u%JuP#!tdWb0;Y2;D`}7fO_~cTJR!Rb(wIL7dP}_z$bcQ3 zepUcraFaBfC>(S%lq5Qzo*S77sJC* z?dy7-Nsd)g2nilw_}9Sz_N6xg%7=JOfs*g_n?6oW8`-uv?2ktIm%4$(u%p4vPdt)} zJE{dDpyazE0nQ+0jS7$&;bf8V2J;NbbY;XJWXKRTF=87qt_%1&4T^)A)Me`O7)7s!53b7QU~r^yN}4Qa zSaflihAdSjeQY_P1zeOB2`BQOas5&^P;O#$P;wD^T)w&sir1RJL>x%;f*nl>=1=8P zcAi)g77$YL;KLYZ=pcQ{R0ggaBAH)m*iD*(#a-&BQbGZAvH6h+4w|k~BBATKdDrY} zLeKyX>=*;4p$mf>Mwyy_$JTs}RTUCuS%}8{+OKHqBf~OT?#L33XaPzKe8xn2n|j}w z?B5tHZUkh24Qk}3qkb;Fn+vo4A}du6$&3x$o@ZX{&t z)ToLrzBhC!oazV#kW+offeph#3sl@K?#n{Ml#LGrij}msKducKb_69_4hm1ZgFH4W zm4L#*HNpfa)o|gOfG4w^;{~UeIHd6p=6mw+;rZ|(+(Qt_4;sNmvPK+B~)^ zsTd{)2f@*R#?4&OvOw99jbQB`mR%ov&46KE8A7{G2hl7bmscn7pep8Gz)9vA0SHu| zRWGc8(}L|#y&{k_`geRD%!Le!UjZ-uXKKOHE{RhyAz`V7bL_8|%n5>ylm5s^;}oVWz$kS3@HZeGSsdc+j)$~6L@O> z3HwA_?PLOx{!v;KK>iaTBmGS8)_+dxTgT43;Z42e{@HER^YQlA3TcaiIrCodJm3@h z5}H=?-xESA!6yV#>US1U7;ttj?o?22P-ix*oes-R=1Q zB}KdpX(MbQUk`Ff1v;3bhLh(@YCsqx$dVetjKj zsc|2KnG5{FTsm!-jgP#PAiI$Q@74pJUS#mjp*9k4qVNwjj{Cr=!xpuRdkZ#a7Fj|% z`Th`7R_h&5;pQ5~ImwBI1aLqHA)N7xQ-&*Lkbh51z$0o_YU4YfLzg%LBt!;z`TYjy zfY__a%&~R18pAihe<~l)rYf7_ z_pH9C;9Zc`eU1p4W)RzE5&QA2>Hy{bO1n|+bW_;c9m{nvQV7AESU^)DSVMzJzZkvl zDK5R6@fsBJNz>f^sK>>cU$uQMA4K3sp_x=Xs0&XD%m1czLDF6gL=qp+kYhz_;TUx{ z)6j?#Vwy*C{NYH2@S7|2uRKgi={y9D1t`T*IPGHT%VyX&;paU0d!m-)e2vi!!f#>E zmMRji_1Dyj=g zV!#>qO{!g+T<~4xAjg4$eQHk|MeNUzhQ02%n#;3y8?8gwS?tikp2ioIMoe`Z~(fnb;+TJ^OSw>~w zAD_JO#1!EBYg0b4joAaZs)&mHXkqfY$zSEM|2%o$Hb}}pqeV@qe88e$<0vHuZUGs)d;~AGTg-XF zi(WYng`&zUvrSk~YGS^HkVd&z&Z%*&XAu)J9BV>vttYoo#=1zIpDTE_3BFF;x%BEuY!Fqoh|Fl=MSay zC}b+Y)Murci{gzj)`%sar+n72cqeV~K(T%wP1wS%Hog*&O0y2fTh;-Jsyk^z7muEH zgL)wvSt$%a1-6&21W-5IE}(`rg_dO5FhDD!z((fEt3Zp;7{M#fD(y9;2w}Qqk!_8b zXiI=n$b(Cz%sjJ}Zv5FTv(N^2mY$_P*S6x2nKW4!C8@^JMz_ed@j;QH#cc1zCm5NK zxt8~*=7PmQ;1uAB$shy^OUNi-?+s(Y*LNf^-tZ?22bLRIGxw^3hqz~clB^B(EK<8B z?C_Xb;2HkDh$_*!pveb!lote5BhlMUOykNRgiL1Vy|(*0^pI1hMRG``7{Dr$3~nIZ z#M9F@L2pq<*dT+c;S-nQG1%M0X`wwbdyd&6UX`;8_(0V8&`MRsGxX3Tx#(*)~?L7$TR?kP9`j4f}9>T!azq7WVH`BnpjFF?rikQ=coy*6+o9)Y)Ox+z* zmFJL4Y~sX*kJW7G8ab5}<5;cNZs9r(K=htADw+2`}UJecUf0Z7;$+y?A|mp9eP~=uIYn zDbaHzRKMcAAxgs3QjVMdt+umAM)7jK1hyBepS5G}*$hy4XfynZC z9yT2!^T`zFC5d6|)dp+9Q9kdz>Y9PgM+R z|L(K7UW(vNj2g~z#Tg*FIcF~T1GJq39nW>~npoPLQ2`{z;W(b9Nuzv;5eMYG$sFpy zXV}KArrE5e9+%O*pe0W%Dc#7ch6 zad-@MM78D$E>>AIK!PL%TVi>4#OuiRt3O}1iSpO?vLEZU^HAwC*MYA201wx`TLcLU ztt%SqD*7Y&R??Bfa79#T|JcOJ^b^pB`*PW!^&Q4F3v$hJJt*{JjuFgUKrVj1%3eTu zS}o*6c!8#B+}-5NMcmg9e-4oPE?5VdBp%SmB?%(nFFMb08VSpG+~X|MdU=+wIX zW5^<}mBK$iKiQY&|G}!o3(RYDK2xDt(dqFZYb`(BJn<0x6|XCoiyPm*GVIF?7;dF6h~?6WX5X90vO4aJu-2l{yxV)&Oh=99bp zfO1h72p7{$BJ4NWDTu8|5Uo_%6E}&S?*Y7N3JwyxP3Xo560raWh-aY_e@<{d3l6@2 z#{DpQh~Vwu()H{MM-RnoEMa5urt^cfO5ar4-=MCHf^mHSxu@i1H)6I_;J?)L5g-=g z*9RAgYY7-e;Mk=<13F)3Skx~~Rb1=A&;_OW!g|UB!7wCA ztt!AwgGvK?JXk@N712EJ0@Ioay6~{T zOr#r9aBWAcy1Y(iNvKwtTSB=74J8=a#He_?s_0X;T}E%rMX6|WM5)Gr1Uv`uiuuSh z5r30qkqBhh7a4b80-GLFMCVy!gQhsbG!w8;Ypmx`os~l=)ID!kW1w^fFaPZFv>P=F zBxr#0mL=m{05OA1avbLNSuG5HTFSAWsnCsaSwOb$_S1t69M~M4b2PJnGx1ynO^LhA zQ84Y-=_|@a^5ETN3H0LtxL4>ZSYqBmkC%A=xO1ZdEc;=kWn%osBiC4l#R2q-qB(7xzg^> z2{#6EQ$lAW46diFfEzlu@i-)+D&27%c!S^o?uRr)wiUs=`~wO7d&uJ&Ba~{nS&PwW zx}+RKQnGr+oJ#K7AeX2>C8K)zp^*3QZyh{|SE&}1KJFeK>@Ww{ z2i;m@AAkk?OvfLaWUrZvtUBVq9}2owfUv|^oCNks_0$_62b*8fo+=R) za*IDR$Okt#3q~!3_+DG!(JUj8f^>4T6m821JpHl#y%4Dxxu{@+DDXF=h6)BM(T+d!k<28o?8(gcoO+(5yrpR#7bqCQp{YaX7PJ z7%DDVbP;OjirXv6*1i!u>8;#2AQ?$Kwje`lg(WmaTQiXkCrc$PfFVs&qAWm)z=in% z2+_|D)061%rwY|T;IY5<8&XM70`^ppumcCO`PN3J@8eX|RB>eBwknkmbs@B~{+*{S z32AGj%nG)c<5J>Z)S-U zqLtYkwt171b}BrV2Yj1_R6GX+qAH9Fc-g3qGh`jl7&z*t7v!0Q;nRn)*Dz(RV()bM zU4ldX%ztXj%9BS$TSz+EKIO(1J*g6_ts(Mnw%g>E(c$6rp!GCA!`0PfXX%7$k%O89 z=i}yI&a6GD_6N_*kVyNbHd=vIw9Glp)5Re+t$SP{=B2scmCVr^EcCSxjhMeeflBbr za|E$b1W<~>q|m?de(TB4^>IBr>@Gexg3EY!A9CvshW)f^XZ$96m@rWj5%OehT1JYe z!WapQGUvFCo6jv_ngb{mLW_M7h{zD2kz06R>W2s3YT)=}d+9ca9+cXj2Z3e!*D)c_ z9y(ykD7=r~d(=i>ZEai|&~D9N104=YE)#hWOX*O}%C&~wa4e0SH|uW-VgZ2*_q=G* zEz@P-4Hk^GALE@8@e4;=GdaneydoqL8;mWA7VE8a$gSsl?Oc`1wWB|ng~W?lY4Xsn z4|O6>6(e=Fly}u}Bn(H~cAHdj+7PPfkxUa4XhTZOyPizpioEs69lcq-ff08mByO~o zPwybEUe0ox#q5z|2Axg~s?C@Z<&4gGZLnS@)XXX!TDrx?4*tp`WfR*>1-1H>*3j&% zy2uvCr5rq*NZK<(SX-#7Y^9C#w25NhlJPK7qCuIV^M;91jE+{71 zGS1Zn$?Ny3fS4LvpECEgKzcicT53X}o;NSv7i~kFmm;B9i*M_}tuWRH{@Cv2_c?Fd z9e9hpJGEat9pes67&5|DvaUpw8?b4dd(rWvyU3-WA-=xbGO6;m-V7o`A>AT_C!{@^? zgcWP4>hJhMDP`qKC*ElGT38I|jk+>5qz)BS|2@TRQ^x9XRs7d_PsLw5aA>9Q0zAFD zFW>?NyQ!)>y$^0L=B>W9y}d>06F7m(m+mMur{M6v$QU^6LJZkMt$HY~j4mjJqDni4 z%u|C_H{d1f0|cerv}K^o13p)gyOu0AKy&2w`EvS}1HV~srYR~>`RCf+wQ@_S8^LLQ z4JSi()yyk z{jY_5BOu!cgrxl;m~EI6VM3YlCIJ#QF{GpZcTe15{OkzhZEW!Q2|u|u&->dR_|!U-QxjyA zQ>DtK2W9ZcAGEy7=V~lcGBEt|rFC8+3ajqub*&hIPoEG*Wy9!nly!|2a!&mI))+JR%h=MwYMTCjuOL` zja*a561xyNKhobELR|$aq10z-c&@2U>@lfDiy;^|;Cqe33pq3H*yI_!92S$3(?(JX zmGI-KBV6`CgA@)8GsxPP{fUHr%6y2LDU{Hi!vB|MUMhX zd}WBgLXTzwN(SK6;fqu~D)gX~T3XfeQ84;;q7{-5wGxapDc}Z+cxu5G9Ap;xf0Q|I zOG(VuM4H&*5p@}AwID|}DpacBEKFdUrvdOolzZWG1!PS5JsoB2Q#yV|?2U>ab|n~y z3jmA6od}{aCyp66!g5}iFM}BP1E+Trp?u-#JX}1;4;@?~|_kSt&RGkQS zdK99@yyb>dXHSEc#PGBrm&4%AsvyThmy{FTP^FWu}eDJGP`P=`<2?7x5GfMlxmO6<)Drrj?m zU-;3^*FQ{s4P={v>lfXS+mS;rXyzaBDB>47jP6Eii1^ zY`@iQoW%LS6lB#r}wKL>&wmdM`Z`= z^Euyv+`fPFrv#~w5s6p;{Xv~SkUY@(c;E}&db?NdPE-$;Pwq?J>@U#~ZlFsK!%~^H zKdv{&Z?008rM3>Ly5`Wnv0UCGSw0*tp5b@nH@j2VjT4tm$2eInoDcEAEdohH#Q$tP zzy@-by=qlI9KO1Cd%Er)yoRlAvHgvI_ z0sg1Ul+~e~Z8Y*%?|2~x%ZXDx7Ts_NQO*X*8Q_K=h8T^=1tXnixq`O!;-jU3aW+*& zCdPY@zYB-SYkE^@h~z;w2lCkz)K)+EgVbuU4;m37yTXlp4`2VL-^O?qnJHdgou=Y zlD9J7IQmo5+D>uYs)L1Fc;px--E>kzz+9Ge)?cPmso(oSJabcxSEE4J!p2)+LQfC> zQ7&Sv-*r;@@Y?YDQMFh%H8XWst_)apj3&AxZSk(8XCg}>74WT0f4bt|L@xiohArv3 zNK=Rn{3=!*gNgP?Q~W<2k0IyqtJrl+Ci){?@xG*Q|8{uN|EY~179oQFuL1numNDtD zNNflJJU5mT{U6Pd+W4;ya8{bV{`@L&ZTKJXx=~$NUkF4jV+JfI-4R#PU=djx)eH81Y#F`~C%p{|h$_UvS=5FD25 z^r3dzu{hl^a-p{`K7<1rAX>fm9Bvrp7*eu5p1bfDGUO2uF3}qjT69yW4@~VQ4nD8x znLh^_T233m$@0M{L@AiqAn1|yqX%v zAR4jK2s}p_Bfd&fTH758I+3%b5=*@{c1LI~6i8d15v4yuK{N!4HWFt#p+3c>IefIW z7Q)^uI*S(G&*XUo!iF=JhQMXUjUw`GSrNPv13Uppnl98Qwu@rkP7BR?UZI!U(s3VO z)fzA7B79pF4-0owKwq1r3#W{R=c@EfVFdn34W`Z$ZQ?~^939<8iW1T+YQb8k2*s?c z)~N_79*J}x9e6tVh%t#_!N~`9zW#?qB_=x^E)OMNT8IX2L`^h<;2J@gVsVWL5F9@n zAO{Kjy3dUW(S_6o-1-?r=XpQm@@0VMovI*rJX;=nnyi=x3yn_}hS!K4aT6s{mjFql`lf$!sWvg2b zKxtAz^>E5b4W6}tFp*cRIL*}(X95HTsP%)>YP!Xn^6~{?r_%q1KA0bxs+%prR*#Tw zI)U9XAc(gmeApKWzI=d*UsWBg3;V@{%*}>Q83k^KtG$_+ir!HqVPw=Kwus|XSzr$2 zmqF9UoF#*oay5Nh=R)?UyFMg%O>m?!_Lsu=-aCpT;~_pQ8Znd76oi0^4<5u1MTH85 zR&pmpI}<9wDshGyv!cbmqBpohN5R!OnZh&!hDUy2A#+fx0>vdVn1|_GT6-1z&FjdT z(IOCeg2jy%?1O3!J#3^SXh+@@HeD3>$8X?dOpo6qVgWoqcQBU-!DiVk_c`QVsEzp< zO8FpJfQB34D1|_e5HqGSV~2rqsv!+~Z|qBn6)Z+DvD)3Mh=kbnkEKF_=Sw8U>f#Z~ zk8^5y+jI9|i5)=Zz}&1+4;viSs>z$AXu^sn|KJBfpa^PMSlIBHhhj`}g4F3Q=-CFpB;~l(v$rspJ*fIQ zcbo1QoLkgR5~6)g&zKr|l_b$w5$2zUsB==#b43@Mp~k{!AxR>*ZmHYI9;@UCNgMPK zHE&F>Hlt`F!c^svHHD8#Fp%6NehU6aQ1vL+IHl&r4qql7u5&2DDKIx8+qB?LjVrr) zmy4=2_rvxXfT8yF|Ff~@f|%HKZOOUQH^5zyoQ3QqiStd_qfdW})*J}ph-Ugju-V7C zI)3W$!bI+Y3~U1XAx~3EoC>G-OaV`|O?k(;IVbeQEzIbJlIu#<2o#gU*w5U~RrcY< z573Hd;1Xf1)R%!7fEZpOREO0RMlJPKh##M&_O<@V`i9F%H4?KVl!aC35F39sTT^A{ zA}jo1Lhlf|k(>%YqRM&g?x5^UO6pPOFVc(a6eN+H3U}9y#6`spEpn{je0_a)o*d-c z1|wNYeMux)tK>pe%bIiok7%Z($^u$qG53G0T7lwlt4jWRh+t zu4S7EM%>Z=_FES&aHCN2FK2=wgapLLRmwtu8U$wm?FKqhiM>^#Fa3N2&1}1V*Z89;- zbOpmCW{8^lHsFrkStio^2*-H+u@THwEO?#-=x3-TY%v^e@n8GZFNdz#X3(x?`BuO7 zfCyp~qFn$Etx_ChX4npMbBLQo`S(}Of)dZ3E%}u}zJ6%kK84+PPbOzD30l{t3(4s5 zs*YC7IlgVhdE(N0Q?UZqfXN#S2L7vveOZWCAlPrW?5=-h_?}mKufk!jJ$SbDfa^S>(YVXJpU84w+p&$NE zFdkafMNmP1PeV*9u78SM&QX%uhy@Wd3Dhz>66d+8)(dqiNEJI#FUCjoX9;>py)0%r z@}NaZrA(u+((%)V98M^#_5JADOt47Fq0ElUr z9k_|HQk>%ae&e4Hf5G-69F!rc$)1puLR;JO;~n#Xk1x5=5&|XZ3k8eeTMs^h(ki(J z`lM8^DUi;Nx}x{+tu*Nq(&wNFxD)&K16mr+Zk$=NE#Yl^pGybnQp%;f9_vU@ul7;j zHuy>jWi)5*h!F_&^#ZpGTxA~YK6w=P|PChYn+}sa9*V&Ads#M zus{1cTfHgBI$4->pb~~G)XB(h<8jqqPp5$md4}{&p%a|{urPtyni|>B|6RK-UOjJ1 z(9gPZnM~3-*3H}_f9U1f_Q`OG}W)emr1#`)B2X3y{1D%T0#! z^W@AJRO?Np#h_f3!s!rc@NDPRpYWuczgceNp&}C`kNs;4Z)=(D4P*&t*Z;!@w0_f> zVr7vp3gzoIInjiuQ8j(Oy#S~klkEBNds_H6_Oj|i%XB2>1oq`8rys8Q`OOb0Ab;Vt z!c>UVB6Ma;^=rO`bQu`v835seDrZ{}LIY+i4MXH*Uu0hQY^=c^FQ;i4k88qxxSj^U zgkg&lKc>p*=|)|}NgXU1&xL`z%K^qIWWR9ofgq1*I4Uk4K5CuJwc^sW0eT&=EJw;W z(uN>LmlJo*OgGO90SZzqo@UP*^U#6yHXU2fBK$^vTgqcLckwhg6|gfs+6C-dC9v0; zbCLr9*X5IW-iQxM>8*l?YA6PPo8Ml=3HV`MruOZj|Y8)xFz5>bacGv|2vFMS-um0AvYq)EpyugZU=Nm zAH12hq+{wngL`wqA~09zYJxE*CDmimdpDklk)x5g}q8`aTvIbtYd!4(-bdY^V6ZZhJ>>r$@?u5T4#46a1^p05hi| zw}Mio!jpm{fN-&;GSU2X|8{B1#p<@eZ_d=r)^DCfkcdh9BNGuiXy<|dqKIk^#k6Fm z3WUh%b@YGOe#Yy{&!lylADRNc!0z(&T4+NPK%nmWlbNC>Zm%Yq9Hi8ah|qZggK#7A zoTa((oTX~S1u-{%76nQ@r^9(BX0i$@4ile^VuD^5KuFg)+NSZhwI78`;t(*D!Uy>wDo=GuSh&oi8ZDdv0W*>G|p3K!Q7LA)8IO( zFhAD}qv?1~7^KdT24Fz^7Q;ISvlN9Xa?eUPEZ&_-&HnXgu z)`h292?swUt@-e$E(5AaOhJ{~_XVv?S?v{UXoCPQBk}rmC?JWgjJvzerv?`IJO+jV zQ_&E<7oC?}Xg+I=eHP(S^5^D2ME)zm+)3xHQoi>}uJTz?lYHrll(X&c?G|~_E7To$ zkR1*9bvmQyS_-v9$6Wu#!Dp0OjCfCdqd!l{qXqzw5XXp+MXzmC47H%>OK1)FOgYuQ z={k*l0=lZuFhGe8XPQCwCsS3)@5@+2wyx_7t@WOyt%${itC+||7kl~*h=Hz-wUelZ zKby^^4D(@_3!r_#Ei-_Z^6wZx0qgDRC#ga$XLOd2XLwEYH`D802- zL0pgYuC#o;NXLeXyf?iFusRkBmgS#iNtGwCt4sT@?^Zjr0^_^ax76c&xJvRFUsW749v3Ozzh36j>U);Xc9R= zq-t2D4P3#hpds;Z_{;(ja=9E7 zE%#-Q{aFlD5z}}kmDR}EU<7d;gN6JecN^}!7y+Y=cgs%i>)YQ-K7D3!wwVhdKF?2K z_C3D$QHh0@V^`rTl12iVA9tsh@9?|DED^L_fQw@0hu#?N0Pb_o=i%+SefP(~=}3JO z2LPj%xIqEc1McDOY{DH$7-RYB{u#n2_L0MstZEAD8kDj9IN*rr_yN(G7cxF5J?N2l zHU)G{NO~!$idyq$eTj+OSVjUHxwdq3k`48$a(%Ih%veeS-M<8{@}1-uDS2$t{|<5z z_{hDbpOP-9SAPQPOHCBU{$V7fW0LTwxs;uX4kX9o6G;Chcz@o>jB>nH;2YF3W zr}CZj*nb1_F%zemzaMQT;HcM$(P@V(9B&e@$V6%^A%UD+Mq1u}?tubLhfDI`{d3aB zPp7xM5&)vr-}V2n@W1b5It#NT#`h)}P2zC7hXynEn?E|n6~1vZ@a1JdM2JF%kxfyB zejCJ7twEriBv=c^QOjas!Ti-_S&A6SkbuXn@J!F`j;;E6VAaWF{qrdxHkgunYWj$F zYr!rcY8iXSgQ;l&MkLLkR|^UzaFQ}?NUnGx=%CWab{8~+1_)Flu`C>*RoH$Ps6Oyq zaHnXQKrnTAMA(=C7DQYZ0^m@Wjk=oPC83=G>5+KQ2+4T59P4^*|7Ar^6)2d6Q9oBv44( zLIW2{QgbFo-WF+*<1)))M1pGgMZ<^kTHaA-jmREj84?*5=7Ik1{_C7Da7IW-=5A<) zxxWdih2x!HIsD1y#FL*FW>5yB`S6E^TcN~t?<;B=PpdprdhU~#!^3x7 zp#n7}IFn5Skkbap%|M}To|7O=RMd^|)^hfnid=-6!X^1qs8jECYhW*(!mLEM24TSr z;Zg6YEczyx8^&WAr(h-#ACQhHgsUO!3sq4 z>|(EZaF^86EoerYH0pb;f0+LY_>+wUeqUj)QYqm|aWf0L&=C;Ng+X#zLPynj;t$Yf z3&;y)z@f=85tJg-VB{t4pkTYLUpxs?nz)8iEzZ6WV`L66Vy#8rekmQ2No%l1mUqmK95;_Js z&$Mz^lYs)XK^0>5%y07Gg^ZhkRmK}aK+$}20G6n=;J`58?m##t3@5;4iXOpu`JB!Y zZetT2NY5|56)wcNKgNPzRH@?VJRe1{n@)%V?^yD1?;>P`h_qZW3}vo}{#HNr>0fV! z6N9v;$M+#g$~U_8N6d@+Sv>&69{|!Bq%fGI8%i&Ta&pKFH@X5pqrkrVyjRI~5?~{I z2_Qkj*A`HGahZ+4?r^q1=mOH76p?#y#udAez0m{n6ySo7-ScEHB0xVlE^w&iecu~` za;r3e6GqxWWw|IwTYV-bs1o!#giqmDbY;|Y5&!L)tV$NSbfzE_r}Sc40v%)D5xcRp zVpnjG0b8@499b)V{4lO9x&W3yrO1Wm49KQH`t3mujX`s9lyH8nO$vo=trr4PP9xYD z!V#L)l2+w~gf9DYzkYNo6S^Kz%VT=gv{o*7xpr!mAxZ;o={bsocjY|$)x@Sf%-_*p zcp46aNUiy4v0WF`Ey&L1qLPFU;c{>Cja2LKQl)G#tw#}9a-UqFw#%<5(vRj@A3z1* zVW?U$;J)|jxquoPRE<2@aUw!*FjUWjYT$<9`JAf}_9y?%c_!orv6K2M?eBl+kt~?I zT@86J-!4>x9);a^QDD=~yQOZ=AW}VbKzA9UsEJezC49=#Ar_7a#CA06)WB?x%4)+k; zKxGp=p3`)ywAS#zLk$A~qg;u$o2(b+^#f|Go(V?GISif;-x0gAe1gPD)Kh$nP>7{Z zIFu!Soj?#aAQ~+0YT>?5pvz-wlWj_RLC`e;5T?O5Q>qU?ejb-~vVo($)L@Uw!kJ3N zBF$PfVdhT*3@F2M&h#$~H$Y#5;G5+dxCNlfwMmyq?N)gPvO^H-c_M?I@B*ZBJ9qxH z8TRJOabuHjkzO&}{VXr&;mH;=Y8%Ch7VN_cZ3Eluj0FbtefgZ1P3a}u!cQ;&CQtvQ ze1;0*bm@%{=0kU|T09^!JXKgAPY_Le*^}mu(+LWSp~t#6JHS4VhLHJbx%yrOiB{L? z8)T^e3^bXm{MhK_rAP1s^Szz5|34{JR@T(MPGEEpCbs`bK0{hc?ggCxx)rF7Z8QS| zZ!CysUC3&sYF*o%o!aTvvss$B&um)0{ZMQ1*DL%(r$v%!w!C{7Ub}HYO594*wHCNc zv$qGj3)@1EIr*YLf5XcTxZ>IFXoiBax>f4BA|vb+e}!aQf96=P{H-md9U#SXu&r&;!z0cKF@x#&W6S%haTOyV+)j!#A@?5XDlewS9%{)0#gA@%UzU48O0>s)lab6Ub+vq=ypU{b^0$kXG8?PMzOkqy1g z&(mg#9oD8T)qiEpoyK^Jko-c;)!#n!X=~T})VNE=`7Oodka#Ra;gp1JMAe5^il&nA zU~LNU6o_)Al0i-Ql89>^iSNX{S)At;@G0tpI2-U8D{WZsq&KNiKK3aA?RYN(ZOCMJ z@nL$OXZ`)IgLgRLGgP`fVee{I{xkjYA@C;Ygk)2S3V~|BRI1?F^jXRiXd;DPf*ki$ zu*?v?BetRD-M>rtgG`|ug2nA1BOKA^gox`-z}jEm#Qf%Wt+b6FJ(0KX{kZ?z45Y18pMs${&^ z<>l4XMRxSoD$~le@r-z601`iOHS+UFg<2OC}2%I*KGz^ z4l%b%b2o5pmj9wDOk}SWVGUGv|071T2wKyQv86=xYvmU09XlBHPV_6JKaT}(*3H5K zBXm>(iG|5hU?62~h^TJ>IV_c5_VBDaTO$n*#qdybd@W4_DplQt6zzsMLJJ!y>qaoN z_N(aQY1W|Euf*ujhzM8P8gwyPo@NGs!jvcAH;Nq5K9#%#BSu3Teub-0BzwBaU|3_a zlN50Taxq;pbU;2ssLr6$m35qhN;UC16*dfZqFUOnldIMOBF^RJ0;ies{3K?flZh!t zx3;_fP8{(lW2bCB!%n*|?B;3ZJ*1#+N(z^*azYab+L%~-4 zBQuW#z{!m^y9r*VVJ04aay@<%tQ`ks1Sp`r!W3-^$jv{2qZ!n0`6MOU79&7pNFGak z#!Nc84u^61D=eX>2It>Mn>ql7Qn=s>&eZHVgm`(P+dQd?I#5x{)Gf=yF3RD3_N|0} zFWtkvyH?j_wpEob7mb@sqCqbzKc)+p&? zi;zBec3s7D&_ph>lJSZbiHkT?9*@dHa3O`E*n~3DKXv3j!%ie~k(~py6KG1NtOMI) zbPIj-K$l$yha+({jEyh23065#=V%X|D#6>JT0p##HZ~(H3Y+WUVlB4fGm?Q+9#N7yeJpxI#}URWF4Krt~0$p+lrJ>+-sjb|pHJOkb8>u@7tw z9m#FJTfdQE89vy6OZfqTJrpJxFV_*9u|zquvE!~v%pA|#OT~9}5yQV61Q1@%-x+9} z?C=YO+&WdnAgb09dH+PUQXe2=!vw{}exX^T)Men4vMc2eZ??xbToQA88?>q=N}S~6 z9y`NX?>uni9G|a;l5WA2D}BW=RI9)K)`NPJ3H?wZfMmfw2Ph!9_XAJbececxE4~Oc zM~eIXb4sHp?(os1B9Vf_|9j1_OS>=TUtLArV%6?JRGNgm7bUtMM8A6=!I<*%;7 z62J#B*K^Ia@H5b^M6(mdg4?V6nIKyx9*z3$Nz03-eA!6KYQHxz!)La|ssZ?pUsZYQoUH>+NS!HhkO(FJ1sQ3T#JJnK@+|i3F8B z&BdZKA7Sgc=IZ96F7BgQ`DVw(gcxDoA>2tE57J%Vy@+&w`A#im-KvVBb`4dz#YiWW zpO0}OLk$DmM?hoTw^v>eiJpg@T@<(k&rJv5KO&SA=!t{u z#um|?T@<#K7UMe;JuX?=h8oloVq2{ee1=tjRyj{vv%$lkYRMEr)IYMWc`eP=3Tp~E z4;z7tVUwyskmQhadQ1J>qoJQ{ssQRW5git7fUIv}#ry%dwyaill|ikHXMHWE6DO@5KcUFPewq2>O?l(CZiRnZigxh~Mt=aCG;4 zzs|jyKRgc$8!7FW$Yl8Th};Hz?e6Nkr`i(;_yWF9bprrY*9?HpkJGzLo(Mws)axq& z{$lsvF&hRqzdhVWiyw2!S><@OIX0eMy>3Z#w*W;Ggaq6CB@+`59l87;_x$_#fZXo4 zGlcIBVA$WQ5ONLXL1Qgy%n#_-S#=sCk_K}^xk}EZk~E@<@I_X3+z564k!Ei{HM9s6 zS;qah@Z9_X_N69&tU|B)+Dt-}*gmouu{Z;1o%tpD?b?WZEyeC>8BsXxt-w1C=nHd6 zgaCB@0=)zYupjp4bkAeHrH7|Zze3CcwukjHD5n|?iED=pwkHbTg)ktniGGcePP&+J z@?A~15R_^N;zOtj{yleinlMrV9m1yf(`adpDTM}&R`bx=jB!CJ3$Hn;B4Tu**5&M2 ze@YgJsJrew8&0Xr>kLSynvodfpL0$XqynlM=cf8$bVsN$W&>k1gzCy+mh$_;SXO4) zPk3U+K-40rG!~umlig0p3aCOLMNFK3fzyK2Q9JqbS{7?yi`p2dp7J2nGm0*2k;U%x zE{KVpa3MGfI;7#&!(+2x9>~I@L@2sV|618gBg1h)2`C&epOx=8=r?fV^!@ux2tc-p zfh`}$+NnWS0M!al*9a32T{>}RuU`5#oAV3JQB(5PJ{QJeO8w0wt!9Qvady9TWqk6i zH=a?zFUor`;0S5ES;PaWIAE4IscT1RjKuDUHq1L-A=!ZoxG!sd`{MmjxY{rbQ@uzF zkTK&-@LT+QsSo}kU?%Vc`h&&Q0f6XkXBsd@u1xXMp=FM))(L zLayhD$}6w_)%|{|0^#-kw#nzZ{#DQS?f^%uKxrIgL0c6<%nfvq=h8W1E>J?dmF9Dp zq=4}kXCKLL&faze6GRupGlCB%=WWn+(Cwf)$b0S++&24z?)Z1{tN#Wj>!Z!_wxsLg z&CxcvtL*gv+kY8f(s%Kv=nLFcj(U5O?a}V|e+U9xPn(0f_>un~Xp27<&%yPyJNR#a zo?a@q9B>hECA1mT4C#w#gXn`eOkiWOI$9rZN;)B)5>1P%$zJ~-!j<$~d?~sLSCgY2 zU}v&9+8+N8Q;pkZchDYxF1}^9c=o?`-D^94FC7RDhk~Hr#Nc5jmJ_YpjO`-*7D%<2 zfbXh(%CWs0#a>5AiK5Q#^X1%hTomyRAfa-u>LK;FH7MLjlY|jCTnHsI4HR`EL)i2R zrho|Bk1Q(5*<-vNMhXT@1%%t0GAT-$_fnL~TdCGDsa{Pgj!M$x=YeKnEkFMxLqht) zfMd*FNERn$c+Fyh8onxDha@gpbwuRnezeXToo+zRnCKY^P7*REtt{eFD7DKdm@lGx z-VkW<4GFW@U=K01%d%z(vBn}C{Uan2&zYdq|AHWXF*%T=@8Kr^4Gg%x;XniC4ic=| z`PDwCkZKB%nhX(*Vy}_EReh>RvdjZ$VYj)2f1+T^foms~n`HiKqp}QT7H%o5uX?mx zB=x)*m_&0Du*%*}+*j$8CQ9e<=k7-Y_m_Iebtu__Wx56;7&9$Cm6MJMqomD+!Kom+ zA$s6ALbgk@6j41OA_tP}wZzL!Xbmatw5AVC0q?9_M2b!0&}0nAtv|>qF5S^2noK*^ z5}f__vh2h!T&nBr|_+P__Q74TOkdbiMvzY(5U3mZcmD*Gd(xWodFk@;x8 z6{QB;^pGC`{pR(AhB3z)qn+eY%^F0gnbEX)iL6>LHHKc1;Bdw<782p3W{lJLe`0QY zOq_qB%u2mMoE0@pTG5(|3iRIxOvyqU0cXlb4hI^4+MN=~5IJ*%Jz*%9Ah@)HdN0yR0K_L{j-hN)5TnFRWI z*vU9&XyP)PI2qDbq+&Fwc~Re8H+S>BE{HC)c5j93NAT42snc#WcgORf#FcD8?Kg3xq%6o67{Q1IlzM*{GKbMHZ-8zC9rp8 zBcC)Ti-WE2pID2%E$cG%3rCTIo(cVSTJOyS=-V*%!b47zEw0j$hGDT@<*u-~smAH9 z-DQpkw(y!AQG$RYkcqk-|O?3)Qevbu{4#E9ytk|){W84COXB+z$PBukJR?SNJV zP>@b9)o=hW68BAL^ECD@goaHTQ8V_PFq$?hy0+KU$Q1nm`~qV(9Q>@3LpV78m<;=5 ztde`F=vGD39HZi`LaA9Dz2tCFQl;p|b3~mMzS<5kwdg%z#sBN=(_Ts(7+A6Qa>w2LWf!0<;{k)0F{2~IHe{TRI*<+kx|ViT*>z_qsI&&= zW~@s=FrIB4m-x{S5^<~C@3tT9-(*@UXdaxnS62o!!B|-_u5Q93pzteQ8kp1 zkX#O%`=|NaD?zk59D<;Bvnr^LkZNe;)W}geW+4f};WDBuuzU_=6HIIi=#5KpOck+8 z(;IM%_+V93gPRDTjUP0!3wK-uHPRJ1$rFHgkToO3g&fk!I$eQMI5}1PLl-;65W57L z1`}KSu)G1~A#nfxU?ljioMr69<~ z}TY{Tn@<6Q64f^80U?iwjxno7~*pK{6b<+j~~%jiBDJ| zUT(o#@1vExz3$e|qGu~&#c zZWUONQw5{^=6DsKuDv>}boS@C$9Knsw*O~DUf0jXlwQ%Hrgv=?K|uyzGAkQ~w@@o@ zNGxMQlQXx5XeTH1Iy(6g7NysCx)kY0}5LK>_e3OrCYy0}PJ$5<8$q%iv8+Cvu zQtNP(aWm0ddwcQ_tbYo>Gga)QbUQhk=9RVd|ICqrs$n+5BQ+~+e|vdU`S=m}VtgU< z0FVL{IFB!bz}7jZcK{$GYs$n60_tO=3UdKR-8W;^T)ji57QaP)X_XYO6VO4{rH9o5 zRKb~aVmq^1nfMKbkoae1>OqFeW3@Nk1u~tJcak5tP})fc@le3z+LC-cQ+FXM3?Txm%tG6*?^!6 z;0LgGjhO#3kwN#2vVWD%r>-RZS!#cM8cL5FD*rV>5kFdHcdA(>0|+w6xJmVRIktY9 zACDCitP=D|`S|sM2;M9G>pwy+8^^!>c)^&M|GE-ybHHc;1=3id*PrM*!i&N47Y>#r zj#*SV#9TjYi4(i-SN^gVtp@46tW)=H~A6aKu_K5HuD%`HMcUlCu@3E@wllvTKB3OtO zD|Nc;!ZCs5Z5y1l&Sv*NuhRE(=;CMJq&5@@E?wCeU317Zem# zLWwcV{-DRwD~NZWmE_RdVdTxz??Efc zFkyxOz%?&2go3)5wOlk`&NPoZqH2B$sZsrrS$7|Wr>kHC|KdIY*otU61lOBhB93To zfAewm14E1J?h`vdT;1s8=p7o}uIgO09xzbT4Z>fc`Rwzn_ne7GTQaT8xjcK7iDYH( zoS1pIkFmbSkI)`+$#qxlrJrne$b>$#M_E1s_+@@krcSma4reQo>FpobDOZfR8Hn&i zy$h!f%n#iq2{OvUYKO~6x$B4LIpbT@M}LM$%{ZwM}^DhKai?!C8xSeLHS&c}~| z<<`tpWPrl}(7a!K2&f2+Y;mdyrhgNtYcL}i3t8z)r62X=Gq@CxW zA#jR;S1eh$OOe-EL||`F3YZBRQ}zQkI>ne*vAy}@6MBwcK*W$s#!I`s+q$0t5}@^H zrDa80wta&uyq29DXjZdSO%@neUY5G?vui2l>uMn+uVI*JD$zd(d4ZB#9IPq9mpNxX zSYYOAv*nTtkE1)#U^{jCVH4SrI4@Va=s%S>XgSX^+;7}6=uU@8Uyg%}8*J&XEUvfF z|0bGG+%Jl(vgSA#&|}OmI;A)P`0;1ym!QATJC6I%wUON|M`{kO4IdjwMx>B(#0=YV zM93X8NT6C>{DwvrgmTYxO>pJ;QW{0GKPZHaG@{D z$S?HKhCP(mI+yJ3&vK4R-+b9S`A$k)5#VeYLbQG98|w%RU)PY>Mj6yQiiHI z2liQ0HA2i2Kk8c_t>dWbnE4ONd=Cmo{q#Kr%t2o&IIqDqmEXED_B~nj#$S1g(ry42 z#&~-F9&4bitZa$9d{n7)lHhQuE1cjz08`q!QTT1hzPbAOBL`yYs>L)?1{iM3oX}(j zZl7_3FMYQNhGWbPFQDw-{G~1(UY)e3>_zsdjK-U7zOmDE$rbWaY+5ohz}Y6(fNWu0 zgH;BE+&-&J(7I1`F%y36-l6{{lLW4%hO=K+k)y7&VDx#0u{4b-y)`DBXSH<=R^+6_ zrt0~_qTN-~(5V}zwdJ1AZAiJxPg(E@MeG4C_?I7lbo5qmNbjj@^F*0bAq2vcj*%MT zs@Mim`=rA*+YAwk|GssVYFGvlJ z?xo5;LN`|TnnX~B$3_MGRO1cmp>)$55?w_71qfVbOAHud<_U7+Xl*mpSf)%WeJlIMfRU(^(+ALh5|-BbxF z=C)_oVZRSMY^A3Gx;h4Y%}h&((^YOfV<+vS4NB9&(rH9Uip_w$v7u%yY_d1|AkJVT zEjo{aSEzN?kg&EIK-7qQ!XY|XBh?p@MqB)EmIhpH5LCN-)fwE#MZ8(PLQ}pW7)p(B z-5IH~-x$0zzaJ&US!vTq3DE?&gA~>PAEFbatrNy9ES4lN+RD66(BkZffAxNnQX@46 z4KjAL*zRiHj|_I`&O3<_OgiHS@r9MxJrZ9OxXcsn@ed{<07HIBtv%l_nJXWyMuRFK z8=&NH$%y3g8)e+(@6$%#adP(-@ID@5T;3k`7Vv#nZ1XxIQOP(eDBW%)u?G3osAY2{ zD)Nqt)cjTOycxQnBm5Gg+@zWK!RahL$q!X$k@#3B^5PM@b6)jFu4^$F9 zjSwbA8Cwxa;KDo!cxP{vtA$sUM5bfqix-q}Lk@L4F|ktru1uo+;Xy&33oB zZ5)Ja)LJqRD|%52QR)C1FRk%qvvahLFnk}jt=RXkl*jdsQdl+bHdl-AbnH8?qU+JJE6t97vKj@%U;vhnNN+NZR4K;x33sG`kV z=cTTq4W5~R5$YG0P%Bd)Q@o9K;*JXKC%nR^g?J!WfA%>*t%Hp29zmG<&9`RgB8!!%-(dMv`kcL*!o64M8Vd%A` zV7MP9>N~HG@07I{?6>!|<&F2Ru+m_*$QBXec5#)UyBNdu9$;w4 z(#dc=e%O|R!uO76)?Tlr3f=s)rItDQeBl}R*%BF!E3VltEoed%jcu<8~a>XJ2r3KI%}CA?D#kk>^(A1mDr9Xt>Z|zakspp;U-83@Cnp%QhyDIp*r?^DD}Wq}T6lQe zu;;}#43b(rl*pb}FL1%`veJn+toT8f>msS!tJ6Px+`YI~{goiS5d%T#1tM&-{~5w9 zyxsk7AI-rJ{*@N~AN?+)-r z4NZ9h%m)7%x6fp(`mT|~`oe@+=JAO1_WJ*31(Sw=DU$`$2~#)%5Q5479MC5JV;ta& zvc*{wEelo$=zwx@Yq9>XsrcWU|10crYT@a;(G~suDu(wu`2+Raxxb5)P*0>60Q7E8 z&hnq|nVsc7-Zv)3zqR|c{uc8||EFpzn*a7E`X`ktj|~S%e<2GiLIhErHp`ezMU<*h znJQy=diLkzI_tEUjQOnaXi!1mv5#-HZ-4;;(Me0S<++0PVgPYw`xfv6&x!Ertm`Zr zx~7ExbgwV2tI8?vCy!0oV(}01Hr`UuMv5v-vmh zAHMblQoKro@IX?a52$c8ksH+pntNLatjXs-0;a+ryNR$8)d|~;kXY5t1qe^#zWstB z@|RszVRZ;W!xn1r;Fl|rY1R|JixmKK5z3rySt;~`-O#7jEsRDpeHRQE80y3@$5RsM z&m{v}Hk_9_8W(ac~7HCkp8oa9y?~z4)1uCXPXeJHX zV3+_;Z2bh?t;T5`c@GV|a73@KTB>UDL^kcLxmgy)^4-x;1p>HCw0~juUaBhd&nRAa zU=rS*pS719# z2)!LEcw)YUKEKuBT4x%5B{LrQtke9RpwhmlN&{rJ%vjn-L_@2^^v@xxW!sDfSlKCTuwGyE!6VcdJ~#bw!6RN~KF? z07~(7914@Li-oQ(kj%+%x8G(nxzwJpAKkEj8q})dKS5rLTh(oe0psDdSq_88-gs1c zG~Vg~0VnQO;qbQ;#!g=oLirxJdsnt{wJoTDfPG(+hp5e1Ah-Dy1O|!+L3qv5(uv&my{eniL%B3QjKK3WQlVIx_$kwIC32d?HN9y0!9ro(C zgTyw>XKhV(HQg39BKPOY4REQiB}lPh63sA2#M+C=dY|^`Qd-t${}-)izIO` zV0&pz-a}WAz$}hC&~TCcR0yAHaa@Sn&oas0v=MNDs&;+te@i00DZTg5Rcmk0AoQ)w zps~&vuc@CVhw1dg3bVZF?4ZUuZvNJcSZValx;F*03A^Rr`##PtKmULAy2OBI>VM)| z_`mL{+gOml?GiI)D#==qN3O5`>6d7sqN7S;DuFGUnE^wjs)b3XNkEIY~HAkh1I zeNQK+KJ&IiK-i8uV4P!CQu=VJT<+JTRhS@c6-^Z%hsaqMiAXkI{=w+ z@s?cd_*p?ovwSU1f^#>EgBfn}(aIFOe6-9&X|-7cFqSg$h*FYU$b2g!#~EvDaRfF%m03zm+s!pv+Qd*Hkqn@fmuFCW+_P2B8UV^oZYNbqdM#bt!NHKTh zw&@T#KuiY`ok0=g$N~vb#pg&+Rc9QGBXy3bH}amX)5X#DMGn!KrcA#41y3=t{sr$h zCHf;*E!A4&Og?$}-z8~b;aE|gJ8~v~t%ZbM%$j-5Q&(o#ST78{W}bf`;dO>0<20@3 z1eya{*Kpdz_Y8<*vyzKNuU${Tx_o^h%JK~0Yc*vcT+CVi$ZB!605NIh2ip|O-E)}) zffn?Bk_B<|$s$#lcn%cBA^x~pJE{`->Y~dOjQu*xIB4}gE7!D^1g%ZS4c=Q_wvq%i zQ8G7`>es7NuEXHpg`&&g--n_Q7_eG4or#+ky>>vD7VWYH)F`oVjQ^{R#ehKrdU6;r zL{62YFlj323Eohr!_aF3H*rgBX6y3K^!aaq3OJn3 z@9h3~yla_QuCeI$Z1uT+c{27AYcdDW)=N#*s>~&9V&(Pg6z^6r%r}^y-r2T)9G-TR zx_IV%J=|x0^P1TKp6wd4k-ghT!cCXY8Avkm4CJn zTW#y3I?yu;>#_kW#6d16E`v_5K?_dw;^gr`vf>hyl@wg4wkr3M)5JxsG!?9UD(p`Qkj@@SS;fKr@@;4 z${)?8K-$1ABys6NNs?NCZpRiw@CY*8i~UwSOt^RQ4b{7dh5f3wCvcr6Of3FXKFVBJ zUjv$WXV$BZrEN<8631lz-4{D{vcpP|dcRx?4rx6l*b=^!A6h?pGDMr%m1;lDyEO^T z?yM*->AYHsEhHnY>&>|Tq?wKIug}Z52?Oy5xQ+*A4`=5EQZ-{hd62r?MrF|RLh!n& z#42WT?Rv3i?t>n=%_mTJF$w~d1@PjCc-Zj8-yM=3aomQ>QX=ag>gQJ=(C;XL>%IeU z9`r|z!stUR@3mm!)W3e7DFZoHxx|G#fV>sB$dz!`B6kP)-U zNVW6bt0KktwgrI5(gzI)M*y&Z5~P)2%~ZU#T}aFy1pmB*=nIGdA92$O#`7b#xGiL2J>pKFbsac<|2`h~!ryQW3Pk22M8yE?C3Pqh*0o2IziTrDgD`8& z`sF+*5)$PHXMexHO=ydEX^*f+j$TvfsQMho>D{NmcSt?FF!~{%P#bC2`(II@W`7S; z;hJB*oWX2a=;f^ebBmU?Yudf_;qLBpe%+ohAdQ|Ow?{JdngH;cruY3;tq*dvd&fq` z-~Ijq3`lQJ``)s@8kjGAwkJF`zkFL2Aowc^OsOmM6qU!aYdsy`;Hz;GQg->=69~u6 zJGJQvsJ;Q;&wxV5u+5Ot24R3k2Mpzn7|;gk83{7&UvLEJcT`ab}61T}%2Y)tLu)Q8YaGnn+{OgWQXJgqvh zz4t3WdSAZ`vA159<`g8toR+UG1yS5ttRqiw-qOErB&&<(k~We`M8S2d1wan*Mxb7~ zCULWgV0pa?jLz|KhLAN%C%<1X=ZN^8F`T>4Th|ZBERLPS&Ts(=Zgg0LXeU9oFQ%Jt>AC2^{2h^?rkwmv3w_>=(4~r+ajit}) z1s%Ts()>Fy*2ca@`JiBh@2?bJT4B|Ay>*fiR4@D()iXcP8K8(QuRY)N-EriMHXN{R! zdtmngt6ILC#4_cI<5o@?QM|=_6Dmygnm&F%yWXQQc-n*l8mA`)6W76bHEn|KCVJ^( zcO#;wdyIDBu!uTzhxdVU>odDvY9p%(BPPL7LE4iBr=_?fSu2xYlZaVh+dt+y0tSvo zYJ&`Q@6uLT4apuo3^jf8n5MF>;fi5MxZ&`Tlm6l}2aDhj!g_IlyqhKQS22$|HtBoo z+w#4YJX{F_(LKASkr{7t!35hRW!u4po+GF9b_8qMmmX2a4@kM`82xGUBTAJC` z#Ukm#3hrQ}aPWJnG?*k#(SvJZA8!iS4$PENbHnz9foKWW1w@f(dp}cxPM9^fob9sM z2qk}9A%lP^z$tXv9N`c%bPt(t5427j5%Rx$fK}`QiAI%N#~A=$^mtx!wE;`98aP_k z5%uGYTL%wr%(t5P@|n22OIN{* zdy?+tT3#e~_pFU%EP|=3#Sp!HVfB}cjTx~a>0_^u%oYAE9)$}jViOOSFdq_OVO&g% zoSk>zO>yN8r0m?m_IG7f3R=|TJjXjRVq2?dC9M|4kbK|%eI>p6?r2%ZlDUU+IOvMR zw1{rFL{>RI(Y#cF!gH83RSmvJVHsA&)xyj1Hq<7`z66attnzlkyYCmy+zZ!9=*Yjx zDn#>3>>5;RYt(L<`gj0tsN7k*|0>6j+7X$fen!iOO}NWz;A z@@)R!)uG;*$J+5QTwZ{ZGfQn_vua`_`r1W5QXXHSo@QXHKDThU^=N{K}Pub`ID7lhl| z=LB1ET&~%h+t_J+#8nUKdT)eB4AdaCkyv#8^cwqa6Fzo6#zxEOP_VzTZJ5wMk=rMA zv&!wLmN1w-ajYg#JBt}x)@OxQDyCv7kD%Mwk73@%i{J8{N&h}S<6b@UFH~IR&AAp^ z4O>3FO?A(rg4)RwnpXcdPYjcf^K!_c_j;iVk%M-_u%kg`L*8}6xBE|S7Nr;O*~#Db zx7+M4d{&#+=MIaRI6Gm9!4#J!*7~UNT!v(bw2a{h;tC|8_$QDt_B$rcI=6>Y*`uid z3TF9Q{VCb}hhMP;SW>XPpCAkhayb7TXgO2!n8DG%UQe%L!DxU3T3^|qWB~t&j9}F8 zT!jP(b;U(#EY+nsme(q%1JFb(z_3D$JGwq5L0Tn*yH&hpAbx)hv;6$)=zi&}emM1= zKPswxqz&2hG?F-ecCgTFv5On3>h59q*O-p8($-^Kq`LG;<@ds?WYWnoWESLHOWD;U zl-=9O5-oy~S_2WxajU{ncj>gJxFvnD?-s9JjueNO1G{qNqGq1`?}54oKh5Q!21{P+kt^6CeTXNj zCVCo}JNyosepVtb5wecrPA{2O*6cb1o3f z@1O>$byBRtvxW45cp~<$)*S$CuHZdMqe!f|_AjLqGvLLbjZRh%425qK? z7$%+Ojmsb*Lk7Lo?Xy5qo@L@4RQyOZv2Ij&cwnatt`I_1`n}1` z2ooN9MJ4VutDJ8|*o-zu&#d(y_aZxMFotSXK=QMY^7j{Hko?0P43~T+*o#)v!E3Lm zTARR8F15`}W>>5WAcqS&kMG&GH_LLuMXwtd$=oF)brG+YoOh{l28E&L@`I`NqwSZf;jr0KG03l)5OzGYNCxZd=>vxg&kF|CzZAPMF*n!9ca{F6A> zn&L$TP%+$g@D^<7xV))gN|F+&$b~CJdp{7h~ZP zID0WCW(G?5(fR2e$~X@pkH2RU7mZ)hfk}f@XEC=Ea6$(!-k`Vz_Ujw6Y|^{V+%kJR+z2 z*h<8e_tESRdyrxmP0YNSRTCRLXPcF~yoK@O9bEL2)>-okZGr<+59ySdsH!W|Te&J$&lRJVx%JX}S*g-?VHQRJ2j>&7Ab#w#*GzK4o+6W>>#1Ud`$iItpfZl3K9AALP`rV7P}OtN z>w2OVeLlVw%4<%HOp>oIzltR*y%DYw@w@)7`Tr}%jyhFS2NE$=`3~Z1u+!cwBlx23 z=>i6S%fup>h$@WlhDg9}3dWQ>3vC=kj&Y*S+uktH7k$}$#5%}48?7)hL;pK`}8M-#0VU*K^?FDSI6qFP=+ATVxd1P?{fYn zrvwrRQjKHSTP?NGj=%m!0;6S!_Du_LOVl#M*_AFiFnkS+GT}kS2b9PlQ*5cy65z4M zi4htHl)B>@@UVJ1vWH3xjHB4+iKG#bk*PDzL7m|KX6UBE#>xx|I1Sgo(GWY4j>kI< zdpu)MP%oQ~vG296l@T}XFJe0C`$DeIMOpOxtih?q)S-J2rGFyk1bU6Klv_?IgZvt+ zVp7n)sK}#W(Z;~eNzvE#vl;B*_iG~Vb8a3x(}0Dai-M0r^c*abDd}K3=)N(x+>Jp^ z@>o+2l)-T`pI#dz(A3rDi}F;WcMbjht74TvCXc+4H%YX>&?|Y`z;Qf}yPj`BUe>%Q zjl3a5J+npw(Vb0n0f?zZcuS*0#oks~G>xUsWR1o8J($=)r40#recL|`T)!>m(1!eO zK;4~ACbGs)TvKj0cqp&`XF8K$kqJiIvn5U>0?>bzqc7m6vZe9wU}%+-7NbfeU{RsO zH$7R1;(B7!KHHjQ9@D@+1g3F`WGHM?(qQogKTO9QtL}olRKERh;?ifmJ zx|=nQh1%Ub++49VEmgXrANrm8fEa~9bV~-ODgL~LhGSr9CSt!A(EK;izeg-hePzAQ z%q?~C^Zi&rr_Jtup;^4R5pE|KN43`^c}z$7lR|Buh^?eZ($6|@hT@VdP7D5w)ns(1Q(kUAyzGNjs@xa75%!bPsF#&(E(WkXWD%6WG9d{PkAUN7}btHcAKe-cI9`1pobzqOH z_Rm9K7L){pw30|V6A72=tK%WU&6fejZ-hBOsFO&(69he5FJkrHUr#l5|4b--yRRCL z2H5{hC@`sukAi~1OgMHFNZR^h ztYD}iQqu7-UJvtkeD1R`H$o7j#mD^@!;`tGdvI3@ZypC>r7sKoEZKRJF%QD+8LIMVaVaS+!O-;*fK!{Co zYQp+@6jhj9*qmQf2uS&(h>CI1!CPxPw6KMN<2HZ&C&}Wsww5{^*aiV-*Ga3R(()2;C?(@0 zc?SXZU?R;!+j7|jBtmKum?>_HyT2>Low2sdDaJU^PyGYohD^k9vs}mOR%=UYG#_j8 z_-Ge$Qqx||TpnyatW}~H1|=C3q_m}~tt!@|>I#(8#Ys{ftUbME8Y{95fJ5g4+O=CE zVfd~0SS>37Q6D5EmzRmd?+<28O<3<|A5kAh9mMeE0$^rT(s9WoQQNaO2>}@fO$~0} ziU zp2g}_EW%w5dtgQefT5U)0U5}(W{myu$%QJ(U8!f~YOLevq-f77CR>GBKJ>y&Z2)HR z)kIxVH7pi;@93uxm;uAY2bi?*$EdTu$G%YT#@xos(O>yTHeF{kziSe`Upn%0K|TwX z?k>~85C`3jf;|HdmVJA;2A#TIAl)G1*(Mk@m3`9;gz_`wKxyOmfKHxW#|YZx9h(!F zLlgS^{sSv->zZ=sAGUN07ng%ZmamIH+`m5K=bvB5$3Fzz{bvn_A1CGz!4|7#Il)%+ zfCKy!1f~`Ik~IEtcv3+-E(y8|SZsPo_MUoUl9pD0xzu2DZ! z*s10c4DQ#;;tlUxc|$e6~uO>B&= zMh=KIqf*y-^Sk4iKVlqdFG%S+(iqrYy{;RD29a0*({5@0hm7o%B@<#^8Hxv1f_&k` zm^`Tir-P;!m2mIHOsT}C{nuUZX$jm%1@72~0s?AUTulRa4^T7 z2%cjeq6s1T*MReHywU0Hiy8l)0{ma$tET&JIiq34ki`6Nah1+!C6m`p_{|{wJ+<(U z?B6+Zi<1O4m;aw&<^NSatCrwu^u2U)>;@YS*9) zssHyxsGy*e7{OSW{^y5(*`XsT!MK?J?R`dK{=d|ctY67BzkJ0sK%F0Ut4kQZk5$dF z^buDVcuZ7)p@zf}7KT<9PMa2?gYNX? zbi0|Pujzgf-L`W5zzF9n4q`{ZNz{roG{-R{nB6U}_P20R(9}YuXS9X`wQ44^o?K&u zD+WcZAj^Uc8ugdwm~GXAJw)8T)oKQq>)HiHrXSp@H(Q(Q0%HwFXT87mIWK7T?fSE? zA)|3k-TI>lpl~*`h7M-4phU{T^N&VmBN~=xdK(=a%?Y#t{tYj?)@r z1ORO+RctupaEydT^48x_30ey^Dp=0E(;UKG^j0{kTS`@g>S*k}J#2)!93?O;ec%5$ z(KILD>2KPy1<*iR!f7lIQX$`DhQ!r!IzFt}+@c;^Ki?}|iTti^)DST)xtxNUY+SU;#+|rW8W%<`JB4@?47GwssXkx4jNy_(e&gZymF<0gI* zXnpP9*FgI;>G`>!S8FmfbEk>pjEufz8N@ZmPs{dkRA-cy!>@r)89Gj9$`MrKLSR4o zzE~)Be(biQ-)y_{rC*NhX3lbd`f}g{HxgeHk3G2Ge{JE;Nj_@|#K#Jlf7DRwC!0B4 zgTiCsCIWk{;bb{3zvumGo9-9+5$TIOpeP9YMLsdJcP};!ew}*SBmToL8i)b>eEs%u zfdrX^u-GiL{hg|Nx>MQxdto~SiX14~IbM*oxL-Vj(vs>@;j2WRjdg-Muw5m;xK&^n{w4YAMI4>v|BDOHCs9wJ4Hf zLJ(j;rBo{>Q51dqCCsVx`L`g2Kf}ZFcmSTm-j$f@Z?_CCBpB%9C@gWzD(9*YGU^4A z3-fttZS_d1=)s4mNH5`8OAzq1{+_k1wu4(c7dE1&N_)*wN5lP*aXh4+E5s4laEizL zwV7hq;0}Err35c@$5RsK%k=_oi(WvE8B?6JeMgyewV zf7<~B4veS~Vr|L5A zs)5?3iWuAw{`Ddw>(CqrPx#`hI{8ATV8e{ zU*;XRBS^3sV#I~3ve;E|5ZPyw$(aLg7uPP6hlG_+)&ji!czU%Vb^OJbV^G;HtC#F? zLa?`gk(?!N7*R2>_)(Ko94&E<@zS;7+pL&SS_>_gSrC5f6{3$R*KnKP;T`Y`+7O3; zk5yq5rlm*k|NDxwB6KE8S~5qv2|_5(7>^%eXcIT;Q`I!_0`s5FmIJ6i2k05KfG~wWM2Q&c zo=D@apv%mfBHX+T%2F7jvgLoLzeVoeDjC%>5<)TcvBO4cp4VPQmNa2>IEYRZ{n;Rv4{O(jusJV&5i1Wu zKk6XjdPO6+9p@j}h02kmP}aF|?rtuJ7yl1f=z0QhRP_Bc`id0-c{QE9GaNhzHyetO1JJQnikN{MSliEaBLdvstZ zft{B2anK@EmV`x@6G7nDJws_sm$by2onDMezsdT$gMzq48wNQGW`=&>ZX5F*N+TbS zfxIXMhZ2wk&d_jw1XluY_MIJFb-?oC7?F{Jy>)%F;dA!EU;cQ`*?(NW0x4w%V207!`F{nJn=9SD26Bcp%-6c67Qg+ZmMuzr<( zIWwE>x?kzl=|n7!SrEsj&iP*(6E}tngh5@Cj%M)%4kHZotHjw_1G-9kvN<~3vb6E< zj&d(}n#6Vkeq{ZKqg6chC_x0BrGVB?MrB5wGdUG7tC(J29C{C3|EVId?$h+c&ZBtV z<2kd_X6F8RvXTP$(n`7GP(DRnqjHm8AMKhi;#29#^e042Cs&)OY~F~1A5Ng!TQio# zqKGq@CC=C5#^#Gf!oByFTlIFDgNQ9rFNH`{1dEE6Vz}@(FO_Tp4#9K0lk_Rvl5n1{YxbKgk)?G&;v=O3q4Brdr<4K?kp-*0 zqLfa{yE~CZ`%EOY_5EqU5wD=yIy1h*#fRvW%febH(#J-Wfd1VbtX|04?kH|bm${SL zrl&1W2J`2+=3TMfOGaQV@X1au3h9L;8R-L2gv$7@-M8TfY+AnsbsvY^q4{^r-4j;{ zr1f$6M?3(~`HHfDofJzbe1^U|l0!o#BzKm5Uc{V`4$N~Ss;s@ImyR#eaU%7@0#|U! z`D3s5^PuFzTF|J?L4MPwp;ye&z~1uCfe)CL@WiR_z_lXSIW#ja>ckeRF}ydtQTKyi zXV0vM;$ywMZ|camcJ1KsX!Xu&klp4*FY|K#5vv)9hksUe(sJGIQzXEL6>T*mqw$i^ z<*|T2p1Z(hiB_56Tgy0M(L=(U`qcYJ|iv|hIkgv9Ia(O9pN0HRgP`*wzQI& zM;{yL=*mH$H$^#X3BNb61*aIZNzl0__`F(hIF)N23|-JOAlF*(&lO^F3;qqM;Bd=Q%LqrB}gcYm<=W~Om~=8QSq zpNDmCrQBR7$eK^vb7U&&Na-4mwBSxl{mxBeR@bG@g%pZ?t{gs-GIH{J*0fjQ>fCjkJZ{+ZGZ8dJm`<5KD#S_WS8_*=NK2@9yh#Cl z#DmluXC__JNo&!yS4q3vPF|xO4vRc!n>#JP4{^-ZTXy{9+ykPsvs-JnG~LSh z!$#uEtNBRE*vIsC#8z{Rc#U^><}e1}Wk9<<<4na&L-MV==grmo_E=X3wqEwec#h)W z)VDK5i9@&VM|9=UMw)-~ebZI(GJi00T*_w(p{c{FB6`65ws~>P?3BC_5{RGLb9#>S zCXd}0${A(#;Am;Z9d_~%z=?+X{$uoJY{Gy{a0K3in(?!_lWxe7N^mT`J>e%eu(O4S zzPN6CKvQ9_p&hD^;?R-C%u!traf+f~M6=dtxTQUwbJxjPAX85EIrEL?Q*-x3J?C_J zW>;U)*T(5y&BLLthmPthcL#)F3-D>+$BIZ~I8Q!w>* zz^1+onvBWFk(6UN@=`;EwkszZN&~P_ylq$X#@3Q95+$$H-i#9?u|Hp!(LlZitZ^T~ z*i5-L)=9{Mo^>4WYgQBf6Aa{UO&?+Wx(LR4Ik_0PsXe` z+7zxi0xIOHQIMrW z^`2$s9(M=FBO`4t$9x%4oYKPwG9s`8;(F3voytP!Vw^A~C<}5*gld2sbJ~QY2JaYwpJuHe8CFIZ@?nQ0H*DDNdF)qs#)Wx z6cUh|YX#U=$wzi950@n6e-zBEl6$H2OTAFq0v^MXcDnRs%{49Ay^Y*UP_gBQ`z9rw zlcdU3?Dg^at6FpO1ZkcEFuQL&52n)zODqtg4jG;_Xh zQ56Q7mG8WD$q^YznwglnILmG7MA&kVmQFg(s(is(bcR!cI*vj1LipD3O4op4y^jB| z>j0h*zqX^$n>qLGXG$tv@Pea|e7^QXrEcYW^fWPJN7OV>x$58#p`G^6Q&!^E@Onca z6YXP?K5U0W`wt#Fe)%ciD$zB5#NA;)@lYWK+u2 z=@{>(R*o-SilXc5{$iusLQ3(cY*C`;yxxX&*V~Kjc*Xts%S&TJyLw)S?~?C(17f1~ z*sJzf=EDoTXYhx(>jR-nn(Aii3 zqm9Vkd@31qCG_E;L7PMh;aV4twk7CdW)<)sZPnQW51Wka`IQn8<^7!=)jchw388%G ze^A^bB7by)(ivEQM)}rQV_iXEg*t!=wYmTNOREF+42jT2E+S=RoCllci>ez*LQFFyA-HlkHG*sDdX@A9S4tAmUL{$*$zFe$K{yP7h%bBXt zTL4@83e+Eoye&J;lmuq!(KqvYx@zrn9$wmgG-FeMO0S!a-Qs0)cHI36I12Jl}a7dpyJuYQ_2}e5v&gP1 z1AffjJ}!=R?e!b}b>i_1q60Z$1l(a|x`WuxO6ZQ(`Uox-l#iT{;VC z%|Gp52FL00%)u1DMp^`!)W<2tz?IEc|!(fZ3NmqSO%ZNqUo4^$I?w7Ar^ ztGdA_?FOj zFF}7Px)1D794j)_p%$PIa!z-}T4^cZ_m$R;nS9;%lv`6g^_g8;yy&duNn{jQ_vY)8 zQeTYC5)bux8U7*Eq-E!nL){C#_<^ea!Q42O1BWtW zwQu1Y!nqC1FK$o3yBU!X$aM&=EwC1cymsa9 zBv8HIhxpu$NXT{A*XX_V4>UaVUP?j6zcJ+WUg9Qf-0wqruErBEn1rtPULq!}-UdJL z78(mBxB>kKhFU!P{R8`+TKE@N@NNvve@;!Frw``f+!+2^ij1c`FuJQ~5cY~?R{d#f zIo>!pJ`BWG|7mJkz6Me?2sgQ)-cp99eOBD4^K&f5TDidm9`uK{gUbs0X5LuSE`5Rl zr$#)6X8LS%_Uxwi*;>%3*ijlx!7mYcS0+}?y-a{SILi~_@Oz?B&}30n)>BO44q4k> zfy!+%q+Rg}BBgJCcvTi4*5=Ox4D7sWV&-pK?K>cU7o@2|b}!wZ)8(R3%=KP%SCN8= zEz2F#}g`ROD4ky>#@4+zg@PQuitjW#3jmU>T2{vjn z*XhM~XC@6BC7TJPe?zVzy!e=oW?kwmFi)+g znQdON;=bsF3b=^^tFrqLNhMC+4s3ld!RPE(LHbfqE|6e-{9MMJI1g6oZp^El2+rib zOJrFs*=Y5C145l0M$OHFxD|u`MuB!oa^f6){Dp2bE0f;nWBJKu3#LOU;D*)}=?z0% zgXHQuTWOM+e{F-AS)+%)o-)9*(1LfWGxYKay76rHmFned1qH^+^yTfKK<485zwQoZ zZq`)LtgmQXpC4nTbdpGGj~aW(*oUGjrUA^@edQsBOt;{AYr#EB_UAZn&oO77C56g| zJ6Yf7vlB#6Mx$C?BomWn&DoQ6{+5tpSUk!8dGPPzZlJM1mlk{Koa-+tj+fjKxNagh zRPdRclLg+7XtLVJHjowzcxF76$A-MksYohOM`2_GzyJARudHIxP{=@l6(9zpWUh1) zH6V9$LZuAB&im70N>fy`U4%Cwg*mR+@Y*`eGRu;p+yWA-u2|2j)P$tHQMC+2BmEBt zb(LOq8qWeco$1~YP9!9u+nqXOG)zWW_7~s#pFrvg#Zw5%fDbKSeKs9GX5m1@U-|)1 z+BP`3z@#}`9t^gn3mUV4L=LF&0Yfw+9fRutBJ*nc6$r$}noh80j-HTT!lMSF z0O_IyGV?e%Y&15hGGXDsxdn}*AQ(b;Tr%9@z_b1%X-9c771Ti7lZq~Pm3(Dffstlx zR_3%KSS7w+-llINi8^rGV1f;m!o$s9Mr1Nu;AyG>K}D7O``oip^&rAZ+AW-ccdU!7 z6P=i=^N3A(?-Lx2%p@%i&xk=3bD#=lkXuubvB|yuZ6qkCg?y6dbjM$cjtg9|Ny?kDC^*`S3;W_k%9$t^{&ykx8cW*WY zf$uk~xtAU8YhOawBa+YN`)+C#a7)(Dee>h?@Nhl0>k}(}GimX0Gm}IXk;7A{{5d^x7zEgPMd&vrg0*!bTbojjWFJG6;^l+G8z!Cus5(## zOa7|bkh3r`DyM(%@xbMhlRk;xQ>*8?R10h!qKKKzQ{Hm4^2aCP?vqTY?dV84N0I5z z__$)}B2Zd~b@>tW=XNvfWYYgFHjl@|@(^tYX*=?ijBQD@(X8EreH#3P0(!HeAv+O@ z%JTS3lGySeztjdUE!S%!^v~pe{j+=8tI~EW+6A4_qTBqhCIYcz#W1X5%6@@d!0VdG z8BG?~_9TgG2i0jWZR8DP1CCoU)EFC zNPxzHoApOfo}~9eEqKdLY^Y^z!lXka6d}KPZpEL$>u~Z}*(fqG_g8mmi zf{U*!amP1#(S|HKtJ-`JWJT_`q#Ag_)-03_pf53vDIe5UQY$LO$KvKeCRR7;@a5{B zJhC8CcQS6MO>Qhz9grD#L>tS5@zwgMS0s1iyiAzoPfpsl#GEe$YF6}foqNu`0ktA% zQV$t;GCNfBJCf9h4xa^5<7xYgayGLMBd_1!QzJWF0Ef>;eEQ{wZoAJKiCDMBkzt;l z8#GoZbTkqvg$xoZg#EDXSH<^spMO(L2>3oXfxth?221P@O$LtuttxL^+RK}qhx zdD7kU!{&Dg``5GS=K{jzL(O>za4Wf!fQQ}3;Wy*lxH0sr-rU4MOG_lj219&Pq-PtK zU6)h#3<_$4g#(9AqKk@|8x=pI=vtl7t+?v9!*c}`V1#SHNJko{YJ4ayta0jtvh-lWWYMSSEH@Cz}Z){2gf?qdi@J$vLAZGmq|#E~bDgf#5l{6XFya(T+6-rK>tqoZ?tAsi(e0eLwqKCe7jUB^S+y?0}u>+Ewg?BpcmG zD7Om??rii4Uyn{dO1t`QWxv}p0s-DeWKAUA2i~Q;9G~-=TF%8@yyXF(q`Mjbr_G%C z=1%IHvPaO4j+t|iSdyDVyS{PuT>7IIXLVpXP@xSi_{Y9scqBf6d(qW=d3)qKz1|N18?Mh z?r*M5W==e6UP+PkA}1?*I;&XBEMk@N{}C0K#0BI}X4zabdvZ<}8F)Rrl)rTxo&!PR zJbAh8ifug!m76SA_T*N@@!*SxfxXi7Sy{oaI>wIT&2w2J>9^UZVHfdmmXmwq=~3K? zX`jQ*{vF|zk8fKWy>YD^+>4DTDtjx1mGT=66TjH{=IaBE=-wzO1la$h2MtGsiwjcf zKPt^hktJ_RxD#2;QX~8KBJBUDCDvK89LU9UCuXp6J9UN&nlKe(%_5!=AUlaGo7YV3O`a~sJ6Jqe=JG!TTH;K41 zssT0=n7awKL>$(Y5hhds1hyiWpl?j8uV&J+*0}S%O@!cK$=!Vgt+Pw#8lnyQpBpHBuScrB8q)A32FXC)fcG_G(9WahV5k3eH9f8 z#9$Wn`T!ujw~jNJk$CxnSP>DnofJ%uru5&TGF1o-Z#{?}8W>CnP7$UJCDG*;)Mr2- z%N;|+AQzgYgS=cF4;llMQFTH~qlPdJ1IG7!O3cY-A^Tt&$T|mt4D7xd4ypi_wL;24 z_q88agaKZX2vB=7C}E(oDc42_no>0)X3%xP+}%Ll(=1n-o;q3TpP2pi2{T{;>;;%m zbkT7h3ahvg3Kp$sbQurQ{Npj$Oc+Q~aa|rrN(|9y^^r@qMC^~Y>CEM}^mf{7>$d=< znp*nzcc@Z5MDP!J)N_64%j7rPkG#^|wMr-Z%WC@izgLg-x1x`jiZVFF*9}NLjW3?C z3?9mJB99k`?!0uY2)-1xuR5DJmucz_cqjW0(BS29`|Q}=RMkuB^< zd)NKR>DDNk}$@VAd{4BXMU(2pIhVrhCasl5XM7tiQDn_2OCj3 zv6w@Afp`Q0F)NuJf+6s)o0&CDih%u{i54(OE_oI+;*mee%&g(p%P9Jx5C}MxR zpZmmqOfj&8k%R6wV4pm-k3~|`w2y^R(-hh$Mra($NKeQ+)7^FFqO|SnF6g*zwk*L+ zz~{XyY=@0l%N+!d_|85T@F8zr-cqy#hjS9(wRjM7YEa7bi*cym_MW&j)KMC-rlg(7%lFTVqD2P*Hyo+AVx)?5e1G^ST`E%yT-be1^Dj+yW~5yd zr7j1N&=h+F)>>32LNazqBqP~T_2k@VrZR1pJ1>5_{J1W|>u8I9ZCC2K3Sz3POAO^M_R&k0=DNeBis$ndn>i~@=l-_!x(26Y zkz1D56*V`ZW-;t9b6QPWc-~kK3m3i`PI1y0PRf4*PAs;{2^xS82v#Oj6xU>T&gLVCn%2EUs9Z z*oeNCxYKgTTKsyio39XdYWEYR;|lZVWjGc*ymlkA7* z%|Cn8e3ejRX&sO=`uDc0sKb)Gfhuz9nbV>V@n;c)jtDp|VSIa8i%#aDiRKd+Z2i!+ z83S_38n+M}aHtaqOu%U52W*D-KuWCgNo@P@(DMX)=~QTg?+E}UoFK2(qX1Kn))L%# zgyu5@QI7{pn*485V!zY#IS!05Xf1cm52PYixVULUz;bRaztHP44sjdQlnV3)*x3ZX z6|vgmUnTOYDNJ)v@R>YRTLs!YWOJA^@vh-3B(E-54dPB9K%IOJ43)W*{w!(v&7hT9 zZGx!Am-62i54jYmSdA_WA?joYKyv_ew$jX*Q?+j zm-|@F=sGmGK-vRX^nSCpIq19C@;2DiWx8}`xiCWmCrx+07bD%?eenv;iD>HluJZ(I zq9rco*+hv$WjsEA)mu-@1`CB#)P|yc+~ooegf^G(m90JsP|?Wg_b;@^-YC_IEA$Iw zS*9Ab*BH%OXZ*M(1YRS5-fZ9ILf=UmJRR!4^#K_T{l?}AM~km_&9DLV&1+9=9}`AH zFJqTOT|nQhA<56xP(|Q#l&S8=gW%Y_zVH3D8O*cSXC&~YxNIdy>;tvqu3_b=lm+gT zQJedQj?#MXDj7iN2KQ1NAYcRc{}AU%+OeQRJUV|80*%|b{fnLqgTnzhEr`=3K(cS#--Q91G!%xq^ zcU?hWzp$Z_#hI{fz;;@mV4TwSi#syYRj@mD^SVxO*!vUazQ)#8qC0X2+$SCS+f9Gi zG!t#N*NuU}*}n%hpJ(DajEZZ*hdp|Os}gtQ3?R|t)qa^$QOa~tcReu!({&f{>u_yV z$WNfGY&zso*Jrhm?q|3D>rb-b2-*$#`; zG>~H9=az3t$H7@tbZ(0`CZizSTLEo=*SK%WvjL5esuFA1xDhA1gkokF2M!4mma+C> zzg)llq7TPvCPxwPntqN`ruYLa8v72(rj>m(a!- zn$>T)Pjk6IJB$&-CIc�g>K;-#ckiyIw50J)=*6=cE{gnG1LX$W0 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

      gKeO4Ts|yy$qPhepSo#0Fj}4GBsd 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 V9v6oZPw1|g@GW+BCCvx7{y(lJFCzc| delta 132808 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

      -
      -
      - {{ content }} -
      - -
      - - - - diff --git a/tests/rocm_smi_test/gtest/docs/_sass/main.scss b/tests/rocm_smi_test/gtest/docs/_sass/main.scss deleted file mode 100644 index 92edc877a5..0000000000 --- a/tests/rocm_smi_test/gtest/docs/_sass/main.scss +++ /dev/null @@ -1,200 +0,0 @@ -// Styles for GoogleTest docs website on GitHub Pages. -// Color variables are defined in -// https://github.com/pages-themes/primer/tree/master/_sass/primer-support/lib/variables - -$sidebar-width: 260px; - -body { - display: flex; - margin: 0; -} - -.sidebar { - background: $black; - color: $text-white; - flex-shrink: 0; - height: 100vh; - overflow: auto; - position: sticky; - top: 0; - width: $sidebar-width; -} - -.sidebar h1 { - font-size: 1.5em; -} - -.sidebar h2 { - color: $gray-light; - font-size: 0.8em; - font-weight: normal; - margin-bottom: 0.8em; - padding-left: 2.5em; - text-transform: uppercase; -} - -.sidebar .header { - background: $black; - padding: 2em; - position: sticky; - top: 0; - width: 100%; -} - -.sidebar .header a { - color: $text-white; - text-decoration: none; -} - -.sidebar .nav-toggle { - display: none; -} - -.sidebar .expander { - cursor: pointer; - display: none; - height: 3em; - position: absolute; - right: 1em; - top: 1.5em; - width: 3em; -} - -.sidebar .expander .arrow { - border: solid $white; - border-width: 0 3px 3px 0; - display: block; - height: 0.7em; - margin: 1em auto; - transform: rotate(45deg); - transition: transform 0.5s; - width: 0.7em; -} - -.sidebar nav { - width: 100%; -} - -.sidebar nav ul { - list-style-type: none; - margin-bottom: 1em; - padding: 0; - - &:last-child { - margin-bottom: 2em; - } - - a { - text-decoration: none; - } - - li { - color: $text-white; - padding-left: 2em; - text-decoration: none; - } - - li.active { - background: $border-gray-darker; - font-weight: bold; - } - - li:hover { - background: $border-gray-darker; - } -} - -.main { - background-color: $bg-gray; - width: calc(100% - #{$sidebar-width}); -} - -.main .main-inner { - background-color: $white; - padding: 2em; -} - -.main .footer { - margin: 0; - padding: 2em; -} - -.main table th { - text-align: left; -} - -.main .callout { - border-left: 0.25em solid $white; - padding: 1em; - - a { - text-decoration: underline; - } - - &.important { - background-color: $bg-yellow-light; - border-color: $bg-yellow; - color: $black; - } - - &.note { - background-color: $bg-blue-light; - border-color: $text-blue; - color: $text-blue; - } - - &.tip { - background-color: $green-000; - border-color: $green-700; - color: $green-700; - } - - &.warning { - background-color: $red-000; - border-color: $text-red; - color: $text-red; - } -} - -.main .good pre { - background-color: $bg-green-light; -} - -.main .bad pre { - background-color: $red-000; -} - -@media all and (max-width: 768px) { - body { - flex-direction: column; - } - - .sidebar { - height: auto; - position: relative; - width: 100%; - } - - .sidebar .expander { - display: block; - } - - .sidebar nav { - height: 0; - overflow: hidden; - } - - .sidebar .nav-toggle:checked { - & ~ nav { - height: auto; - } - - & + .expander .arrow { - transform: rotate(-135deg); - } - } - - .main { - width: 100%; - } -} diff --git a/tests/rocm_smi_test/gtest/docs/advanced.md b/tests/rocm_smi_test/gtest/docs/advanced.md deleted file mode 100644 index f2f8854bf3..0000000000 --- a/tests/rocm_smi_test/gtest/docs/advanced.md +++ /dev/null @@ -1,2379 +0,0 @@ -# Advanced googletest Topics - -## Introduction - -Now that you have read the [googletest Primer](primer.md) and learned how to -write tests using googletest, it's time to learn some new tricks. This document -will show you more assertions as well as how to construct complex failure -messages, propagate fatal failures, reuse and speed up your test fixtures, and -use various flags with your tests. - -## More Assertions - -This section covers some less frequently used, but still significant, -assertions. - -### Explicit Success and Failure - -See [Explicit Success and Failure](reference/assertions.md#success-failure) in -the Assertions Reference. - -### Exception Assertions - -See [Exception Assertions](reference/assertions.md#exceptions) in the Assertions -Reference. - -### Predicate Assertions for Better Error Messages - -Even though googletest has a rich set of assertions, they can never be complete, -as it's impossible (nor a good idea) to anticipate all scenarios a user might -run into. Therefore, sometimes a user has to use `EXPECT_TRUE()` to check a -complex expression, for lack of a better macro. This has the problem of not -showing you the values of the parts of the expression, making it hard to -understand what went wrong. As a workaround, some users choose to construct the -failure message by themselves, streaming it into `EXPECT_TRUE()`. However, this -is awkward especially when the expression has side-effects or is expensive to -evaluate. - -googletest gives you three different options to solve this problem: - -#### Using an Existing Boolean Function - -If you already have a function or functor that returns `bool` (or a type that -can be implicitly converted to `bool`), you can use it in a *predicate -assertion* to get the function arguments printed for free. See -[`EXPECT_PRED*`](reference/assertions.md#EXPECT_PRED) in the Assertions -Reference for details. - -#### Using a Function That Returns an AssertionResult - -While `EXPECT_PRED*()` and friends are handy for a quick job, the syntax is not -satisfactory: you have to use different macros for different arities, and it -feels more like Lisp than C++. The `::testing::AssertionResult` class solves -this problem. - -An `AssertionResult` object represents the result of an assertion (whether it's -a success or a failure, and an associated message). You can create an -`AssertionResult` using one of these factory functions: - -```c++ -namespace testing { - -// Returns an AssertionResult object to indicate that an assertion has -// succeeded. -AssertionResult AssertionSuccess(); - -// Returns an AssertionResult object to indicate that an assertion has -// failed. -AssertionResult AssertionFailure(); - -} -``` - -You can then use the `<<` operator to stream messages to the `AssertionResult` -object. - -To provide more readable messages in Boolean assertions (e.g. `EXPECT_TRUE()`), -write a predicate function that returns `AssertionResult` instead of `bool`. For -example, if you define `IsEven()` as: - -```c++ -testing::AssertionResult IsEven(int n) { - if ((n % 2) == 0) - return testing::AssertionSuccess(); - else - return testing::AssertionFailure() << n << " is odd"; -} -``` - -instead of: - -```c++ -bool IsEven(int n) { - return (n % 2) == 0; -} -``` - -the failed assertion `EXPECT_TRUE(IsEven(Fib(4)))` will print: - -```none -Value of: IsEven(Fib(4)) - Actual: false (3 is odd) -Expected: true -``` - -instead of a more opaque - -```none -Value of: IsEven(Fib(4)) - Actual: false -Expected: true -``` - -If you want informative messages in `EXPECT_FALSE` and `ASSERT_FALSE` as well -(one third of Boolean assertions in the Google code base are negative ones), and -are fine with making the predicate slower in the success case, you can supply a -success message: - -```c++ -testing::AssertionResult IsEven(int n) { - if ((n % 2) == 0) - return testing::AssertionSuccess() << n << " is even"; - else - return testing::AssertionFailure() << n << " is odd"; -} -``` - -Then the statement `EXPECT_FALSE(IsEven(Fib(6)))` will print - -```none - Value of: IsEven(Fib(6)) - Actual: true (8 is even) - Expected: false -``` - -#### Using a Predicate-Formatter - -If you find the default message generated by -[`EXPECT_PRED*`](reference/assertions.md#EXPECT_PRED) and -[`EXPECT_TRUE`](reference/assertions.md#EXPECT_TRUE) unsatisfactory, or some -arguments to your predicate do not support streaming to `ostream`, you can -instead use *predicate-formatter assertions* to *fully* customize how the -message is formatted. See -[`EXPECT_PRED_FORMAT*`](reference/assertions.md#EXPECT_PRED_FORMAT) in the -Assertions Reference for details. - -### Floating-Point Comparison - -See [Floating-Point Comparison](reference/assertions.md#floating-point) in the -Assertions Reference. - -#### Floating-Point Predicate-Format Functions - -Some floating-point operations are useful, but not that often used. In order to -avoid an explosion of new macros, we provide them as predicate-format functions -that can be used in the predicate assertion macro -[`EXPECT_PRED_FORMAT2`](reference/assertions.md#EXPECT_PRED_FORMAT), for -example: - -```c++ -using ::testing::FloatLE; -using ::testing::DoubleLE; -... -EXPECT_PRED_FORMAT2(FloatLE, val1, val2); -EXPECT_PRED_FORMAT2(DoubleLE, val1, val2); -``` - -The above code verifies that `val1` is less than, or approximately equal to, -`val2`. - -### Asserting Using gMock Matchers - -See [`EXPECT_THAT`](reference/assertions.md#EXPECT_THAT) in the Assertions -Reference. - -### More String Assertions - -(Please read the [previous](#asserting-using-gmock-matchers) section first if -you haven't.) - -You can use the gMock [string matchers](reference/matchers.md#string-matchers) -with [`EXPECT_THAT`](reference/assertions.md#EXPECT_THAT) to do more string -comparison tricks (sub-string, prefix, suffix, regular expression, and etc). For -example, - -```c++ -using ::testing::HasSubstr; -using ::testing::MatchesRegex; -... - ASSERT_THAT(foo_string, HasSubstr("needle")); - EXPECT_THAT(bar_string, MatchesRegex("\\w*\\d+")); -``` - -### Windows HRESULT assertions - -See [Windows HRESULT Assertions](reference/assertions.md#HRESULT) in the -Assertions Reference. - -### Type Assertions - -You can call the function - -```c++ -::testing::StaticAssertTypeEq(); -``` - -to assert that types `T1` and `T2` are the same. The function does nothing if -the assertion is satisfied. If the types are different, the function call will -fail to compile, the compiler error message will say that `T1 and T2 are not the -same type` and most likely (depending on the compiler) show you the actual -values of `T1` and `T2`. This is mainly useful inside template code. - -**Caveat**: When used inside a member function of a class template or a function -template, `StaticAssertTypeEq()` is effective only if the function is -instantiated. For example, given: - -```c++ -template class Foo { - public: - void Bar() { testing::StaticAssertTypeEq(); } -}; -``` - -the code: - -```c++ -void Test1() { Foo foo; } -``` - -will not generate a compiler error, as `Foo::Bar()` is never actually -instantiated. Instead, you need: - -```c++ -void Test2() { Foo foo; foo.Bar(); } -``` - -to cause a compiler error. - -### Assertion Placement - -You can use assertions in any C++ function. In particular, it doesn't have to be -a method of the test fixture class. The one constraint is that assertions that -generate a fatal failure (`FAIL*` and `ASSERT_*`) can only be used in -void-returning functions. This is a consequence of Google's not using -exceptions. By placing it in a non-void function you'll get a confusing compile -error like `"error: void value not ignored as it ought to be"` or `"cannot -initialize return object of type 'bool' with an rvalue of type 'void'"` or -`"error: no viable conversion from 'void' to 'string'"`. - -If you need to use fatal assertions in a function that returns non-void, one -option is to make the function return the value in an out parameter instead. For -example, you can rewrite `T2 Foo(T1 x)` to `void Foo(T1 x, T2* result)`. You -need to make sure that `*result` contains some sensible value even when the -function returns prematurely. As the function now returns `void`, you can use -any assertion inside of it. - -If changing the function's type is not an option, you should just use assertions -that generate non-fatal failures, such as `ADD_FAILURE*` and `EXPECT_*`. - -{: .callout .note} -NOTE: Constructors and destructors are not considered void-returning functions, -according to the C++ language specification, and so you may not use fatal -assertions in them; you'll get a compilation error if you try. Instead, either -call `abort` and crash the entire test executable, or put the fatal assertion in -a `SetUp`/`TearDown` function; see -[constructor/destructor vs. `SetUp`/`TearDown`](faq.md#CtorVsSetUp) - -{: .callout .warning} -WARNING: A fatal assertion in a helper function (private void-returning method) -called from a constructor or destructor does not terminate the current test, as -your intuition might suggest: it merely returns from the constructor or -destructor early, possibly leaving your object in a partially-constructed or -partially-destructed state! You almost certainly want to `abort` or use -`SetUp`/`TearDown` instead. - -## Skipping test execution - -Related to the assertions `SUCCEED()` and `FAIL()`, you can prevent further test -execution at runtime with the `GTEST_SKIP()` macro. This is useful when you need -to check for preconditions of the system under test during runtime and skip -tests in a meaningful way. - -`GTEST_SKIP()` can be used in individual test cases or in the `SetUp()` methods -of classes derived from either `::testing::Environment` or `::testing::Test`. -For example: - -```c++ -TEST(SkipTest, DoesSkip) { - GTEST_SKIP() << "Skipping single test"; - EXPECT_EQ(0, 1); // Won't fail; it won't be executed -} - -class SkipFixture : public ::testing::Test { - protected: - void SetUp() override { - GTEST_SKIP() << "Skipping all tests for this fixture"; - } -}; - -// Tests for SkipFixture won't be executed. -TEST_F(SkipFixture, SkipsOneTest) { - EXPECT_EQ(5, 7); // Won't fail -} -``` - -As with assertion macros, you can stream a custom message into `GTEST_SKIP()`. - -## Teaching googletest How to Print Your Values - -When a test assertion such as `EXPECT_EQ` fails, googletest prints the argument -values to help you debug. It does this using a user-extensible value printer. - -This printer knows how to print built-in C++ types, native arrays, STL -containers, and any type that supports the `<<` operator. For other types, it -prints the raw bytes in the value and hopes that you the user can figure it out. - -As mentioned earlier, the printer is *extensible*. That means you can teach it -to do a better job at printing your particular type than to dump the bytes. To -do that, define `<<` for your type: - -```c++ -#include - -namespace foo { - -class Bar { // We want googletest to be able to print instances of this. -... - // Create a free inline friend function. - friend std::ostream& operator<<(std::ostream& os, const Bar& bar) { - return os << bar.DebugString(); // whatever needed to print bar to os - } -}; - -// If you can't declare the function in the class it's important that the -// << operator is defined in the SAME namespace that defines Bar. C++'s look-up -// rules rely on that. -std::ostream& operator<<(std::ostream& os, const Bar& bar) { - return os << bar.DebugString(); // whatever needed to print bar to os -} - -} // namespace foo -``` - -Sometimes, this might not be an option: your team may consider it bad style to -have a `<<` operator for `Bar`, or `Bar` may already have a `<<` operator that -doesn't do what you want (and you cannot change it). If so, you can instead -define a `PrintTo()` function like this: - -```c++ -#include - -namespace foo { - -class Bar { - ... - friend void PrintTo(const Bar& bar, std::ostream* os) { - *os << bar.DebugString(); // whatever needed to print bar to os - } -}; - -// If you can't declare the function in the class it's important that PrintTo() -// is defined in the SAME namespace that defines Bar. C++'s look-up rules rely -// on that. -void PrintTo(const Bar& bar, std::ostream* os) { - *os << bar.DebugString(); // whatever needed to print bar to os -} - -} // namespace foo -``` - -If you have defined both `<<` and `PrintTo()`, the latter will be used when -googletest is concerned. This allows you to customize how the value appears in -googletest's output without affecting code that relies on the behavior of its -`<<` operator. - -If you want to print a value `x` using googletest's value printer yourself, just -call `::testing::PrintToString(x)`, which returns an `std::string`: - -```c++ -vector > bar_ints = GetBarIntVector(); - -EXPECT_TRUE(IsCorrectBarIntVector(bar_ints)) - << "bar_ints = " << testing::PrintToString(bar_ints); -``` - -## Death Tests - -In many applications, there are assertions that can cause application failure if -a condition is not met. These consistency checks, which ensure that the program -is in a known good state, are there to fail at the earliest possible time after -some program state is corrupted. If the assertion checks the wrong condition, -then the program may proceed in an erroneous state, which could lead to memory -corruption, security holes, or worse. Hence it is vitally important to test that -such assertion statements work as expected. - -Since these precondition checks cause the processes to die, we call such tests -_death tests_. More generally, any test that checks that a program terminates -(except by throwing an exception) in an expected fashion is also a death test. - -Note that if a piece of code throws an exception, we don't consider it "death" -for the purpose of death tests, as the caller of the code could catch the -exception and avoid the crash. If you want to verify exceptions thrown by your -code, see [Exception Assertions](#ExceptionAssertions). - -If you want to test `EXPECT_*()/ASSERT_*()` failures in your test code, see -["Catching" Failures](#catching-failures). - -### How to Write a Death Test - -GoogleTest provides assertion macros to support death tests. See -[Death Assertions](reference/assertions.md#death) in the Assertions Reference -for details. - -To write a death test, simply use one of the macros inside your test function. -For example, - -```c++ -TEST(MyDeathTest, Foo) { - // This death test uses a compound statement. - ASSERT_DEATH({ - int n = 5; - Foo(&n); - }, "Error on line .* of Foo()"); -} - -TEST(MyDeathTest, NormalExit) { - EXPECT_EXIT(NormalExit(), testing::ExitedWithCode(0), "Success"); -} - -TEST(MyDeathTest, KillProcess) { - EXPECT_EXIT(KillProcess(), testing::KilledBySignal(SIGKILL), - "Sending myself unblockable signal"); -} -``` - -verifies that: - -* calling `Foo(5)` causes the process to die with the given error message, -* calling `NormalExit()` causes the process to print `"Success"` to stderr and - exit with exit code 0, and -* calling `KillProcess()` kills the process with signal `SIGKILL`. - -The test function body may contain other assertions and statements as well, if -necessary. - -Note that a death test only cares about three things: - -1. does `statement` abort or exit the process? -2. (in the case of `ASSERT_EXIT` and `EXPECT_EXIT`) does the exit status - satisfy `predicate`? Or (in the case of `ASSERT_DEATH` and `EXPECT_DEATH`) - is the exit status non-zero? And -3. does the stderr output match `matcher`? - -In particular, if `statement` generates an `ASSERT_*` or `EXPECT_*` failure, it -will **not** cause the death test to fail, as googletest assertions don't abort -the process. - -### Death Test Naming - -{: .callout .important} -IMPORTANT: We strongly recommend you to follow the convention of naming your -**test suite** (not test) `*DeathTest` when it contains a death test, as -demonstrated in the above example. The -[Death Tests And Threads](#death-tests-and-threads) section below explains why. - -If a test fixture class is shared by normal tests and death tests, you can use -`using` or `typedef` to introduce an alias for the fixture class and avoid -duplicating its code: - -```c++ -class FooTest : public testing::Test { ... }; - -using FooDeathTest = FooTest; - -TEST_F(FooTest, DoesThis) { - // normal test -} - -TEST_F(FooDeathTest, DoesThat) { - // death test -} -``` - -### Regular Expression Syntax - -On POSIX systems (e.g. Linux, Cygwin, and Mac), googletest uses the -[POSIX extended regular expression](http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html#tag_09_04) -syntax. To learn about this syntax, you may want to read this -[Wikipedia entry](http://en.wikipedia.org/wiki/Regular_expression#POSIX_Extended_Regular_Expressions). - -On Windows, googletest uses its own simple regular expression implementation. It -lacks many features. For example, we don't support union (`"x|y"`), grouping -(`"(xy)"`), brackets (`"[xy]"`), and repetition count (`"x{5,7}"`), among -others. Below is what we do support (`A` denotes a literal character, period -(`.`), or a single `\\ ` escape sequence; `x` and `y` denote regular -expressions.): - -Expression | Meaning ----------- | -------------------------------------------------------------- -`c` | matches any literal character `c` -`\\d` | matches any decimal digit -`\\D` | matches any character that's not a decimal digit -`\\f` | matches `\f` -`\\n` | matches `\n` -`\\r` | matches `\r` -`\\s` | matches any ASCII whitespace, including `\n` -`\\S` | matches any character that's not a whitespace -`\\t` | matches `\t` -`\\v` | matches `\v` -`\\w` | matches any letter, `_`, or decimal digit -`\\W` | matches any character that `\\w` doesn't match -`\\c` | matches any literal character `c`, which must be a punctuation -`.` | matches any single character except `\n` -`A?` | matches 0 or 1 occurrences of `A` -`A*` | matches 0 or many occurrences of `A` -`A+` | matches 1 or many occurrences of `A` -`^` | matches the beginning of a string (not that of each line) -`$` | matches the end of a string (not that of each line) -`xy` | matches `x` followed by `y` - -To help you determine which capability is available on your system, googletest -defines macros to govern which regular expression it is using. The macros are: -`GTEST_USES_SIMPLE_RE=1` or `GTEST_USES_POSIX_RE=1`. If you want your death -tests to work in all cases, you can either `#if` on these macros or use the more -limited syntax only. - -### How It Works - -See [Death Assertions](reference/assertions.md#death) in the Assertions -Reference. - -### Death Tests And Threads - -The reason for the two death test styles has to do with thread safety. Due to -well-known problems with forking in the presence of threads, death tests should -be run in a single-threaded context. Sometimes, however, it isn't feasible to -arrange that kind of environment. For example, statically-initialized modules -may start threads before main is ever reached. Once threads have been created, -it may be difficult or impossible to clean them up. - -googletest has three features intended to raise awareness of threading issues. - -1. A warning is emitted if multiple threads are running when a death test is - encountered. -2. Test suites with a name ending in "DeathTest" are run before all other - tests. -3. It uses `clone()` instead of `fork()` to spawn the child process on Linux - (`clone()` is not available on Cygwin and Mac), as `fork()` is more likely - to cause the child to hang when the parent process has multiple threads. - -It's perfectly fine to create threads inside a death test statement; they are -executed in a separate process and cannot affect the parent. - -### Death Test Styles - -The "threadsafe" death test style was introduced in order to help mitigate the -risks of testing in a possibly multithreaded environment. It trades increased -test execution time (potentially dramatically so) for improved thread safety. - -The automated testing framework does not set the style flag. You can choose a -particular style of death tests by setting the flag programmatically: - -```c++ -GTEST_FLAG_SET(death_test_style, "threadsafe") -``` - -You can do this in `main()` to set the style for all death tests in the binary, -or in individual tests. Recall that flags are saved before running each test and -restored afterwards, so you need not do that yourself. For example: - -```c++ -int main(int argc, char** argv) { - testing::InitGoogleTest(&argc, argv); - GTEST_FLAG_SET(death_test_style, "fast"); - return RUN_ALL_TESTS(); -} - -TEST(MyDeathTest, TestOne) { - GTEST_FLAG_SET(death_test_style, "threadsafe"); - // This test is run in the "threadsafe" style: - ASSERT_DEATH(ThisShouldDie(), ""); -} - -TEST(MyDeathTest, TestTwo) { - // This test is run in the "fast" style: - ASSERT_DEATH(ThisShouldDie(), ""); -} -``` - -### Caveats - -The `statement` argument of `ASSERT_EXIT()` can be any valid C++ statement. If -it leaves the current function via a `return` statement or by throwing an -exception, the death test is considered to have failed. Some googletest macros -may return from the current function (e.g. `ASSERT_TRUE()`), so be sure to avoid -them in `statement`. - -Since `statement` runs in the child process, any in-memory side effect (e.g. -modifying a variable, releasing memory, etc) it causes will *not* be observable -in the parent process. In particular, if you release memory in a death test, -your program will fail the heap check as the parent process will never see the -memory reclaimed. To solve this problem, you can - -1. try not to free memory in a death test; -2. free the memory again in the parent process; or -3. do not use the heap checker in your program. - -Due to an implementation detail, you cannot place multiple death test assertions -on the same line; otherwise, compilation will fail with an unobvious error -message. - -Despite the improved thread safety afforded by the "threadsafe" style of death -test, thread problems such as deadlock are still possible in the presence of -handlers registered with `pthread_atfork(3)`. - -## Using Assertions in Sub-routines - -{: .callout .note} -Note: If you want to put a series of test assertions in a subroutine to check -for a complex condition, consider using -[a custom GMock matcher](gmock_cook_book.md#NewMatchers) instead. This lets you -provide a more readable error message in case of failure and avoid all of the -issues described below. - -### Adding Traces to Assertions - -If a test sub-routine is called from several places, when an assertion inside it -fails, it can be hard to tell which invocation of the sub-routine the failure is -from. You can alleviate this problem using extra logging or custom failure -messages, but that usually clutters up your tests. A better solution is to use -the `SCOPED_TRACE` macro or the `ScopedTrace` utility: - -```c++ -SCOPED_TRACE(message); -``` - -```c++ -ScopedTrace trace("file_path", line_number, message); -``` - -where `message` can be anything streamable to `std::ostream`. `SCOPED_TRACE` -macro will cause the current file name, line number, and the given message to be -added in every failure message. `ScopedTrace` accepts explicit file name and -line number in arguments, which is useful for writing test helpers. The effect -will be undone when the control leaves the current lexical scope. - -For example, - -```c++ -10: void Sub1(int n) { -11: EXPECT_EQ(Bar(n), 1); -12: EXPECT_EQ(Bar(n + 1), 2); -13: } -14: -15: TEST(FooTest, Bar) { -16: { -17: SCOPED_TRACE("A"); // This trace point will be included in -18: // every failure in this scope. -19: Sub1(1); -20: } -21: // Now it won't. -22: Sub1(9); -23: } -``` - -could result in messages like these: - -```none -path/to/foo_test.cc:11: Failure -Value of: Bar(n) -Expected: 1 - Actual: 2 -Google Test trace: -path/to/foo_test.cc:17: A - -path/to/foo_test.cc:12: Failure -Value of: Bar(n + 1) -Expected: 2 - Actual: 3 -``` - -Without the trace, it would've been difficult to know which invocation of -`Sub1()` the two failures come from respectively. (You could add an extra -message to each assertion in `Sub1()` to indicate the value of `n`, but that's -tedious.) - -Some tips on using `SCOPED_TRACE`: - -1. With a suitable message, it's often enough to use `SCOPED_TRACE` at the - beginning of a sub-routine, instead of at each call site. -2. When calling sub-routines inside a loop, make the loop iterator part of the - message in `SCOPED_TRACE` such that you can know which iteration the failure - is from. -3. Sometimes the line number of the trace point is enough for identifying the - particular invocation of a sub-routine. In this case, you don't have to - choose a unique message for `SCOPED_TRACE`. You can simply use `""`. -4. You can use `SCOPED_TRACE` in an inner scope when there is one in the outer - scope. In this case, all active trace points will be included in the failure - messages, in reverse order they are encountered. -5. The trace dump is clickable in Emacs - hit `return` on a line number and - you'll be taken to that line in the source file! - -### Propagating Fatal Failures - -A common pitfall when using `ASSERT_*` and `FAIL*` is not understanding that -when they fail they only abort the _current function_, not the entire test. For -example, the following test will segfault: - -```c++ -void Subroutine() { - // Generates a fatal failure and aborts the current function. - ASSERT_EQ(1, 2); - - // The following won't be executed. - ... -} - -TEST(FooTest, Bar) { - Subroutine(); // The intended behavior is for the fatal failure - // in Subroutine() to abort the entire test. - - // The actual behavior: the function goes on after Subroutine() returns. - int* p = nullptr; - *p = 3; // Segfault! -} -``` - -To alleviate this, googletest provides three different solutions. You could use -either exceptions, the `(ASSERT|EXPECT)_NO_FATAL_FAILURE` assertions or the -`HasFatalFailure()` function. They are described in the following two -subsections. - -#### Asserting on Subroutines with an exception - -The following code can turn ASSERT-failure into an exception: - -```c++ -class ThrowListener : public testing::EmptyTestEventListener { - void OnTestPartResult(const testing::TestPartResult& result) override { - if (result.type() == testing::TestPartResult::kFatalFailure) { - throw testing::AssertionException(result); - } - } -}; -int main(int argc, char** argv) { - ... - testing::UnitTest::GetInstance()->listeners().Append(new ThrowListener); - return RUN_ALL_TESTS(); -} -``` - -This listener should be added after other listeners if you have any, otherwise -they won't see failed `OnTestPartResult`. - -#### Asserting on Subroutines - -As shown above, if your test calls a subroutine that has an `ASSERT_*` failure -in it, the test will continue after the subroutine returns. This may not be what -you want. - -Often people want fatal failures to propagate like exceptions. For that -googletest offers the following macros: - -Fatal assertion | Nonfatal assertion | Verifies -------------------------------------- | ------------------------------------- | -------- -`ASSERT_NO_FATAL_FAILURE(statement);` | `EXPECT_NO_FATAL_FAILURE(statement);` | `statement` doesn't generate any new fatal failures in the current thread. - -Only failures in the thread that executes the assertion are checked to determine -the result of this type of assertions. If `statement` creates new threads, -failures in these threads are ignored. - -Examples: - -```c++ -ASSERT_NO_FATAL_FAILURE(Foo()); - -int i; -EXPECT_NO_FATAL_FAILURE({ - i = Bar(); -}); -``` - -Assertions from multiple threads are currently not supported on Windows. - -#### Checking for Failures in the Current Test - -`HasFatalFailure()` in the `::testing::Test` class returns `true` if an -assertion in the current test has suffered a fatal failure. This allows -functions to catch fatal failures in a sub-routine and return early. - -```c++ -class Test { - public: - ... - static bool HasFatalFailure(); -}; -``` - -The typical usage, which basically simulates the behavior of a thrown exception, -is: - -```c++ -TEST(FooTest, Bar) { - Subroutine(); - // Aborts if Subroutine() had a fatal failure. - if (HasFatalFailure()) return; - - // The following won't be executed. - ... -} -``` - -If `HasFatalFailure()` is used outside of `TEST()` , `TEST_F()` , or a test -fixture, you must add the `::testing::Test::` prefix, as in: - -```c++ -if (testing::Test::HasFatalFailure()) return; -``` - -Similarly, `HasNonfatalFailure()` returns `true` if the current test has at -least one non-fatal failure, and `HasFailure()` returns `true` if the current -test has at least one failure of either kind. - -## Logging Additional Information - -In your test code, you can call `RecordProperty("key", value)` to log additional -information, where `value` can be either a string or an `int`. The *last* value -recorded for a key will be emitted to the -[XML output](#generating-an-xml-report) if you specify one. For example, the -test - -```c++ -TEST_F(WidgetUsageTest, MinAndMaxWidgets) { - RecordProperty("MaximumWidgets", ComputeMaxUsage()); - RecordProperty("MinimumWidgets", ComputeMinUsage()); -} -``` - -will output XML like this: - -```xml - ... - - ... -``` - -{: .callout .note} -> NOTE: -> -> * `RecordProperty()` is a static member of the `Test` class. Therefore it -> needs to be prefixed with `::testing::Test::` if used outside of the -> `TEST` body and the test fixture class. -> * *`key`* must be a valid XML attribute name, and cannot conflict with the -> ones already used by googletest (`name`, `status`, `time`, `classname`, -> `type_param`, and `value_param`). -> * Calling `RecordProperty()` outside of the lifespan of a test is allowed. -> If it's called outside of a test but between a test suite's -> `SetUpTestSuite()` and `TearDownTestSuite()` methods, it will be -> attributed to the XML element for the test suite. If it's called outside -> of all test suites (e.g. in a test environment), it will be attributed to -> the top-level XML element. - -## Sharing Resources Between Tests in the Same Test Suite - -googletest creates a new test fixture object for each test in order to make -tests independent and easier to debug. However, sometimes tests use resources -that are expensive to set up, making the one-copy-per-test model prohibitively -expensive. - -If the tests don't change the resource, there's no harm in their sharing a -single resource copy. So, in addition to per-test set-up/tear-down, googletest -also supports per-test-suite set-up/tear-down. To use it: - -1. In your test fixture class (say `FooTest` ), declare as `static` some member - variables to hold the shared resources. -2. Outside your test fixture class (typically just below it), define those - member variables, optionally giving them initial values. -3. In the same test fixture class, define a `static void SetUpTestSuite()` - function (remember not to spell it as **`SetupTestSuite`** with a small - `u`!) to set up the shared resources and a `static void TearDownTestSuite()` - function to tear them down. - -That's it! googletest automatically calls `SetUpTestSuite()` before running the -*first test* in the `FooTest` test suite (i.e. before creating the first -`FooTest` object), and calls `TearDownTestSuite()` after running the *last test* -in it (i.e. after deleting the last `FooTest` object). In between, the tests can -use the shared resources. - -Remember that the test order is undefined, so your code can't depend on a test -preceding or following another. Also, the tests must either not modify the state -of any shared resource, or, if they do modify the state, they must restore the -state to its original value before passing control to the next test. - -Note that `SetUpTestSuite()` may be called multiple times for a test fixture -class that has derived classes, so you should not expect code in the function -body to be run only once. Also, derived classes still have access to shared -resources defined as static members, so careful consideration is needed when -managing shared resources to avoid memory leaks. - -Here's an example of per-test-suite set-up and tear-down: - -```c++ -class FooTest : public testing::Test { - protected: - // Per-test-suite set-up. - // Called before the first test in this test suite. - // Can be omitted if not needed. - static void SetUpTestSuite() { - // Avoid reallocating static objects if called in subclasses of FooTest. - if (shared_resource_ == nullptr) { - shared_resource_ = new ...; - } - } - - // Per-test-suite tear-down. - // Called after the last test in this test suite. - // Can be omitted if not needed. - static void TearDownTestSuite() { - delete shared_resource_; - shared_resource_ = nullptr; - } - - // You can define per-test set-up logic as usual. - void SetUp() override { ... } - - // You can define per-test tear-down logic as usual. - void TearDown() override { ... } - - // Some expensive resource shared by all tests. - static T* shared_resource_; -}; - -T* FooTest::shared_resource_ = nullptr; - -TEST_F(FooTest, Test1) { - ... you can refer to shared_resource_ here ... -} - -TEST_F(FooTest, Test2) { - ... you can refer to shared_resource_ here ... -} -``` - -{: .callout .note} -NOTE: Though the above code declares `SetUpTestSuite()` protected, it may -sometimes be necessary to declare it public, such as when using it with -`TEST_P`. - -## Global Set-Up and Tear-Down - -Just as you can do set-up and tear-down at the test level and the test suite -level, you can also do it at the test program level. Here's how. - -First, you subclass the `::testing::Environment` class to define a test -environment, which knows how to set-up and tear-down: - -```c++ -class Environment : public ::testing::Environment { - public: - ~Environment() override {} - - // Override this to define how to set up the environment. - void SetUp() override {} - - // Override this to define how to tear down the environment. - void TearDown() override {} -}; -``` - -Then, you register an instance of your environment class with googletest by -calling the `::testing::AddGlobalTestEnvironment()` function: - -```c++ -Environment* AddGlobalTestEnvironment(Environment* env); -``` - -Now, when `RUN_ALL_TESTS()` is called, it first calls the `SetUp()` method of -each environment object, then runs the tests if none of the environments -reported fatal failures and `GTEST_SKIP()` was not called. `RUN_ALL_TESTS()` -always calls `TearDown()` with each environment object, regardless of whether or -not the tests were run. - -It's OK to register multiple environment objects. In this suite, their `SetUp()` -will be called in the order they are registered, and their `TearDown()` will be -called in the reverse order. - -Note that googletest takes ownership of the registered environment objects. -Therefore **do not delete them** by yourself. - -You should call `AddGlobalTestEnvironment()` before `RUN_ALL_TESTS()` is called, -probably in `main()`. If you use `gtest_main`, you need to call this before -`main()` starts for it to take effect. One way to do this is to define a global -variable like this: - -```c++ -testing::Environment* const foo_env = - testing::AddGlobalTestEnvironment(new FooEnvironment); -``` - -However, we strongly recommend you to write your own `main()` and call -`AddGlobalTestEnvironment()` there, as relying on initialization of global -variables makes the code harder to read and may cause problems when you register -multiple environments from different translation units and the environments have -dependencies among them (remember that the compiler doesn't guarantee the order -in which global variables from different translation units are initialized). - -## Value-Parameterized Tests - -*Value-parameterized tests* allow you to test your code with different -parameters without writing multiple copies of the same test. This is useful in a -number of situations, for example: - -* You have a piece of code whose behavior is affected by one or more - command-line flags. You want to make sure your code performs correctly for - various values of those flags. -* You want to test different implementations of an OO interface. -* You want to test your code over various inputs (a.k.a. data-driven testing). - This feature is easy to abuse, so please exercise your good sense when doing - it! - -### How to Write Value-Parameterized Tests - -To write value-parameterized tests, first you should define a fixture class. It -must be derived from both `testing::Test` and `testing::WithParamInterface` -(the latter is a pure interface), where `T` is the type of your parameter -values. For convenience, you can just derive the fixture class from -`testing::TestWithParam`, which itself is derived from both `testing::Test` -and `testing::WithParamInterface`. `T` can be any copyable type. If it's a -raw pointer, you are responsible for managing the lifespan of the pointed -values. - -{: .callout .note} -NOTE: If your test fixture defines `SetUpTestSuite()` or `TearDownTestSuite()` -they must be declared **public** rather than **protected** in order to use -`TEST_P`. - -```c++ -class FooTest : - public testing::TestWithParam { - // You can implement all the usual fixture class members here. - // To access the test parameter, call GetParam() from class - // TestWithParam. -}; - -// Or, when you want to add parameters to a pre-existing fixture class: -class BaseTest : public testing::Test { - ... -}; -class BarTest : public BaseTest, - public testing::WithParamInterface { - ... -}; -``` - -Then, use the `TEST_P` macro to define as many test patterns using this fixture -as you want. The `_P` suffix is for "parameterized" or "pattern", whichever you -prefer to think. - -```c++ -TEST_P(FooTest, DoesBlah) { - // Inside a test, access the test parameter with the GetParam() method - // of the TestWithParam class: - EXPECT_TRUE(foo.Blah(GetParam())); - ... -} - -TEST_P(FooTest, HasBlahBlah) { - ... -} -``` - -Finally, you can use the `INSTANTIATE_TEST_SUITE_P` macro to instantiate the -test suite with any set of parameters you want. GoogleTest defines a number of -functions for generating test parameters—see details at -[`INSTANTIATE_TEST_SUITE_P`](reference/testing.md#INSTANTIATE_TEST_SUITE_P) in -the Testing Reference. - -For example, the following statement will instantiate tests from the `FooTest` -test suite each with parameter values `"meeny"`, `"miny"`, and `"moe"` using the -[`Values`](reference/testing.md#param-generators) parameter generator: - -```c++ -INSTANTIATE_TEST_SUITE_P(MeenyMinyMoe, - FooTest, - testing::Values("meeny", "miny", "moe")); -``` - -{: .callout .note} -NOTE: The code above must be placed at global or namespace scope, not at -function scope. - -The first argument to `INSTANTIATE_TEST_SUITE_P` is a unique name for the -instantiation of the test suite. The next argument is the name of the test -pattern, and the last is the -[parameter generator](reference/testing.md#param-generators). - -You can instantiate a test pattern more than once, so to distinguish different -instances of the pattern, the instantiation name is added as a prefix to the -actual test suite name. Remember to pick unique prefixes for different -instantiations. The tests from the instantiation above will have these names: - -* `MeenyMinyMoe/FooTest.DoesBlah/0` for `"meeny"` -* `MeenyMinyMoe/FooTest.DoesBlah/1` for `"miny"` -* `MeenyMinyMoe/FooTest.DoesBlah/2` for `"moe"` -* `MeenyMinyMoe/FooTest.HasBlahBlah/0` for `"meeny"` -* `MeenyMinyMoe/FooTest.HasBlahBlah/1` for `"miny"` -* `MeenyMinyMoe/FooTest.HasBlahBlah/2` for `"moe"` - -You can use these names in [`--gtest_filter`](#running-a-subset-of-the-tests). - -The following statement will instantiate all tests from `FooTest` again, each -with parameter values `"cat"` and `"dog"` using the -[`ValuesIn`](reference/testing.md#param-generators) parameter generator: - -```c++ -const char* pets[] = {"cat", "dog"}; -INSTANTIATE_TEST_SUITE_P(Pets, FooTest, testing::ValuesIn(pets)); -``` - -The tests from the instantiation above will have these names: - -* `Pets/FooTest.DoesBlah/0` for `"cat"` -* `Pets/FooTest.DoesBlah/1` for `"dog"` -* `Pets/FooTest.HasBlahBlah/0` for `"cat"` -* `Pets/FooTest.HasBlahBlah/1` for `"dog"` - -Please note that `INSTANTIATE_TEST_SUITE_P` will instantiate *all* tests in the -given test suite, whether their definitions come before or *after* the -`INSTANTIATE_TEST_SUITE_P` statement. - -Additionally, by default, every `TEST_P` without a corresponding -`INSTANTIATE_TEST_SUITE_P` causes a failing test in test suite -`GoogleTestVerification`. If you have a test suite where that omission is not an -error, for example it is in a library that may be linked in for other reasons or -where the list of test cases is dynamic and may be empty, then this check can be -suppressed by tagging the test suite: - -```c++ -GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(FooTest); -``` - -You can see [sample7_unittest.cc] and [sample8_unittest.cc] for more examples. - -[sample7_unittest.cc]: https://github.com/google/googletest/blob/master/googletest/samples/sample7_unittest.cc "Parameterized Test example" -[sample8_unittest.cc]: https://github.com/google/googletest/blob/master/googletest/samples/sample8_unittest.cc "Parameterized Test example with multiple parameters" - -### Creating Value-Parameterized Abstract Tests - -In the above, we define and instantiate `FooTest` in the *same* source file. -Sometimes you may want to define value-parameterized tests in a library and let -other people instantiate them later. This pattern is known as *abstract tests*. -As an example of its application, when you are designing an interface you can -write a standard suite of abstract tests (perhaps using a factory function as -the test parameter) that all implementations of the interface are expected to -pass. When someone implements the interface, they can instantiate your suite to -get all the interface-conformance tests for free. - -To define abstract tests, you should organize your code like this: - -1. Put the definition of the parameterized test fixture class (e.g. `FooTest`) - in a header file, say `foo_param_test.h`. Think of this as *declaring* your - abstract tests. -2. Put the `TEST_P` definitions in `foo_param_test.cc`, which includes - `foo_param_test.h`. Think of this as *implementing* your abstract tests. - -Once they are defined, you can instantiate them by including `foo_param_test.h`, -invoking `INSTANTIATE_TEST_SUITE_P()`, and depending on the library target that -contains `foo_param_test.cc`. You can instantiate the same abstract test suite -multiple times, possibly in different source files. - -### Specifying Names for Value-Parameterized Test Parameters - -The optional last argument to `INSTANTIATE_TEST_SUITE_P()` allows the user to -specify a function or functor that generates custom test name suffixes based on -the test parameters. The function should accept one argument of type -`testing::TestParamInfo`, and return `std::string`. - -`testing::PrintToStringParamName` is a builtin test suffix generator that -returns the value of `testing::PrintToString(GetParam())`. It does not work for -`std::string` or C strings. - -{: .callout .note} -NOTE: test names must be non-empty, unique, and may only contain ASCII -alphanumeric characters. In particular, they -[should not contain underscores](faq.md#why-should-test-suite-names-and-test-names-not-contain-underscore) - -```c++ -class MyTestSuite : public testing::TestWithParam {}; - -TEST_P(MyTestSuite, MyTest) -{ - std::cout << "Example Test Param: " << GetParam() << std::endl; -} - -INSTANTIATE_TEST_SUITE_P(MyGroup, MyTestSuite, testing::Range(0, 10), - testing::PrintToStringParamName()); -``` - -Providing a custom functor allows for more control over test parameter name -generation, especially for types where the automatic conversion does not -generate helpful parameter names (e.g. strings as demonstrated above). The -following example illustrates this for multiple parameters, an enumeration type -and a string, and also demonstrates how to combine generators. It uses a lambda -for conciseness: - -```c++ -enum class MyType { MY_FOO = 0, MY_BAR = 1 }; - -class MyTestSuite : public testing::TestWithParam> { -}; - -INSTANTIATE_TEST_SUITE_P( - MyGroup, MyTestSuite, - testing::Combine( - testing::Values(MyType::MY_FOO, MyType::MY_BAR), - testing::Values("A", "B")), - [](const testing::TestParamInfo& info) { - std::string name = absl::StrCat( - std::get<0>(info.param) == MyType::MY_FOO ? "Foo" : "Bar", - std::get<1>(info.param)); - absl::c_replace_if(name, [](char c) { return !std::isalnum(c); }, '_'); - return name; - }); -``` - -## Typed Tests - -Suppose you have multiple implementations of the same interface and want to make -sure that all of them satisfy some common requirements. Or, you may have defined -several types that are supposed to conform to the same "concept" and you want to -verify it. In both cases, you want the same test logic repeated for different -types. - -While you can write one `TEST` or `TEST_F` for each type you want to test (and -you may even factor the test logic into a function template that you invoke from -the `TEST`), it's tedious and doesn't scale: if you want `m` tests over `n` -types, you'll end up writing `m*n` `TEST`s. - -*Typed tests* allow you to repeat the same test logic over a list of types. You -only need to write the test logic once, although you must know the type list -when writing typed tests. Here's how you do it: - -First, define a fixture class template. It should be parameterized by a type. -Remember to derive it from `::testing::Test`: - -```c++ -template -class FooTest : public testing::Test { - public: - ... - using List = std::list; - static T shared_; - T value_; -}; -``` - -Next, associate a list of types with the test suite, which will be repeated for -each type in the list: - -```c++ -using MyTypes = ::testing::Types; -TYPED_TEST_SUITE(FooTest, MyTypes); -``` - -The type alias (`using` or `typedef`) is necessary for the `TYPED_TEST_SUITE` -macro to parse correctly. Otherwise the compiler will think that each comma in -the type list introduces a new macro argument. - -Then, use `TYPED_TEST()` instead of `TEST_F()` to define a typed test for this -test suite. You can repeat this as many times as you want: - -```c++ -TYPED_TEST(FooTest, DoesBlah) { - // Inside a test, refer to the special name TypeParam to get the type - // parameter. Since we are inside a derived class template, C++ requires - // us to visit the members of FooTest via 'this'. - TypeParam n = this->value_; - - // To visit static members of the fixture, add the 'TestFixture::' - // prefix. - n += TestFixture::shared_; - - // To refer to typedefs in the fixture, add the 'typename TestFixture::' - // prefix. The 'typename' is required to satisfy the compiler. - typename TestFixture::List values; - - values.push_back(n); - ... -} - -TYPED_TEST(FooTest, HasPropertyA) { ... } -``` - -You can see [sample6_unittest.cc] for a complete example. - -[sample6_unittest.cc]: https://github.com/google/googletest/blob/master/googletest/samples/sample6_unittest.cc "Typed Test example" - -## Type-Parameterized Tests - -*Type-parameterized tests* are like typed tests, except that they don't require -you to know the list of types ahead of time. Instead, you can define the test -logic first and instantiate it with different type lists later. You can even -instantiate it more than once in the same program. - -If you are designing an interface or concept, you can define a suite of -type-parameterized tests to verify properties that any valid implementation of -the interface/concept should have. Then, the author of each implementation can -just instantiate the test suite with their type to verify that it conforms to -the requirements, without having to write similar tests repeatedly. Here's an -example: - -First, define a fixture class template, as we did with typed tests: - -```c++ -template -class FooTest : public testing::Test { - ... -}; -``` - -Next, declare that you will define a type-parameterized test suite: - -```c++ -TYPED_TEST_SUITE_P(FooTest); -``` - -Then, use `TYPED_TEST_P()` to define a type-parameterized test. You can repeat -this as many times as you want: - -```c++ -TYPED_TEST_P(FooTest, DoesBlah) { - // Inside a test, refer to TypeParam to get the type parameter. - TypeParam n = 0; - ... -} - -TYPED_TEST_P(FooTest, HasPropertyA) { ... } -``` - -Now the tricky part: you need to register all test patterns using the -`REGISTER_TYPED_TEST_SUITE_P` macro before you can instantiate them. The first -argument of the macro is the test suite name; the rest are the names of the -tests in this test suite: - -```c++ -REGISTER_TYPED_TEST_SUITE_P(FooTest, - DoesBlah, HasPropertyA); -``` - -Finally, you are free to instantiate the pattern with the types you want. If you -put the above code in a header file, you can `#include` it in multiple C++ -source files and instantiate it multiple times. - -```c++ -using MyTypes = ::testing::Types; -INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); -``` - -To distinguish different instances of the pattern, the first argument to the -`INSTANTIATE_TYPED_TEST_SUITE_P` macro is a prefix that will be added to the -actual test suite name. Remember to pick unique prefixes for different -instances. - -In the special case where the type list contains only one type, you can write -that type directly without `::testing::Types<...>`, like this: - -```c++ -INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, int); -``` - -You can see [sample6_unittest.cc] for a complete example. - -## Testing Private Code - -If you change your software's internal implementation, your tests should not -break as long as the change is not observable by users. Therefore, **per the -black-box testing principle, most of the time you should test your code through -its public interfaces.** - -**If you still find yourself needing to test internal implementation code, -consider if there's a better design.** The desire to test internal -implementation is often a sign that the class is doing too much. Consider -extracting an implementation class, and testing it. Then use that implementation -class in the original class. - -If you absolutely have to test non-public interface code though, you can. There -are two cases to consider: - -* Static functions ( *not* the same as static member functions!) or unnamed - namespaces, and -* Private or protected class members - -To test them, we use the following special techniques: - -* Both static functions and definitions/declarations in an unnamed namespace - are only visible within the same translation unit. To test them, you can - `#include` the entire `.cc` file being tested in your `*_test.cc` file. - (#including `.cc` files is not a good way to reuse code - you should not do - this in production code!) - - However, a better approach is to move the private code into the - `foo::internal` namespace, where `foo` is the namespace your project - normally uses, and put the private declarations in a `*-internal.h` file. - Your production `.cc` files and your tests are allowed to include this - internal header, but your clients are not. This way, you can fully test your - internal implementation without leaking it to your clients. - -* Private class members are only accessible from within the class or by - friends. To access a class' private members, you can declare your test - fixture as a friend to the class and define accessors in your fixture. Tests - using the fixture can then access the private members of your production - class via the accessors in the fixture. Note that even though your fixture - is a friend to your production class, your tests are not automatically - friends to it, as they are technically defined in sub-classes of the - fixture. - - Another way to test private members is to refactor them into an - implementation class, which is then declared in a `*-internal.h` file. Your - clients aren't allowed to include this header but your tests can. Such is - called the - [Pimpl](https://www.gamedev.net/articles/programming/general-and-gameplay-programming/the-c-pimpl-r1794/) - (Private Implementation) idiom. - - Or, you can declare an individual test as a friend of your class by adding - this line in the class body: - - ```c++ - FRIEND_TEST(TestSuiteName, TestName); - ``` - - For example, - - ```c++ - // foo.h - class Foo { - ... - private: - FRIEND_TEST(FooTest, BarReturnsZeroOnNull); - - int Bar(void* x); - }; - - // foo_test.cc - ... - TEST(FooTest, BarReturnsZeroOnNull) { - Foo foo; - EXPECT_EQ(foo.Bar(NULL), 0); // Uses Foo's private member Bar(). - } - ``` - - Pay special attention when your class is defined in a namespace. If you want - your test fixtures and tests to be friends of your class, then they must be - defined in the exact same namespace (no anonymous or inline namespaces). - - For example, if the code to be tested looks like: - - ```c++ - namespace my_namespace { - - class Foo { - friend class FooTest; - FRIEND_TEST(FooTest, Bar); - FRIEND_TEST(FooTest, Baz); - ... definition of the class Foo ... - }; - - } // namespace my_namespace - ``` - - Your test code should be something like: - - ```c++ - namespace my_namespace { - - class FooTest : public testing::Test { - protected: - ... - }; - - TEST_F(FooTest, Bar) { ... } - TEST_F(FooTest, Baz) { ... } - - } // namespace my_namespace - ``` - -## "Catching" Failures - -If you are building a testing utility on top of googletest, you'll want to test -your utility. What framework would you use to test it? googletest, of course. - -The challenge is to verify that your testing utility reports failures correctly. -In frameworks that report a failure by throwing an exception, you could catch -the exception and assert on it. But googletest doesn't use exceptions, so how do -we test that a piece of code generates an expected failure? - -`"gtest/gtest-spi.h"` contains some constructs to do this. -After #including this header, you can use - -```c++ - EXPECT_FATAL_FAILURE(statement, substring); -``` - -to assert that `statement` generates a fatal (e.g. `ASSERT_*`) failure in the -current thread whose message contains the given `substring`, or use - -```c++ - EXPECT_NONFATAL_FAILURE(statement, substring); -``` - -if you are expecting a non-fatal (e.g. `EXPECT_*`) failure. - -Only failures in the current thread are checked to determine the result of this -type of expectations. If `statement` creates new threads, failures in these -threads are also ignored. If you want to catch failures in other threads as -well, use one of the following macros instead: - -```c++ - EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substring); - EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substring); -``` - -{: .callout .note} -NOTE: Assertions from multiple threads are currently not supported on Windows. - -For technical reasons, there are some caveats: - -1. You cannot stream a failure message to either macro. - -2. `statement` in `EXPECT_FATAL_FAILURE{_ON_ALL_THREADS}()` cannot reference - local non-static variables or non-static members of `this` object. - -3. `statement` in `EXPECT_FATAL_FAILURE{_ON_ALL_THREADS}()` cannot return a - value. - -## Registering tests programmatically - -The `TEST` macros handle the vast majority of all use cases, but there are few -where runtime registration logic is required. For those cases, the framework -provides the `::testing::RegisterTest` that allows callers to register arbitrary -tests dynamically. - -This is an advanced API only to be used when the `TEST` macros are insufficient. -The macros should be preferred when possible, as they avoid most of the -complexity of calling this function. - -It provides the following signature: - -```c++ -template -TestInfo* RegisterTest(const char* test_suite_name, const char* test_name, - const char* type_param, const char* value_param, - const char* file, int line, Factory factory); -``` - -The `factory` argument is a factory callable (move-constructible) object or -function pointer that creates a new instance of the Test object. It handles -ownership to the caller. The signature of the callable is `Fixture*()`, where -`Fixture` is the test fixture class for the test. All tests registered with the -same `test_suite_name` must return the same fixture type. This is checked at -runtime. - -The framework will infer the fixture class from the factory and will call the -`SetUpTestSuite` and `TearDownTestSuite` for it. - -Must be called before `RUN_ALL_TESTS()` is invoked, otherwise behavior is -undefined. - -Use case example: - -```c++ -class MyFixture : public testing::Test { - public: - // All of these optional, just like in regular macro usage. - static void SetUpTestSuite() { ... } - static void TearDownTestSuite() { ... } - void SetUp() override { ... } - void TearDown() override { ... } -}; - -class MyTest : public MyFixture { - public: - explicit MyTest(int data) : data_(data) {} - void TestBody() override { ... } - - private: - int data_; -}; - -void RegisterMyTests(const std::vector& values) { - for (int v : values) { - testing::RegisterTest( - "MyFixture", ("Test" + std::to_string(v)).c_str(), nullptr, - std::to_string(v).c_str(), - __FILE__, __LINE__, - // Important to use the fixture type as the return type here. - [=]() -> MyFixture* { return new MyTest(v); }); - } -} -... -int main(int argc, char** argv) { - testing::InitGoogleTest(&argc, argv); - std::vector values_to_test = LoadValuesFromConfig(); - RegisterMyTests(values_to_test); - ... - return RUN_ALL_TESTS(); -} -``` - -## Getting the Current Test's Name - -Sometimes a function may need to know the name of the currently running test. -For example, you may be using the `SetUp()` method of your test fixture to set -the golden file name based on which test is running. The -[`TestInfo`](reference/testing.md#TestInfo) class has this information. - -To obtain a `TestInfo` object for the currently running test, call -`current_test_info()` on the [`UnitTest`](reference/testing.md#UnitTest) -singleton object: - -```c++ - // Gets information about the currently running test. - // Do NOT delete the returned object - it's managed by the UnitTest class. - const testing::TestInfo* const test_info = - testing::UnitTest::GetInstance()->current_test_info(); - - printf("We are in test %s of test suite %s.\n", - test_info->name(), - test_info->test_suite_name()); -``` - -`current_test_info()` returns a null pointer if no test is running. In -particular, you cannot find the test suite name in `SetUpTestSuite()`, -`TearDownTestSuite()` (where you know the test suite name implicitly), or -functions called from them. - -## Extending googletest by Handling Test Events - -googletest provides an **event listener API** to let you receive notifications -about the progress of a test program and test failures. The events you can -listen to include the start and end of the test program, a test suite, or a test -method, among others. You may use this API to augment or replace the standard -console output, replace the XML output, or provide a completely different form -of output, such as a GUI or a database. You can also use test events as -checkpoints to implement a resource leak checker, for example. - -### Defining Event Listeners - -To define a event listener, you subclass either -[`testing::TestEventListener`](reference/testing.md#TestEventListener) or -[`testing::EmptyTestEventListener`](reference/testing.md#EmptyTestEventListener) -The former is an (abstract) interface, where *each pure virtual method can be -overridden to handle a test event* (For example, when a test starts, the -`OnTestStart()` method will be called.). The latter provides an empty -implementation of all methods in the interface, such that a subclass only needs -to override the methods it cares about. - -When an event is fired, its context is passed to the handler function as an -argument. The following argument types are used: - -* UnitTest reflects the state of the entire test program, -* TestSuite has information about a test suite, which can contain one or more - tests, -* TestInfo contains the state of a test, and -* TestPartResult represents the result of a test assertion. - -An event handler function can examine the argument it receives to find out -interesting information about the event and the test program's state. - -Here's an example: - -```c++ - class MinimalistPrinter : public testing::EmptyTestEventListener { - // Called before a test starts. - void OnTestStart(const testing::TestInfo& test_info) override { - printf("*** Test %s.%s starting.\n", - test_info.test_suite_name(), test_info.name()); - } - - // Called after a failed assertion or a SUCCESS(). - void OnTestPartResult(const testing::TestPartResult& test_part_result) override { - printf("%s in %s:%d\n%s\n", - test_part_result.failed() ? "*** Failure" : "Success", - test_part_result.file_name(), - test_part_result.line_number(), - test_part_result.summary()); - } - - // Called after a test ends. - void OnTestEnd(const testing::TestInfo& test_info) override { - printf("*** Test %s.%s ending.\n", - test_info.test_suite_name(), test_info.name()); - } - }; -``` - -### Using Event Listeners - -To use the event listener you have defined, add an instance of it to the -googletest event listener list (represented by class -[`TestEventListeners`](reference/testing.md#TestEventListeners) - note the "s" -at the end of the name) in your `main()` function, before calling -`RUN_ALL_TESTS()`: - -```c++ -int main(int argc, char** argv) { - testing::InitGoogleTest(&argc, argv); - // Gets hold of the event listener list. - testing::TestEventListeners& listeners = - testing::UnitTest::GetInstance()->listeners(); - // Adds a listener to the end. googletest takes the ownership. - listeners.Append(new MinimalistPrinter); - return RUN_ALL_TESTS(); -} -``` - -There's only one problem: the default test result printer is still in effect, so -its output will mingle with the output from your minimalist printer. To suppress -the default printer, just release it from the event listener list and delete it. -You can do so by adding one line: - -```c++ - ... - delete listeners.Release(listeners.default_result_printer()); - listeners.Append(new MinimalistPrinter); - return RUN_ALL_TESTS(); -``` - -Now, sit back and enjoy a completely different output from your tests. For more -details, see [sample9_unittest.cc]. - -[sample9_unittest.cc]: https://github.com/google/googletest/blob/master/googletest/samples/sample9_unittest.cc "Event listener example" - -You may append more than one listener to the list. When an `On*Start()` or -`OnTestPartResult()` event is fired, the listeners will receive it in the order -they appear in the list (since new listeners are added to the end of the list, -the default text printer and the default XML generator will receive the event -first). An `On*End()` event will be received by the listeners in the *reverse* -order. This allows output by listeners added later to be framed by output from -listeners added earlier. - -### Generating Failures in Listeners - -You may use failure-raising macros (`EXPECT_*()`, `ASSERT_*()`, `FAIL()`, etc) -when processing an event. There are some restrictions: - -1. You cannot generate any failure in `OnTestPartResult()` (otherwise it will - cause `OnTestPartResult()` to be called recursively). -2. A listener that handles `OnTestPartResult()` is not allowed to generate any - failure. - -When you add listeners to the listener list, you should put listeners that -handle `OnTestPartResult()` *before* listeners that can generate failures. This -ensures that failures generated by the latter are attributed to the right test -by the former. - -See [sample10_unittest.cc] for an example of a failure-raising listener. - -[sample10_unittest.cc]: https://github.com/google/googletest/blob/master/googletest/samples/sample10_unittest.cc "Failure-raising listener example" - -## Running Test Programs: Advanced Options - -googletest test programs are ordinary executables. Once built, you can run them -directly and affect their behavior via the following environment variables -and/or command line flags. For the flags to work, your programs must call -`::testing::InitGoogleTest()` before calling `RUN_ALL_TESTS()`. - -To see a list of supported flags and their usage, please run your test program -with the `--help` flag. You can also use `-h`, `-?`, or `/?` for short. - -If an option is specified both by an environment variable and by a flag, the -latter takes precedence. - -### Selecting Tests - -#### Listing Test Names - -Sometimes it is necessary to list the available tests in a program before -running them so that a filter may be applied if needed. Including the flag -`--gtest_list_tests` overrides all other flags and lists tests in the following -format: - -```none -TestSuite1. - TestName1 - TestName2 -TestSuite2. - TestName -``` - -None of the tests listed are actually run if the flag is provided. There is no -corresponding environment variable for this flag. - -#### Running a Subset of the Tests - -By default, a googletest program runs all tests the user has defined. Sometimes, -you want to run only a subset of the tests (e.g. for debugging or quickly -verifying a change). If you set the `GTEST_FILTER` environment variable or the -`--gtest_filter` flag to a filter string, googletest will only run the tests -whose full names (in the form of `TestSuiteName.TestName`) match the filter. - -The format of a filter is a '`:`'-separated list of wildcard patterns (called -the *positive patterns*) optionally followed by a '`-`' and another -'`:`'-separated pattern list (called the *negative patterns*). A test matches -the filter if and only if it matches any of the positive patterns but does not -match any of the negative patterns. - -A pattern may contain `'*'` (matches any string) or `'?'` (matches any single -character). For convenience, the filter `'*-NegativePatterns'` can be also -written as `'-NegativePatterns'`. - -For example: - -* `./foo_test` Has no flag, and thus runs all its tests. -* `./foo_test --gtest_filter=*` Also runs everything, due to the single - match-everything `*` value. -* `./foo_test --gtest_filter=FooTest.*` Runs everything in test suite - `FooTest` . -* `./foo_test --gtest_filter=*Null*:*Constructor*` Runs any test whose full - name contains either `"Null"` or `"Constructor"` . -* `./foo_test --gtest_filter=-*DeathTest.*` Runs all non-death tests. -* `./foo_test --gtest_filter=FooTest.*-FooTest.Bar` Runs everything in test - suite `FooTest` except `FooTest.Bar`. -* `./foo_test --gtest_filter=FooTest.*:BarTest.*-FooTest.Bar:BarTest.Foo` Runs - everything in test suite `FooTest` except `FooTest.Bar` and everything in - test suite `BarTest` except `BarTest.Foo`. - -#### Stop test execution upon first failure - -By default, a googletest program runs all tests the user has defined. In some -cases (e.g. iterative test development & execution) it may be desirable stop -test execution upon first failure (trading improved latency for completeness). -If `GTEST_FAIL_FAST` environment variable or `--gtest_fail_fast` flag is set, -the test runner will stop execution as soon as the first test failure is found. - -#### Temporarily Disabling Tests - -If you have a broken test that you cannot fix right away, you can add the -`DISABLED_` prefix to its name. This will exclude it from execution. This is -better than commenting out the code or using `#if 0`, as disabled tests are -still compiled (and thus won't rot). - -If you need to disable all tests in a test suite, you can either add `DISABLED_` -to the front of the name of each test, or alternatively add it to the front of -the test suite name. - -For example, the following tests won't be run by googletest, even though they -will still be compiled: - -```c++ -// Tests that Foo does Abc. -TEST(FooTest, DISABLED_DoesAbc) { ... } - -class DISABLED_BarTest : public testing::Test { ... }; - -// Tests that Bar does Xyz. -TEST_F(DISABLED_BarTest, DoesXyz) { ... } -``` - -{: .callout .note} -NOTE: This feature should only be used for temporary pain-relief. You still have -to fix the disabled tests at a later date. As a reminder, googletest will print -a banner warning you if a test program contains any disabled tests. - -{: .callout .tip} -TIP: You can easily count the number of disabled tests you have using -`grep`. This number can be used as a metric for -improving your test quality. - -#### Temporarily Enabling Disabled Tests - -To include disabled tests in test execution, just invoke the test program with -the `--gtest_also_run_disabled_tests` flag or set the -`GTEST_ALSO_RUN_DISABLED_TESTS` environment variable to a value other than `0`. -You can combine this with the `--gtest_filter` flag to further select which -disabled tests to run. - -### Repeating the Tests - -Once in a while you'll run into a test whose result is hit-or-miss. Perhaps it -will fail only 1% of the time, making it rather hard to reproduce the bug under -a debugger. This can be a major source of frustration. - -The `--gtest_repeat` flag allows you to repeat all (or selected) test methods in -a program many times. Hopefully, a flaky test will eventually fail and give you -a chance to debug. Here's how to use it: - -```none -$ foo_test --gtest_repeat=1000 -Repeat foo_test 1000 times and don't stop at failures. - -$ foo_test --gtest_repeat=-1 -A negative count means repeating forever. - -$ foo_test --gtest_repeat=1000 --gtest_break_on_failure -Repeat foo_test 1000 times, stopping at the first failure. This -is especially useful when running under a debugger: when the test -fails, it will drop into the debugger and you can then inspect -variables and stacks. - -$ foo_test --gtest_repeat=1000 --gtest_filter=FooBar.* -Repeat the tests whose name matches the filter 1000 times. -``` - -If your test program contains -[global set-up/tear-down](#global-set-up-and-tear-down) code, it will be -repeated in each iteration as well, as the flakiness may be in it. You can also -specify the repeat count by setting the `GTEST_REPEAT` environment variable. - -### Shuffling the Tests - -You can specify the `--gtest_shuffle` flag (or set the `GTEST_SHUFFLE` -environment variable to `1`) to run the tests in a program in a random order. -This helps to reveal bad dependencies between tests. - -By default, googletest uses a random seed calculated from the current time. -Therefore you'll get a different order every time. The console output includes -the random seed value, such that you can reproduce an order-related test failure -later. To specify the random seed explicitly, use the `--gtest_random_seed=SEED` -flag (or set the `GTEST_RANDOM_SEED` environment variable), where `SEED` is an -integer in the range [0, 99999]. The seed value 0 is special: it tells -googletest to do the default behavior of calculating the seed from the current -time. - -If you combine this with `--gtest_repeat=N`, googletest will pick a different -random seed and re-shuffle the tests in each iteration. - -### Distributing Test Functions to Multiple Machines - -If you have more than one machine you can use to run a test program, you might -want to run the test functions in parallel and get the result faster. We call -this technique *sharding*, where each machine is called a *shard*. - -GoogleTest is compatible with test sharding. To take advantage of this feature, -your test runner (not part of GoogleTest) needs to do the following: - -1. Allocate a number of machines (shards) to run the tests. -1. On each shard, set the `GTEST_TOTAL_SHARDS` environment variable to the total - number of shards. It must be the same for all shards. -1. On each shard, set the `GTEST_SHARD_INDEX` environment variable to the index - of the shard. Different shards must be assigned different indices, which - must be in the range `[0, GTEST_TOTAL_SHARDS - 1]`. -1. Run the same test program on all shards. When GoogleTest sees the above two - environment variables, it will select a subset of the test functions to run. - Across all shards, each test function in the program will be run exactly - once. -1. Wait for all shards to finish, then collect and report the results. - -Your project may have tests that were written without GoogleTest and thus don't -understand this protocol. In order for your test runner to figure out which test -supports sharding, it can set the environment variable `GTEST_SHARD_STATUS_FILE` -to a non-existent file path. If a test program supports sharding, it will create -this file to acknowledge that fact; otherwise it will not create it. The actual -contents of the file are not important at this time, although we may put some -useful information in it in the future. - -Here's an example to make it clear. Suppose you have a test program `foo_test` -that contains the following 5 test functions: - -``` -TEST(A, V) -TEST(A, W) -TEST(B, X) -TEST(B, Y) -TEST(B, Z) -``` - -Suppose you have 3 machines at your disposal. To run the test functions in -parallel, you would set `GTEST_TOTAL_SHARDS` to 3 on all machines, and set -`GTEST_SHARD_INDEX` to 0, 1, and 2 on the machines respectively. Then you would -run the same `foo_test` on each machine. - -GoogleTest reserves the right to change how the work is distributed across the -shards, but here's one possible scenario: - -* Machine #0 runs `A.V` and `B.X`. -* Machine #1 runs `A.W` and `B.Y`. -* Machine #2 runs `B.Z`. - -### Controlling Test Output - -#### Colored Terminal Output - -googletest can use colors in its terminal output to make it easier to spot the -important information: - -
      ...
      -[----------] 1 test from FooTest
      -[ RUN      ] FooTest.DoesAbc
      -[       OK ] FooTest.DoesAbc
      -[----------] 2 tests from BarTest
      -[ RUN      ] BarTest.HasXyzProperty
      -[       OK ] BarTest.HasXyzProperty
      -[ RUN      ] BarTest.ReturnsTrueOnSuccess
      -... some error messages ...
      -[   FAILED ] BarTest.ReturnsTrueOnSuccess
      -...
      -[==========] 30 tests from 14 test suites ran.
      -[   PASSED ] 28 tests.
      -[   FAILED ] 2 tests, listed below:
      -[   FAILED ] BarTest.ReturnsTrueOnSuccess
      -[   FAILED ] AnotherTest.DoesXyz
      -
      - 2 FAILED TESTS
      -
      - -You can set the `GTEST_COLOR` environment variable or the `--gtest_color` -command line flag to `yes`, `no`, or `auto` (the default) to enable colors, -disable colors, or let googletest decide. When the value is `auto`, googletest -will use colors if and only if the output goes to a terminal and (on non-Windows -platforms) the `TERM` environment variable is set to `xterm` or `xterm-color`. - -#### Suppressing test passes - -By default, googletest prints 1 line of output for each test, indicating if it -passed or failed. To show only test failures, run the test program with -`--gtest_brief=1`, or set the GTEST_BRIEF environment variable to `1`. - -#### Suppressing the Elapsed Time - -By default, googletest prints the time it takes to run each test. To disable -that, run the test program with the `--gtest_print_time=0` command line flag, or -set the GTEST_PRINT_TIME environment variable to `0`. - -#### Suppressing UTF-8 Text Output - -In case of assertion failures, googletest prints expected and actual values of -type `string` both as hex-encoded strings as well as in readable UTF-8 text if -they contain valid non-ASCII UTF-8 characters. If you want to suppress the UTF-8 -text because, for example, you don't have an UTF-8 compatible output medium, run -the test program with `--gtest_print_utf8=0` or set the `GTEST_PRINT_UTF8` -environment variable to `0`. - -#### Generating an XML Report - -googletest can emit a detailed XML report to a file in addition to its normal -textual output. The report contains the duration of each test, and thus can help -you identify slow tests. - -To generate the XML report, set the `GTEST_OUTPUT` environment variable or the -`--gtest_output` flag to the string `"xml:path_to_output_file"`, which will -create the file at the given location. You can also just use the string `"xml"`, -in which case the output can be found in the `test_detail.xml` file in the -current directory. - -If you specify a directory (for example, `"xml:output/directory/"` on Linux or -`"xml:output\directory\"` on Windows), googletest will create the XML file in -that directory, named after the test executable (e.g. `foo_test.xml` for test -program `foo_test` or `foo_test.exe`). If the file already exists (perhaps left -over from a previous run), googletest will pick a different name (e.g. -`foo_test_1.xml`) to avoid overwriting it. - -The report is based on the `junitreport` Ant task. Since that format was -originally intended for Java, a little interpretation is required to make it -apply to googletest tests, as shown here: - -```xml - - - - - - - - - -``` - -* The root `` element corresponds to the entire test program. -* `` elements correspond to googletest test suites. -* `` elements correspond to googletest test functions. - -For instance, the following program - -```c++ -TEST(MathTest, Addition) { ... } -TEST(MathTest, Subtraction) { ... } -TEST(LogicTest, NonContradiction) { ... } -``` - -could generate this report: - -```xml - - - - - ... - ... - - - - - - - - - -``` - -Things to note: - -* The `tests` attribute of a `` or `` element tells how - many test functions the googletest program or test suite contains, while the - `failures` attribute tells how many of them failed. - -* The `time` attribute expresses the duration of the test, test suite, or - entire test program in seconds. - -* The `timestamp` attribute records the local date and time of the test - execution. - -* Each `` element corresponds to a single failed googletest - assertion. - -#### Generating a JSON Report - -googletest can also emit a JSON report as an alternative format to XML. To -generate the JSON report, set the `GTEST_OUTPUT` environment variable or the -`--gtest_output` flag to the string `"json:path_to_output_file"`, which will -create the file at the given location. You can also just use the string -`"json"`, in which case the output can be found in the `test_detail.json` file -in the current directory. - -The report format conforms to the following JSON Schema: - -```json -{ - "$schema": "http://json-schema.org/schema#", - "type": "object", - "definitions": { - "TestCase": { - "type": "object", - "properties": { - "name": { "type": "string" }, - "tests": { "type": "integer" }, - "failures": { "type": "integer" }, - "disabled": { "type": "integer" }, - "time": { "type": "string" }, - "testsuite": { - "type": "array", - "items": { - "$ref": "#/definitions/TestInfo" - } - } - } - }, - "TestInfo": { - "type": "object", - "properties": { - "name": { "type": "string" }, - "status": { - "type": "string", - "enum": ["RUN", "NOTRUN"] - }, - "time": { "type": "string" }, - "classname": { "type": "string" }, - "failures": { - "type": "array", - "items": { - "$ref": "#/definitions/Failure" - } - } - } - }, - "Failure": { - "type": "object", - "properties": { - "failures": { "type": "string" }, - "type": { "type": "string" } - } - } - }, - "properties": { - "tests": { "type": "integer" }, - "failures": { "type": "integer" }, - "disabled": { "type": "integer" }, - "errors": { "type": "integer" }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "time": { "type": "string" }, - "name": { "type": "string" }, - "testsuites": { - "type": "array", - "items": { - "$ref": "#/definitions/TestCase" - } - } - } -} -``` - -The report uses the format that conforms to the following Proto3 using the -[JSON encoding](https://developers.google.com/protocol-buffers/docs/proto3#json): - -```proto -syntax = "proto3"; - -package googletest; - -import "google/protobuf/timestamp.proto"; -import "google/protobuf/duration.proto"; - -message UnitTest { - int32 tests = 1; - int32 failures = 2; - int32 disabled = 3; - int32 errors = 4; - google.protobuf.Timestamp timestamp = 5; - google.protobuf.Duration time = 6; - string name = 7; - repeated TestCase testsuites = 8; -} - -message TestCase { - string name = 1; - int32 tests = 2; - int32 failures = 3; - int32 disabled = 4; - int32 errors = 5; - google.protobuf.Duration time = 6; - repeated TestInfo testsuite = 7; -} - -message TestInfo { - string name = 1; - enum Status { - RUN = 0; - NOTRUN = 1; - } - Status status = 2; - google.protobuf.Duration time = 3; - string classname = 4; - message Failure { - string failures = 1; - string type = 2; - } - repeated Failure failures = 5; -} -``` - -For instance, the following program - -```c++ -TEST(MathTest, Addition) { ... } -TEST(MathTest, Subtraction) { ... } -TEST(LogicTest, NonContradiction) { ... } -``` - -could generate this report: - -```json -{ - "tests": 3, - "failures": 1, - "errors": 0, - "time": "0.035s", - "timestamp": "2011-10-31T18:52:42Z", - "name": "AllTests", - "testsuites": [ - { - "name": "MathTest", - "tests": 2, - "failures": 1, - "errors": 0, - "time": "0.015s", - "testsuite": [ - { - "name": "Addition", - "status": "RUN", - "time": "0.007s", - "classname": "", - "failures": [ - { - "message": "Value of: add(1, 1)\n Actual: 3\nExpected: 2", - "type": "" - }, - { - "message": "Value of: add(1, -1)\n Actual: 1\nExpected: 0", - "type": "" - } - ] - }, - { - "name": "Subtraction", - "status": "RUN", - "time": "0.005s", - "classname": "" - } - ] - }, - { - "name": "LogicTest", - "tests": 1, - "failures": 0, - "errors": 0, - "time": "0.005s", - "testsuite": [ - { - "name": "NonContradiction", - "status": "RUN", - "time": "0.005s", - "classname": "" - } - ] - } - ] -} -``` - -{: .callout .important} -IMPORTANT: The exact format of the JSON document is subject to change. - -### Controlling How Failures Are Reported - -#### Detecting Test Premature Exit - -Google Test implements the _premature-exit-file_ protocol for test runners to -catch any kind of unexpected exits of test programs. Upon start, Google Test -creates the file which will be automatically deleted after all work has been -finished. Then, the test runner can check if this file exists. In case the file -remains undeleted, the inspected test has exited prematurely. - -This feature is enabled only if the `TEST_PREMATURE_EXIT_FILE` environment -variable has been set. - -#### Turning Assertion Failures into Break-Points - -When running test programs under a debugger, it's very convenient if the -debugger can catch an assertion failure and automatically drop into interactive -mode. googletest's *break-on-failure* mode supports this behavior. - -To enable it, set the `GTEST_BREAK_ON_FAILURE` environment variable to a value -other than `0`. Alternatively, you can use the `--gtest_break_on_failure` -command line flag. - -#### Disabling Catching Test-Thrown Exceptions - -googletest can be used either with or without exceptions enabled. If a test -throws a C++ exception or (on Windows) a structured exception (SEH), by default -googletest catches it, reports it as a test failure, and continues with the next -test method. This maximizes the coverage of a test run. Also, on Windows an -uncaught exception will cause a pop-up window, so catching the exceptions allows -you to run the tests automatically. - -When debugging the test failures, however, you may instead want the exceptions -to be handled by the debugger, such that you can examine the call stack when an -exception is thrown. To achieve that, set the `GTEST_CATCH_EXCEPTIONS` -environment variable to `0`, or use the `--gtest_catch_exceptions=0` flag when -running the tests. - -### Sanitizer Integration - -The -[Undefined Behavior Sanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html), -[Address Sanitizer](https://github.com/google/sanitizers/wiki/AddressSanitizer), -and -[Thread Sanitizer](https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual) -all provide weak functions that you can override to trigger explicit failures -when they detect sanitizer errors, such as creating a reference from `nullptr`. -To override these functions, place definitions for them in a source file that -you compile as part of your main binary: - -``` -extern "C" { -void __ubsan_on_report() { - FAIL() << "Encountered an undefined behavior sanitizer error"; -} -void __asan_on_error() { - FAIL() << "Encountered an address sanitizer error"; -} -void __tsan_on_report() { - FAIL() << "Encountered a thread sanitizer error"; -} -} // extern "C" -``` - -After compiling your project with one of the sanitizers enabled, if a particular -test triggers a sanitizer error, googletest will report that it failed. diff --git a/tests/rocm_smi_test/gtest/docs/assets/css/style.scss b/tests/rocm_smi_test/gtest/docs/assets/css/style.scss deleted file mode 100644 index bb30f418da..0000000000 --- a/tests/rocm_smi_test/gtest/docs/assets/css/style.scss +++ /dev/null @@ -1,5 +0,0 @@ ---- ---- - -@import "jekyll-theme-primer"; -@import "main"; diff --git a/tests/rocm_smi_test/gtest/docs/community_created_documentation.md b/tests/rocm_smi_test/gtest/docs/community_created_documentation.md deleted file mode 100644 index 4569075ff2..0000000000 --- a/tests/rocm_smi_test/gtest/docs/community_created_documentation.md +++ /dev/null @@ -1,7 +0,0 @@ -# Community-Created Documentation - -The following is a list, in no particular order, of links to documentation -created by the Googletest community. - -* [Googlemock Insights](https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/googletest/insights.md), - by [ElectricRCAircraftGuy](https://github.com/ElectricRCAircraftGuy) diff --git a/tests/rocm_smi_test/gtest/docs/faq.md b/tests/rocm_smi_test/gtest/docs/faq.md deleted file mode 100644 index b2db186f13..0000000000 --- a/tests/rocm_smi_test/gtest/docs/faq.md +++ /dev/null @@ -1,692 +0,0 @@ -# Googletest FAQ - -## Why should test suite names and test names not contain underscore? - -{: .callout .note} -Note: Googletest reserves underscore (`_`) for special purpose keywords, such as -[the `DISABLED_` prefix](advanced.md#temporarily-disabling-tests), in addition -to the following rationale. - -Underscore (`_`) is special, as C++ reserves the following to be used by the -compiler and the standard library: - -1. any identifier that starts with an `_` followed by an upper-case letter, and -2. any identifier that contains two consecutive underscores (i.e. `__`) - *anywhere* in its name. - -User code is *prohibited* from using such identifiers. - -Now let's look at what this means for `TEST` and `TEST_F`. - -Currently `TEST(TestSuiteName, TestName)` generates a class named -`TestSuiteName_TestName_Test`. What happens if `TestSuiteName` or `TestName` -contains `_`? - -1. If `TestSuiteName` starts with an `_` followed by an upper-case letter (say, - `_Foo`), we end up with `_Foo_TestName_Test`, which is reserved and thus - invalid. -2. If `TestSuiteName` ends with an `_` (say, `Foo_`), we get - `Foo__TestName_Test`, which is invalid. -3. If `TestName` starts with an `_` (say, `_Bar`), we get - `TestSuiteName__Bar_Test`, which is invalid. -4. If `TestName` ends with an `_` (say, `Bar_`), we get - `TestSuiteName_Bar__Test`, which is invalid. - -So clearly `TestSuiteName` and `TestName` cannot start or end with `_` -(Actually, `TestSuiteName` can start with `_` -- as long as the `_` isn't -followed by an upper-case letter. But that's getting complicated. So for -simplicity we just say that it cannot start with `_`.). - -It may seem fine for `TestSuiteName` and `TestName` to contain `_` in the -middle. However, consider this: - -```c++ -TEST(Time, Flies_Like_An_Arrow) { ... } -TEST(Time_Flies, Like_An_Arrow) { ... } -``` - -Now, the two `TEST`s will both generate the same class -(`Time_Flies_Like_An_Arrow_Test`). That's not good. - -So for simplicity, we just ask the users to avoid `_` in `TestSuiteName` and -`TestName`. The rule is more constraining than necessary, but it's simple and -easy to remember. It also gives googletest some wiggle room in case its -implementation needs to change in the future. - -If you violate the rule, there may not be immediate consequences, but your test -may (just may) break with a new compiler (or a new version of the compiler you -are using) or with a new version of googletest. Therefore it's best to follow -the rule. - -## Why does googletest support `EXPECT_EQ(NULL, ptr)` and `ASSERT_EQ(NULL, ptr)` but not `EXPECT_NE(NULL, ptr)` and `ASSERT_NE(NULL, ptr)`? - -First of all, you can use `nullptr` with each of these macros, e.g. -`EXPECT_EQ(ptr, nullptr)`, `EXPECT_NE(ptr, nullptr)`, `ASSERT_EQ(ptr, nullptr)`, -`ASSERT_NE(ptr, nullptr)`. This is the preferred syntax in the style guide -because `nullptr` does not have the type problems that `NULL` does. - -Due to some peculiarity of C++, it requires some non-trivial template meta -programming tricks to support using `NULL` as an argument of the `EXPECT_XX()` -and `ASSERT_XX()` macros. Therefore we only do it where it's most needed -(otherwise we make the implementation of googletest harder to maintain and more -error-prone than necessary). - -Historically, the `EXPECT_EQ()` macro took the *expected* value as its first -argument and the *actual* value as the second, though this argument order is now -discouraged. It was reasonable that someone wanted -to write `EXPECT_EQ(NULL, some_expression)`, and this indeed was requested -several times. Therefore we implemented it. - -The need for `EXPECT_NE(NULL, ptr)` wasn't nearly as strong. When the assertion -fails, you already know that `ptr` must be `NULL`, so it doesn't add any -information to print `ptr` in this case. That means `EXPECT_TRUE(ptr != NULL)` -works just as well. - -If we were to support `EXPECT_NE(NULL, ptr)`, for consistency we'd have to -support `EXPECT_NE(ptr, NULL)` as well. This means using the template meta -programming tricks twice in the implementation, making it even harder to -understand and maintain. We believe the benefit doesn't justify the cost. - -Finally, with the growth of the gMock matcher library, we are encouraging people -to use the unified `EXPECT_THAT(value, matcher)` syntax more often in tests. One -significant advantage of the matcher approach is that matchers can be easily -combined to form new matchers, while the `EXPECT_NE`, etc, macros cannot be -easily combined. Therefore we want to invest more in the matchers than in the -`EXPECT_XX()` macros. - -## I need to test that different implementations of an interface satisfy some common requirements. Should I use typed tests or value-parameterized tests? - -For testing various implementations of the same interface, either typed tests or -value-parameterized tests can get it done. It's really up to you the user to -decide which is more convenient for you, depending on your particular case. Some -rough guidelines: - -* Typed tests can be easier to write if instances of the different - implementations can be created the same way, modulo the type. For example, - if all these implementations have a public default constructor (such that - you can write `new TypeParam`), or if their factory functions have the same - form (e.g. `CreateInstance()`). -* Value-parameterized tests can be easier to write if you need different code - patterns to create different implementations' instances, e.g. `new Foo` vs - `new Bar(5)`. To accommodate for the differences, you can write factory - function wrappers and pass these function pointers to the tests as their - parameters. -* When a typed test fails, the default output includes the name of the type, - which can help you quickly identify which implementation is wrong. - Value-parameterized tests only show the number of the failed iteration by - default. You will need to define a function that returns the iteration name - and pass it as the third parameter to INSTANTIATE_TEST_SUITE_P to have more - useful output. -* When using typed tests, you need to make sure you are testing against the - interface type, not the concrete types (in other words, you want to make - sure `implicit_cast(my_concrete_impl)` works, not just that - `my_concrete_impl` works). It's less likely to make mistakes in this area - when using value-parameterized tests. - -I hope I didn't confuse you more. :-) If you don't mind, I'd suggest you to give -both approaches a try. Practice is a much better way to grasp the subtle -differences between the two tools. Once you have some concrete experience, you -can much more easily decide which one to use the next time. - -## I got some run-time errors about invalid proto descriptors when using `ProtocolMessageEquals`. Help! - -{: .callout .note} -**Note:** `ProtocolMessageEquals` and `ProtocolMessageEquiv` are *deprecated* -now. Please use `EqualsProto`, etc instead. - -`ProtocolMessageEquals` and `ProtocolMessageEquiv` were redefined recently and -are now less tolerant of invalid protocol buffer definitions. In particular, if -you have a `foo.proto` that doesn't fully qualify the type of a protocol message -it references (e.g. `message` where it should be `message`), you -will now get run-time errors like: - -``` -... descriptor.cc:...] Invalid proto descriptor for file "path/to/foo.proto": -... descriptor.cc:...] blah.MyMessage.my_field: ".Bar" is not defined. -``` - -If you see this, your `.proto` file is broken and needs to be fixed by making -the types fully qualified. The new definition of `ProtocolMessageEquals` and -`ProtocolMessageEquiv` just happen to reveal your bug. - -## My death test modifies some state, but the change seems lost after the death test finishes. Why? - -Death tests (`EXPECT_DEATH`, etc) are executed in a sub-process s.t. the -expected crash won't kill the test program (i.e. the parent process). As a -result, any in-memory side effects they incur are observable in their respective -sub-processes, but not in the parent process. You can think of them as running -in a parallel universe, more or less. - -In particular, if you use mocking and the death test statement invokes some mock -methods, the parent process will think the calls have never occurred. Therefore, -you may want to move your `EXPECT_CALL` statements inside the `EXPECT_DEATH` -macro. - -## EXPECT_EQ(htonl(blah), blah_blah) generates weird compiler errors in opt mode. Is this a googletest bug? - -Actually, the bug is in `htonl()`. - -According to `'man htonl'`, `htonl()` is a *function*, which means it's valid to -use `htonl` as a function pointer. However, in opt mode `htonl()` is defined as -a *macro*, which breaks this usage. - -Worse, the macro definition of `htonl()` uses a `gcc` extension and is *not* -standard C++. That hacky implementation has some ad hoc limitations. In -particular, it prevents you from writing `Foo()`, where `Foo` -is a template that has an integral argument. - -The implementation of `EXPECT_EQ(a, b)` uses `sizeof(... a ...)` inside a -template argument, and thus doesn't compile in opt mode when `a` contains a call -to `htonl()`. It is difficult to make `EXPECT_EQ` bypass the `htonl()` bug, as -the solution must work with different compilers on various platforms. - -## The compiler complains about "undefined references" to some static const member variables, but I did define them in the class body. What's wrong? - -If your class has a static data member: - -```c++ -// foo.h -class Foo { - ... - static const int kBar = 100; -}; -``` - -You also need to define it *outside* of the class body in `foo.cc`: - -```c++ -const int Foo::kBar; // No initializer here. -``` - -Otherwise your code is **invalid C++**, and may break in unexpected ways. In -particular, using it in googletest comparison assertions (`EXPECT_EQ`, etc) will -generate an "undefined reference" linker error. The fact that "it used to work" -doesn't mean it's valid. It just means that you were lucky. :-) - -If the declaration of the static data member is `constexpr` then it is -implicitly an `inline` definition, and a separate definition in `foo.cc` is not -needed: - -```c++ -// foo.h -class Foo { - ... - static constexpr int kBar = 100; // Defines kBar, no need to do it in foo.cc. -}; -``` - -## Can I derive a test fixture from another? - -Yes. - -Each test fixture has a corresponding and same named test suite. This means only -one test suite can use a particular fixture. Sometimes, however, multiple test -cases may want to use the same or slightly different fixtures. For example, you -may want to make sure that all of a GUI library's test suites don't leak -important system resources like fonts and brushes. - -In googletest, you share a fixture among test suites by putting the shared logic -in a base test fixture, then deriving from that base a separate fixture for each -test suite that wants to use this common logic. You then use `TEST_F()` to write -tests using each derived fixture. - -Typically, your code looks like this: - -```c++ -// Defines a base test fixture. -class BaseTest : public ::testing::Test { - protected: - ... -}; - -// Derives a fixture FooTest from BaseTest. -class FooTest : public BaseTest { - protected: - void SetUp() override { - BaseTest::SetUp(); // Sets up the base fixture first. - ... additional set-up work ... - } - - void TearDown() override { - ... clean-up work for FooTest ... - BaseTest::TearDown(); // Remember to tear down the base fixture - // after cleaning up FooTest! - } - - ... functions and variables for FooTest ... -}; - -// Tests that use the fixture FooTest. -TEST_F(FooTest, Bar) { ... } -TEST_F(FooTest, Baz) { ... } - -... additional fixtures derived from BaseTest ... -``` - -If necessary, you can continue to derive test fixtures from a derived fixture. -googletest has no limit on how deep the hierarchy can be. - -For a complete example using derived test fixtures, see -[sample5_unittest.cc](https://github.com/google/googletest/blob/master/googletest/samples/sample5_unittest.cc). - -## My compiler complains "void value not ignored as it ought to be." What does this mean? - -You're probably using an `ASSERT_*()` in a function that doesn't return `void`. -`ASSERT_*()` can only be used in `void` functions, due to exceptions being -disabled by our build system. Please see more details -[here](advanced.md#assertion-placement). - -## My death test hangs (or seg-faults). How do I fix it? - -In googletest, death tests are run in a child process and the way they work is -delicate. To write death tests you really need to understand how they work—see -the details at [Death Assertions](reference/assertions.md#death) in the -Assertions Reference. - -In particular, death tests don't like having multiple threads in the parent -process. So the first thing you can try is to eliminate creating threads outside -of `EXPECT_DEATH()`. For example, you may want to use mocks or fake objects -instead of real ones in your tests. - -Sometimes this is impossible as some library you must use may be creating -threads before `main()` is even reached. In this case, you can try to minimize -the chance of conflicts by either moving as many activities as possible inside -`EXPECT_DEATH()` (in the extreme case, you want to move everything inside), or -leaving as few things as possible in it. Also, you can try to set the death test -style to `"threadsafe"`, which is safer but slower, and see if it helps. - -If you go with thread-safe death tests, remember that they rerun the test -program from the beginning in the child process. Therefore make sure your -program can run side-by-side with itself and is deterministic. - -In the end, this boils down to good concurrent programming. You have to make -sure that there are no race conditions or deadlocks in your program. No silver -bullet - sorry! - -## Should I use the constructor/destructor of the test fixture or SetUp()/TearDown()? {#CtorVsSetUp} - -The first thing to remember is that googletest does **not** reuse the same test -fixture object across multiple tests. For each `TEST_F`, googletest will create -a **fresh** test fixture object, immediately call `SetUp()`, run the test body, -call `TearDown()`, and then delete the test fixture object. - -When you need to write per-test set-up and tear-down logic, you have the choice -between using the test fixture constructor/destructor or `SetUp()/TearDown()`. -The former is usually preferred, as it has the following benefits: - -* By initializing a member variable in the constructor, we have the option to - make it `const`, which helps prevent accidental changes to its value and - makes the tests more obviously correct. -* In case we need to subclass the test fixture class, the subclass' - constructor is guaranteed to call the base class' constructor *first*, and - the subclass' destructor is guaranteed to call the base class' destructor - *afterward*. With `SetUp()/TearDown()`, a subclass may make the mistake of - forgetting to call the base class' `SetUp()/TearDown()` or call them at the - wrong time. - -You may still want to use `SetUp()/TearDown()` in the following cases: - -* C++ does not allow virtual function calls in constructors and destructors. - You can call a method declared as virtual, but it will not use dynamic - dispatch. It will use the definition from the class the constructor of which - is currently executing. This is because calling a virtual method before the - derived class constructor has a chance to run is very dangerous - the - virtual method might operate on uninitialized data. Therefore, if you need - to call a method that will be overridden in a derived class, you have to use - `SetUp()/TearDown()`. -* In the body of a constructor (or destructor), it's not possible to use the - `ASSERT_xx` macros. Therefore, if the set-up operation could cause a fatal - test failure that should prevent the test from running, it's necessary to - use `abort` and abort the whole test - executable, or to use `SetUp()` instead of a constructor. -* If the tear-down operation could throw an exception, you must use - `TearDown()` as opposed to the destructor, as throwing in a destructor leads - to undefined behavior and usually will kill your program right away. Note - that many standard libraries (like STL) may throw when exceptions are - enabled in the compiler. Therefore you should prefer `TearDown()` if you - want to write portable tests that work with or without exceptions. -* The googletest team is considering making the assertion macros throw on - platforms where exceptions are enabled (e.g. Windows, Mac OS, and Linux - client-side), which will eliminate the need for the user to propagate - failures from a subroutine to its caller. Therefore, you shouldn't use - googletest assertions in a destructor if your code could run on such a - platform. - -## The compiler complains "no matching function to call" when I use ASSERT_PRED*. How do I fix it? - -See details for [`EXPECT_PRED*`](reference/assertions.md#EXPECT_PRED) in the -Assertions Reference. - -## My compiler complains about "ignoring return value" when I call RUN_ALL_TESTS(). Why? - -Some people had been ignoring the return value of `RUN_ALL_TESTS()`. That is, -instead of - -```c++ - return RUN_ALL_TESTS(); -``` - -they write - -```c++ - RUN_ALL_TESTS(); -``` - -This is **wrong and dangerous**. The testing services needs to see the return -value of `RUN_ALL_TESTS()` in order to determine if a test has passed. If your -`main()` function ignores it, your test will be considered successful even if it -has a googletest assertion failure. Very bad. - -We have decided to fix this (thanks to Michael Chastain for the idea). Now, your -code will no longer be able to ignore `RUN_ALL_TESTS()` when compiled with -`gcc`. If you do so, you'll get a compiler error. - -If you see the compiler complaining about you ignoring the return value of -`RUN_ALL_TESTS()`, the fix is simple: just make sure its value is used as the -return value of `main()`. - -But how could we introduce a change that breaks existing tests? Well, in this -case, the code was already broken in the first place, so we didn't break it. :-) - -## My compiler complains that a constructor (or destructor) cannot return a value. What's going on? - -Due to a peculiarity of C++, in order to support the syntax for streaming -messages to an `ASSERT_*`, e.g. - -```c++ - ASSERT_EQ(1, Foo()) << "blah blah" << foo; -``` - -we had to give up using `ASSERT*` and `FAIL*` (but not `EXPECT*` and -`ADD_FAILURE*`) in constructors and destructors. The workaround is to move the -content of your constructor/destructor to a private void member function, or -switch to `EXPECT_*()` if that works. This -[section](advanced.md#assertion-placement) in the user's guide explains it. - -## My SetUp() function is not called. Why? - -C++ is case-sensitive. Did you spell it as `Setup()`? - -Similarly, sometimes people spell `SetUpTestSuite()` as `SetupTestSuite()` and -wonder why it's never called. - -## I have several test suites which share the same test fixture logic, do I have to define a new test fixture class for each of them? This seems pretty tedious. - -You don't have to. Instead of - -```c++ -class FooTest : public BaseTest {}; - -TEST_F(FooTest, Abc) { ... } -TEST_F(FooTest, Def) { ... } - -class BarTest : public BaseTest {}; - -TEST_F(BarTest, Abc) { ... } -TEST_F(BarTest, Def) { ... } -``` - -you can simply `typedef` the test fixtures: - -```c++ -typedef BaseTest FooTest; - -TEST_F(FooTest, Abc) { ... } -TEST_F(FooTest, Def) { ... } - -typedef BaseTest BarTest; - -TEST_F(BarTest, Abc) { ... } -TEST_F(BarTest, Def) { ... } -``` - -## googletest output is buried in a whole bunch of LOG messages. What do I do? - -The googletest output is meant to be a concise and human-friendly report. If -your test generates textual output itself, it will mix with the googletest -output, making it hard to read. However, there is an easy solution to this -problem. - -Since `LOG` messages go to stderr, we decided to let googletest output go to -stdout. This way, you can easily separate the two using redirection. For -example: - -```shell -$ ./my_test > gtest_output.txt -``` - -## Why should I prefer test fixtures over global variables? - -There are several good reasons: - -1. It's likely your test needs to change the states of its global variables. - This makes it difficult to keep side effects from escaping one test and - contaminating others, making debugging difficult. By using fixtures, each - test has a fresh set of variables that's different (but with the same - names). Thus, tests are kept independent of each other. -2. Global variables pollute the global namespace. -3. Test fixtures can be reused via subclassing, which cannot be done easily - with global variables. This is useful if many test suites have something in - common. - -## What can the statement argument in ASSERT_DEATH() be? - -`ASSERT_DEATH(statement, matcher)` (or any death assertion macro) can be used -wherever *`statement`* is valid. So basically *`statement`* can be any C++ -statement that makes sense in the current context. In particular, it can -reference global and/or local variables, and can be: - -* a simple function call (often the case), -* a complex expression, or -* a compound statement. - -Some examples are shown here: - -```c++ -// A death test can be a simple function call. -TEST(MyDeathTest, FunctionCall) { - ASSERT_DEATH(Xyz(5), "Xyz failed"); -} - -// Or a complex expression that references variables and functions. -TEST(MyDeathTest, ComplexExpression) { - const bool c = Condition(); - ASSERT_DEATH((c ? Func1(0) : object2.Method("test")), - "(Func1|Method) failed"); -} - -// Death assertions can be used anywhere in a function. In -// particular, they can be inside a loop. -TEST(MyDeathTest, InsideLoop) { - // Verifies that Foo(0), Foo(1), ..., and Foo(4) all die. - for (int i = 0; i < 5; i++) { - EXPECT_DEATH_M(Foo(i), "Foo has \\d+ errors", - ::testing::Message() << "where i is " << i); - } -} - -// A death assertion can contain a compound statement. -TEST(MyDeathTest, CompoundStatement) { - // Verifies that at lease one of Bar(0), Bar(1), ..., and - // Bar(4) dies. - ASSERT_DEATH({ - for (int i = 0; i < 5; i++) { - Bar(i); - } - }, - "Bar has \\d+ errors"); -} -``` - -## I have a fixture class `FooTest`, but `TEST_F(FooTest, Bar)` gives me error ``"no matching function for call to `FooTest::FooTest()'"``. Why? - -Googletest needs to be able to create objects of your test fixture class, so it -must have a default constructor. Normally the compiler will define one for you. -However, there are cases where you have to define your own: - -* If you explicitly declare a non-default constructor for class `FooTest` - (`DISALLOW_EVIL_CONSTRUCTORS()` does this), then you need to define a - default constructor, even if it would be empty. -* If `FooTest` has a const non-static data member, then you have to define the - default constructor *and* initialize the const member in the initializer - list of the constructor. (Early versions of `gcc` doesn't force you to - initialize the const member. It's a bug that has been fixed in `gcc 4`.) - -## Why does ASSERT_DEATH complain about previous threads that were already joined? - -With the Linux pthread library, there is no turning back once you cross the line -from a single thread to multiple threads. The first time you create a thread, a -manager thread is created in addition, so you get 3, not 2, threads. Later when -the thread you create joins the main thread, the thread count decrements by 1, -but the manager thread will never be killed, so you still have 2 threads, which -means you cannot safely run a death test. - -The new NPTL thread library doesn't suffer from this problem, as it doesn't -create a manager thread. However, if you don't control which machine your test -runs on, you shouldn't depend on this. - -## Why does googletest require the entire test suite, instead of individual tests, to be named *DeathTest when it uses ASSERT_DEATH? - -googletest does not interleave tests from different test suites. That is, it -runs all tests in one test suite first, and then runs all tests in the next test -suite, and so on. googletest does this because it needs to set up a test suite -before the first test in it is run, and tear it down afterwards. Splitting up -the test case would require multiple set-up and tear-down processes, which is -inefficient and makes the semantics unclean. - -If we were to determine the order of tests based on test name instead of test -case name, then we would have a problem with the following situation: - -```c++ -TEST_F(FooTest, AbcDeathTest) { ... } -TEST_F(FooTest, Uvw) { ... } - -TEST_F(BarTest, DefDeathTest) { ... } -TEST_F(BarTest, Xyz) { ... } -``` - -Since `FooTest.AbcDeathTest` needs to run before `BarTest.Xyz`, and we don't -interleave tests from different test suites, we need to run all tests in the -`FooTest` case before running any test in the `BarTest` case. This contradicts -with the requirement to run `BarTest.DefDeathTest` before `FooTest.Uvw`. - -## But I don't like calling my entire test suite \*DeathTest when it contains both death tests and non-death tests. What do I do? - -You don't have to, but if you like, you may split up the test suite into -`FooTest` and `FooDeathTest`, where the names make it clear that they are -related: - -```c++ -class FooTest : public ::testing::Test { ... }; - -TEST_F(FooTest, Abc) { ... } -TEST_F(FooTest, Def) { ... } - -using FooDeathTest = FooTest; - -TEST_F(FooDeathTest, Uvw) { ... EXPECT_DEATH(...) ... } -TEST_F(FooDeathTest, Xyz) { ... ASSERT_DEATH(...) ... } -``` - -## googletest prints the LOG messages in a death test's child process only when the test fails. How can I see the LOG messages when the death test succeeds? - -Printing the LOG messages generated by the statement inside `EXPECT_DEATH()` -makes it harder to search for real problems in the parent's log. Therefore, -googletest only prints them when the death test has failed. - -If you really need to see such LOG messages, a workaround is to temporarily -break the death test (e.g. by changing the regex pattern it is expected to -match). Admittedly, this is a hack. We'll consider a more permanent solution -after the fork-and-exec-style death tests are implemented. - -## The compiler complains about `no match for 'operator<<'` when I use an assertion. What gives? - -If you use a user-defined type `FooType` in an assertion, you must make sure -there is an `std::ostream& operator<<(std::ostream&, const FooType&)` function -defined such that we can print a value of `FooType`. - -In addition, if `FooType` is declared in a name space, the `<<` operator also -needs to be defined in the *same* name space. See -[Tip of the Week #49](http://abseil.io/tips/49) for details. - -## How do I suppress the memory leak messages on Windows? - -Since the statically initialized googletest singleton requires allocations on -the heap, the Visual C++ memory leak detector will report memory leaks at the -end of the program run. The easiest way to avoid this is to use the -`_CrtMemCheckpoint` and `_CrtMemDumpAllObjectsSince` calls to not report any -statically initialized heap objects. See MSDN for more details and additional -heap check/debug routines. - -## How can my code detect if it is running in a test? - -If you write code that sniffs whether it's running in a test and does different -things accordingly, you are leaking test-only logic into production code and -there is no easy way to ensure that the test-only code paths aren't run by -mistake in production. Such cleverness also leads to -[Heisenbugs](https://en.wikipedia.org/wiki/Heisenbug). Therefore we strongly -advise against the practice, and googletest doesn't provide a way to do it. - -In general, the recommended way to cause the code to behave differently under -test is [Dependency Injection](http://en.wikipedia.org/wiki/Dependency_injection). You can inject -different functionality from the test and from the production code. Since your -production code doesn't link in the for-test logic at all (the -[`testonly`](http://docs.bazel.build/versions/master/be/common-definitions.html#common.testonly) attribute for BUILD targets helps to ensure -that), there is no danger in accidentally running it. - -However, if you *really*, *really*, *really* have no choice, and if you follow -the rule of ending your test program names with `_test`, you can use the -*horrible* hack of sniffing your executable name (`argv[0]` in `main()`) to know -whether the code is under test. - -## How do I temporarily disable a test? - -If you have a broken test that you cannot fix right away, you can add the -`DISABLED_` prefix to its name. This will exclude it from execution. This is -better than commenting out the code or using `#if 0`, as disabled tests are -still compiled (and thus won't rot). - -To include disabled tests in test execution, just invoke the test program with -the `--gtest_also_run_disabled_tests` flag. - -## Is it OK if I have two separate `TEST(Foo, Bar)` test methods defined in different namespaces? - -Yes. - -The rule is **all test methods in the same test suite must use the same fixture -class.** This means that the following is **allowed** because both tests use the -same fixture class (`::testing::Test`). - -```c++ -namespace foo { -TEST(CoolTest, DoSomething) { - SUCCEED(); -} -} // namespace foo - -namespace bar { -TEST(CoolTest, DoSomething) { - SUCCEED(); -} -} // namespace bar -``` - -However, the following code is **not allowed** and will produce a runtime error -from googletest because the test methods are using different test fixture -classes with the same test suite name. - -```c++ -namespace foo { -class CoolTest : public ::testing::Test {}; // Fixture foo::CoolTest -TEST_F(CoolTest, DoSomething) { - SUCCEED(); -} -} // namespace foo - -namespace bar { -class CoolTest : public ::testing::Test {}; // Fixture: bar::CoolTest -TEST_F(CoolTest, DoSomething) { - SUCCEED(); -} -} // namespace bar -``` diff --git a/tests/rocm_smi_test/gtest/docs/gmock_cheat_sheet.md b/tests/rocm_smi_test/gtest/docs/gmock_cheat_sheet.md deleted file mode 100644 index 3d164ad629..0000000000 --- a/tests/rocm_smi_test/gtest/docs/gmock_cheat_sheet.md +++ /dev/null @@ -1,241 +0,0 @@ -# gMock Cheat Sheet - -## Defining a Mock Class - -### Mocking a Normal Class {#MockClass} - -Given - -```cpp -class Foo { - ... - virtual ~Foo(); - virtual int GetSize() const = 0; - virtual string Describe(const char* name) = 0; - virtual string Describe(int type) = 0; - virtual bool Process(Bar elem, int count) = 0; -}; -``` - -(note that `~Foo()` **must** be virtual) we can define its mock as - -```cpp -#include "gmock/gmock.h" - -class MockFoo : public Foo { - ... - MOCK_METHOD(int, GetSize, (), (const, override)); - MOCK_METHOD(string, Describe, (const char* name), (override)); - MOCK_METHOD(string, Describe, (int type), (override)); - MOCK_METHOD(bool, Process, (Bar elem, int count), (override)); -}; -``` - -To create a "nice" mock, which ignores all uninteresting calls, a "naggy" mock, -which warns on all uninteresting calls, or a "strict" mock, which treats them as -failures: - -```cpp -using ::testing::NiceMock; -using ::testing::NaggyMock; -using ::testing::StrictMock; - -NiceMock nice_foo; // The type is a subclass of MockFoo. -NaggyMock naggy_foo; // The type is a subclass of MockFoo. -StrictMock strict_foo; // The type is a subclass of MockFoo. -``` - -{: .callout .note} -**Note:** A mock object is currently naggy by default. We may make it nice by -default in the future. - -### Mocking a Class Template {#MockTemplate} - -Class templates can be mocked just like any class. - -To mock - -```cpp -template -class StackInterface { - ... - virtual ~StackInterface(); - virtual int GetSize() const = 0; - virtual void Push(const Elem& x) = 0; -}; -``` - -(note that all member functions that are mocked, including `~StackInterface()` -**must** be virtual). - -```cpp -template -class MockStack : public StackInterface { - ... - MOCK_METHOD(int, GetSize, (), (const, override)); - MOCK_METHOD(void, Push, (const Elem& x), (override)); -}; -``` - -### Specifying Calling Conventions for Mock Functions - -If your mock function doesn't use the default calling convention, you can -specify it by adding `Calltype(convention)` to `MOCK_METHOD`'s 4th parameter. -For example, - -```cpp - MOCK_METHOD(bool, Foo, (int n), (Calltype(STDMETHODCALLTYPE))); - MOCK_METHOD(int, Bar, (double x, double y), - (const, Calltype(STDMETHODCALLTYPE))); -``` - -where `STDMETHODCALLTYPE` is defined by `` on Windows. - -## Using Mocks in Tests {#UsingMocks} - -The typical work flow is: - -1. Import the gMock names you need to use. All gMock symbols are in the - `testing` namespace unless they are macros or otherwise noted. -2. Create the mock objects. -3. Optionally, set the default actions of the mock objects. -4. Set your expectations on the mock objects (How will they be called? What - will they do?). -5. Exercise code that uses the mock objects; if necessary, check the result - using googletest assertions. -6. When a mock object is destructed, gMock automatically verifies that all - expectations on it have been satisfied. - -Here's an example: - -```cpp -using ::testing::Return; // #1 - -TEST(BarTest, DoesThis) { - MockFoo foo; // #2 - - ON_CALL(foo, GetSize()) // #3 - .WillByDefault(Return(1)); - // ... other default actions ... - - EXPECT_CALL(foo, Describe(5)) // #4 - .Times(3) - .WillRepeatedly(Return("Category 5")); - // ... other expectations ... - - EXPECT_EQ(MyProductionFunction(&foo), "good"); // #5 -} // #6 -``` - -## Setting Default Actions {#OnCall} - -gMock has a **built-in default action** for any function that returns `void`, -`bool`, a numeric value, or a pointer. In C++11, it will additionally returns -the default-constructed value, if one exists for the given type. - -To customize the default action for functions with return type `T`, use -[`DefaultValue`](reference/mocking.md#DefaultValue). For example: - -```cpp - // Sets the default action for return type std::unique_ptr to - // creating a new Buzz every time. - DefaultValue>::SetFactory( - [] { return MakeUnique(AccessLevel::kInternal); }); - - // When this fires, the default action of MakeBuzz() will run, which - // will return a new Buzz object. - EXPECT_CALL(mock_buzzer_, MakeBuzz("hello")).Times(AnyNumber()); - - auto buzz1 = mock_buzzer_.MakeBuzz("hello"); - auto buzz2 = mock_buzzer_.MakeBuzz("hello"); - EXPECT_NE(buzz1, nullptr); - EXPECT_NE(buzz2, nullptr); - EXPECT_NE(buzz1, buzz2); - - // Resets the default action for return type std::unique_ptr, - // to avoid interfere with other tests. - DefaultValue>::Clear(); -``` - -To customize the default action for a particular method of a specific mock -object, use [`ON_CALL`](reference/mocking.md#ON_CALL). `ON_CALL` has a similar -syntax to `EXPECT_CALL`, but it is used for setting default behaviors when you -do not require that the mock method is called. See -[Knowing When to Expect](gmock_cook_book.md#UseOnCall) for a more detailed -discussion. - -## Setting Expectations {#ExpectCall} - -See [`EXPECT_CALL`](reference/mocking.md#EXPECT_CALL) in the Mocking Reference. - -## Matchers {#MatcherList} - -See the [Matchers Reference](reference/matchers.md). - -## Actions {#ActionList} - -See the [Actions Reference](reference/actions.md). - -## Cardinalities {#CardinalityList} - -See the [`Times` clause](reference/mocking.md#EXPECT_CALL.Times) of -`EXPECT_CALL` in the Mocking Reference. - -## Expectation Order - -By default, expectations can be matched in *any* order. If some or all -expectations must be matched in a given order, you can use the -[`After` clause](reference/mocking.md#EXPECT_CALL.After) or -[`InSequence` clause](reference/mocking.md#EXPECT_CALL.InSequence) of -`EXPECT_CALL`, or use an [`InSequence` object](reference/mocking.md#InSequence). - -## Verifying and Resetting a Mock - -gMock will verify the expectations on a mock object when it is destructed, or -you can do it earlier: - -```cpp -using ::testing::Mock; -... -// Verifies and removes the expectations on mock_obj; -// returns true if and only if successful. -Mock::VerifyAndClearExpectations(&mock_obj); -... -// Verifies and removes the expectations on mock_obj; -// also removes the default actions set by ON_CALL(); -// returns true if and only if successful. -Mock::VerifyAndClear(&mock_obj); -``` - -Do not set new expectations after verifying and clearing a mock after its use. -Setting expectations after code that exercises the mock has undefined behavior. -See [Using Mocks in Tests](gmock_for_dummies.md#using-mocks-in-tests) for more -information. - -You can also tell gMock that a mock object can be leaked and doesn't need to be -verified: - -```cpp -Mock::AllowLeak(&mock_obj); -``` - -## Mock Classes - -gMock defines a convenient mock class template - -```cpp -class MockFunction { - public: - MOCK_METHOD(R, Call, (A1, ..., An)); -}; -``` - -See this [recipe](gmock_cook_book.md#UsingCheckPoints) for one application of -it. - -## Flags - -| Flag | Description | -| :----------------------------- | :---------------------------------------- | -| `--gmock_catch_leaked_mocks=0` | Don't report leaked mock objects as failures. | -| `--gmock_verbose=LEVEL` | Sets the default verbosity level (`info`, `warning`, or `error`) of Google Mock messages. | diff --git a/tests/rocm_smi_test/gtest/docs/gmock_cook_book.md b/tests/rocm_smi_test/gtest/docs/gmock_cook_book.md deleted file mode 100644 index 9494f1222f..0000000000 --- a/tests/rocm_smi_test/gtest/docs/gmock_cook_book.md +++ /dev/null @@ -1,4299 +0,0 @@ -# gMock Cookbook - -You can find recipes for using gMock here. If you haven't yet, please read -[the dummy guide](gmock_for_dummies.md) first to make sure you understand the -basics. - -{: .callout .note} -**Note:** gMock lives in the `testing` name space. For readability, it is -recommended to write `using ::testing::Foo;` once in your file before using the -name `Foo` defined by gMock. We omit such `using` statements in this section for -brevity, but you should do it in your own code. - -## Creating Mock Classes - -Mock classes are defined as normal classes, using the `MOCK_METHOD` macro to -generate mocked methods. The macro gets 3 or 4 parameters: - -```cpp -class MyMock { - public: - MOCK_METHOD(ReturnType, MethodName, (Args...)); - MOCK_METHOD(ReturnType, MethodName, (Args...), (Specs...)); -}; -``` - -The first 3 parameters are simply the method declaration, split into 3 parts. -The 4th parameter accepts a closed list of qualifiers, which affect the -generated method: - -* **`const`** - Makes the mocked method a `const` method. Required if - overriding a `const` method. -* **`override`** - Marks the method with `override`. Recommended if overriding - a `virtual` method. -* **`noexcept`** - Marks the method with `noexcept`. Required if overriding a - `noexcept` method. -* **`Calltype(...)`** - Sets the call type for the method (e.g. to - `STDMETHODCALLTYPE`), useful in Windows. -* **`ref(...)`** - Marks the method with the reference qualification - specified. Required if overriding a method that has reference - qualifications. Eg `ref(&)` or `ref(&&)`. - -### Dealing with unprotected commas - -Unprotected commas, i.e. commas which are not surrounded by parentheses, prevent -`MOCK_METHOD` from parsing its arguments correctly: - -{: .bad} -```cpp -class MockFoo { - public: - MOCK_METHOD(std::pair, GetPair, ()); // Won't compile! - MOCK_METHOD(bool, CheckMap, (std::map, bool)); // Won't compile! -}; -``` - -Solution 1 - wrap with parentheses: - -{: .good} -```cpp -class MockFoo { - public: - MOCK_METHOD((std::pair), GetPair, ()); - MOCK_METHOD(bool, CheckMap, ((std::map), bool)); -}; -``` - -Note that wrapping a return or argument type with parentheses is, in general, -invalid C++. `MOCK_METHOD` removes the parentheses. - -Solution 2 - define an alias: - -{: .good} -```cpp -class MockFoo { - public: - using BoolAndInt = std::pair; - MOCK_METHOD(BoolAndInt, GetPair, ()); - using MapIntDouble = std::map; - MOCK_METHOD(bool, CheckMap, (MapIntDouble, bool)); -}; -``` - -### Mocking Private or Protected Methods - -You must always put a mock method definition (`MOCK_METHOD`) in a `public:` -section of the mock class, regardless of the method being mocked being `public`, -`protected`, or `private` in the base class. This allows `ON_CALL` and -`EXPECT_CALL` to reference the mock function from outside of the mock class. -(Yes, C++ allows a subclass to change the access level of a virtual function in -the base class.) Example: - -```cpp -class Foo { - public: - ... - virtual bool Transform(Gadget* g) = 0; - - protected: - virtual void Resume(); - - private: - virtual int GetTimeOut(); -}; - -class MockFoo : public Foo { - public: - ... - MOCK_METHOD(bool, Transform, (Gadget* g), (override)); - - // The following must be in the public section, even though the - // methods are protected or private in the base class. - MOCK_METHOD(void, Resume, (), (override)); - MOCK_METHOD(int, GetTimeOut, (), (override)); -}; -``` - -### Mocking Overloaded Methods - -You can mock overloaded functions as usual. No special attention is required: - -```cpp -class Foo { - ... - - // Must be virtual as we'll inherit from Foo. - virtual ~Foo(); - - // Overloaded on the types and/or numbers of arguments. - virtual int Add(Element x); - virtual int Add(int times, Element x); - - // Overloaded on the const-ness of this object. - virtual Bar& GetBar(); - virtual const Bar& GetBar() const; -}; - -class MockFoo : public Foo { - ... - MOCK_METHOD(int, Add, (Element x), (override)); - MOCK_METHOD(int, Add, (int times, Element x), (override)); - - MOCK_METHOD(Bar&, GetBar, (), (override)); - MOCK_METHOD(const Bar&, GetBar, (), (const, override)); -}; -``` - -{: .callout .note} -**Note:** if you don't mock all versions of the overloaded method, the compiler -will give you a warning about some methods in the base class being hidden. To -fix that, use `using` to bring them in scope: - -```cpp -class MockFoo : public Foo { - ... - using Foo::Add; - MOCK_METHOD(int, Add, (Element x), (override)); - // We don't want to mock int Add(int times, Element x); - ... -}; -``` - -### Mocking Class Templates - -You can mock class templates just like any class. - -```cpp -template -class StackInterface { - ... - // Must be virtual as we'll inherit from StackInterface. - virtual ~StackInterface(); - - virtual int GetSize() const = 0; - virtual void Push(const Elem& x) = 0; -}; - -template -class MockStack : public StackInterface { - ... - MOCK_METHOD(int, GetSize, (), (override)); - MOCK_METHOD(void, Push, (const Elem& x), (override)); -}; -``` - -### Mocking Non-virtual Methods {#MockingNonVirtualMethods} - -gMock can mock non-virtual functions to be used in Hi-perf dependency injection. - -In this case, instead of sharing a common base class with the real class, your -mock class will be *unrelated* to the real class, but contain methods with the -same signatures. The syntax for mocking non-virtual methods is the *same* as -mocking virtual methods (just don't add `override`): - -```cpp -// A simple packet stream class. None of its members is virtual. -class ConcretePacketStream { - public: - void AppendPacket(Packet* new_packet); - const Packet* GetPacket(size_t packet_number) const; - size_t NumberOfPackets() const; - ... -}; - -// A mock packet stream class. It inherits from no other, but defines -// GetPacket() and NumberOfPackets(). -class MockPacketStream { - public: - MOCK_METHOD(const Packet*, GetPacket, (size_t packet_number), (const)); - MOCK_METHOD(size_t, NumberOfPackets, (), (const)); - ... -}; -``` - -Note that the mock class doesn't define `AppendPacket()`, unlike the real class. -That's fine as long as the test doesn't need to call it. - -Next, you need a way to say that you want to use `ConcretePacketStream` in -production code, and use `MockPacketStream` in tests. Since the functions are -not virtual and the two classes are unrelated, you must specify your choice at -*compile time* (as opposed to run time). - -One way to do it is to templatize your code that needs to use a packet stream. -More specifically, you will give your code a template type argument for the type -of the packet stream. In production, you will instantiate your template with -`ConcretePacketStream` as the type argument. In tests, you will instantiate the -same template with `MockPacketStream`. For example, you may write: - -```cpp -template -void CreateConnection(PacketStream* stream) { ... } - -template -class PacketReader { - public: - void ReadPackets(PacketStream* stream, size_t packet_num); -}; -``` - -Then you can use `CreateConnection()` and -`PacketReader` in production code, and use -`CreateConnection()` and `PacketReader` in -tests. - -```cpp - MockPacketStream mock_stream; - EXPECT_CALL(mock_stream, ...)...; - .. set more expectations on mock_stream ... - PacketReader reader(&mock_stream); - ... exercise reader ... -``` - -### Mocking Free Functions - -It is not possible to directly mock a free function (i.e. a C-style function or -a static method). If you need to, you can rewrite your code to use an interface -(abstract class). - -Instead of calling a free function (say, `OpenFile`) directly, introduce an -interface for it and have a concrete subclass that calls the free function: - -```cpp -class FileInterface { - public: - ... - virtual bool Open(const char* path, const char* mode) = 0; -}; - -class File : public FileInterface { - public: - ... - bool Open(const char* path, const char* mode) override { - return OpenFile(path, mode); - } -}; -``` - -Your code should talk to `FileInterface` to open a file. Now it's easy to mock -out the function. - -This may seem like a lot of hassle, but in practice you often have multiple -related functions that you can put in the same interface, so the per-function -syntactic overhead will be much lower. - -If you are concerned about the performance overhead incurred by virtual -functions, and profiling confirms your concern, you can combine this with the -recipe for [mocking non-virtual methods](#MockingNonVirtualMethods). - -### Old-Style `MOCK_METHODn` Macros - -Before the generic `MOCK_METHOD` macro -[was introduced in 2018](https://github.com/google/googletest/commit/c5f08bf91944ce1b19bcf414fa1760e69d20afc2), -mocks where created using a family of macros collectively called `MOCK_METHODn`. -These macros are still supported, though migration to the new `MOCK_METHOD` is -recommended. - -The macros in the `MOCK_METHODn` family differ from `MOCK_METHOD`: - -* The general structure is `MOCK_METHODn(MethodName, ReturnType(Args))`, - instead of `MOCK_METHOD(ReturnType, MethodName, (Args))`. -* The number `n` must equal the number of arguments. -* When mocking a const method, one must use `MOCK_CONST_METHODn`. -* When mocking a class template, the macro name must be suffixed with `_T`. -* In order to specify the call type, the macro name must be suffixed with - `_WITH_CALLTYPE`, and the call type is the first macro argument. - -Old macros and their new equivalents: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Simple
      OldMOCK_METHOD1(Foo, bool(int))
      NewMOCK_METHOD(bool, Foo, (int))
      Const Method
      OldMOCK_CONST_METHOD1(Foo, bool(int))
      NewMOCK_METHOD(bool, Foo, (int), (const))
      Method in a Class Template
      OldMOCK_METHOD1_T(Foo, bool(int))
      NewMOCK_METHOD(bool, Foo, (int))
      Const Method in a Class Template
      OldMOCK_CONST_METHOD1_T(Foo, bool(int))
      NewMOCK_METHOD(bool, Foo, (int), (const))
      Method with Call Type
      OldMOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))
      NewMOCK_METHOD(bool, Foo, (int), (Calltype(STDMETHODCALLTYPE)))
      Const Method with Call Type
      OldMOCK_CONST_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))
      NewMOCK_METHOD(bool, Foo, (int), (const, Calltype(STDMETHODCALLTYPE)))
      Method with Call Type in a Class Template
      OldMOCK_METHOD1_T_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))
      NewMOCK_METHOD(bool, Foo, (int), (Calltype(STDMETHODCALLTYPE)))
      Const Method with Call Type in a Class Template
      OldMOCK_CONST_METHOD1_T_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))
      NewMOCK_METHOD(bool, Foo, (int), (const, Calltype(STDMETHODCALLTYPE)))
      - -### The Nice, the Strict, and the Naggy {#NiceStrictNaggy} - -If a mock method has no `EXPECT_CALL` spec but is called, we say that it's an -"uninteresting call", and the default action (which can be specified using -`ON_CALL()`) of the method will be taken. Currently, an uninteresting call will -also by default cause gMock to print a warning. (In the future, we might remove -this warning by default.) - -However, sometimes you may want to ignore these uninteresting calls, and -sometimes you may want to treat them as errors. gMock lets you make the decision -on a per-mock-object basis. - -Suppose your test uses a mock class `MockFoo`: - -```cpp -TEST(...) { - MockFoo mock_foo; - EXPECT_CALL(mock_foo, DoThis()); - ... code that uses mock_foo ... -} -``` - -If a method of `mock_foo` other than `DoThis()` is called, you will get a -warning. However, if you rewrite your test to use `NiceMock` instead, -you can suppress the warning: - -```cpp -using ::testing::NiceMock; - -TEST(...) { - NiceMock mock_foo; - EXPECT_CALL(mock_foo, DoThis()); - ... code that uses mock_foo ... -} -``` - -`NiceMock` is a subclass of `MockFoo`, so it can be used wherever -`MockFoo` is accepted. - -It also works if `MockFoo`'s constructor takes some arguments, as -`NiceMock` "inherits" `MockFoo`'s constructors: - -```cpp -using ::testing::NiceMock; - -TEST(...) { - NiceMock mock_foo(5, "hi"); // Calls MockFoo(5, "hi"). - EXPECT_CALL(mock_foo, DoThis()); - ... code that uses mock_foo ... -} -``` - -The usage of `StrictMock` is similar, except that it makes all uninteresting -calls failures: - -```cpp -using ::testing::StrictMock; - -TEST(...) { - StrictMock mock_foo; - EXPECT_CALL(mock_foo, DoThis()); - ... code that uses mock_foo ... - - // The test will fail if a method of mock_foo other than DoThis() - // is called. -} -``` - -{: .callout .note} -NOTE: `NiceMock` and `StrictMock` only affects *uninteresting* calls (calls of -*methods* with no expectations); they do not affect *unexpected* calls (calls of -methods with expectations, but they don't match). See -[Understanding Uninteresting vs Unexpected Calls](#uninteresting-vs-unexpected). - -There are some caveats though (sadly they are side effects of C++'s -limitations): - -1. `NiceMock` and `StrictMock` only work for mock methods - defined using the `MOCK_METHOD` macro **directly** in the `MockFoo` class. - If a mock method is defined in a **base class** of `MockFoo`, the "nice" or - "strict" modifier may not affect it, depending on the compiler. In - particular, nesting `NiceMock` and `StrictMock` (e.g. - `NiceMock >`) is **not** supported. -2. `NiceMock` and `StrictMock` may not work correctly if the - destructor of `MockFoo` is not virtual. We would like to fix this, but it - requires cleaning up existing tests. - -Finally, you should be **very cautious** about when to use naggy or strict -mocks, as they tend to make tests more brittle and harder to maintain. When you -refactor your code without changing its externally visible behavior, ideally you -shouldn't need to update any tests. If your code interacts with a naggy mock, -however, you may start to get spammed with warnings as the result of your -change. Worse, if your code interacts with a strict mock, your tests may start -to fail and you'll be forced to fix them. Our general recommendation is to use -nice mocks (not yet the default) most of the time, use naggy mocks (the current -default) when developing or debugging tests, and use strict mocks only as the -last resort. - -### Simplifying the Interface without Breaking Existing Code {#SimplerInterfaces} - -Sometimes a method has a long list of arguments that is mostly uninteresting. -For example: - -```cpp -class LogSink { - public: - ... - virtual void send(LogSeverity severity, const char* full_filename, - const char* base_filename, int line, - const struct tm* tm_time, - const char* message, size_t message_len) = 0; -}; -``` - -This method's argument list is lengthy and hard to work with (the `message` -argument is not even 0-terminated). If we mock it as is, using the mock will be -awkward. If, however, we try to simplify this interface, we'll need to fix all -clients depending on it, which is often infeasible. - -The trick is to redispatch the method in the mock class: - -```cpp -class ScopedMockLog : public LogSink { - public: - ... - void send(LogSeverity severity, const char* full_filename, - const char* base_filename, int line, const tm* tm_time, - const char* message, size_t message_len) override { - // We are only interested in the log severity, full file name, and - // log message. - Log(severity, full_filename, std::string(message, message_len)); - } - - // Implements the mock method: - // - // void Log(LogSeverity severity, - // const string& file_path, - // const string& message); - MOCK_METHOD(void, Log, - (LogSeverity severity, const string& file_path, - const string& message)); -}; -``` - -By defining a new mock method with a trimmed argument list, we make the mock -class more user-friendly. - -This technique may also be applied to make overloaded methods more amenable to -mocking. For example, when overloads have been used to implement default -arguments: - -```cpp -class MockTurtleFactory : public TurtleFactory { - public: - Turtle* MakeTurtle(int length, int weight) override { ... } - Turtle* MakeTurtle(int length, int weight, int speed) override { ... } - - // the above methods delegate to this one: - MOCK_METHOD(Turtle*, DoMakeTurtle, ()); -}; -``` - -This allows tests that don't care which overload was invoked to avoid specifying -argument matchers: - -```cpp -ON_CALL(factory, DoMakeTurtle) - .WillByDefault(Return(MakeMockTurtle())); -``` - -### Alternative to Mocking Concrete Classes - -Often you may find yourself using classes that don't implement interfaces. In -order to test your code that uses such a class (let's call it `Concrete`), you -may be tempted to make the methods of `Concrete` virtual and then mock it. - -Try not to do that. - -Making a non-virtual function virtual is a big decision. It creates an extension -point where subclasses can tweak your class' behavior. This weakens your control -on the class because now it's harder to maintain the class invariants. You -should make a function virtual only when there is a valid reason for a subclass -to override it. - -Mocking concrete classes directly is problematic as it creates a tight coupling -between the class and the tests - any small change in the class may invalidate -your tests and make test maintenance a pain. - -To avoid such problems, many programmers have been practicing "coding to -interfaces": instead of talking to the `Concrete` class, your code would define -an interface and talk to it. Then you implement that interface as an adaptor on -top of `Concrete`. In tests, you can easily mock that interface to observe how -your code is doing. - -This technique incurs some overhead: - -* You pay the cost of virtual function calls (usually not a problem). -* There is more abstraction for the programmers to learn. - -However, it can also bring significant benefits in addition to better -testability: - -* `Concrete`'s API may not fit your problem domain very well, as you may not - be the only client it tries to serve. By designing your own interface, you - have a chance to tailor it to your need - you may add higher-level - functionalities, rename stuff, etc instead of just trimming the class. This - allows you to write your code (user of the interface) in a more natural way, - which means it will be more readable, more maintainable, and you'll be more - productive. -* If `Concrete`'s implementation ever has to change, you don't have to rewrite - everywhere it is used. Instead, you can absorb the change in your - implementation of the interface, and your other code and tests will be - insulated from this change. - -Some people worry that if everyone is practicing this technique, they will end -up writing lots of redundant code. This concern is totally understandable. -However, there are two reasons why it may not be the case: - -* Different projects may need to use `Concrete` in different ways, so the best - interfaces for them will be different. Therefore, each of them will have its - own domain-specific interface on top of `Concrete`, and they will not be the - same code. -* If enough projects want to use the same interface, they can always share it, - just like they have been sharing `Concrete`. You can check in the interface - and the adaptor somewhere near `Concrete` (perhaps in a `contrib` - sub-directory) and let many projects use it. - -You need to weigh the pros and cons carefully for your particular problem, but -I'd like to assure you that the Java community has been practicing this for a -long time and it's a proven effective technique applicable in a wide variety of -situations. :-) - -### Delegating Calls to a Fake {#DelegatingToFake} - -Some times you have a non-trivial fake implementation of an interface. For -example: - -```cpp -class Foo { - public: - virtual ~Foo() {} - virtual char DoThis(int n) = 0; - virtual void DoThat(const char* s, int* p) = 0; -}; - -class FakeFoo : public Foo { - public: - char DoThis(int n) override { - return (n > 0) ? '+' : - (n < 0) ? '-' : '0'; - } - - void DoThat(const char* s, int* p) override { - *p = strlen(s); - } -}; -``` - -Now you want to mock this interface such that you can set expectations on it. -However, you also want to use `FakeFoo` for the default behavior, as duplicating -it in the mock object is, well, a lot of work. - -When you define the mock class using gMock, you can have it delegate its default -action to a fake class you already have, using this pattern: - -```cpp -class MockFoo : public Foo { - public: - // Normal mock method definitions using gMock. - MOCK_METHOD(char, DoThis, (int n), (override)); - MOCK_METHOD(void, DoThat, (const char* s, int* p), (override)); - - // Delegates the default actions of the methods to a FakeFoo object. - // This must be called *before* the custom ON_CALL() statements. - void DelegateToFake() { - ON_CALL(*this, DoThis).WillByDefault([this](int n) { - return fake_.DoThis(n); - }); - ON_CALL(*this, DoThat).WillByDefault([this](const char* s, int* p) { - fake_.DoThat(s, p); - }); - } - - private: - FakeFoo fake_; // Keeps an instance of the fake in the mock. -}; -``` - -With that, you can use `MockFoo` in your tests as usual. Just remember that if -you don't explicitly set an action in an `ON_CALL()` or `EXPECT_CALL()`, the -fake will be called upon to do it.: - -```cpp -using ::testing::_; - -TEST(AbcTest, Xyz) { - MockFoo foo; - - foo.DelegateToFake(); // Enables the fake for delegation. - - // Put your ON_CALL(foo, ...)s here, if any. - - // No action specified, meaning to use the default action. - EXPECT_CALL(foo, DoThis(5)); - EXPECT_CALL(foo, DoThat(_, _)); - - int n = 0; - EXPECT_EQ('+', foo.DoThis(5)); // FakeFoo::DoThis() is invoked. - foo.DoThat("Hi", &n); // FakeFoo::DoThat() is invoked. - EXPECT_EQ(2, n); -} -``` - -**Some tips:** - -* If you want, you can still override the default action by providing your own - `ON_CALL()` or using `.WillOnce()` / `.WillRepeatedly()` in `EXPECT_CALL()`. -* In `DelegateToFake()`, you only need to delegate the methods whose fake - implementation you intend to use. - -* The general technique discussed here works for overloaded methods, but - you'll need to tell the compiler which version you mean. To disambiguate a - mock function (the one you specify inside the parentheses of `ON_CALL()`), - use [this technique](#SelectOverload); to disambiguate a fake function (the - one you place inside `Invoke()`), use a `static_cast` to specify the - function's type. For instance, if class `Foo` has methods `char DoThis(int - n)` and `bool DoThis(double x) const`, and you want to invoke the latter, - you need to write `Invoke(&fake_, static_cast(&FakeFoo::DoThis))` instead of `Invoke(&fake_, &FakeFoo::DoThis)` - (The strange-looking thing inside the angled brackets of `static_cast` is - the type of a function pointer to the second `DoThis()` method.). - -* Having to mix a mock and a fake is often a sign of something gone wrong. - Perhaps you haven't got used to the interaction-based way of testing yet. Or - perhaps your interface is taking on too many roles and should be split up. - Therefore, **don't abuse this**. We would only recommend to do it as an - intermediate step when you are refactoring your code. - -Regarding the tip on mixing a mock and a fake, here's an example on why it may -be a bad sign: Suppose you have a class `System` for low-level system -operations. In particular, it does file and I/O operations. And suppose you want -to test how your code uses `System` to do I/O, and you just want the file -operations to work normally. If you mock out the entire `System` class, you'll -have to provide a fake implementation for the file operation part, which -suggests that `System` is taking on too many roles. - -Instead, you can define a `FileOps` interface and an `IOOps` interface and split -`System`'s functionalities into the two. Then you can mock `IOOps` without -mocking `FileOps`. - -### Delegating Calls to a Real Object - -When using testing doubles (mocks, fakes, stubs, and etc), sometimes their -behaviors will differ from those of the real objects. This difference could be -either intentional (as in simulating an error such that you can test the error -handling code) or unintentional. If your mocks have different behaviors than the -real objects by mistake, you could end up with code that passes the tests but -fails in production. - -You can use the *delegating-to-real* technique to ensure that your mock has the -same behavior as the real object while retaining the ability to validate calls. -This technique is very similar to the [delegating-to-fake](#DelegatingToFake) -technique, the difference being that we use a real object instead of a fake. -Here's an example: - -```cpp -using ::testing::AtLeast; - -class MockFoo : public Foo { - public: - MockFoo() { - // By default, all calls are delegated to the real object. - ON_CALL(*this, DoThis).WillByDefault([this](int n) { - return real_.DoThis(n); - }); - ON_CALL(*this, DoThat).WillByDefault([this](const char* s, int* p) { - real_.DoThat(s, p); - }); - ... - } - MOCK_METHOD(char, DoThis, ...); - MOCK_METHOD(void, DoThat, ...); - ... - private: - Foo real_; -}; - -... - MockFoo mock; - EXPECT_CALL(mock, DoThis()) - .Times(3); - EXPECT_CALL(mock, DoThat("Hi")) - .Times(AtLeast(1)); - ... use mock in test ... -``` - -With this, gMock will verify that your code made the right calls (with the right -arguments, in the right order, called the right number of times, etc), and a -real object will answer the calls (so the behavior will be the same as in -production). This gives you the best of both worlds. - -### Delegating Calls to a Parent Class - -Ideally, you should code to interfaces, whose methods are all pure virtual. In -reality, sometimes you do need to mock a virtual method that is not pure (i.e, -it already has an implementation). For example: - -```cpp -class Foo { - public: - virtual ~Foo(); - - virtual void Pure(int n) = 0; - virtual int Concrete(const char* str) { ... } -}; - -class MockFoo : public Foo { - public: - // Mocking a pure method. - MOCK_METHOD(void, Pure, (int n), (override)); - // Mocking a concrete method. Foo::Concrete() is shadowed. - MOCK_METHOD(int, Concrete, (const char* str), (override)); -}; -``` - -Sometimes you may want to call `Foo::Concrete()` instead of -`MockFoo::Concrete()`. Perhaps you want to do it as part of a stub action, or -perhaps your test doesn't need to mock `Concrete()` at all (but it would be -oh-so painful to have to define a new mock class whenever you don't need to mock -one of its methods). - -You can call `Foo::Concrete()` inside an action by: - -```cpp -... - EXPECT_CALL(foo, Concrete).WillOnce([&foo](const char* str) { - return foo.Foo::Concrete(str); - }); -``` - -or tell the mock object that you don't want to mock `Concrete()`: - -```cpp -... - ON_CALL(foo, Concrete).WillByDefault([&foo](const char* str) { - return foo.Foo::Concrete(str); - }); -``` - -(Why don't we just write `{ return foo.Concrete(str); }`? If you do that, -`MockFoo::Concrete()` will be called (and cause an infinite recursion) since -`Foo::Concrete()` is virtual. That's just how C++ works.) - -## Using Matchers - -### Matching Argument Values Exactly - -You can specify exactly which arguments a mock method is expecting: - -```cpp -using ::testing::Return; -... - EXPECT_CALL(foo, DoThis(5)) - .WillOnce(Return('a')); - EXPECT_CALL(foo, DoThat("Hello", bar)); -``` - -### Using Simple Matchers - -You can use matchers to match arguments that have a certain property: - -```cpp -using ::testing::NotNull; -using ::testing::Return; -... - EXPECT_CALL(foo, DoThis(Ge(5))) // The argument must be >= 5. - .WillOnce(Return('a')); - EXPECT_CALL(foo, DoThat("Hello", NotNull())); - // The second argument must not be NULL. -``` - -A frequently used matcher is `_`, which matches anything: - -```cpp - EXPECT_CALL(foo, DoThat(_, NotNull())); -``` - -### Combining Matchers {#CombiningMatchers} - -You can build complex matchers from existing ones using `AllOf()`, -`AllOfArray()`, `AnyOf()`, `AnyOfArray()` and `Not()`: - -```cpp -using ::testing::AllOf; -using ::testing::Gt; -using ::testing::HasSubstr; -using ::testing::Ne; -using ::testing::Not; -... - // The argument must be > 5 and != 10. - EXPECT_CALL(foo, DoThis(AllOf(Gt(5), - Ne(10)))); - - // The first argument must not contain sub-string "blah". - EXPECT_CALL(foo, DoThat(Not(HasSubstr("blah")), - NULL)); -``` - -Matchers are function objects, and parametrized matchers can be composed just -like any other function. However because their types can be long and rarely -provide meaningful information, it can be easier to express them with C++14 -generic lambdas to avoid specifying types. For example, - -```cpp -using ::testing::Contains; -using ::testing::Property; - -inline constexpr auto HasFoo = [](const auto& f) { - return Property(&MyClass::foo, Contains(f)); -}; -... - EXPECT_THAT(x, HasFoo("blah")); -``` - -### Casting Matchers {#SafeMatcherCast} - -gMock matchers are statically typed, meaning that the compiler can catch your -mistake if you use a matcher of the wrong type (for example, if you use `Eq(5)` -to match a `string` argument). Good for you! - -Sometimes, however, you know what you're doing and want the compiler to give you -some slack. One example is that you have a matcher for `long` and the argument -you want to match is `int`. While the two types aren't exactly the same, there -is nothing really wrong with using a `Matcher` to match an `int` - after -all, we can first convert the `int` argument to a `long` losslessly before -giving it to the matcher. - -To support this need, gMock gives you the `SafeMatcherCast(m)` function. It -casts a matcher `m` to type `Matcher`. To ensure safety, gMock checks that -(let `U` be the type `m` accepts : - -1. Type `T` can be *implicitly* cast to type `U`; -2. When both `T` and `U` are built-in arithmetic types (`bool`, integers, and - floating-point numbers), the conversion from `T` to `U` is not lossy (in - other words, any value representable by `T` can also be represented by `U`); - and -3. When `U` is a reference, `T` must also be a reference (as the underlying - matcher may be interested in the address of the `U` value). - -The code won't compile if any of these conditions isn't met. - -Here's one example: - -```cpp -using ::testing::SafeMatcherCast; - -// A base class and a child class. -class Base { ... }; -class Derived : public Base { ... }; - -class MockFoo : public Foo { - public: - MOCK_METHOD(void, DoThis, (Derived* derived), (override)); -}; - -... - MockFoo foo; - // m is a Matcher we got from somewhere. - EXPECT_CALL(foo, DoThis(SafeMatcherCast(m))); -``` - -If you find `SafeMatcherCast(m)` too limiting, you can use a similar function -`MatcherCast(m)`. The difference is that `MatcherCast` works as long as you -can `static_cast` type `T` to type `U`. - -`MatcherCast` essentially lets you bypass C++'s type system (`static_cast` isn't -always safe as it could throw away information, for example), so be careful not -to misuse/abuse it. - -### Selecting Between Overloaded Functions {#SelectOverload} - -If you expect an overloaded function to be called, the compiler may need some -help on which overloaded version it is. - -To disambiguate functions overloaded on the const-ness of this object, use the -`Const()` argument wrapper. - -```cpp -using ::testing::ReturnRef; - -class MockFoo : public Foo { - ... - MOCK_METHOD(Bar&, GetBar, (), (override)); - MOCK_METHOD(const Bar&, GetBar, (), (const, override)); -}; - -... - MockFoo foo; - Bar bar1, bar2; - EXPECT_CALL(foo, GetBar()) // The non-const GetBar(). - .WillOnce(ReturnRef(bar1)); - EXPECT_CALL(Const(foo), GetBar()) // The const GetBar(). - .WillOnce(ReturnRef(bar2)); -``` - -(`Const()` is defined by gMock and returns a `const` reference to its argument.) - -To disambiguate overloaded functions with the same number of arguments but -different argument types, you may need to specify the exact type of a matcher, -either by wrapping your matcher in `Matcher()`, or using a matcher whose -type is fixed (`TypedEq`, `An()`, etc): - -```cpp -using ::testing::An; -using ::testing::Matcher; -using ::testing::TypedEq; - -class MockPrinter : public Printer { - public: - MOCK_METHOD(void, Print, (int n), (override)); - MOCK_METHOD(void, Print, (char c), (override)); -}; - -TEST(PrinterTest, Print) { - MockPrinter printer; - - EXPECT_CALL(printer, Print(An())); // void Print(int); - EXPECT_CALL(printer, Print(Matcher(Lt(5)))); // void Print(int); - EXPECT_CALL(printer, Print(TypedEq('a'))); // void Print(char); - - printer.Print(3); - printer.Print(6); - printer.Print('a'); -} -``` - -### Performing Different Actions Based on the Arguments - -When a mock method is called, the *last* matching expectation that's still -active will be selected (think "newer overrides older"). So, you can make a -method do different things depending on its argument values like this: - -```cpp -using ::testing::_; -using ::testing::Lt; -using ::testing::Return; -... - // The default case. - EXPECT_CALL(foo, DoThis(_)) - .WillRepeatedly(Return('b')); - // The more specific case. - EXPECT_CALL(foo, DoThis(Lt(5))) - .WillRepeatedly(Return('a')); -``` - -Now, if `foo.DoThis()` is called with a value less than 5, `'a'` will be -returned; otherwise `'b'` will be returned. - -### Matching Multiple Arguments as a Whole - -Sometimes it's not enough to match the arguments individually. For example, we -may want to say that the first argument must be less than the second argument. -The `With()` clause allows us to match all arguments of a mock function as a -whole. For example, - -```cpp -using ::testing::_; -using ::testing::Ne; -using ::testing::Lt; -... - EXPECT_CALL(foo, InRange(Ne(0), _)) - .With(Lt()); -``` - -says that the first argument of `InRange()` must not be 0, and must be less than -the second argument. - -The expression inside `With()` must be a matcher of type `Matcher>`, where `A1`, ..., `An` are the types of the function arguments. - -You can also write `AllArgs(m)` instead of `m` inside `.With()`. The two forms -are equivalent, but `.With(AllArgs(Lt()))` is more readable than `.With(Lt())`. - -You can use `Args(m)` to match the `n` selected arguments (as a -tuple) against `m`. For example, - -```cpp -using ::testing::_; -using ::testing::AllOf; -using ::testing::Args; -using ::testing::Lt; -... - EXPECT_CALL(foo, Blah) - .With(AllOf(Args<0, 1>(Lt()), Args<1, 2>(Lt()))); -``` - -says that `Blah` will be called with arguments `x`, `y`, and `z` where `x < y < -z`. Note that in this example, it wasn't necessary to specify the positional -matchers. - -As a convenience and example, gMock provides some matchers for 2-tuples, -including the `Lt()` matcher above. See -[Multi-argument Matchers](reference/matchers.md#MultiArgMatchers) for the -complete list. - -Note that if you want to pass the arguments to a predicate of your own (e.g. -`.With(Args<0, 1>(Truly(&MyPredicate)))`), that predicate MUST be written to -take a `std::tuple` as its argument; gMock will pass the `n` selected arguments -as *one* single tuple to the predicate. - -### Using Matchers as Predicates - -Have you noticed that a matcher is just a fancy predicate that also knows how to -describe itself? Many existing algorithms take predicates as arguments (e.g. -those defined in STL's `` header), and it would be a shame if gMock -matchers were not allowed to participate. - -Luckily, you can use a matcher where a unary predicate functor is expected by -wrapping it inside the `Matches()` function. For example, - -```cpp -#include -#include - -using ::testing::Matches; -using ::testing::Ge; - -vector v; -... -// How many elements in v are >= 10? -const int count = count_if(v.begin(), v.end(), Matches(Ge(10))); -``` - -Since you can build complex matchers from simpler ones easily using gMock, this -gives you a way to conveniently construct composite predicates (doing the same -using STL's `` header is just painful). For example, here's a -predicate that's satisfied by any number that is >= 0, <= 100, and != 50: - -```cpp -using testing::AllOf; -using testing::Ge; -using testing::Le; -using testing::Matches; -using testing::Ne; -... -Matches(AllOf(Ge(0), Le(100), Ne(50))) -``` - -### Using Matchers in googletest Assertions - -See [`EXPECT_THAT`](reference/assertions.md#EXPECT_THAT) in the Assertions -Reference. - -### Using Predicates as Matchers - -gMock provides a set of built-in matchers for matching arguments with expected -values—see the [Matchers Reference](reference/matchers.md) for more information. -In case you find the built-in set lacking, you can use an arbitrary unary -predicate function or functor as a matcher - as long as the predicate accepts a -value of the type you want. You do this by wrapping the predicate inside the -`Truly()` function, for example: - -```cpp -using ::testing::Truly; - -int IsEven(int n) { return (n % 2) == 0 ? 1 : 0; } -... - // Bar() must be called with an even number. - EXPECT_CALL(foo, Bar(Truly(IsEven))); -``` - -Note that the predicate function / functor doesn't have to return `bool`. It -works as long as the return value can be used as the condition in in statement -`if (condition) ...`. - -### Matching Arguments that Are Not Copyable - -When you do an `EXPECT_CALL(mock_obj, Foo(bar))`, gMock saves away a copy of -`bar`. When `Foo()` is called later, gMock compares the argument to `Foo()` with -the saved copy of `bar`. This way, you don't need to worry about `bar` being -modified or destroyed after the `EXPECT_CALL()` is executed. The same is true -when you use matchers like `Eq(bar)`, `Le(bar)`, and so on. - -But what if `bar` cannot be copied (i.e. has no copy constructor)? You could -define your own matcher function or callback and use it with `Truly()`, as the -previous couple of recipes have shown. Or, you may be able to get away from it -if you can guarantee that `bar` won't be changed after the `EXPECT_CALL()` is -executed. Just tell gMock that it should save a reference to `bar`, instead of a -copy of it. Here's how: - -```cpp -using ::testing::Eq; -using ::testing::Lt; -... - // Expects that Foo()'s argument == bar. - EXPECT_CALL(mock_obj, Foo(Eq(std::ref(bar)))); - - // Expects that Foo()'s argument < bar. - EXPECT_CALL(mock_obj, Foo(Lt(std::ref(bar)))); -``` - -Remember: if you do this, don't change `bar` after the `EXPECT_CALL()`, or the -result is undefined. - -### Validating a Member of an Object - -Often a mock function takes a reference to object as an argument. When matching -the argument, you may not want to compare the entire object against a fixed -object, as that may be over-specification. Instead, you may need to validate a -certain member variable or the result of a certain getter method of the object. -You can do this with `Field()` and `Property()`. More specifically, - -```cpp -Field(&Foo::bar, m) -``` - -is a matcher that matches a `Foo` object whose `bar` member variable satisfies -matcher `m`. - -```cpp -Property(&Foo::baz, m) -``` - -is a matcher that matches a `Foo` object whose `baz()` method returns a value -that satisfies matcher `m`. - -For example: - -| Expression | Description | -| :--------------------------- | :--------------------------------------- | -| `Field(&Foo::number, Ge(3))` | Matches `x` where `x.number >= 3`. | -| `Property(&Foo::name, StartsWith("John "))` | Matches `x` where `x.name()` starts with `"John "`. | - -Note that in `Property(&Foo::baz, ...)`, method `baz()` must take no argument -and be declared as `const`. Don't use `Property()` against member functions that -you do not own, because taking addresses of functions is fragile and generally -not part of the contract of the function. - -`Field()` and `Property()` can also match plain pointers to objects. For -instance, - -```cpp -using ::testing::Field; -using ::testing::Ge; -... -Field(&Foo::number, Ge(3)) -``` - -matches a plain pointer `p` where `p->number >= 3`. If `p` is `NULL`, the match -will always fail regardless of the inner matcher. - -What if you want to validate more than one members at the same time? Remember -that there are [`AllOf()` and `AllOfArray()`](#CombiningMatchers). - -Finally `Field()` and `Property()` provide overloads that take the field or -property names as the first argument to include it in the error message. This -can be useful when creating combined matchers. - -```cpp -using ::testing::AllOf; -using ::testing::Field; -using ::testing::Matcher; -using ::testing::SafeMatcherCast; - -Matcher IsFoo(const Foo& foo) { - return AllOf(Field("some_field", &Foo::some_field, foo.some_field), - Field("other_field", &Foo::other_field, foo.other_field), - Field("last_field", &Foo::last_field, foo.last_field)); -} -``` - -### Validating the Value Pointed to by a Pointer Argument - -C++ functions often take pointers as arguments. You can use matchers like -`IsNull()`, `NotNull()`, and other comparison matchers to match a pointer, but -what if you want to make sure the value *pointed to* by the pointer, instead of -the pointer itself, has a certain property? Well, you can use the `Pointee(m)` -matcher. - -`Pointee(m)` matches a pointer if and only if `m` matches the value the pointer -points to. For example: - -```cpp -using ::testing::Ge; -using ::testing::Pointee; -... - EXPECT_CALL(foo, Bar(Pointee(Ge(3)))); -``` - -expects `foo.Bar()` to be called with a pointer that points to a value greater -than or equal to 3. - -One nice thing about `Pointee()` is that it treats a `NULL` pointer as a match -failure, so you can write `Pointee(m)` instead of - -```cpp -using ::testing::AllOf; -using ::testing::NotNull; -using ::testing::Pointee; -... - AllOf(NotNull(), Pointee(m)) -``` - -without worrying that a `NULL` pointer will crash your test. - -Also, did we tell you that `Pointee()` works with both raw pointers **and** -smart pointers (`std::unique_ptr`, `std::shared_ptr`, etc)? - -What if you have a pointer to pointer? You guessed it - you can use nested -`Pointee()` to probe deeper inside the value. For example, -`Pointee(Pointee(Lt(3)))` matches a pointer that points to a pointer that points -to a number less than 3 (what a mouthful...). - -### Testing a Certain Property of an Object - -Sometimes you want to specify that an object argument has a certain property, -but there is no existing matcher that does this. If you want good error -messages, you should [define a matcher](#NewMatchers). If you want to do it -quick and dirty, you could get away with writing an ordinary function. - -Let's say you have a mock function that takes an object of type `Foo`, which has -an `int bar()` method and an `int baz()` method, and you want to constrain that -the argument's `bar()` value plus its `baz()` value is a given number. Here's -how you can define a matcher to do it: - -```cpp -using ::testing::Matcher; - -class BarPlusBazEqMatcher { - public: - explicit BarPlusBazEqMatcher(int expected_sum) - : expected_sum_(expected_sum) {} - - bool MatchAndExplain(const Foo& foo, - std::ostream* /* listener */) const { - return (foo.bar() + foo.baz()) == expected_sum_; - } - - void DescribeTo(std::ostream& os) const { - os << "bar() + baz() equals " << expected_sum_; - } - - void DescribeNegationTo(std::ostream& os) const { - os << "bar() + baz() does not equal " << expected_sum_; - } - private: - const int expected_sum_; -}; - -Matcher BarPlusBazEq(int expected_sum) { - return BarPlusBazEqMatcher(expected_sum); -} - -... - EXPECT_CALL(..., DoThis(BarPlusBazEq(5)))...; -``` - -### Matching Containers - -Sometimes an STL container (e.g. list, vector, map, ...) is passed to a mock -function and you may want to validate it. Since most STL containers support the -`==` operator, you can write `Eq(expected_container)` or simply -`expected_container` to match a container exactly. - -Sometimes, though, you may want to be more flexible (for example, the first -element must be an exact match, but the second element can be any positive -number, and so on). Also, containers used in tests often have a small number of -elements, and having to define the expected container out-of-line is a bit of a -hassle. - -You can use the `ElementsAre()` or `UnorderedElementsAre()` matcher in such -cases: - -```cpp -using ::testing::_; -using ::testing::ElementsAre; -using ::testing::Gt; -... - MOCK_METHOD(void, Foo, (const vector& numbers), (override)); -... - EXPECT_CALL(mock, Foo(ElementsAre(1, Gt(0), _, 5))); -``` - -The above matcher says that the container must have 4 elements, which must be 1, -greater than 0, anything, and 5 respectively. - -If you instead write: - -```cpp -using ::testing::_; -using ::testing::Gt; -using ::testing::UnorderedElementsAre; -... - MOCK_METHOD(void, Foo, (const vector& numbers), (override)); -... - EXPECT_CALL(mock, Foo(UnorderedElementsAre(1, Gt(0), _, 5))); -``` - -It means that the container must have 4 elements, which (under some permutation) -must be 1, greater than 0, anything, and 5 respectively. - -As an alternative you can place the arguments in a C-style array and use -`ElementsAreArray()` or `UnorderedElementsAreArray()` instead: - -```cpp -using ::testing::ElementsAreArray; -... - // ElementsAreArray accepts an array of element values. - const int expected_vector1[] = {1, 5, 2, 4, ...}; - EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector1))); - - // Or, an array of element matchers. - Matcher expected_vector2[] = {1, Gt(2), _, 3, ...}; - EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector2))); -``` - -In case the array needs to be dynamically created (and therefore the array size -cannot be inferred by the compiler), you can give `ElementsAreArray()` an -additional argument to specify the array size: - -```cpp -using ::testing::ElementsAreArray; -... - int* const expected_vector3 = new int[count]; - ... fill expected_vector3 with values ... - EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector3, count))); -``` - -Use `Pair` when comparing maps or other associative containers. - -{% raw %} - -```cpp -using testing::ElementsAre; -using testing::Pair; -... - std::map m = {{"a", 1}, {"b", 2}, {"c", 3}}; - EXPECT_THAT(m, ElementsAre(Pair("a", 1), Pair("b", 2), Pair("c", 3))); -``` - -{% endraw %} - -**Tips:** - -* `ElementsAre*()` can be used to match *any* container that implements the - STL iterator pattern (i.e. it has a `const_iterator` type and supports - `begin()/end()`), not just the ones defined in STL. It will even work with - container types yet to be written - as long as they follows the above - pattern. -* You can use nested `ElementsAre*()` to match nested (multi-dimensional) - containers. -* If the container is passed by pointer instead of by reference, just write - `Pointee(ElementsAre*(...))`. -* The order of elements *matters* for `ElementsAre*()`. If you are using it - with containers whose element order are undefined (e.g. `hash_map`) you - should use `WhenSorted` around `ElementsAre`. - -### Sharing Matchers - -Under the hood, a gMock matcher object consists of a pointer to a ref-counted -implementation object. Copying matchers is allowed and very efficient, as only -the pointer is copied. When the last matcher that references the implementation -object dies, the implementation object will be deleted. - -Therefore, if you have some complex matcher that you want to use again and -again, there is no need to build it every time. Just assign it to a matcher -variable and use that variable repeatedly! For example, - -```cpp -using ::testing::AllOf; -using ::testing::Gt; -using ::testing::Le; -using ::testing::Matcher; -... - Matcher in_range = AllOf(Gt(5), Le(10)); - ... use in_range as a matcher in multiple EXPECT_CALLs ... -``` - -### Matchers must have no side-effects {#PureMatchers} - -{: .callout .warning} -WARNING: gMock does not guarantee when or how many times a matcher will be -invoked. Therefore, all matchers must be *purely functional*: they cannot have -any side effects, and the match result must not depend on anything other than -the matcher's parameters and the value being matched. - -This requirement must be satisfied no matter how a matcher is defined (e.g., if -it is one of the standard matchers, or a custom matcher). In particular, a -matcher can never call a mock function, as that will affect the state of the -mock object and gMock. - -## Setting Expectations - -### Knowing When to Expect {#UseOnCall} - -**`ON_CALL`** is likely the *single most under-utilized construct* in gMock. - -There are basically two constructs for defining the behavior of a mock object: -`ON_CALL` and `EXPECT_CALL`. The difference? `ON_CALL` defines what happens when -a mock method is called, but doesn't imply any expectation on the method -being called. `EXPECT_CALL` not only defines the behavior, but also sets an -expectation that the method will be called with the given arguments, for the -given number of times (and *in the given order* when you specify the order -too). - -Since `EXPECT_CALL` does more, isn't it better than `ON_CALL`? Not really. Every -`EXPECT_CALL` adds a constraint on the behavior of the code under test. Having -more constraints than necessary is *baaad* - even worse than not having enough -constraints. - -This may be counter-intuitive. How could tests that verify more be worse than -tests that verify less? Isn't verification the whole point of tests? - -The answer lies in *what* a test should verify. **A good test verifies the -contract of the code.** If a test over-specifies, it doesn't leave enough -freedom to the implementation. As a result, changing the implementation without -breaking the contract (e.g. refactoring and optimization), which should be -perfectly fine to do, can break such tests. Then you have to spend time fixing -them, only to see them broken again the next time the implementation is changed. - -Keep in mind that one doesn't have to verify more than one property in one test. -In fact, **it's a good style to verify only one thing in one test.** If you do -that, a bug will likely break only one or two tests instead of dozens (which -case would you rather debug?). If you are also in the habit of giving tests -descriptive names that tell what they verify, you can often easily guess what's -wrong just from the test log itself. - -So use `ON_CALL` by default, and only use `EXPECT_CALL` when you actually intend -to verify that the call is made. For example, you may have a bunch of `ON_CALL`s -in your test fixture to set the common mock behavior shared by all tests in the -same group, and write (scarcely) different `EXPECT_CALL`s in different `TEST_F`s -to verify different aspects of the code's behavior. Compared with the style -where each `TEST` has many `EXPECT_CALL`s, this leads to tests that are more -resilient to implementational changes (and thus less likely to require -maintenance) and makes the intent of the tests more obvious (so they are easier -to maintain when you do need to maintain them). - -If you are bothered by the "Uninteresting mock function call" message printed -when a mock method without an `EXPECT_CALL` is called, you may use a `NiceMock` -instead to suppress all such messages for the mock object, or suppress the -message for specific methods by adding `EXPECT_CALL(...).Times(AnyNumber())`. DO -NOT suppress it by blindly adding an `EXPECT_CALL(...)`, or you'll have a test -that's a pain to maintain. - -### Ignoring Uninteresting Calls - -If you are not interested in how a mock method is called, just don't say -anything about it. In this case, if the method is ever called, gMock will -perform its default action to allow the test program to continue. If you are not -happy with the default action taken by gMock, you can override it using -`DefaultValue::Set()` (described [here](#DefaultValue)) or `ON_CALL()`. - -Please note that once you expressed interest in a particular mock method (via -`EXPECT_CALL()`), all invocations to it must match some expectation. If this -function is called but the arguments don't match any `EXPECT_CALL()` statement, -it will be an error. - -### Disallowing Unexpected Calls - -If a mock method shouldn't be called at all, explicitly say so: - -```cpp -using ::testing::_; -... - EXPECT_CALL(foo, Bar(_)) - .Times(0); -``` - -If some calls to the method are allowed, but the rest are not, just list all the -expected calls: - -```cpp -using ::testing::AnyNumber; -using ::testing::Gt; -... - EXPECT_CALL(foo, Bar(5)); - EXPECT_CALL(foo, Bar(Gt(10))) - .Times(AnyNumber()); -``` - -A call to `foo.Bar()` that doesn't match any of the `EXPECT_CALL()` statements -will be an error. - -### Understanding Uninteresting vs Unexpected Calls {#uninteresting-vs-unexpected} - -*Uninteresting* calls and *unexpected* calls are different concepts in gMock. -*Very* different. - -A call `x.Y(...)` is **uninteresting** if there's *not even a single* -`EXPECT_CALL(x, Y(...))` set. In other words, the test isn't interested in the -`x.Y()` method at all, as evident in that the test doesn't care to say anything -about it. - -A call `x.Y(...)` is **unexpected** if there are *some* `EXPECT_CALL(x, -Y(...))`s set, but none of them matches the call. Put another way, the test is -interested in the `x.Y()` method (therefore it explicitly sets some -`EXPECT_CALL` to verify how it's called); however, the verification fails as the -test doesn't expect this particular call to happen. - -**An unexpected call is always an error,** as the code under test doesn't behave -the way the test expects it to behave. - -**By default, an uninteresting call is not an error,** as it violates no -constraint specified by the test. (gMock's philosophy is that saying nothing -means there is no constraint.) However, it leads to a warning, as it *might* -indicate a problem (e.g. the test author might have forgotten to specify a -constraint). - -In gMock, `NiceMock` and `StrictMock` can be used to make a mock class "nice" or -"strict". How does this affect uninteresting calls and unexpected calls? - -A **nice mock** suppresses uninteresting call *warnings*. It is less chatty than -the default mock, but otherwise is the same. If a test fails with a default -mock, it will also fail using a nice mock instead. And vice versa. Don't expect -making a mock nice to change the test's result. - -A **strict mock** turns uninteresting call warnings into errors. So making a -mock strict may change the test's result. - -Let's look at an example: - -```cpp -TEST(...) { - NiceMock mock_registry; - EXPECT_CALL(mock_registry, GetDomainOwner("google.com")) - .WillRepeatedly(Return("Larry Page")); - - // Use mock_registry in code under test. - ... &mock_registry ... -} -``` - -The sole `EXPECT_CALL` here says that all calls to `GetDomainOwner()` must have -`"google.com"` as the argument. If `GetDomainOwner("yahoo.com")` is called, it -will be an unexpected call, and thus an error. *Having a nice mock doesn't -change the severity of an unexpected call.* - -So how do we tell gMock that `GetDomainOwner()` can be called with some other -arguments as well? The standard technique is to add a "catch all" `EXPECT_CALL`: - -```cpp - EXPECT_CALL(mock_registry, GetDomainOwner(_)) - .Times(AnyNumber()); // catches all other calls to this method. - EXPECT_CALL(mock_registry, GetDomainOwner("google.com")) - .WillRepeatedly(Return("Larry Page")); -``` - -Remember that `_` is the wildcard matcher that matches anything. With this, if -`GetDomainOwner("google.com")` is called, it will do what the second -`EXPECT_CALL` says; if it is called with a different argument, it will do what -the first `EXPECT_CALL` says. - -Note that the order of the two `EXPECT_CALL`s is important, as a newer -`EXPECT_CALL` takes precedence over an older one. - -For more on uninteresting calls, nice mocks, and strict mocks, read -["The Nice, the Strict, and the Naggy"](#NiceStrictNaggy). - -### Ignoring Uninteresting Arguments {#ParameterlessExpectations} - -If your test doesn't care about the parameters (it only cares about the number -or order of calls), you can often simply omit the parameter list: - -```cpp - // Expect foo.Bar( ... ) twice with any arguments. - EXPECT_CALL(foo, Bar).Times(2); - - // Delegate to the given method whenever the factory is invoked. - ON_CALL(foo_factory, MakeFoo) - .WillByDefault(&BuildFooForTest); -``` - -This functionality is only available when a method is not overloaded; to prevent -unexpected behavior it is a compilation error to try to set an expectation on a -method where the specific overload is ambiguous. You can work around this by -supplying a [simpler mock interface](#SimplerInterfaces) than the mocked class -provides. - -This pattern is also useful when the arguments are interesting, but match logic -is substantially complex. You can leave the argument list unspecified and use -SaveArg actions to [save the values for later verification](#SaveArgVerify). If -you do that, you can easily differentiate calling the method the wrong number of -times from calling it with the wrong arguments. - -### Expecting Ordered Calls {#OrderedCalls} - -Although an `EXPECT_CALL()` statement defined later takes precedence when gMock -tries to match a function call with an expectation, by default calls don't have -to happen in the order `EXPECT_CALL()` statements are written. For example, if -the arguments match the matchers in the second `EXPECT_CALL()`, but not those in -the first and third, then the second expectation will be used. - -If you would rather have all calls occur in the order of the expectations, put -the `EXPECT_CALL()` statements in a block where you define a variable of type -`InSequence`: - -```cpp -using ::testing::_; -using ::testing::InSequence; - - { - InSequence s; - - EXPECT_CALL(foo, DoThis(5)); - EXPECT_CALL(bar, DoThat(_)) - .Times(2); - EXPECT_CALL(foo, DoThis(6)); - } -``` - -In this example, we expect a call to `foo.DoThis(5)`, followed by two calls to -`bar.DoThat()` where the argument can be anything, which are in turn followed by -a call to `foo.DoThis(6)`. If a call occurred out-of-order, gMock will report an -error. - -### Expecting Partially Ordered Calls {#PartialOrder} - -Sometimes requiring everything to occur in a predetermined order can lead to -brittle tests. For example, we may care about `A` occurring before both `B` and -`C`, but aren't interested in the relative order of `B` and `C`. In this case, -the test should reflect our real intent, instead of being overly constraining. - -gMock allows you to impose an arbitrary DAG (directed acyclic graph) on the -calls. One way to express the DAG is to use the -[`After` clause](reference/mocking.md#EXPECT_CALL.After) of `EXPECT_CALL`. - -Another way is via the `InSequence()` clause (not the same as the `InSequence` -class), which we borrowed from jMock 2. It's less flexible than `After()`, but -more convenient when you have long chains of sequential calls, as it doesn't -require you to come up with different names for the expectations in the chains. -Here's how it works: - -If we view `EXPECT_CALL()` statements as nodes in a graph, and add an edge from -node A to node B wherever A must occur before B, we can get a DAG. We use the -term "sequence" to mean a directed path in this DAG. Now, if we decompose the -DAG into sequences, we just need to know which sequences each `EXPECT_CALL()` -belongs to in order to be able to reconstruct the original DAG. - -So, to specify the partial order on the expectations we need to do two things: -first to define some `Sequence` objects, and then for each `EXPECT_CALL()` say -which `Sequence` objects it is part of. - -Expectations in the same sequence must occur in the order they are written. For -example, - -```cpp -using ::testing::Sequence; -... - Sequence s1, s2; - - EXPECT_CALL(foo, A()) - .InSequence(s1, s2); - EXPECT_CALL(bar, B()) - .InSequence(s1); - EXPECT_CALL(bar, C()) - .InSequence(s2); - EXPECT_CALL(foo, D()) - .InSequence(s2); -``` - -specifies the following DAG (where `s1` is `A -> B`, and `s2` is `A -> C -> D`): - -```text - +---> B - | - A ---| - | - +---> C ---> D -``` - -This means that A must occur before B and C, and C must occur before D. There's -no restriction about the order other than these. - -### Controlling When an Expectation Retires - -When a mock method is called, gMock only considers expectations that are still -active. An expectation is active when created, and becomes inactive (aka -*retires*) when a call that has to occur later has occurred. For example, in - -```cpp -using ::testing::_; -using ::testing::Sequence; -... - Sequence s1, s2; - - EXPECT_CALL(log, Log(WARNING, _, "File too large.")) // #1 - .Times(AnyNumber()) - .InSequence(s1, s2); - EXPECT_CALL(log, Log(WARNING, _, "Data set is empty.")) // #2 - .InSequence(s1); - EXPECT_CALL(log, Log(WARNING, _, "User not found.")) // #3 - .InSequence(s2); -``` - -as soon as either #2 or #3 is matched, #1 will retire. If a warning `"File too -large."` is logged after this, it will be an error. - -Note that an expectation doesn't retire automatically when it's saturated. For -example, - -```cpp -using ::testing::_; -... - EXPECT_CALL(log, Log(WARNING, _, _)); // #1 - EXPECT_CALL(log, Log(WARNING, _, "File too large.")); // #2 -``` - -says that there will be exactly one warning with the message `"File too -large."`. If the second warning contains this message too, #2 will match again -and result in an upper-bound-violated error. - -If this is not what you want, you can ask an expectation to retire as soon as it -becomes saturated: - -```cpp -using ::testing::_; -... - EXPECT_CALL(log, Log(WARNING, _, _)); // #1 - EXPECT_CALL(log, Log(WARNING, _, "File too large.")) // #2 - .RetiresOnSaturation(); -``` - -Here #2 can be used only once, so if you have two warnings with the message -`"File too large."`, the first will match #2 and the second will match #1 - -there will be no error. - -## Using Actions - -### Returning References from Mock Methods - -If a mock function's return type is a reference, you need to use `ReturnRef()` -instead of `Return()` to return a result: - -```cpp -using ::testing::ReturnRef; - -class MockFoo : public Foo { - public: - MOCK_METHOD(Bar&, GetBar, (), (override)); -}; -... - MockFoo foo; - Bar bar; - EXPECT_CALL(foo, GetBar()) - .WillOnce(ReturnRef(bar)); -... -``` - -### Returning Live Values from Mock Methods - -The `Return(x)` action saves a copy of `x` when the action is created, and -always returns the same value whenever it's executed. Sometimes you may want to -instead return the *live* value of `x` (i.e. its value at the time when the -action is *executed*.). Use either `ReturnRef()` or `ReturnPointee()` for this -purpose. - -If the mock function's return type is a reference, you can do it using -`ReturnRef(x)`, as shown in the previous recipe ("Returning References from Mock -Methods"). However, gMock doesn't let you use `ReturnRef()` in a mock function -whose return type is not a reference, as doing that usually indicates a user -error. So, what shall you do? - -Though you may be tempted, DO NOT use `std::ref()`: - -```cpp -using testing::Return; - -class MockFoo : public Foo { - public: - MOCK_METHOD(int, GetValue, (), (override)); -}; -... - int x = 0; - MockFoo foo; - EXPECT_CALL(foo, GetValue()) - .WillRepeatedly(Return(std::ref(x))); // Wrong! - x = 42; - EXPECT_EQ(42, foo.GetValue()); -``` - -Unfortunately, it doesn't work here. The above code will fail with error: - -```text -Value of: foo.GetValue() - Actual: 0 -Expected: 42 -``` - -The reason is that `Return(*value*)` converts `value` to the actual return type -of the mock function at the time when the action is *created*, not when it is -*executed*. (This behavior was chosen for the action to be safe when `value` is -a proxy object that references some temporary objects.) As a result, -`std::ref(x)` is converted to an `int` value (instead of a `const int&`) when -the expectation is set, and `Return(std::ref(x))` will always return 0. - -`ReturnPointee(pointer)` was provided to solve this problem specifically. It -returns the value pointed to by `pointer` at the time the action is *executed*: - -```cpp -using testing::ReturnPointee; -... - int x = 0; - MockFoo foo; - EXPECT_CALL(foo, GetValue()) - .WillRepeatedly(ReturnPointee(&x)); // Note the & here. - x = 42; - EXPECT_EQ(42, foo.GetValue()); // This will succeed now. -``` - -### Combining Actions - -Want to do more than one thing when a function is called? That's fine. `DoAll()` -allow you to do sequence of actions every time. Only the return value of the -last action in the sequence will be used. - -```cpp -using ::testing::_; -using ::testing::DoAll; - -class MockFoo : public Foo { - public: - MOCK_METHOD(bool, Bar, (int n), (override)); -}; -... - EXPECT_CALL(foo, Bar(_)) - .WillOnce(DoAll(action_1, - action_2, - ... - action_n)); -``` - -### Verifying Complex Arguments {#SaveArgVerify} - -If you want to verify that a method is called with a particular argument but the -match criteria is complex, it can be difficult to distinguish between -cardinality failures (calling the method the wrong number of times) and argument -match failures. Similarly, if you are matching multiple parameters, it may not -be easy to distinguishing which argument failed to match. For example: - -```cpp - // Not ideal: this could fail because of a problem with arg1 or arg2, or maybe - // just the method wasn't called. - EXPECT_CALL(foo, SendValues(_, ElementsAre(1, 4, 4, 7), EqualsProto( ... ))); -``` - -You can instead save the arguments and test them individually: - -```cpp - EXPECT_CALL(foo, SendValues) - .WillOnce(DoAll(SaveArg<1>(&actual_array), SaveArg<2>(&actual_proto))); - ... run the test - EXPECT_THAT(actual_array, ElementsAre(1, 4, 4, 7)); - EXPECT_THAT(actual_proto, EqualsProto( ... )); -``` - -### Mocking Side Effects {#MockingSideEffects} - -Sometimes a method exhibits its effect not via returning a value but via side -effects. For example, it may change some global state or modify an output -argument. To mock side effects, in general you can define your own action by -implementing `::testing::ActionInterface`. - -If all you need to do is to change an output argument, the built-in -`SetArgPointee()` action is convenient: - -```cpp -using ::testing::_; -using ::testing::SetArgPointee; - -class MockMutator : public Mutator { - public: - MOCK_METHOD(void, Mutate, (bool mutate, int* value), (override)); - ... -} -... - MockMutator mutator; - EXPECT_CALL(mutator, Mutate(true, _)) - .WillOnce(SetArgPointee<1>(5)); -``` - -In this example, when `mutator.Mutate()` is called, we will assign 5 to the -`int` variable pointed to by argument #1 (0-based). - -`SetArgPointee()` conveniently makes an internal copy of the value you pass to -it, removing the need to keep the value in scope and alive. The implication -however is that the value must have a copy constructor and assignment operator. - -If the mock method also needs to return a value as well, you can chain -`SetArgPointee()` with `Return()` using `DoAll()`, remembering to put the -`Return()` statement last: - -```cpp -using ::testing::_; -using ::testing::DoAll; -using ::testing::Return; -using ::testing::SetArgPointee; - -class MockMutator : public Mutator { - public: - ... - MOCK_METHOD(bool, MutateInt, (int* value), (override)); -} -... - MockMutator mutator; - EXPECT_CALL(mutator, MutateInt(_)) - .WillOnce(DoAll(SetArgPointee<0>(5), - Return(true))); -``` - -Note, however, that if you use the `ReturnOKWith()` method, it will override the -values provided by `SetArgPointee()` in the response parameters of your function -call. - -If the output argument is an array, use the `SetArrayArgument(first, last)` -action instead. It copies the elements in source range `[first, last)` to the -array pointed to by the `N`-th (0-based) argument: - -```cpp -using ::testing::NotNull; -using ::testing::SetArrayArgument; - -class MockArrayMutator : public ArrayMutator { - public: - MOCK_METHOD(void, Mutate, (int* values, int num_values), (override)); - ... -} -... - MockArrayMutator mutator; - int values[5] = {1, 2, 3, 4, 5}; - EXPECT_CALL(mutator, Mutate(NotNull(), 5)) - .WillOnce(SetArrayArgument<0>(values, values + 5)); -``` - -This also works when the argument is an output iterator: - -```cpp -using ::testing::_; -using ::testing::SetArrayArgument; - -class MockRolodex : public Rolodex { - public: - MOCK_METHOD(void, GetNames, (std::back_insert_iterator>), - (override)); - ... -} -... - MockRolodex rolodex; - vector names = {"George", "John", "Thomas"}; - EXPECT_CALL(rolodex, GetNames(_)) - .WillOnce(SetArrayArgument<0>(names.begin(), names.end())); -``` - -### Changing a Mock Object's Behavior Based on the State - -If you expect a call to change the behavior of a mock object, you can use -`::testing::InSequence` to specify different behaviors before and after the -call: - -```cpp -using ::testing::InSequence; -using ::testing::Return; - -... - { - InSequence seq; - EXPECT_CALL(my_mock, IsDirty()) - .WillRepeatedly(Return(true)); - EXPECT_CALL(my_mock, Flush()); - EXPECT_CALL(my_mock, IsDirty()) - .WillRepeatedly(Return(false)); - } - my_mock.FlushIfDirty(); -``` - -This makes `my_mock.IsDirty()` return `true` before `my_mock.Flush()` is called -and return `false` afterwards. - -If the behavior change is more complex, you can store the effects in a variable -and make a mock method get its return value from that variable: - -```cpp -using ::testing::_; -using ::testing::SaveArg; -using ::testing::Return; - -ACTION_P(ReturnPointee, p) { return *p; } -... - int previous_value = 0; - EXPECT_CALL(my_mock, GetPrevValue) - .WillRepeatedly(ReturnPointee(&previous_value)); - EXPECT_CALL(my_mock, UpdateValue) - .WillRepeatedly(SaveArg<0>(&previous_value)); - my_mock.DoSomethingToUpdateValue(); -``` - -Here `my_mock.GetPrevValue()` will always return the argument of the last -`UpdateValue()` call. - -### Setting the Default Value for a Return Type {#DefaultValue} - -If a mock method's return type is a built-in C++ type or pointer, by default it -will return 0 when invoked. Also, in C++ 11 and above, a mock method whose -return type has a default constructor will return a default-constructed value by -default. You only need to specify an action if this default value doesn't work -for you. - -Sometimes, you may want to change this default value, or you may want to specify -a default value for types gMock doesn't know about. You can do this using the -`::testing::DefaultValue` class template: - -```cpp -using ::testing::DefaultValue; - -class MockFoo : public Foo { - public: - MOCK_METHOD(Bar, CalculateBar, (), (override)); -}; - - -... - Bar default_bar; - // Sets the default return value for type Bar. - DefaultValue::Set(default_bar); - - MockFoo foo; - - // We don't need to specify an action here, as the default - // return value works for us. - EXPECT_CALL(foo, CalculateBar()); - - foo.CalculateBar(); // This should return default_bar. - - // Unsets the default return value. - DefaultValue::Clear(); -``` - -Please note that changing the default value for a type can make your tests hard -to understand. We recommend you to use this feature judiciously. For example, -you may want to make sure the `Set()` and `Clear()` calls are right next to the -code that uses your mock. - -### Setting the Default Actions for a Mock Method - -You've learned how to change the default value of a given type. However, this -may be too coarse for your purpose: perhaps you have two mock methods with the -same return type and you want them to have different behaviors. The `ON_CALL()` -macro allows you to customize your mock's behavior at the method level: - -```cpp -using ::testing::_; -using ::testing::AnyNumber; -using ::testing::Gt; -using ::testing::Return; -... - ON_CALL(foo, Sign(_)) - .WillByDefault(Return(-1)); - ON_CALL(foo, Sign(0)) - .WillByDefault(Return(0)); - ON_CALL(foo, Sign(Gt(0))) - .WillByDefault(Return(1)); - - EXPECT_CALL(foo, Sign(_)) - .Times(AnyNumber()); - - foo.Sign(5); // This should return 1. - foo.Sign(-9); // This should return -1. - foo.Sign(0); // This should return 0. -``` - -As you may have guessed, when there are more than one `ON_CALL()` statements, -the newer ones in the order take precedence over the older ones. In other words, -the **last** one that matches the function arguments will be used. This matching -order allows you to set up the common behavior in a mock object's constructor or -the test fixture's set-up phase and specialize the mock's behavior later. - -Note that both `ON_CALL` and `EXPECT_CALL` have the same "later statements take -precedence" rule, but they don't interact. That is, `EXPECT_CALL`s have their -own precedence order distinct from the `ON_CALL` precedence order. - -### Using Functions/Methods/Functors/Lambdas as Actions {#FunctionsAsActions} - -If the built-in actions don't suit you, you can use an existing callable -(function, `std::function`, method, functor, lambda) as an action. - -```cpp -using ::testing::_; using ::testing::Invoke; - -class MockFoo : public Foo { - public: - MOCK_METHOD(int, Sum, (int x, int y), (override)); - MOCK_METHOD(bool, ComplexJob, (int x), (override)); -}; - -int CalculateSum(int x, int y) { return x + y; } -int Sum3(int x, int y, int z) { return x + y + z; } - -class Helper { - public: - bool ComplexJob(int x); -}; - -... - MockFoo foo; - Helper helper; - EXPECT_CALL(foo, Sum(_, _)) - .WillOnce(&CalculateSum) - .WillRepeatedly(Invoke(NewPermanentCallback(Sum3, 1))); - EXPECT_CALL(foo, ComplexJob(_)) - .WillOnce(Invoke(&helper, &Helper::ComplexJob)) - .WillOnce([] { return true; }) - .WillRepeatedly([](int x) { return x > 0; }); - - foo.Sum(5, 6); // Invokes CalculateSum(5, 6). - foo.Sum(2, 3); // Invokes Sum3(1, 2, 3). - foo.ComplexJob(10); // Invokes helper.ComplexJob(10). - foo.ComplexJob(-1); // Invokes the inline lambda. -``` - -The only requirement is that the type of the function, etc must be *compatible* -with the signature of the mock function, meaning that the latter's arguments (if -it takes any) can be implicitly converted to the corresponding arguments of the -former, and the former's return type can be implicitly converted to that of the -latter. So, you can invoke something whose type is *not* exactly the same as the -mock function, as long as it's safe to do so - nice, huh? - -Note that: - -* The action takes ownership of the callback and will delete it when the - action itself is destructed. -* If the type of a callback is derived from a base callback type `C`, you need - to implicitly cast it to `C` to resolve the overloading, e.g. - - ```cpp - using ::testing::Invoke; - ... - ResultCallback* is_ok = ...; - ... Invoke(is_ok) ...; // This works. - - BlockingClosure* done = new BlockingClosure; - ... Invoke(implicit_cast(done)) ...; // The cast is necessary. - ``` - -### Using Functions with Extra Info as Actions - -The function or functor you call using `Invoke()` must have the same number of -arguments as the mock function you use it for. Sometimes you may have a function -that takes more arguments, and you are willing to pass in the extra arguments -yourself to fill the gap. You can do this in gMock using callbacks with -pre-bound arguments. Here's an example: - -```cpp -using ::testing::Invoke; - -class MockFoo : public Foo { - public: - MOCK_METHOD(char, DoThis, (int n), (override)); -}; - -char SignOfSum(int x, int y) { - const int sum = x + y; - return (sum > 0) ? '+' : (sum < 0) ? '-' : '0'; -} - -TEST_F(FooTest, Test) { - MockFoo foo; - - EXPECT_CALL(foo, DoThis(2)) - .WillOnce(Invoke(NewPermanentCallback(SignOfSum, 5))); - EXPECT_EQ('+', foo.DoThis(2)); // Invokes SignOfSum(5, 2). -} -``` - -### Invoking a Function/Method/Functor/Lambda/Callback Without Arguments - -`Invoke()` passes the mock function's arguments to the function, etc being -invoked such that the callee has the full context of the call to work with. If -the invoked function is not interested in some or all of the arguments, it can -simply ignore them. - -Yet, a common pattern is that a test author wants to invoke a function without -the arguments of the mock function. She could do that using a wrapper function -that throws away the arguments before invoking an underlining nullary function. -Needless to say, this can be tedious and obscures the intent of the test. - -There are two solutions to this problem. First, you can pass any callable of -zero args as an action. Alternatively, use `InvokeWithoutArgs()`, which is like -`Invoke()` except that it doesn't pass the mock function's arguments to the -callee. Here's an example of each: - -```cpp -using ::testing::_; -using ::testing::InvokeWithoutArgs; - -class MockFoo : public Foo { - public: - MOCK_METHOD(bool, ComplexJob, (int n), (override)); -}; - -bool Job1() { ... } -bool Job2(int n, char c) { ... } - -... - MockFoo foo; - EXPECT_CALL(foo, ComplexJob(_)) - .WillOnce([] { Job1(); }); - .WillOnce(InvokeWithoutArgs(NewPermanentCallback(Job2, 5, 'a'))); - - foo.ComplexJob(10); // Invokes Job1(). - foo.ComplexJob(20); // Invokes Job2(5, 'a'). -``` - -Note that: - -* The action takes ownership of the callback and will delete it when the - action itself is destructed. -* If the type of a callback is derived from a base callback type `C`, you need - to implicitly cast it to `C` to resolve the overloading, e.g. - - ```cpp - using ::testing::InvokeWithoutArgs; - ... - ResultCallback* is_ok = ...; - ... InvokeWithoutArgs(is_ok) ...; // This works. - - BlockingClosure* done = ...; - ... InvokeWithoutArgs(implicit_cast(done)) ...; - // The cast is necessary. - ``` - -### Invoking an Argument of the Mock Function - -Sometimes a mock function will receive a function pointer, a functor (in other -words, a "callable") as an argument, e.g. - -```cpp -class MockFoo : public Foo { - public: - MOCK_METHOD(bool, DoThis, (int n, (ResultCallback1* callback)), - (override)); -}; -``` - -and you may want to invoke this callable argument: - -```cpp -using ::testing::_; -... - MockFoo foo; - EXPECT_CALL(foo, DoThis(_, _)) - .WillOnce(...); - // Will execute callback->Run(5), where callback is the - // second argument DoThis() receives. -``` - -{: .callout .note} -NOTE: The section below is legacy documentation from before C++ had lambdas: - -Arghh, you need to refer to a mock function argument but C++ has no lambda -(yet), so you have to define your own action. :-( Or do you really? - -Well, gMock has an action to solve *exactly* this problem: - -```cpp -InvokeArgument(arg_1, arg_2, ..., arg_m) -``` - -will invoke the `N`-th (0-based) argument the mock function receives, with -`arg_1`, `arg_2`, ..., and `arg_m`. No matter if the argument is a function -pointer, a functor, or a callback. gMock handles them all. - -With that, you could write: - -```cpp -using ::testing::_; -using ::testing::InvokeArgument; -... - EXPECT_CALL(foo, DoThis(_, _)) - .WillOnce(InvokeArgument<1>(5)); - // Will execute callback->Run(5), where callback is the - // second argument DoThis() receives. -``` - -What if the callable takes an argument by reference? No problem - just wrap it -inside `std::ref()`: - -```cpp - ... - MOCK_METHOD(bool, Bar, - ((ResultCallback2* callback)), - (override)); - ... - using ::testing::_; - using ::testing::InvokeArgument; - ... - MockFoo foo; - Helper helper; - ... - EXPECT_CALL(foo, Bar(_)) - .WillOnce(InvokeArgument<0>(5, std::ref(helper))); - // std::ref(helper) guarantees that a reference to helper, not a copy of - // it, will be passed to the callback. -``` - -What if the callable takes an argument by reference and we do **not** wrap the -argument in `std::ref()`? Then `InvokeArgument()` will *make a copy* of the -argument, and pass a *reference to the copy*, instead of a reference to the -original value, to the callable. This is especially handy when the argument is a -temporary value: - -```cpp - ... - MOCK_METHOD(bool, DoThat, (bool (*f)(const double& x, const string& s)), - (override)); - ... - using ::testing::_; - using ::testing::InvokeArgument; - ... - MockFoo foo; - ... - EXPECT_CALL(foo, DoThat(_)) - .WillOnce(InvokeArgument<0>(5.0, string("Hi"))); - // Will execute (*f)(5.0, string("Hi")), where f is the function pointer - // DoThat() receives. Note that the values 5.0 and string("Hi") are - // temporary and dead once the EXPECT_CALL() statement finishes. Yet - // it's fine to perform this action later, since a copy of the values - // are kept inside the InvokeArgument action. -``` - -### Ignoring an Action's Result - -Sometimes you have an action that returns *something*, but you need an action -that returns `void` (perhaps you want to use it in a mock function that returns -`void`, or perhaps it needs to be used in `DoAll()` and it's not the last in the -list). `IgnoreResult()` lets you do that. For example: - -```cpp -using ::testing::_; -using ::testing::DoAll; -using ::testing::IgnoreResult; -using ::testing::Return; - -int Process(const MyData& data); -string DoSomething(); - -class MockFoo : public Foo { - public: - MOCK_METHOD(void, Abc, (const MyData& data), (override)); - MOCK_METHOD(bool, Xyz, (), (override)); -}; - - ... - MockFoo foo; - EXPECT_CALL(foo, Abc(_)) - // .WillOnce(Invoke(Process)); - // The above line won't compile as Process() returns int but Abc() needs - // to return void. - .WillOnce(IgnoreResult(Process)); - EXPECT_CALL(foo, Xyz()) - .WillOnce(DoAll(IgnoreResult(DoSomething), - // Ignores the string DoSomething() returns. - Return(true))); -``` - -Note that you **cannot** use `IgnoreResult()` on an action that already returns -`void`. Doing so will lead to ugly compiler errors. - -### Selecting an Action's Arguments {#SelectingArgs} - -Say you have a mock function `Foo()` that takes seven arguments, and you have a -custom action that you want to invoke when `Foo()` is called. Trouble is, the -custom action only wants three arguments: - -```cpp -using ::testing::_; -using ::testing::Invoke; -... - MOCK_METHOD(bool, Foo, - (bool visible, const string& name, int x, int y, - (const map>), double& weight, double min_weight, - double max_wight)); -... -bool IsVisibleInQuadrant1(bool visible, int x, int y) { - return visible && x >= 0 && y >= 0; -} -... - EXPECT_CALL(mock, Foo) - .WillOnce(Invoke(IsVisibleInQuadrant1)); // Uh, won't compile. :-( -``` - -To please the compiler God, you need to define an "adaptor" that has the same -signature as `Foo()` and calls the custom action with the right arguments: - -```cpp -using ::testing::_; -using ::testing::Invoke; -... -bool MyIsVisibleInQuadrant1(bool visible, const string& name, int x, int y, - const map, double>& weight, - double min_weight, double max_wight) { - return IsVisibleInQuadrant1(visible, x, y); -} -... - EXPECT_CALL(mock, Foo) - .WillOnce(Invoke(MyIsVisibleInQuadrant1)); // Now it works. -``` - -But isn't this awkward? - -gMock provides a generic *action adaptor*, so you can spend your time minding -more important business than writing your own adaptors. Here's the syntax: - -```cpp -WithArgs(action) -``` - -creates an action that passes the arguments of the mock function at the given -indices (0-based) to the inner `action` and performs it. Using `WithArgs`, our -original example can be written as: - -```cpp -using ::testing::_; -using ::testing::Invoke; -using ::testing::WithArgs; -... - EXPECT_CALL(mock, Foo) - .WillOnce(WithArgs<0, 2, 3>(Invoke(IsVisibleInQuadrant1))); // No need to define your own adaptor. -``` - -For better readability, gMock also gives you: - -* `WithoutArgs(action)` when the inner `action` takes *no* argument, and -* `WithArg(action)` (no `s` after `Arg`) when the inner `action` takes - *one* argument. - -As you may have realized, `InvokeWithoutArgs(...)` is just syntactic sugar for -`WithoutArgs(Invoke(...))`. - -Here are more tips: - -* The inner action used in `WithArgs` and friends does not have to be - `Invoke()` -- it can be anything. -* You can repeat an argument in the argument list if necessary, e.g. - `WithArgs<2, 3, 3, 5>(...)`. -* You can change the order of the arguments, e.g. `WithArgs<3, 2, 1>(...)`. -* The types of the selected arguments do *not* have to match the signature of - the inner action exactly. It works as long as they can be implicitly - converted to the corresponding arguments of the inner action. For example, - if the 4-th argument of the mock function is an `int` and `my_action` takes - a `double`, `WithArg<4>(my_action)` will work. - -### Ignoring Arguments in Action Functions - -The [selecting-an-action's-arguments](#SelectingArgs) recipe showed us one way -to make a mock function and an action with incompatible argument lists fit -together. The downside is that wrapping the action in `WithArgs<...>()` can get -tedious for people writing the tests. - -If you are defining a function (or method, functor, lambda, callback) to be used -with `Invoke*()`, and you are not interested in some of its arguments, an -alternative to `WithArgs` is to declare the uninteresting arguments as `Unused`. -This makes the definition less cluttered and less fragile in case the types of -the uninteresting arguments change. It could also increase the chance the action -function can be reused. For example, given - -```cpp - public: - MOCK_METHOD(double, Foo, double(const string& label, double x, double y), - (override)); - MOCK_METHOD(double, Bar, (int index, double x, double y), (override)); -``` - -instead of - -```cpp -using ::testing::_; -using ::testing::Invoke; - -double DistanceToOriginWithLabel(const string& label, double x, double y) { - return sqrt(x*x + y*y); -} -double DistanceToOriginWithIndex(int index, double x, double y) { - return sqrt(x*x + y*y); -} -... - EXPECT_CALL(mock, Foo("abc", _, _)) - .WillOnce(Invoke(DistanceToOriginWithLabel)); - EXPECT_CALL(mock, Bar(5, _, _)) - .WillOnce(Invoke(DistanceToOriginWithIndex)); -``` - -you could write - -```cpp -using ::testing::_; -using ::testing::Invoke; -using ::testing::Unused; - -double DistanceToOrigin(Unused, double x, double y) { - return sqrt(x*x + y*y); -} -... - EXPECT_CALL(mock, Foo("abc", _, _)) - .WillOnce(Invoke(DistanceToOrigin)); - EXPECT_CALL(mock, Bar(5, _, _)) - .WillOnce(Invoke(DistanceToOrigin)); -``` - -### Sharing Actions - -Just like matchers, a gMock action object consists of a pointer to a ref-counted -implementation object. Therefore copying actions is also allowed and very -efficient. When the last action that references the implementation object dies, -the implementation object will be deleted. - -If you have some complex action that you want to use again and again, you may -not have to build it from scratch every time. If the action doesn't have an -internal state (i.e. if it always does the same thing no matter how many times -it has been called), you can assign it to an action variable and use that -variable repeatedly. For example: - -```cpp -using ::testing::Action; -using ::testing::DoAll; -using ::testing::Return; -using ::testing::SetArgPointee; -... - Action set_flag = DoAll(SetArgPointee<0>(5), - Return(true)); - ... use set_flag in .WillOnce() and .WillRepeatedly() ... -``` - -However, if the action has its own state, you may be surprised if you share the -action object. Suppose you have an action factory `IncrementCounter(init)` which -creates an action that increments and returns a counter whose initial value is -`init`, using two actions created from the same expression and using a shared -action will exhibit different behaviors. Example: - -```cpp - EXPECT_CALL(foo, DoThis()) - .WillRepeatedly(IncrementCounter(0)); - EXPECT_CALL(foo, DoThat()) - .WillRepeatedly(IncrementCounter(0)); - foo.DoThis(); // Returns 1. - foo.DoThis(); // Returns 2. - foo.DoThat(); // Returns 1 - Blah() uses a different - // counter than Bar()'s. -``` - -versus - -```cpp -using ::testing::Action; -... - Action increment = IncrementCounter(0); - EXPECT_CALL(foo, DoThis()) - .WillRepeatedly(increment); - EXPECT_CALL(foo, DoThat()) - .WillRepeatedly(increment); - foo.DoThis(); // Returns 1. - foo.DoThis(); // Returns 2. - foo.DoThat(); // Returns 3 - the counter is shared. -``` - -### Testing Asynchronous Behavior - -One oft-encountered problem with gMock is that it can be hard to test -asynchronous behavior. Suppose you had a `EventQueue` class that you wanted to -test, and you created a separate `EventDispatcher` interface so that you could -easily mock it out. However, the implementation of the class fired all the -events on a background thread, which made test timings difficult. You could just -insert `sleep()` statements and hope for the best, but that makes your test -behavior nondeterministic. A better way is to use gMock actions and -`Notification` objects to force your asynchronous test to behave synchronously. - -```cpp -class MockEventDispatcher : public EventDispatcher { - MOCK_METHOD(bool, DispatchEvent, (int32), (override)); -}; - -TEST(EventQueueTest, EnqueueEventTest) { - MockEventDispatcher mock_event_dispatcher; - EventQueue event_queue(&mock_event_dispatcher); - - const int32 kEventId = 321; - absl::Notification done; - EXPECT_CALL(mock_event_dispatcher, DispatchEvent(kEventId)) - .WillOnce([&done] { done.Notify(); }); - - event_queue.EnqueueEvent(kEventId); - done.WaitForNotification(); -} -``` - -In the example above, we set our normal gMock expectations, but then add an -additional action to notify the `Notification` object. Now we can just call -`Notification::WaitForNotification()` in the main thread to wait for the -asynchronous call to finish. After that, our test suite is complete and we can -safely exit. - -{: .callout .note} -Note: this example has a downside: namely, if the expectation is not satisfied, -our test will run forever. It will eventually time-out and fail, but it will -take longer and be slightly harder to debug. To alleviate this problem, you can -use `WaitForNotificationWithTimeout(ms)` instead of `WaitForNotification()`. - -## Misc Recipes on Using gMock - -### Mocking Methods That Use Move-Only Types - -C++11 introduced *move-only types*. A move-only-typed value can be moved from -one object to another, but cannot be copied. `std::unique_ptr` is probably -the most commonly used move-only type. - -Mocking a method that takes and/or returns move-only types presents some -challenges, but nothing insurmountable. This recipe shows you how you can do it. -Note that the support for move-only method arguments was only introduced to -gMock in April 2017; in older code, you may find more complex -[workarounds](#LegacyMoveOnly) for lack of this feature. - -Let’s say we are working on a fictional project that lets one post and share -snippets called “buzzes”. Your code uses these types: - -```cpp -enum class AccessLevel { kInternal, kPublic }; - -class Buzz { - public: - explicit Buzz(AccessLevel access) { ... } - ... -}; - -class Buzzer { - public: - virtual ~Buzzer() {} - virtual std::unique_ptr MakeBuzz(StringPiece text) = 0; - virtual bool ShareBuzz(std::unique_ptr buzz, int64_t timestamp) = 0; - ... -}; -``` - -A `Buzz` object represents a snippet being posted. A class that implements the -`Buzzer` interface is capable of creating and sharing `Buzz`es. Methods in -`Buzzer` may return a `unique_ptr` or take a `unique_ptr`. Now we -need to mock `Buzzer` in our tests. - -To mock a method that accepts or returns move-only types, you just use the -familiar `MOCK_METHOD` syntax as usual: - -```cpp -class MockBuzzer : public Buzzer { - public: - MOCK_METHOD(std::unique_ptr, MakeBuzz, (StringPiece text), (override)); - MOCK_METHOD(bool, ShareBuzz, (std::unique_ptr buzz, int64_t timestamp), - (override)); -}; -``` - -Now that we have the mock class defined, we can use it in tests. In the -following code examples, we assume that we have defined a `MockBuzzer` object -named `mock_buzzer_`: - -```cpp - MockBuzzer mock_buzzer_; -``` - -First let’s see how we can set expectations on the `MakeBuzz()` method, which -returns a `unique_ptr`. - -As usual, if you set an expectation without an action (i.e. the `.WillOnce()` or -`.WillRepeatedly()` clause), when that expectation fires, the default action for -that method will be taken. Since `unique_ptr<>` has a default constructor that -returns a null `unique_ptr`, that’s what you’ll get if you don’t specify an -action: - -```cpp - // Use the default action. - EXPECT_CALL(mock_buzzer_, MakeBuzz("hello")); - - // Triggers the previous EXPECT_CALL. - EXPECT_EQ(nullptr, mock_buzzer_.MakeBuzz("hello")); -``` - -If you are not happy with the default action, you can tweak it as usual; see -[Setting Default Actions](#OnCall). - -If you just need to return a pre-defined move-only value, you can use the -`Return(ByMove(...))` action: - -```cpp - // When this fires, the unique_ptr<> specified by ByMove(...) will - // be returned. - EXPECT_CALL(mock_buzzer_, MakeBuzz("world")) - .WillOnce(Return(ByMove(MakeUnique(AccessLevel::kInternal)))); - - EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("world")); -``` - -Note that `ByMove()` is essential here - if you drop it, the code won’t compile. - -Quiz time! What do you think will happen if a `Return(ByMove(...))` action is -performed more than once (e.g. you write `... -.WillRepeatedly(Return(ByMove(...)));`)? Come think of it, after the first time -the action runs, the source value will be consumed (since it’s a move-only -value), so the next time around, there’s no value to move from -- you’ll get a -run-time error that `Return(ByMove(...))` can only be run once. - -If you need your mock method to do more than just moving a pre-defined value, -remember that you can always use a lambda or a callable object, which can do -pretty much anything you want: - -```cpp - EXPECT_CALL(mock_buzzer_, MakeBuzz("x")) - .WillRepeatedly([](StringPiece text) { - return MakeUnique(AccessLevel::kInternal); - }); - - EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("x")); - EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("x")); -``` - -Every time this `EXPECT_CALL` fires, a new `unique_ptr` will be created -and returned. You cannot do this with `Return(ByMove(...))`. - -That covers returning move-only values; but how do we work with methods -accepting move-only arguments? The answer is that they work normally, although -some actions will not compile when any of method's arguments are move-only. You -can always use `Return`, or a [lambda or functor](#FunctionsAsActions): - -```cpp - using ::testing::Unused; - - EXPECT_CALL(mock_buzzer_, ShareBuzz(NotNull(), _)).WillOnce(Return(true)); - EXPECT_TRUE(mock_buzzer_.ShareBuzz(MakeUnique(AccessLevel::kInternal)), - 0); - - EXPECT_CALL(mock_buzzer_, ShareBuzz(_, _)).WillOnce( - [](std::unique_ptr buzz, Unused) { return buzz != nullptr; }); - EXPECT_FALSE(mock_buzzer_.ShareBuzz(nullptr, 0)); -``` - -Many built-in actions (`WithArgs`, `WithoutArgs`,`DeleteArg`, `SaveArg`, ...) -could in principle support move-only arguments, but the support for this is not -implemented yet. If this is blocking you, please file a bug. - -A few actions (e.g. `DoAll`) copy their arguments internally, so they can never -work with non-copyable objects; you'll have to use functors instead. - -#### Legacy workarounds for move-only types {#LegacyMoveOnly} - -Support for move-only function arguments was only introduced to gMock in April -of 2017. In older code, you may encounter the following workaround for the lack -of this feature (it is no longer necessary - we're including it just for -reference): - -```cpp -class MockBuzzer : public Buzzer { - public: - MOCK_METHOD(bool, DoShareBuzz, (Buzz* buzz, Time timestamp)); - bool ShareBuzz(std::unique_ptr buzz, Time timestamp) override { - return DoShareBuzz(buzz.get(), timestamp); - } -}; -``` - -The trick is to delegate the `ShareBuzz()` method to a mock method (let’s call -it `DoShareBuzz()`) that does not take move-only parameters. Then, instead of -setting expectations on `ShareBuzz()`, you set them on the `DoShareBuzz()` mock -method: - -```cpp - MockBuzzer mock_buzzer_; - EXPECT_CALL(mock_buzzer_, DoShareBuzz(NotNull(), _)); - - // When one calls ShareBuzz() on the MockBuzzer like this, the call is - // forwarded to DoShareBuzz(), which is mocked. Therefore this statement - // will trigger the above EXPECT_CALL. - mock_buzzer_.ShareBuzz(MakeUnique(AccessLevel::kInternal), 0); -``` - -### Making the Compilation Faster - -Believe it or not, the *vast majority* of the time spent on compiling a mock -class is in generating its constructor and destructor, as they perform -non-trivial tasks (e.g. verification of the expectations). What's more, mock -methods with different signatures have different types and thus their -constructors/destructors need to be generated by the compiler separately. As a -result, if you mock many different types of methods, compiling your mock class -can get really slow. - -If you are experiencing slow compilation, you can move the definition of your -mock class' constructor and destructor out of the class body and into a `.cc` -file. This way, even if you `#include` your mock class in N files, the compiler -only needs to generate its constructor and destructor once, resulting in a much -faster compilation. - -Let's illustrate the idea using an example. Here's the definition of a mock -class before applying this recipe: - -```cpp -// File mock_foo.h. -... -class MockFoo : public Foo { - public: - // Since we don't declare the constructor or the destructor, - // the compiler will generate them in every translation unit - // where this mock class is used. - - MOCK_METHOD(int, DoThis, (), (override)); - MOCK_METHOD(bool, DoThat, (const char* str), (override)); - ... more mock methods ... -}; -``` - -After the change, it would look like: - -```cpp -// File mock_foo.h. -... -class MockFoo : public Foo { - public: - // The constructor and destructor are declared, but not defined, here. - MockFoo(); - virtual ~MockFoo(); - - MOCK_METHOD(int, DoThis, (), (override)); - MOCK_METHOD(bool, DoThat, (const char* str), (override)); - ... more mock methods ... -}; -``` - -and - -```cpp -// File mock_foo.cc. -#include "path/to/mock_foo.h" - -// The definitions may appear trivial, but the functions actually do a -// lot of things through the constructors/destructors of the member -// variables used to implement the mock methods. -MockFoo::MockFoo() {} -MockFoo::~MockFoo() {} -``` - -### Forcing a Verification - -When it's being destroyed, your friendly mock object will automatically verify -that all expectations on it have been satisfied, and will generate googletest -failures if not. This is convenient as it leaves you with one less thing to -worry about. That is, unless you are not sure if your mock object will be -destroyed. - -How could it be that your mock object won't eventually be destroyed? Well, it -might be created on the heap and owned by the code you are testing. Suppose -there's a bug in that code and it doesn't delete the mock object properly - you -could end up with a passing test when there's actually a bug. - -Using a heap checker is a good idea and can alleviate the concern, but its -implementation is not 100% reliable. So, sometimes you do want to *force* gMock -to verify a mock object before it is (hopefully) destructed. You can do this -with `Mock::VerifyAndClearExpectations(&mock_object)`: - -```cpp -TEST(MyServerTest, ProcessesRequest) { - using ::testing::Mock; - - MockFoo* const foo = new MockFoo; - EXPECT_CALL(*foo, ...)...; - // ... other expectations ... - - // server now owns foo. - MyServer server(foo); - server.ProcessRequest(...); - - // In case that server's destructor will forget to delete foo, - // this will verify the expectations anyway. - Mock::VerifyAndClearExpectations(foo); -} // server is destroyed when it goes out of scope here. -``` - -{: .callout .tip} -**Tip:** The `Mock::VerifyAndClearExpectations()` function returns a `bool` to -indicate whether the verification was successful (`true` for yes), so you can -wrap that function call inside a `ASSERT_TRUE()` if there is no point going -further when the verification has failed. - -Do not set new expectations after verifying and clearing a mock after its use. -Setting expectations after code that exercises the mock has undefined behavior. -See [Using Mocks in Tests](gmock_for_dummies.md#using-mocks-in-tests) for more -information. - -### Using Checkpoints {#UsingCheckPoints} - -Sometimes you might want to test a mock object's behavior in phases whose sizes -are each manageable, or you might want to set more detailed expectations about -which API calls invoke which mock functions. - -A technique you can use is to put the expectations in a sequence and insert -calls to a dummy "checkpoint" function at specific places. Then you can verify -that the mock function calls do happen at the right time. For example, if you -are exercising the code: - -```cpp - Foo(1); - Foo(2); - Foo(3); -``` - -and want to verify that `Foo(1)` and `Foo(3)` both invoke `mock.Bar("a")`, but -`Foo(2)` doesn't invoke anything, you can write: - -```cpp -using ::testing::MockFunction; - -TEST(FooTest, InvokesBarCorrectly) { - MyMock mock; - // Class MockFunction has exactly one mock method. It is named - // Call() and has type F. - MockFunction check; - { - InSequence s; - - EXPECT_CALL(mock, Bar("a")); - EXPECT_CALL(check, Call("1")); - EXPECT_CALL(check, Call("2")); - EXPECT_CALL(mock, Bar("a")); - } - Foo(1); - check.Call("1"); - Foo(2); - check.Call("2"); - Foo(3); -} -``` - -The expectation spec says that the first `Bar("a")` call must happen before -checkpoint "1", the second `Bar("a")` call must happen after checkpoint "2", and -nothing should happen between the two checkpoints. The explicit checkpoints make -it clear which `Bar("a")` is called by which call to `Foo()`. - -### Mocking Destructors - -Sometimes you want to make sure a mock object is destructed at the right time, -e.g. after `bar->A()` is called but before `bar->B()` is called. We already know -that you can specify constraints on the [order](#OrderedCalls) of mock function -calls, so all we need to do is to mock the destructor of the mock function. - -This sounds simple, except for one problem: a destructor is a special function -with special syntax and special semantics, and the `MOCK_METHOD` macro doesn't -work for it: - -```cpp -MOCK_METHOD(void, ~MockFoo, ()); // Won't compile! -``` - -The good news is that you can use a simple pattern to achieve the same effect. -First, add a mock function `Die()` to your mock class and call it in the -destructor, like this: - -```cpp -class MockFoo : public Foo { - ... - // Add the following two lines to the mock class. - MOCK_METHOD(void, Die, ()); - ~MockFoo() override { Die(); } -}; -``` - -(If the name `Die()` clashes with an existing symbol, choose another name.) Now, -we have translated the problem of testing when a `MockFoo` object dies to -testing when its `Die()` method is called: - -```cpp - MockFoo* foo = new MockFoo; - MockBar* bar = new MockBar; - ... - { - InSequence s; - - // Expects *foo to die after bar->A() and before bar->B(). - EXPECT_CALL(*bar, A()); - EXPECT_CALL(*foo, Die()); - EXPECT_CALL(*bar, B()); - } -``` - -And that's that. - -### Using gMock and Threads {#UsingThreads} - -In a **unit** test, it's best if you could isolate and test a piece of code in a -single-threaded context. That avoids race conditions and dead locks, and makes -debugging your test much easier. - -Yet most programs are multi-threaded, and sometimes to test something we need to -pound on it from more than one thread. gMock works for this purpose too. - -Remember the steps for using a mock: - -1. Create a mock object `foo`. -2. Set its default actions and expectations using `ON_CALL()` and - `EXPECT_CALL()`. -3. The code under test calls methods of `foo`. -4. Optionally, verify and reset the mock. -5. Destroy the mock yourself, or let the code under test destroy it. The - destructor will automatically verify it. - -If you follow the following simple rules, your mocks and threads can live -happily together: - -* Execute your *test code* (as opposed to the code being tested) in *one* - thread. This makes your test easy to follow. -* Obviously, you can do step #1 without locking. -* When doing step #2 and #5, make sure no other thread is accessing `foo`. - Obvious too, huh? -* #3 and #4 can be done either in one thread or in multiple threads - anyway - you want. gMock takes care of the locking, so you don't have to do any - - unless required by your test logic. - -If you violate the rules (for example, if you set expectations on a mock while -another thread is calling its methods), you get undefined behavior. That's not -fun, so don't do it. - -gMock guarantees that the action for a mock function is done in the same thread -that called the mock function. For example, in - -```cpp - EXPECT_CALL(mock, Foo(1)) - .WillOnce(action1); - EXPECT_CALL(mock, Foo(2)) - .WillOnce(action2); -``` - -if `Foo(1)` is called in thread 1 and `Foo(2)` is called in thread 2, gMock will -execute `action1` in thread 1 and `action2` in thread 2. - -gMock does *not* impose a sequence on actions performed in different threads -(doing so may create deadlocks as the actions may need to cooperate). This means -that the execution of `action1` and `action2` in the above example *may* -interleave. If this is a problem, you should add proper synchronization logic to -`action1` and `action2` to make the test thread-safe. - -Also, remember that `DefaultValue` is a global resource that potentially -affects *all* living mock objects in your program. Naturally, you won't want to -mess with it from multiple threads or when there still are mocks in action. - -### Controlling How Much Information gMock Prints - -When gMock sees something that has the potential of being an error (e.g. a mock -function with no expectation is called, a.k.a. an uninteresting call, which is -allowed but perhaps you forgot to explicitly ban the call), it prints some -warning messages, including the arguments of the function, the return value, and -the stack trace. Hopefully this will remind you to take a look and see if there -is indeed a problem. - -Sometimes you are confident that your tests are correct and may not appreciate -such friendly messages. Some other times, you are debugging your tests or -learning about the behavior of the code you are testing, and wish you could -observe every mock call that happens (including argument values, the return -value, and the stack trace). Clearly, one size doesn't fit all. - -You can control how much gMock tells you using the `--gmock_verbose=LEVEL` -command-line flag, where `LEVEL` is a string with three possible values: - -* `info`: gMock will print all informational messages, warnings, and errors - (most verbose). At this setting, gMock will also log any calls to the - `ON_CALL/EXPECT_CALL` macros. It will include a stack trace in - "uninteresting call" warnings. -* `warning`: gMock will print both warnings and errors (less verbose); it will - omit the stack traces in "uninteresting call" warnings. This is the default. -* `error`: gMock will print errors only (least verbose). - -Alternatively, you can adjust the value of that flag from within your tests like -so: - -```cpp - ::testing::FLAGS_gmock_verbose = "error"; -``` - -If you find gMock printing too many stack frames with its informational or -warning messages, remember that you can control their amount with the -`--gtest_stack_trace_depth=max_depth` flag. - -Now, judiciously use the right flag to enable gMock serve you better! - -### Gaining Super Vision into Mock Calls - -You have a test using gMock. It fails: gMock tells you some expectations aren't -satisfied. However, you aren't sure why: Is there a typo somewhere in the -matchers? Did you mess up the order of the `EXPECT_CALL`s? Or is the code under -test doing something wrong? How can you find out the cause? - -Won't it be nice if you have X-ray vision and can actually see the trace of all -`EXPECT_CALL`s and mock method calls as they are made? For each call, would you -like to see its actual argument values and which `EXPECT_CALL` gMock thinks it -matches? If you still need some help to figure out who made these calls, how -about being able to see the complete stack trace at each mock call? - -You can unlock this power by running your test with the `--gmock_verbose=info` -flag. For example, given the test program: - -```cpp -#include "gmock/gmock.h" - -using testing::_; -using testing::HasSubstr; -using testing::Return; - -class MockFoo { - public: - MOCK_METHOD(void, F, (const string& x, const string& y)); -}; - -TEST(Foo, Bar) { - MockFoo mock; - EXPECT_CALL(mock, F(_, _)).WillRepeatedly(Return()); - EXPECT_CALL(mock, F("a", "b")); - EXPECT_CALL(mock, F("c", HasSubstr("d"))); - - mock.F("a", "good"); - mock.F("a", "b"); -} -``` - -if you run it with `--gmock_verbose=info`, you will see this output: - -```shell -[ RUN ] Foo.Bar - -foo_test.cc:14: EXPECT_CALL(mock, F(_, _)) invoked -Stack trace: ... - -foo_test.cc:15: EXPECT_CALL(mock, F("a", "b")) invoked -Stack trace: ... - -foo_test.cc:16: EXPECT_CALL(mock, F("c", HasSubstr("d"))) invoked -Stack trace: ... - -foo_test.cc:14: Mock function call matches EXPECT_CALL(mock, F(_, _))... - Function call: F(@0x7fff7c8dad40"a",@0x7fff7c8dad10"good") -Stack trace: ... - -foo_test.cc:15: Mock function call matches EXPECT_CALL(mock, F("a", "b"))... - Function call: F(@0x7fff7c8dada0"a",@0x7fff7c8dad70"b") -Stack trace: ... - -foo_test.cc:16: Failure -Actual function call count doesn't match EXPECT_CALL(mock, F("c", HasSubstr("d")))... - Expected: to be called once - Actual: never called - unsatisfied and active -[ FAILED ] Foo.Bar -``` - -Suppose the bug is that the `"c"` in the third `EXPECT_CALL` is a typo and -should actually be `"a"`. With the above message, you should see that the actual -`F("a", "good")` call is matched by the first `EXPECT_CALL`, not the third as -you thought. From that it should be obvious that the third `EXPECT_CALL` is -written wrong. Case solved. - -If you are interested in the mock call trace but not the stack traces, you can -combine `--gmock_verbose=info` with `--gtest_stack_trace_depth=0` on the test -command line. - -### Running Tests in Emacs - -If you build and run your tests in Emacs using the `M-x google-compile` command -(as many googletest users do), the source file locations of gMock and googletest -errors will be highlighted. Just press `` on one of them and you'll be -taken to the offending line. Or, you can just type `C-x`` to jump to the next -error. - -To make it even easier, you can add the following lines to your `~/.emacs` file: - -```text -(global-set-key "\M-m" 'google-compile) ; m is for make -(global-set-key [M-down] 'next-error) -(global-set-key [M-up] '(lambda () (interactive) (next-error -1))) -``` - -Then you can type `M-m` to start a build (if you want to run the test as well, -just make sure `foo_test.run` or `runtests` is in the build command you supply -after typing `M-m`), or `M-up`/`M-down` to move back and forth between errors. - -## Extending gMock - -### Writing New Matchers Quickly {#NewMatchers} - -{: .callout .warning} -WARNING: gMock does not guarantee when or how many times a matcher will be -invoked. Therefore, all matchers must be functionally pure. See -[this section](#PureMatchers) for more details. - -The `MATCHER*` family of macros can be used to define custom matchers easily. -The syntax: - -```cpp -MATCHER(name, description_string_expression) { statements; } -``` - -will define a matcher with the given name that executes the statements, which -must return a `bool` to indicate if the match succeeds. Inside the statements, -you can refer to the value being matched by `arg`, and refer to its type by -`arg_type`. - -The *description string* is a `string`-typed expression that documents what the -matcher does, and is used to generate the failure message when the match fails. -It can (and should) reference the special `bool` variable `negation`, and should -evaluate to the description of the matcher when `negation` is `false`, or that -of the matcher's negation when `negation` is `true`. - -For convenience, we allow the description string to be empty (`""`), in which -case gMock will use the sequence of words in the matcher name as the -description. - -For example: - -```cpp -MATCHER(IsDivisibleBy7, "") { return (arg % 7) == 0; } -``` - -allows you to write - -```cpp - // Expects mock_foo.Bar(n) to be called where n is divisible by 7. - EXPECT_CALL(mock_foo, Bar(IsDivisibleBy7())); -``` - -or, - -```cpp - using ::testing::Not; - ... - // Verifies that a value is divisible by 7 and the other is not. - EXPECT_THAT(some_expression, IsDivisibleBy7()); - EXPECT_THAT(some_other_expression, Not(IsDivisibleBy7())); -``` - -If the above assertions fail, they will print something like: - -```shell - Value of: some_expression - Expected: is divisible by 7 - Actual: 27 - ... - Value of: some_other_expression - Expected: not (is divisible by 7) - Actual: 21 -``` - -where the descriptions `"is divisible by 7"` and `"not (is divisible by 7)"` are -automatically calculated from the matcher name `IsDivisibleBy7`. - -As you may have noticed, the auto-generated descriptions (especially those for -the negation) may not be so great. You can always override them with a `string` -expression of your own: - -```cpp -MATCHER(IsDivisibleBy7, - absl::StrCat(negation ? "isn't" : "is", " divisible by 7")) { - return (arg % 7) == 0; -} -``` - -Optionally, you can stream additional information to a hidden argument named -`result_listener` to explain the match result. For example, a better definition -of `IsDivisibleBy7` is: - -```cpp -MATCHER(IsDivisibleBy7, "") { - if ((arg % 7) == 0) - return true; - - *result_listener << "the remainder is " << (arg % 7); - return false; -} -``` - -With this definition, the above assertion will give a better message: - -```shell - Value of: some_expression - Expected: is divisible by 7 - Actual: 27 (the remainder is 6) -``` - -You should let `MatchAndExplain()` print *any additional information* that can -help a user understand the match result. Note that it should explain why the -match succeeds in case of a success (unless it's obvious) - this is useful when -the matcher is used inside `Not()`. There is no need to print the argument value -itself, as gMock already prints it for you. - -{: .callout .note} -NOTE: The type of the value being matched (`arg_type`) is determined by the -context in which you use the matcher and is supplied to you by the compiler, so -you don't need to worry about declaring it (nor can you). This allows the -matcher to be polymorphic. For example, `IsDivisibleBy7()` can be used to match -any type where the value of `(arg % 7) == 0` can be implicitly converted to a -`bool`. In the `Bar(IsDivisibleBy7())` example above, if method `Bar()` takes an -`int`, `arg_type` will be `int`; if it takes an `unsigned long`, `arg_type` will -be `unsigned long`; and so on. - -### Writing New Parameterized Matchers Quickly - -Sometimes you'll want to define a matcher that has parameters. For that you can -use the macro: - -```cpp -MATCHER_P(name, param_name, description_string) { statements; } -``` - -where the description string can be either `""` or a `string` expression that -references `negation` and `param_name`. - -For example: - -```cpp -MATCHER_P(HasAbsoluteValue, value, "") { return abs(arg) == value; } -``` - -will allow you to write: - -```cpp - EXPECT_THAT(Blah("a"), HasAbsoluteValue(n)); -``` - -which may lead to this message (assuming `n` is 10): - -```shell - Value of: Blah("a") - Expected: has absolute value 10 - Actual: -9 -``` - -Note that both the matcher description and its parameter are printed, making the -message human-friendly. - -In the matcher definition body, you can write `foo_type` to reference the type -of a parameter named `foo`. For example, in the body of -`MATCHER_P(HasAbsoluteValue, value)` above, you can write `value_type` to refer -to the type of `value`. - -gMock also provides `MATCHER_P2`, `MATCHER_P3`, ..., up to `MATCHER_P10` to -support multi-parameter matchers: - -```cpp -MATCHER_Pk(name, param_1, ..., param_k, description_string) { statements; } -``` - -Please note that the custom description string is for a particular *instance* of -the matcher, where the parameters have been bound to actual values. Therefore -usually you'll want the parameter values to be part of the description. gMock -lets you do that by referencing the matcher parameters in the description string -expression. - -For example, - -```cpp -using ::testing::PrintToString; -MATCHER_P2(InClosedRange, low, hi, - absl::StrFormat("%s in range [%s, %s]", negation ? "isn't" : "is", - PrintToString(low), PrintToString(hi))) { - return low <= arg && arg <= hi; -} -... -EXPECT_THAT(3, InClosedRange(4, 6)); -``` - -would generate a failure that contains the message: - -```shell - Expected: is in range [4, 6] -``` - -If you specify `""` as the description, the failure message will contain the -sequence of words in the matcher name followed by the parameter values printed -as a tuple. For example, - -```cpp - MATCHER_P2(InClosedRange, low, hi, "") { ... } - ... - EXPECT_THAT(3, InClosedRange(4, 6)); -``` - -would generate a failure that contains the text: - -```shell - Expected: in closed range (4, 6) -``` - -For the purpose of typing, you can view - -```cpp -MATCHER_Pk(Foo, p1, ..., pk, description_string) { ... } -``` - -as shorthand for - -```cpp -template -FooMatcherPk -Foo(p1_type p1, ..., pk_type pk) { ... } -``` - -When you write `Foo(v1, ..., vk)`, the compiler infers the types of the -parameters `v1`, ..., and `vk` for you. If you are not happy with the result of -the type inference, you can specify the types by explicitly instantiating the -template, as in `Foo(5, false)`. As said earlier, you don't get to -(or need to) specify `arg_type` as that's determined by the context in which the -matcher is used. - -You can assign the result of expression `Foo(p1, ..., pk)` to a variable of type -`FooMatcherPk`. This can be useful when composing -matchers. Matchers that don't have a parameter or have only one parameter have -special types: you can assign `Foo()` to a `FooMatcher`-typed variable, and -assign `Foo(p)` to a `FooMatcherP`-typed variable. - -While you can instantiate a matcher template with reference types, passing the -parameters by pointer usually makes your code more readable. If, however, you -still want to pass a parameter by reference, be aware that in the failure -message generated by the matcher you will see the value of the referenced object -but not its address. - -You can overload matchers with different numbers of parameters: - -```cpp -MATCHER_P(Blah, a, description_string_1) { ... } -MATCHER_P2(Blah, a, b, description_string_2) { ... } -``` - -While it's tempting to always use the `MATCHER*` macros when defining a new -matcher, you should also consider implementing the matcher interface directly -instead (see the recipes that follow), especially if you need to use the matcher -a lot. While these approaches require more work, they give you more control on -the types of the value being matched and the matcher parameters, which in -general leads to better compiler error messages that pay off in the long run. -They also allow overloading matchers based on parameter types (as opposed to -just based on the number of parameters). - -### Writing New Monomorphic Matchers - -A matcher of argument type `T` implements the matcher interface for `T` and does -two things: it tests whether a value of type `T` matches the matcher, and can -describe what kind of values it matches. The latter ability is used for -generating readable error messages when expectations are violated. - -A matcher of `T` must declare a typedef like: - -```cpp -using is_gtest_matcher = void; -``` - -and supports the following operations: - -```cpp -// Match a value and optionally explain into an ostream. -bool matched = matcher.MatchAndExplain(value, maybe_os); -// where `value` is of type `T` and -// `maybe_os` is of type `std::ostream*`, where it can be null if the caller -// is not interested in there textual explanation. - -matcher.DescribeTo(os); -matcher.DescribeNegationTo(os); -// where `os` is of type `std::ostream*`. -``` - -If you need a custom matcher but `Truly()` is not a good option (for example, -you may not be happy with the way `Truly(predicate)` describes itself, or you -may want your matcher to be polymorphic as `Eq(value)` is), you can define a -matcher to do whatever you want in two steps: first implement the matcher -interface, and then define a factory function to create a matcher instance. The -second step is not strictly needed but it makes the syntax of using the matcher -nicer. - -For example, you can define a matcher to test whether an `int` is divisible by 7 -and then use it like this: - -```cpp -using ::testing::Matcher; - -class DivisibleBy7Matcher { - public: - using is_gtest_matcher = void; - - bool MatchAndExplain(int n, std::ostream*) const { - return (n % 7) == 0; - } - - void DescribeTo(std::ostream* os) const { - *os << "is divisible by 7"; - } - - void DescribeNegationTo(std::ostream* os) const { - *os << "is not divisible by 7"; - } -}; - -Matcher DivisibleBy7() { - return DivisibleBy7Matcher(); -} - -... - EXPECT_CALL(foo, Bar(DivisibleBy7())); -``` - -You may improve the matcher message by streaming additional information to the -`os` argument in `MatchAndExplain()`: - -```cpp -class DivisibleBy7Matcher { - public: - bool MatchAndExplain(int n, std::ostream* os) const { - const int remainder = n % 7; - if (remainder != 0 && os != nullptr) { - *os << "the remainder is " << remainder; - } - return remainder == 0; - } - ... -}; -``` - -Then, `EXPECT_THAT(x, DivisibleBy7());` may generate a message like this: - -```shell -Value of: x -Expected: is divisible by 7 - Actual: 23 (the remainder is 2) -``` - -{: .callout .tip} -Tip: for convenience, `MatchAndExplain()` can take a `MatchResultListener*` -instead of `std::ostream*`. - -### Writing New Polymorphic Matchers - -Expanding what we learned above to *polymorphic* matchers is now just as simple -as adding templates in the right place. - -```cpp - -class NotNullMatcher { - public: - using is_gtest_matcher = void; - - // To implement a polymorphic matcher, we just need to make MatchAndExplain a - // template on its first argument. - - // In this example, we want to use NotNull() with any pointer, so - // MatchAndExplain() accepts a pointer of any type as its first argument. - // In general, you can define MatchAndExplain() as an ordinary method or - // a method template, or even overload it. - template - bool MatchAndExplain(T* p, std::ostream*) const { - return p != nullptr; - } - - // Describes the property of a value matching this matcher. - void DescribeTo(std::ostream* os) const { *os << "is not NULL"; } - - // Describes the property of a value NOT matching this matcher. - void DescribeNegationTo(std::ostream* os) const { *os << "is NULL"; } -}; - -NotNullMatcher NotNull() { - return NotNullMatcher(); -} - -... - - EXPECT_CALL(foo, Bar(NotNull())); // The argument must be a non-NULL pointer. -``` - -### Legacy Matcher Implementation - -Defining matchers used to be somewhat more complicated, in which it required -several supporting classes and virtual functions. To implement a matcher for -type `T` using the legacy API you have to derive from `MatcherInterface` and -call `MakeMatcher` to construct the object. - -The interface looks like this: - -```cpp -class MatchResultListener { - public: - ... - // Streams x to the underlying ostream; does nothing if the ostream - // is NULL. - template - MatchResultListener& operator<<(const T& x); - - // Returns the underlying ostream. - std::ostream* stream(); -}; - -template -class MatcherInterface { - public: - virtual ~MatcherInterface(); - - // Returns true if and only if the matcher matches x; also explains the match - // result to 'listener'. - virtual bool MatchAndExplain(T x, MatchResultListener* listener) const = 0; - - // Describes this matcher to an ostream. - virtual void DescribeTo(std::ostream* os) const = 0; - - // Describes the negation of this matcher to an ostream. - virtual void DescribeNegationTo(std::ostream* os) const; -}; -``` - -Fortunately, most of the time you can define a polymorphic matcher easily with -the help of `MakePolymorphicMatcher()`. Here's how you can define `NotNull()` as -an example: - -```cpp -using ::testing::MakePolymorphicMatcher; -using ::testing::MatchResultListener; -using ::testing::PolymorphicMatcher; - -class NotNullMatcher { - public: - // To implement a polymorphic matcher, first define a COPYABLE class - // that has three members MatchAndExplain(), DescribeTo(), and - // DescribeNegationTo(), like the following. - - // In this example, we want to use NotNull() with any pointer, so - // MatchAndExplain() accepts a pointer of any type as its first argument. - // In general, you can define MatchAndExplain() as an ordinary method or - // a method template, or even overload it. - template - bool MatchAndExplain(T* p, - MatchResultListener* /* listener */) const { - return p != NULL; - } - - // Describes the property of a value matching this matcher. - void DescribeTo(std::ostream* os) const { *os << "is not NULL"; } - - // Describes the property of a value NOT matching this matcher. - void DescribeNegationTo(std::ostream* os) const { *os << "is NULL"; } -}; - -// To construct a polymorphic matcher, pass an instance of the class -// to MakePolymorphicMatcher(). Note the return type. -PolymorphicMatcher NotNull() { - return MakePolymorphicMatcher(NotNullMatcher()); -} - -... - - EXPECT_CALL(foo, Bar(NotNull())); // The argument must be a non-NULL pointer. -``` - -{: .callout .note} -**Note:** Your polymorphic matcher class does **not** need to inherit from -`MatcherInterface` or any other class, and its methods do **not** need to be -virtual. - -Like in a monomorphic matcher, you may explain the match result by streaming -additional information to the `listener` argument in `MatchAndExplain()`. - -### Writing New Cardinalities - -A cardinality is used in `Times()` to tell gMock how many times you expect a -call to occur. It doesn't have to be exact. For example, you can say -`AtLeast(5)` or `Between(2, 4)`. - -If the [built-in set](gmock_cheat_sheet.md#CardinalityList) of cardinalities -doesn't suit you, you are free to define your own by implementing the following -interface (in namespace `testing`): - -```cpp -class CardinalityInterface { - public: - virtual ~CardinalityInterface(); - - // Returns true if and only if call_count calls will satisfy this cardinality. - virtual bool IsSatisfiedByCallCount(int call_count) const = 0; - - // Returns true if and only if call_count calls will saturate this - // cardinality. - virtual bool IsSaturatedByCallCount(int call_count) const = 0; - - // Describes self to an ostream. - virtual void DescribeTo(std::ostream* os) const = 0; -}; -``` - -For example, to specify that a call must occur even number of times, you can -write - -```cpp -using ::testing::Cardinality; -using ::testing::CardinalityInterface; -using ::testing::MakeCardinality; - -class EvenNumberCardinality : public CardinalityInterface { - public: - bool IsSatisfiedByCallCount(int call_count) const override { - return (call_count % 2) == 0; - } - - bool IsSaturatedByCallCount(int call_count) const override { - return false; - } - - void DescribeTo(std::ostream* os) const { - *os << "called even number of times"; - } -}; - -Cardinality EvenNumber() { - return MakeCardinality(new EvenNumberCardinality); -} - -... - EXPECT_CALL(foo, Bar(3)) - .Times(EvenNumber()); -``` - -### Writing New Actions Quickly {#QuickNewActions} - -If the built-in actions don't work for you, you can easily define your own one. -Just define a functor class with a (possibly templated) call operator, matching -the signature of your action. - -```cpp -struct Increment { - template - T operator()(T* arg) { - return ++(*arg); - } -} -``` - -The same approach works with stateful functors (or any callable, really): - -``` -struct MultiplyBy { - template - T operator()(T arg) { return arg * multiplier; } - - int multiplier; -} - -// Then use: -// EXPECT_CALL(...).WillOnce(MultiplyBy{7}); -``` - -#### Legacy macro-based Actions - -Before C++11, the functor-based actions were not supported; the old way of -writing actions was through a set of `ACTION*` macros. We suggest to avoid them -in new code; they hide a lot of logic behind the macro, potentially leading to -harder-to-understand compiler errors. Nevertheless, we cover them here for -completeness. - -By writing - -```cpp -ACTION(name) { statements; } -``` - -in a namespace scope (i.e. not inside a class or function), you will define an -action with the given name that executes the statements. The value returned by -`statements` will be used as the return value of the action. Inside the -statements, you can refer to the K-th (0-based) argument of the mock function as -`argK`. For example: - -```cpp -ACTION(IncrementArg1) { return ++(*arg1); } -``` - -allows you to write - -```cpp -... WillOnce(IncrementArg1()); -``` - -Note that you don't need to specify the types of the mock function arguments. -Rest assured that your code is type-safe though: you'll get a compiler error if -`*arg1` doesn't support the `++` operator, or if the type of `++(*arg1)` isn't -compatible with the mock function's return type. - -Another example: - -```cpp -ACTION(Foo) { - (*arg2)(5); - Blah(); - *arg1 = 0; - return arg0; -} -``` - -defines an action `Foo()` that invokes argument #2 (a function pointer) with 5, -calls function `Blah()`, sets the value pointed to by argument #1 to 0, and -returns argument #0. - -For more convenience and flexibility, you can also use the following pre-defined -symbols in the body of `ACTION`: - -`argK_type` | The type of the K-th (0-based) argument of the mock function -:-------------- | :----------------------------------------------------------- -`args` | All arguments of the mock function as a tuple -`args_type` | The type of all arguments of the mock function as a tuple -`return_type` | The return type of the mock function -`function_type` | The type of the mock function - -For example, when using an `ACTION` as a stub action for mock function: - -```cpp -int DoSomething(bool flag, int* ptr); -``` - -we have: - -Pre-defined Symbol | Is Bound To ------------------- | --------------------------------- -`arg0` | the value of `flag` -`arg0_type` | the type `bool` -`arg1` | the value of `ptr` -`arg1_type` | the type `int*` -`args` | the tuple `(flag, ptr)` -`args_type` | the type `std::tuple` -`return_type` | the type `int` -`function_type` | the type `int(bool, int*)` - -#### Legacy macro-based parameterized Actions - -Sometimes you'll want to parameterize an action you define. For that we have -another macro - -```cpp -ACTION_P(name, param) { statements; } -``` - -For example, - -```cpp -ACTION_P(Add, n) { return arg0 + n; } -``` - -will allow you to write - -```cpp -// Returns argument #0 + 5. -... WillOnce(Add(5)); -``` - -For convenience, we use the term *arguments* for the values used to invoke the -mock function, and the term *parameters* for the values used to instantiate an -action. - -Note that you don't need to provide the type of the parameter either. Suppose -the parameter is named `param`, you can also use the gMock-defined symbol -`param_type` to refer to the type of the parameter as inferred by the compiler. -For example, in the body of `ACTION_P(Add, n)` above, you can write `n_type` for -the type of `n`. - -gMock also provides `ACTION_P2`, `ACTION_P3`, and etc to support multi-parameter -actions. For example, - -```cpp -ACTION_P2(ReturnDistanceTo, x, y) { - double dx = arg0 - x; - double dy = arg1 - y; - return sqrt(dx*dx + dy*dy); -} -``` - -lets you write - -```cpp -... WillOnce(ReturnDistanceTo(5.0, 26.5)); -``` - -You can view `ACTION` as a degenerated parameterized action where the number of -parameters is 0. - -You can also easily define actions overloaded on the number of parameters: - -```cpp -ACTION_P(Plus, a) { ... } -ACTION_P2(Plus, a, b) { ... } -``` - -### Restricting the Type of an Argument or Parameter in an ACTION - -For maximum brevity and reusability, the `ACTION*` macros don't ask you to -provide the types of the mock function arguments and the action parameters. -Instead, we let the compiler infer the types for us. - -Sometimes, however, we may want to be more explicit about the types. There are -several tricks to do that. For example: - -```cpp -ACTION(Foo) { - // Makes sure arg0 can be converted to int. - int n = arg0; - ... use n instead of arg0 here ... -} - -ACTION_P(Bar, param) { - // Makes sure the type of arg1 is const char*. - ::testing::StaticAssertTypeEq(); - - // Makes sure param can be converted to bool. - bool flag = param; -} -``` - -where `StaticAssertTypeEq` is a compile-time assertion in googletest that -verifies two types are the same. - -### Writing New Action Templates Quickly - -Sometimes you want to give an action explicit template parameters that cannot be -inferred from its value parameters. `ACTION_TEMPLATE()` supports that and can be -viewed as an extension to `ACTION()` and `ACTION_P*()`. - -The syntax: - -```cpp -ACTION_TEMPLATE(ActionName, - HAS_m_TEMPLATE_PARAMS(kind1, name1, ..., kind_m, name_m), - AND_n_VALUE_PARAMS(p1, ..., p_n)) { statements; } -``` - -defines an action template that takes *m* explicit template parameters and *n* -value parameters, where *m* is in [1, 10] and *n* is in [0, 10]. `name_i` is the -name of the *i*-th template parameter, and `kind_i` specifies whether it's a -`typename`, an integral constant, or a template. `p_i` is the name of the *i*-th -value parameter. - -Example: - -```cpp -// DuplicateArg(output) converts the k-th argument of the mock -// function to type T and copies it to *output. -ACTION_TEMPLATE(DuplicateArg, - // Note the comma between int and k: - HAS_2_TEMPLATE_PARAMS(int, k, typename, T), - AND_1_VALUE_PARAMS(output)) { - *output = T(std::get(args)); -} -``` - -To create an instance of an action template, write: - -```cpp -ActionName(v1, ..., v_n) -``` - -where the `t`s are the template arguments and the `v`s are the value arguments. -The value argument types are inferred by the compiler. For example: - -```cpp -using ::testing::_; -... - int n; - EXPECT_CALL(mock, Foo).WillOnce(DuplicateArg<1, unsigned char>(&n)); -``` - -If you want to explicitly specify the value argument types, you can provide -additional template arguments: - -```cpp -ActionName(v1, ..., v_n) -``` - -where `u_i` is the desired type of `v_i`. - -`ACTION_TEMPLATE` and `ACTION`/`ACTION_P*` can be overloaded on the number of -value parameters, but not on the number of template parameters. Without the -restriction, the meaning of the following is unclear: - -```cpp - OverloadedAction(x); -``` - -Are we using a single-template-parameter action where `bool` refers to the type -of `x`, or a two-template-parameter action where the compiler is asked to infer -the type of `x`? - -### Using the ACTION Object's Type - -If you are writing a function that returns an `ACTION` object, you'll need to -know its type. The type depends on the macro used to define the action and the -parameter types. The rule is relatively simple: - - -| Given Definition | Expression | Has Type | -| ----------------------------- | ------------------- | --------------------- | -| `ACTION(Foo)` | `Foo()` | `FooAction` | -| `ACTION_TEMPLATE(Foo, HAS_m_TEMPLATE_PARAMS(...), AND_0_VALUE_PARAMS())` | `Foo()` | `FooAction` | -| `ACTION_P(Bar, param)` | `Bar(int_value)` | `BarActionP` | -| `ACTION_TEMPLATE(Bar, HAS_m_TEMPLATE_PARAMS(...), AND_1_VALUE_PARAMS(p1))` | `Bar(int_value)` | `BarActionP` | -| `ACTION_P2(Baz, p1, p2)` | `Baz(bool_value, int_value)` | `BazActionP2` | -| `ACTION_TEMPLATE(Baz, HAS_m_TEMPLATE_PARAMS(...), AND_2_VALUE_PARAMS(p1, p2))` | `Baz(bool_value, int_value)` | `BazActionP2` | -| ... | ... | ... | - - -Note that we have to pick different suffixes (`Action`, `ActionP`, `ActionP2`, -and etc) for actions with different numbers of value parameters, or the action -definitions cannot be overloaded on the number of them. - -### Writing New Monomorphic Actions {#NewMonoActions} - -While the `ACTION*` macros are very convenient, sometimes they are -inappropriate. For example, despite the tricks shown in the previous recipes, -they don't let you directly specify the types of the mock function arguments and -the action parameters, which in general leads to unoptimized compiler error -messages that can baffle unfamiliar users. They also don't allow overloading -actions based on parameter types without jumping through some hoops. - -An alternative to the `ACTION*` macros is to implement -`::testing::ActionInterface`, where `F` is the type of the mock function in -which the action will be used. For example: - -```cpp -template -class ActionInterface { - public: - virtual ~ActionInterface(); - - // Performs the action. Result is the return type of function type - // F, and ArgumentTuple is the tuple of arguments of F. - // - - // For example, if F is int(bool, const string&), then Result would - // be int, and ArgumentTuple would be std::tuple. - virtual Result Perform(const ArgumentTuple& args) = 0; -}; -``` - -```cpp -using ::testing::_; -using ::testing::Action; -using ::testing::ActionInterface; -using ::testing::MakeAction; - -typedef int IncrementMethod(int*); - -class IncrementArgumentAction : public ActionInterface { - public: - int Perform(const std::tuple& args) override { - int* p = std::get<0>(args); // Grabs the first argument. - return *p++; - } -}; - -Action IncrementArgument() { - return MakeAction(new IncrementArgumentAction); -} - -... - EXPECT_CALL(foo, Baz(_)) - .WillOnce(IncrementArgument()); - - int n = 5; - foo.Baz(&n); // Should return 5 and change n to 6. -``` - -### Writing New Polymorphic Actions {#NewPolyActions} - -The previous recipe showed you how to define your own action. This is all good, -except that you need to know the type of the function in which the action will -be used. Sometimes that can be a problem. For example, if you want to use the -action in functions with *different* types (e.g. like `Return()` and -`SetArgPointee()`). - -If an action can be used in several types of mock functions, we say it's -*polymorphic*. The `MakePolymorphicAction()` function template makes it easy to -define such an action: - -```cpp -namespace testing { -template -PolymorphicAction MakePolymorphicAction(const Impl& impl); -} // namespace testing -``` - -As an example, let's define an action that returns the second argument in the -mock function's argument list. The first step is to define an implementation -class: - -```cpp -class ReturnSecondArgumentAction { - public: - template - Result Perform(const ArgumentTuple& args) const { - // To get the i-th (0-based) argument, use std::get(args). - return std::get<1>(args); - } -}; -``` - -This implementation class does *not* need to inherit from any particular class. -What matters is that it must have a `Perform()` method template. This method -template takes the mock function's arguments as a tuple in a **single** -argument, and returns the result of the action. It can be either `const` or not, -but must be invocable with exactly one template argument, which is the result -type. In other words, you must be able to call `Perform(args)` where `R` is -the mock function's return type and `args` is its arguments in a tuple. - -Next, we use `MakePolymorphicAction()` to turn an instance of the implementation -class into the polymorphic action we need. It will be convenient to have a -wrapper for this: - -```cpp -using ::testing::MakePolymorphicAction; -using ::testing::PolymorphicAction; - -PolymorphicAction ReturnSecondArgument() { - return MakePolymorphicAction(ReturnSecondArgumentAction()); -} -``` - -Now, you can use this polymorphic action the same way you use the built-in ones: - -```cpp -using ::testing::_; - -class MockFoo : public Foo { - public: - MOCK_METHOD(int, DoThis, (bool flag, int n), (override)); - MOCK_METHOD(string, DoThat, (int x, const char* str1, const char* str2), - (override)); -}; - - ... - MockFoo foo; - EXPECT_CALL(foo, DoThis).WillOnce(ReturnSecondArgument()); - EXPECT_CALL(foo, DoThat).WillOnce(ReturnSecondArgument()); - ... - foo.DoThis(true, 5); // Will return 5. - foo.DoThat(1, "Hi", "Bye"); // Will return "Hi". -``` - -### Teaching gMock How to Print Your Values - -When an uninteresting or unexpected call occurs, gMock prints the argument -values and the stack trace to help you debug. Assertion macros like -`EXPECT_THAT` and `EXPECT_EQ` also print the values in question when the -assertion fails. gMock and googletest do this using googletest's user-extensible -value printer. - -This printer knows how to print built-in C++ types, native arrays, STL -containers, and any type that supports the `<<` operator. For other types, it -prints the raw bytes in the value and hopes that you the user can figure it out. -[The GoogleTest advanced guide](advanced.md#teaching-googletest-how-to-print-your-values) -explains how to extend the printer to do a better job at printing your -particular type than to dump the bytes. - -## Useful Mocks Created Using gMock - - - - -### Mock std::function {#MockFunction} - -`std::function` is a general function type introduced in C++11. It is a -preferred way of passing callbacks to new interfaces. Functions are copiable, -and are not usually passed around by pointer, which makes them tricky to mock. -But fear not - `MockFunction` can help you with that. - -`MockFunction` has a mock method `Call()` with the signature: - -```cpp - R Call(T1, ..., Tn); -``` - -It also has a `AsStdFunction()` method, which creates a `std::function` proxy -forwarding to Call: - -```cpp - std::function AsStdFunction(); -``` - -To use `MockFunction`, first create `MockFunction` object and set up -expectations on its `Call` method. Then pass proxy obtained from -`AsStdFunction()` to the code you are testing. For example: - -```cpp -TEST(FooTest, RunsCallbackWithBarArgument) { - // 1. Create a mock object. - MockFunction mock_function; - - // 2. Set expectations on Call() method. - EXPECT_CALL(mock_function, Call("bar")).WillOnce(Return(1)); - - // 3. Exercise code that uses std::function. - Foo(mock_function.AsStdFunction()); - // Foo's signature can be either of: - // void Foo(const std::function& fun); - // void Foo(std::function fun); - - // 4. All expectations will be verified when mock_function - // goes out of scope and is destroyed. -} -``` - -Remember that function objects created with `AsStdFunction()` are just -forwarders. If you create multiple of them, they will share the same set of -expectations. - -Although `std::function` supports unlimited number of arguments, `MockFunction` -implementation is limited to ten. If you ever hit that limit... well, your -callback has bigger problems than being mockable. :-) diff --git a/tests/rocm_smi_test/gtest/docs/gmock_faq.md b/tests/rocm_smi_test/gtest/docs/gmock_faq.md deleted file mode 100644 index 8f220bf7a8..0000000000 --- a/tests/rocm_smi_test/gtest/docs/gmock_faq.md +++ /dev/null @@ -1,390 +0,0 @@ -# Legacy gMock FAQ - -### When I call a method on my mock object, the method for the real object is invoked instead. What's the problem? - -In order for a method to be mocked, it must be *virtual*, unless you use the -[high-perf dependency injection technique](gmock_cook_book.md#MockingNonVirtualMethods). - -### Can I mock a variadic function? - -You cannot mock a variadic function (i.e. a function taking ellipsis (`...`) -arguments) directly in gMock. - -The problem is that in general, there is *no way* for a mock object to know how -many arguments are passed to the variadic method, and what the arguments' types -are. Only the *author of the base class* knows the protocol, and we cannot look -into his or her head. - -Therefore, to mock such a function, the *user* must teach the mock object how to -figure out the number of arguments and their types. One way to do it is to -provide overloaded versions of the function. - -Ellipsis arguments are inherited from C and not really a C++ feature. They are -unsafe to use and don't work with arguments that have constructors or -destructors. Therefore we recommend to avoid them in C++ as much as possible. - -### MSVC gives me warning C4301 or C4373 when I define a mock method with a const parameter. Why? - -If you compile this using Microsoft Visual C++ 2005 SP1: - -```cpp -class Foo { - ... - virtual void Bar(const int i) = 0; -}; - -class MockFoo : public Foo { - ... - MOCK_METHOD(void, Bar, (const int i), (override)); -}; -``` - -You may get the following warning: - -```shell -warning C4301: 'MockFoo::Bar': overriding virtual function only differs from 'Foo::Bar' by const/volatile qualifier -``` - -This is a MSVC bug. The same code compiles fine with gcc, for example. If you -use Visual C++ 2008 SP1, you would get the warning: - -```shell -warning C4373: 'MockFoo::Bar': virtual function overrides 'Foo::Bar', previous versions of the compiler did not override when parameters only differed by const/volatile qualifiers -``` - -In C++, if you *declare* a function with a `const` parameter, the `const` -modifier is ignored. Therefore, the `Foo` base class above is equivalent to: - -```cpp -class Foo { - ... - virtual void Bar(int i) = 0; // int or const int? Makes no difference. -}; -``` - -In fact, you can *declare* `Bar()` with an `int` parameter, and define it with a -`const int` parameter. The compiler will still match them up. - -Since making a parameter `const` is meaningless in the method declaration, we -recommend to remove it in both `Foo` and `MockFoo`. That should workaround the -VC bug. - -Note that we are talking about the *top-level* `const` modifier here. If the -function parameter is passed by pointer or reference, declaring the pointee or -referee as `const` is still meaningful. For example, the following two -declarations are *not* equivalent: - -```cpp -void Bar(int* p); // Neither p nor *p is const. -void Bar(const int* p); // p is not const, but *p is. -``` - -### I can't figure out why gMock thinks my expectations are not satisfied. What should I do? - -You might want to run your test with `--gmock_verbose=info`. This flag lets -gMock print a trace of every mock function call it receives. By studying the -trace, you'll gain insights on why the expectations you set are not met. - -If you see the message "The mock function has no default action set, and its -return type has no default value set.", then try -[adding a default action](gmock_cheat_sheet.md#OnCall). Due to a known issue, -unexpected calls on mocks without default actions don't print out a detailed -comparison between the actual arguments and the expected arguments. - -### My program crashed and `ScopedMockLog` spit out tons of messages. Is it a gMock bug? - -gMock and `ScopedMockLog` are likely doing the right thing here. - -When a test crashes, the failure signal handler will try to log a lot of -information (the stack trace, and the address map, for example). The messages -are compounded if you have many threads with depth stacks. When `ScopedMockLog` -intercepts these messages and finds that they don't match any expectations, it -prints an error for each of them. - -You can learn to ignore the errors, or you can rewrite your expectations to make -your test more robust, for example, by adding something like: - -```cpp -using ::testing::AnyNumber; -using ::testing::Not; -... - // Ignores any log not done by us. - EXPECT_CALL(log, Log(_, Not(EndsWith("/my_file.cc")), _)) - .Times(AnyNumber()); -``` - -### How can I assert that a function is NEVER called? - -```cpp -using ::testing::_; -... - EXPECT_CALL(foo, Bar(_)) - .Times(0); -``` - -### I have a failed test where gMock tells me TWICE that a particular expectation is not satisfied. Isn't this redundant? - -When gMock detects a failure, it prints relevant information (the mock function -arguments, the state of relevant expectations, and etc) to help the user debug. -If another failure is detected, gMock will do the same, including printing the -state of relevant expectations. - -Sometimes an expectation's state didn't change between two failures, and you'll -see the same description of the state twice. They are however *not* redundant, -as they refer to *different points in time*. The fact they are the same *is* -interesting information. - -### I get a heapcheck failure when using a mock object, but using a real object is fine. What can be wrong? - -Does the class (hopefully a pure interface) you are mocking have a virtual -destructor? - -Whenever you derive from a base class, make sure its destructor is virtual. -Otherwise Bad Things will happen. Consider the following code: - -```cpp -class Base { - public: - // Not virtual, but should be. - ~Base() { ... } - ... -}; - -class Derived : public Base { - public: - ... - private: - std::string value_; -}; - -... - Base* p = new Derived; - ... - delete p; // Surprise! ~Base() will be called, but ~Derived() will not - // - value_ is leaked. -``` - -By changing `~Base()` to virtual, `~Derived()` will be correctly called when -`delete p` is executed, and the heap checker will be happy. - -### The "newer expectations override older ones" rule makes writing expectations awkward. Why does gMock do that? - -When people complain about this, often they are referring to code like: - -```cpp -using ::testing::Return; -... - // foo.Bar() should be called twice, return 1 the first time, and return - // 2 the second time. However, I have to write the expectations in the - // reverse order. This sucks big time!!! - EXPECT_CALL(foo, Bar()) - .WillOnce(Return(2)) - .RetiresOnSaturation(); - EXPECT_CALL(foo, Bar()) - .WillOnce(Return(1)) - .RetiresOnSaturation(); -``` - -The problem, is that they didn't pick the **best** way to express the test's -intent. - -By default, expectations don't have to be matched in *any* particular order. If -you want them to match in a certain order, you need to be explicit. This is -gMock's (and jMock's) fundamental philosophy: it's easy to accidentally -over-specify your tests, and we want to make it harder to do so. - -There are two better ways to write the test spec. You could either put the -expectations in sequence: - -```cpp -using ::testing::Return; -... - // foo.Bar() should be called twice, return 1 the first time, and return - // 2 the second time. Using a sequence, we can write the expectations - // in their natural order. - { - InSequence s; - EXPECT_CALL(foo, Bar()) - .WillOnce(Return(1)) - .RetiresOnSaturation(); - EXPECT_CALL(foo, Bar()) - .WillOnce(Return(2)) - .RetiresOnSaturation(); - } -``` - -or you can put the sequence of actions in the same expectation: - -```cpp -using ::testing::Return; -... - // foo.Bar() should be called twice, return 1 the first time, and return - // 2 the second time. - EXPECT_CALL(foo, Bar()) - .WillOnce(Return(1)) - .WillOnce(Return(2)) - .RetiresOnSaturation(); -``` - -Back to the original questions: why does gMock search the expectations (and -`ON_CALL`s) from back to front? Because this allows a user to set up a mock's -behavior for the common case early (e.g. in the mock's constructor or the test -fixture's set-up phase) and customize it with more specific rules later. If -gMock searches from front to back, this very useful pattern won't be possible. - -### gMock prints a warning when a function without EXPECT_CALL is called, even if I have set its behavior using ON_CALL. Would it be reasonable not to show the warning in this case? - -When choosing between being neat and being safe, we lean toward the latter. So -the answer is that we think it's better to show the warning. - -Often people write `ON_CALL`s in the mock object's constructor or `SetUp()`, as -the default behavior rarely changes from test to test. Then in the test body -they set the expectations, which are often different for each test. Having an -`ON_CALL` in the set-up part of a test doesn't mean that the calls are expected. -If there's no `EXPECT_CALL` and the method is called, it's possibly an error. If -we quietly let the call go through without notifying the user, bugs may creep in -unnoticed. - -If, however, you are sure that the calls are OK, you can write - -```cpp -using ::testing::_; -... - EXPECT_CALL(foo, Bar(_)) - .WillRepeatedly(...); -``` - -instead of - -```cpp -using ::testing::_; -... - ON_CALL(foo, Bar(_)) - .WillByDefault(...); -``` - -This tells gMock that you do expect the calls and no warning should be printed. - -Also, you can control the verbosity by specifying `--gmock_verbose=error`. Other -values are `info` and `warning`. If you find the output too noisy when -debugging, just choose a less verbose level. - -### How can I delete the mock function's argument in an action? - -If your mock function takes a pointer argument and you want to delete that -argument, you can use testing::DeleteArg() to delete the N'th (zero-indexed) -argument: - -```cpp -using ::testing::_; - ... - MOCK_METHOD(void, Bar, (X* x, const Y& y)); - ... - EXPECT_CALL(mock_foo_, Bar(_, _)) - .WillOnce(testing::DeleteArg<0>())); -``` - -### How can I perform an arbitrary action on a mock function's argument? - -If you find yourself needing to perform some action that's not supported by -gMock directly, remember that you can define your own actions using -[`MakeAction()`](#NewMonoActions) or -[`MakePolymorphicAction()`](#NewPolyActions), or you can write a stub function -and invoke it using [`Invoke()`](#FunctionsAsActions). - -```cpp -using ::testing::_; -using ::testing::Invoke; - ... - MOCK_METHOD(void, Bar, (X* p)); - ... - EXPECT_CALL(mock_foo_, Bar(_)) - .WillOnce(Invoke(MyAction(...))); -``` - -### My code calls a static/global function. Can I mock it? - -You can, but you need to make some changes. - -In general, if you find yourself needing to mock a static function, it's a sign -that your modules are too tightly coupled (and less flexible, less reusable, -less testable, etc). You are probably better off defining a small interface and -call the function through that interface, which then can be easily mocked. It's -a bit of work initially, but usually pays for itself quickly. - -This Google Testing Blog -[post](https://testing.googleblog.com/2008/06/defeat-static-cling.html) says it -excellently. Check it out. - -### My mock object needs to do complex stuff. It's a lot of pain to specify the actions. gMock sucks! - -I know it's not a question, but you get an answer for free any way. :-) - -With gMock, you can create mocks in C++ easily. And people might be tempted to -use them everywhere. Sometimes they work great, and sometimes you may find them, -well, a pain to use. So, what's wrong in the latter case? - -When you write a test without using mocks, you exercise the code and assert that -it returns the correct value or that the system is in an expected state. This is -sometimes called "state-based testing". - -Mocks are great for what some call "interaction-based" testing: instead of -checking the system state at the very end, mock objects verify that they are -invoked the right way and report an error as soon as it arises, giving you a -handle on the precise context in which the error was triggered. This is often -more effective and economical to do than state-based testing. - -If you are doing state-based testing and using a test double just to simulate -the real object, you are probably better off using a fake. Using a mock in this -case causes pain, as it's not a strong point for mocks to perform complex -actions. If you experience this and think that mocks suck, you are just not -using the right tool for your problem. Or, you might be trying to solve the -wrong problem. :-) - -### I got a warning "Uninteresting function call encountered - default action taken.." Should I panic? - -By all means, NO! It's just an FYI. :-) - -What it means is that you have a mock function, you haven't set any expectations -on it (by gMock's rule this means that you are not interested in calls to this -function and therefore it can be called any number of times), and it is called. -That's OK - you didn't say it's not OK to call the function! - -What if you actually meant to disallow this function to be called, but forgot to -write `EXPECT_CALL(foo, Bar()).Times(0)`? While one can argue that it's the -user's fault, gMock tries to be nice and prints you a note. - -So, when you see the message and believe that there shouldn't be any -uninteresting calls, you should investigate what's going on. To make your life -easier, gMock dumps the stack trace when an uninteresting call is encountered. -From that you can figure out which mock function it is, and how it is called. - -### I want to define a custom action. Should I use Invoke() or implement the ActionInterface interface? - -Either way is fine - you want to choose the one that's more convenient for your -circumstance. - -Usually, if your action is for a particular function type, defining it using -`Invoke()` should be easier; if your action can be used in functions of -different types (e.g. if you are defining `Return(*value*)`), -`MakePolymorphicAction()` is easiest. Sometimes you want precise control on what -types of functions the action can be used in, and implementing `ActionInterface` -is the way to go here. See the implementation of `Return()` in `gmock-actions.h` -for an example. - -### I use SetArgPointee() in WillOnce(), but gcc complains about "conflicting return type specified". What does it mean? - -You got this error as gMock has no idea what value it should return when the -mock method is called. `SetArgPointee()` says what the side effect is, but -doesn't say what the return value should be. You need `DoAll()` to chain a -`SetArgPointee()` with a `Return()` that provides a value appropriate to the API -being mocked. - -See this [recipe](gmock_cook_book.md#mocking-side-effects) for more details and -an example. - -### I have a huge mock class, and Microsoft Visual C++ runs out of memory when compiling it. What can I do? - -We've noticed that when the `/clr` compiler flag is used, Visual C++ uses 5~6 -times as much memory when compiling a mock class. We suggest to avoid `/clr` -when compiling native C++ mocks. diff --git a/tests/rocm_smi_test/gtest/docs/gmock_for_dummies.md b/tests/rocm_smi_test/gtest/docs/gmock_for_dummies.md deleted file mode 100644 index fa1296eebe..0000000000 --- a/tests/rocm_smi_test/gtest/docs/gmock_for_dummies.md +++ /dev/null @@ -1,700 +0,0 @@ -# gMock for Dummies - -## What Is gMock? - -When you write a prototype or test, often it's not feasible or wise to rely on -real objects entirely. A **mock object** implements the same interface as a real -object (so it can be used as one), but lets you specify at run time how it will -be used and what it should do (which methods will be called? in which order? how -many times? with what arguments? what will they return? etc). - -It is easy to confuse the term *fake objects* with mock objects. Fakes and mocks -actually mean very different things in the Test-Driven Development (TDD) -community: - -* **Fake** objects have working implementations, but usually take some - shortcut (perhaps to make the operations less expensive), which makes them - not suitable for production. An in-memory file system would be an example of - a fake. -* **Mocks** are objects pre-programmed with *expectations*, which form a - specification of the calls they are expected to receive. - -If all this seems too abstract for you, don't worry - the most important thing -to remember is that a mock allows you to check the *interaction* between itself -and code that uses it. The difference between fakes and mocks shall become much -clearer once you start to use mocks. - -**gMock** is a library (sometimes we also call it a "framework" to make it sound -cool) for creating mock classes and using them. It does to C++ what -jMock/EasyMock does to Java (well, more or less). - -When using gMock, - -1. first, you use some simple macros to describe the interface you want to - mock, and they will expand to the implementation of your mock class; -2. next, you create some mock objects and specify its expectations and behavior - using an intuitive syntax; -3. then you exercise code that uses the mock objects. gMock will catch any - violation to the expectations as soon as it arises. - -## Why gMock? - -While mock objects help you remove unnecessary dependencies in tests and make -them fast and reliable, using mocks manually in C++ is *hard*: - -* Someone has to implement the mocks. The job is usually tedious and - error-prone. No wonder people go great distance to avoid it. -* The quality of those manually written mocks is a bit, uh, unpredictable. You - may see some really polished ones, but you may also see some that were - hacked up in a hurry and have all sorts of ad hoc restrictions. -* The knowledge you gained from using one mock doesn't transfer to the next - one. - -In contrast, Java and Python programmers have some fine mock frameworks (jMock, -EasyMock, etc), which automate the creation of mocks. As a result, mocking is a -proven effective technique and widely adopted practice in those communities. -Having the right tool absolutely makes the difference. - -gMock was built to help C++ programmers. It was inspired by jMock and EasyMock, -but designed with C++'s specifics in mind. It is your friend if any of the -following problems is bothering you: - -* You are stuck with a sub-optimal design and wish you had done more - prototyping before it was too late, but prototyping in C++ is by no means - "rapid". -* Your tests are slow as they depend on too many libraries or use expensive - resources (e.g. a database). -* Your tests are brittle as some resources they use are unreliable (e.g. the - network). -* You want to test how your code handles a failure (e.g. a file checksum - error), but it's not easy to cause one. -* You need to make sure that your module interacts with other modules in the - right way, but it's hard to observe the interaction; therefore you resort to - observing the side effects at the end of the action, but it's awkward at - best. -* You want to "mock out" your dependencies, except that they don't have mock - implementations yet; and, frankly, you aren't thrilled by some of those - hand-written mocks. - -We encourage you to use gMock as - -* a *design* tool, for it lets you experiment with your interface design early - and often. More iterations lead to better designs! -* a *testing* tool to cut your tests' outbound dependencies and probe the - interaction between your module and its collaborators. - -## Getting Started - -gMock is bundled with googletest. - -## A Case for Mock Turtles - -Let's look at an example. Suppose you are developing a graphics program that -relies on a [LOGO](http://en.wikipedia.org/wiki/Logo_programming_language)-like -API for drawing. How would you test that it does the right thing? Well, you can -run it and compare the screen with a golden screen snapshot, but let's admit it: -tests like this are expensive to run and fragile (What if you just upgraded to a -shiny new graphics card that has better anti-aliasing? Suddenly you have to -update all your golden images.). It would be too painful if all your tests are -like this. Fortunately, you learned about -[Dependency Injection](http://en.wikipedia.org/wiki/Dependency_injection) and know the right thing -to do: instead of having your application talk to the system API directly, wrap -the API in an interface (say, `Turtle`) and code to that interface: - -```cpp -class Turtle { - ... - virtual ~Turtle() {} - virtual void PenUp() = 0; - virtual void PenDown() = 0; - virtual void Forward(int distance) = 0; - virtual void Turn(int degrees) = 0; - virtual void GoTo(int x, int y) = 0; - virtual int GetX() const = 0; - virtual int GetY() const = 0; -}; -``` - -(Note that the destructor of `Turtle` **must** be virtual, as is the case for -**all** classes you intend to inherit from - otherwise the destructor of the -derived class will not be called when you delete an object through a base -pointer, and you'll get corrupted program states like memory leaks.) - -You can control whether the turtle's movement will leave a trace using `PenUp()` -and `PenDown()`, and control its movement using `Forward()`, `Turn()`, and -`GoTo()`. Finally, `GetX()` and `GetY()` tell you the current position of the -turtle. - -Your program will normally use a real implementation of this interface. In -tests, you can use a mock implementation instead. This allows you to easily -check what drawing primitives your program is calling, with what arguments, and -in which order. Tests written this way are much more robust (they won't break -because your new machine does anti-aliasing differently), easier to read and -maintain (the intent of a test is expressed in the code, not in some binary -images), and run *much, much faster*. - -## Writing the Mock Class - -If you are lucky, the mocks you need to use have already been implemented by -some nice people. If, however, you find yourself in the position to write a mock -class, relax - gMock turns this task into a fun game! (Well, almost.) - -### How to Define It - -Using the `Turtle` interface as example, here are the simple steps you need to -follow: - -* Derive a class `MockTurtle` from `Turtle`. -* Take a *virtual* function of `Turtle` (while it's possible to - [mock non-virtual methods using templates](gmock_cook_book.md#MockingNonVirtualMethods), - it's much more involved). -* In the `public:` section of the child class, write `MOCK_METHOD();` -* Now comes the fun part: you take the function signature, cut-and-paste it - into the macro, and add two commas - one between the return type and the - name, another between the name and the argument list. -* If you're mocking a const method, add a 4th parameter containing `(const)` - (the parentheses are required). -* Since you're overriding a virtual method, we suggest adding the `override` - keyword. For const methods the 4th parameter becomes `(const, override)`, - for non-const methods just `(override)`. This isn't mandatory. -* Repeat until all virtual functions you want to mock are done. (It goes - without saying that *all* pure virtual methods in your abstract class must - be either mocked or overridden.) - -After the process, you should have something like: - -```cpp -#include "gmock/gmock.h" // Brings in gMock. - -class MockTurtle : public Turtle { - public: - ... - MOCK_METHOD(void, PenUp, (), (override)); - MOCK_METHOD(void, PenDown, (), (override)); - MOCK_METHOD(void, Forward, (int distance), (override)); - MOCK_METHOD(void, Turn, (int degrees), (override)); - MOCK_METHOD(void, GoTo, (int x, int y), (override)); - MOCK_METHOD(int, GetX, (), (const, override)); - MOCK_METHOD(int, GetY, (), (const, override)); -}; -``` - -You don't need to define these mock methods somewhere else - the `MOCK_METHOD` -macro will generate the definitions for you. It's that simple! - -### Where to Put It - -When you define a mock class, you need to decide where to put its definition. -Some people put it in a `_test.cc`. This is fine when the interface being mocked -(say, `Foo`) is owned by the same person or team. Otherwise, when the owner of -`Foo` changes it, your test could break. (You can't really expect `Foo`'s -maintainer to fix every test that uses `Foo`, can you?) - -Generally, you should not define mock classes you don't own. If you must mock -such a class owned by others, define the mock class in `Foo`'s Bazel package -(usually the same directory or a `testing` sub-directory), and put it in a `.h` -and a `cc_library` with `testonly=True`. Then everyone can reference them from -their tests. If `Foo` ever changes, there is only one copy of `MockFoo` to -change, and only tests that depend on the changed methods need to be fixed. - -Another way to do it: you can introduce a thin layer `FooAdaptor` on top of -`Foo` and code to this new interface. Since you own `FooAdaptor`, you can absorb -changes in `Foo` much more easily. While this is more work initially, carefully -choosing the adaptor interface can make your code easier to write and more -readable (a net win in the long run), as you can choose `FooAdaptor` to fit your -specific domain much better than `Foo` does. - -## Using Mocks in Tests - -Once you have a mock class, using it is easy. The typical work flow is: - -1. Import the gMock names from the `testing` namespace such that you can use - them unqualified (You only have to do it once per file). Remember that - namespaces are a good idea. -2. Create some mock objects. -3. Specify your expectations on them (How many times will a method be called? - With what arguments? What should it do? etc.). -4. Exercise some code that uses the mocks; optionally, check the result using - googletest assertions. If a mock method is called more than expected or with - wrong arguments, you'll get an error immediately. -5. When a mock is destructed, gMock will automatically check whether all - expectations on it have been satisfied. - -Here's an example: - -```cpp -#include "path/to/mock-turtle.h" -#include "gmock/gmock.h" -#include "gtest/gtest.h" - -using ::testing::AtLeast; // #1 - -TEST(PainterTest, CanDrawSomething) { - MockTurtle turtle; // #2 - EXPECT_CALL(turtle, PenDown()) // #3 - .Times(AtLeast(1)); - - Painter painter(&turtle); // #4 - - EXPECT_TRUE(painter.DrawCircle(0, 0, 10)); // #5 -} -``` - -As you might have guessed, this test checks that `PenDown()` is called at least -once. If the `painter` object didn't call this method, your test will fail with -a message like this: - -```text -path/to/my_test.cc:119: Failure -Actual function call count doesn't match this expectation: -Actually: never called; -Expected: called at least once. -Stack trace: -... -``` - -**Tip 1:** If you run the test from an Emacs buffer, you can hit `` on -the line number to jump right to the failed expectation. - -**Tip 2:** If your mock objects are never deleted, the final verification won't -happen. Therefore it's a good idea to turn on the heap checker in your tests -when you allocate mocks on the heap. You get that automatically if you use the -`gtest_main` library already. - -**Important note:** gMock requires expectations to be set **before** the mock -functions are called, otherwise the behavior is **undefined**. Do not alternate -between calls to `EXPECT_CALL()` and calls to the mock functions, and do not set -any expectations on a mock after passing the mock to an API. - -This means `EXPECT_CALL()` should be read as expecting that a call will occur -*in the future*, not that a call has occurred. Why does gMock work like that? -Well, specifying the expectation beforehand allows gMock to report a violation -as soon as it rises, when the context (stack trace, etc) is still available. -This makes debugging much easier. - -Admittedly, this test is contrived and doesn't do much. You can easily achieve -the same effect without using gMock. However, as we shall reveal soon, gMock -allows you to do *so much more* with the mocks. - -## Setting Expectations - -The key to using a mock object successfully is to set the *right expectations* -on it. If you set the expectations too strict, your test will fail as the result -of unrelated changes. If you set them too loose, bugs can slip through. You want -to do it just right such that your test can catch exactly the kind of bugs you -intend it to catch. gMock provides the necessary means for you to do it "just -right." - -### General Syntax - -In gMock we use the `EXPECT_CALL()` macro to set an expectation on a mock -method. The general syntax is: - -```cpp -EXPECT_CALL(mock_object, method(matchers)) - .Times(cardinality) - .WillOnce(action) - .WillRepeatedly(action); -``` - -The macro has two arguments: first the mock object, and then the method and its -arguments. Note that the two are separated by a comma (`,`), not a period (`.`). -(Why using a comma? The answer is that it was necessary for technical reasons.) -If the method is not overloaded, the macro can also be called without matchers: - -```cpp -EXPECT_CALL(mock_object, non-overloaded-method) - .Times(cardinality) - .WillOnce(action) - .WillRepeatedly(action); -``` - -This syntax allows the test writer to specify "called with any arguments" -without explicitly specifying the number or types of arguments. To avoid -unintended ambiguity, this syntax may only be used for methods that are not -overloaded. - -Either form of the macro can be followed by some optional *clauses* that provide -more information about the expectation. We'll discuss how each clause works in -the coming sections. - -This syntax is designed to make an expectation read like English. For example, -you can probably guess that - -```cpp -using ::testing::Return; -... -EXPECT_CALL(turtle, GetX()) - .Times(5) - .WillOnce(Return(100)) - .WillOnce(Return(150)) - .WillRepeatedly(Return(200)); -``` - -says that the `turtle` object's `GetX()` method will be called five times, it -will return 100 the first time, 150 the second time, and then 200 every time. -Some people like to call this style of syntax a Domain-Specific Language (DSL). - -{: .callout .note} -**Note:** Why do we use a macro to do this? Well it serves two purposes: first -it makes expectations easily identifiable (either by `grep` or by a human -reader), and second it allows gMock to include the source file location of a -failed expectation in messages, making debugging easier. - -### Matchers: What Arguments Do We Expect? - -When a mock function takes arguments, we may specify what arguments we are -expecting, for example: - -```cpp -// Expects the turtle to move forward by 100 units. -EXPECT_CALL(turtle, Forward(100)); -``` - -Oftentimes you do not want to be too specific. Remember that talk about tests -being too rigid? Over specification leads to brittle tests and obscures the -intent of tests. Therefore we encourage you to specify only what's necessary—no -more, no less. If you aren't interested in the value of an argument, write `_` -as the argument, which means "anything goes": - -```cpp -using ::testing::_; -... -// Expects that the turtle jumps to somewhere on the x=50 line. -EXPECT_CALL(turtle, GoTo(50, _)); -``` - -`_` is an instance of what we call **matchers**. A matcher is like a predicate -and can test whether an argument is what we'd expect. You can use a matcher -inside `EXPECT_CALL()` wherever a function argument is expected. `_` is a -convenient way of saying "any value". - -In the above examples, `100` and `50` are also matchers; implicitly, they are -the same as `Eq(100)` and `Eq(50)`, which specify that the argument must be -equal (using `operator==`) to the matcher argument. There are many -[built-in matchers](reference/matchers.md) for common types (as well as -[custom matchers](gmock_cook_book.md#NewMatchers)); for example: - -```cpp -using ::testing::Ge; -... -// Expects the turtle moves forward by at least 100. -EXPECT_CALL(turtle, Forward(Ge(100))); -``` - -If you don't care about *any* arguments, rather than specify `_` for each of -them you may instead omit the parameter list: - -```cpp -// Expects the turtle to move forward. -EXPECT_CALL(turtle, Forward); -// Expects the turtle to jump somewhere. -EXPECT_CALL(turtle, GoTo); -``` - -This works for all non-overloaded methods; if a method is overloaded, you need -to help gMock resolve which overload is expected by specifying the number of -arguments and possibly also the -[types of the arguments](gmock_cook_book.md#SelectOverload). - -### Cardinalities: How Many Times Will It Be Called? - -The first clause we can specify following an `EXPECT_CALL()` is `Times()`. We -call its argument a **cardinality** as it tells *how many times* the call should -occur. It allows us to repeat an expectation many times without actually writing -it as many times. More importantly, a cardinality can be "fuzzy", just like a -matcher can be. This allows a user to express the intent of a test exactly. - -An interesting special case is when we say `Times(0)`. You may have guessed - it -means that the function shouldn't be called with the given arguments at all, and -gMock will report a googletest failure whenever the function is (wrongfully) -called. - -We've seen `AtLeast(n)` as an example of fuzzy cardinalities earlier. For the -list of built-in cardinalities you can use, see -[here](gmock_cheat_sheet.md#CardinalityList). - -The `Times()` clause can be omitted. **If you omit `Times()`, gMock will infer -the cardinality for you.** The rules are easy to remember: - -* If **neither** `WillOnce()` **nor** `WillRepeatedly()` is in the - `EXPECT_CALL()`, the inferred cardinality is `Times(1)`. -* If there are *n* `WillOnce()`'s but **no** `WillRepeatedly()`, where *n* >= - 1, the cardinality is `Times(n)`. -* If there are *n* `WillOnce()`'s and **one** `WillRepeatedly()`, where *n* >= - 0, the cardinality is `Times(AtLeast(n))`. - -**Quick quiz:** what do you think will happen if a function is expected to be -called twice but actually called four times? - -### Actions: What Should It Do? - -Remember that a mock object doesn't really have a working implementation? We as -users have to tell it what to do when a method is invoked. This is easy in -gMock. - -First, if the return type of a mock function is a built-in type or a pointer, -the function has a **default action** (a `void` function will just return, a -`bool` function will return `false`, and other functions will return 0). In -addition, in C++ 11 and above, a mock function whose return type is -default-constructible (i.e. has a default constructor) has a default action of -returning a default-constructed value. If you don't say anything, this behavior -will be used. - -Second, if a mock function doesn't have a default action, or the default action -doesn't suit you, you can specify the action to be taken each time the -expectation matches using a series of `WillOnce()` clauses followed by an -optional `WillRepeatedly()`. For example, - -```cpp -using ::testing::Return; -... -EXPECT_CALL(turtle, GetX()) - .WillOnce(Return(100)) - .WillOnce(Return(200)) - .WillOnce(Return(300)); -``` - -says that `turtle.GetX()` will be called *exactly three times* (gMock inferred -this from how many `WillOnce()` clauses we've written, since we didn't -explicitly write `Times()`), and will return 100, 200, and 300 respectively. - -```cpp -using ::testing::Return; -... -EXPECT_CALL(turtle, GetY()) - .WillOnce(Return(100)) - .WillOnce(Return(200)) - .WillRepeatedly(Return(300)); -``` - -says that `turtle.GetY()` will be called *at least twice* (gMock knows this as -we've written two `WillOnce()` clauses and a `WillRepeatedly()` while having no -explicit `Times()`), will return 100 and 200 respectively the first two times, -and 300 from the third time on. - -Of course, if you explicitly write a `Times()`, gMock will not try to infer the -cardinality itself. What if the number you specified is larger than there are -`WillOnce()` clauses? Well, after all `WillOnce()`s are used up, gMock will do -the *default* action for the function every time (unless, of course, you have a -`WillRepeatedly()`.). - -What can we do inside `WillOnce()` besides `Return()`? You can return a -reference using `ReturnRef(`*`variable`*`)`, or invoke a pre-defined function, -among [others](gmock_cook_book.md#using-actions). - -**Important note:** The `EXPECT_CALL()` statement evaluates the action clause -only once, even though the action may be performed many times. Therefore you -must be careful about side effects. The following may not do what you want: - -```cpp -using ::testing::Return; -... -int n = 100; -EXPECT_CALL(turtle, GetX()) - .Times(4) - .WillRepeatedly(Return(n++)); -``` - -Instead of returning 100, 101, 102, ..., consecutively, this mock function will -always return 100 as `n++` is only evaluated once. Similarly, `Return(new Foo)` -will create a new `Foo` object when the `EXPECT_CALL()` is executed, and will -return the same pointer every time. If you want the side effect to happen every -time, you need to define a custom action, which we'll teach in the -[cook book](gmock_cook_book.md). - -Time for another quiz! What do you think the following means? - -```cpp -using ::testing::Return; -... -EXPECT_CALL(turtle, GetY()) - .Times(4) - .WillOnce(Return(100)); -``` - -Obviously `turtle.GetY()` is expected to be called four times. But if you think -it will return 100 every time, think twice! Remember that one `WillOnce()` -clause will be consumed each time the function is invoked and the default action -will be taken afterwards. So the right answer is that `turtle.GetY()` will -return 100 the first time, but **return 0 from the second time on**, as -returning 0 is the default action for `int` functions. - -### Using Multiple Expectations {#MultiExpectations} - -So far we've only shown examples where you have a single expectation. More -realistically, you'll specify expectations on multiple mock methods which may be -from multiple mock objects. - -By default, when a mock method is invoked, gMock will search the expectations in -the **reverse order** they are defined, and stop when an active expectation that -matches the arguments is found (you can think of it as "newer rules override -older ones."). If the matching expectation cannot take any more calls, you will -get an upper-bound-violated failure. Here's an example: - -```cpp -using ::testing::_; -... -EXPECT_CALL(turtle, Forward(_)); // #1 -EXPECT_CALL(turtle, Forward(10)) // #2 - .Times(2); -``` - -If `Forward(10)` is called three times in a row, the third time it will be an -error, as the last matching expectation (#2) has been saturated. If, however, -the third `Forward(10)` call is replaced by `Forward(20)`, then it would be OK, -as now #1 will be the matching expectation. - -{: .callout .note} -**Note:** Why does gMock search for a match in the *reverse* order of the -expectations? The reason is that this allows a user to set up the default -expectations in a mock object's constructor or the test fixture's set-up phase -and then customize the mock by writing more specific expectations in the test -body. So, if you have two expectations on the same method, you want to put the -one with more specific matchers **after** the other, or the more specific rule -would be shadowed by the more general one that comes after it. - -{: .callout .tip} -**Tip:** It is very common to start with a catch-all expectation for a method -and `Times(AnyNumber())` (omitting arguments, or with `_` for all arguments, if -overloaded). This makes any calls to the method expected. This is not necessary -for methods that are not mentioned at all (these are "uninteresting"), but is -useful for methods that have some expectations, but for which other calls are -ok. See -[Understanding Uninteresting vs Unexpected Calls](gmock_cook_book.md#uninteresting-vs-unexpected). - -### Ordered vs Unordered Calls {#OrderedCalls} - -By default, an expectation can match a call even though an earlier expectation -hasn't been satisfied. In other words, the calls don't have to occur in the -order the expectations are specified. - -Sometimes, you may want all the expected calls to occur in a strict order. To -say this in gMock is easy: - -```cpp -using ::testing::InSequence; -... -TEST(FooTest, DrawsLineSegment) { - ... - { - InSequence seq; - - EXPECT_CALL(turtle, PenDown()); - EXPECT_CALL(turtle, Forward(100)); - EXPECT_CALL(turtle, PenUp()); - } - Foo(); -} -``` - -By creating an object of type `InSequence`, all expectations in its scope are -put into a *sequence* and have to occur *sequentially*. Since we are just -relying on the constructor and destructor of this object to do the actual work, -its name is really irrelevant. - -In this example, we test that `Foo()` calls the three expected functions in the -order as written. If a call is made out-of-order, it will be an error. - -(What if you care about the relative order of some of the calls, but not all of -them? Can you specify an arbitrary partial order? The answer is ... yes! The -details can be found [here](gmock_cook_book.md#OrderedCalls).) - -### All Expectations Are Sticky (Unless Said Otherwise) {#StickyExpectations} - -Now let's do a quick quiz to see how well you can use this mock stuff already. -How would you test that the turtle is asked to go to the origin *exactly twice* -(you want to ignore any other instructions it receives)? - -After you've come up with your answer, take a look at ours and compare notes -(solve it yourself first - don't cheat!): - -```cpp -using ::testing::_; -using ::testing::AnyNumber; -... -EXPECT_CALL(turtle, GoTo(_, _)) // #1 - .Times(AnyNumber()); -EXPECT_CALL(turtle, GoTo(0, 0)) // #2 - .Times(2); -``` - -Suppose `turtle.GoTo(0, 0)` is called three times. In the third time, gMock will -see that the arguments match expectation #2 (remember that we always pick the -last matching expectation). Now, since we said that there should be only two -such calls, gMock will report an error immediately. This is basically what we've -told you in the [Using Multiple Expectations](#MultiExpectations) section above. - -This example shows that **expectations in gMock are "sticky" by default**, in -the sense that they remain active even after we have reached their invocation -upper bounds. This is an important rule to remember, as it affects the meaning -of the spec, and is **different** to how it's done in many other mocking -frameworks (Why'd we do that? Because we think our rule makes the common cases -easier to express and understand.). - -Simple? Let's see if you've really understood it: what does the following code -say? - -```cpp -using ::testing::Return; -... -for (int i = n; i > 0; i--) { - EXPECT_CALL(turtle, GetX()) - .WillOnce(Return(10*i)); -} -``` - -If you think it says that `turtle.GetX()` will be called `n` times and will -return 10, 20, 30, ..., consecutively, think twice! The problem is that, as we -said, expectations are sticky. So, the second time `turtle.GetX()` is called, -the last (latest) `EXPECT_CALL()` statement will match, and will immediately -lead to an "upper bound violated" error - this piece of code is not very useful! - -One correct way of saying that `turtle.GetX()` will return 10, 20, 30, ..., is -to explicitly say that the expectations are *not* sticky. In other words, they -should *retire* as soon as they are saturated: - -```cpp -using ::testing::Return; -... -for (int i = n; i > 0; i--) { - EXPECT_CALL(turtle, GetX()) - .WillOnce(Return(10*i)) - .RetiresOnSaturation(); -} -``` - -And, there's a better way to do it: in this case, we expect the calls to occur -in a specific order, and we line up the actions to match the order. Since the -order is important here, we should make it explicit using a sequence: - -```cpp -using ::testing::InSequence; -using ::testing::Return; -... -{ - InSequence s; - - for (int i = 1; i <= n; i++) { - EXPECT_CALL(turtle, GetX()) - .WillOnce(Return(10*i)) - .RetiresOnSaturation(); - } -} -``` - -By the way, the other situation where an expectation may *not* be sticky is when -it's in a sequence - as soon as another expectation that comes after it in the -sequence has been used, it automatically retires (and will never be used to -match any call). - -### Uninteresting Calls - -A mock object may have many methods, and not all of them are that interesting. -For example, in some tests we may not care about how many times `GetX()` and -`GetY()` get called. - -In gMock, if you are not interested in a method, just don't say anything about -it. If a call to this method occurs, you'll see a warning in the test output, -but it won't be a failure. This is called "naggy" behavior; to change, see -[The Nice, the Strict, and the Naggy](gmock_cook_book.md#NiceStrictNaggy). diff --git a/tests/rocm_smi_test/gtest/docs/index.md b/tests/rocm_smi_test/gtest/docs/index.md deleted file mode 100644 index b162c74011..0000000000 --- a/tests/rocm_smi_test/gtest/docs/index.md +++ /dev/null @@ -1,22 +0,0 @@ -# GoogleTest User's Guide - -## Welcome to GoogleTest! - -GoogleTest is Google's C++ testing and mocking framework. This user's guide has -the following contents: - -* [GoogleTest Primer](primer.md) - Teaches you how to write simple tests using - GoogleTest. Read this first if you are new to GoogleTest. -* [GoogleTest Advanced](advanced.md) - Read this when you've finished the - Primer and want to utilize GoogleTest to its full potential. -* [GoogleTest Samples](samples.md) - Describes some GoogleTest samples. -* [GoogleTest FAQ](faq.md) - Have a question? Want some tips? Check here - first. -* [Mocking for Dummies](gmock_for_dummies.md) - Teaches you how to create mock - objects and use them in tests. -* [Mocking Cookbook](gmock_cook_book.md) - Includes tips and approaches to - common mocking use cases. -* [Mocking Cheat Sheet](gmock_cheat_sheet.md) - A handy reference for - matchers, actions, invariants, and more. -* [Mocking FAQ](gmock_faq.md) - Contains answers to some mocking-specific - questions. diff --git a/tests/rocm_smi_test/gtest/docs/pkgconfig.md b/tests/rocm_smi_test/gtest/docs/pkgconfig.md deleted file mode 100644 index 18a2546a38..0000000000 --- a/tests/rocm_smi_test/gtest/docs/pkgconfig.md +++ /dev/null @@ -1,148 +0,0 @@ -## Using GoogleTest from various build systems - -GoogleTest comes with pkg-config files that can be used to determine all -necessary flags for compiling and linking to GoogleTest (and GoogleMock). -Pkg-config is a standardised plain-text format containing - -* the includedir (-I) path -* necessary macro (-D) definitions -* further required flags (-pthread) -* the library (-L) path -* the library (-l) to link to - -All current build systems support pkg-config in one way or another. For all -examples here we assume you want to compile the sample -`samples/sample3_unittest.cc`. - -### CMake - -Using `pkg-config` in CMake is fairly easy: - -```cmake -cmake_minimum_required(VERSION 3.0) - -cmake_policy(SET CMP0048 NEW) -project(my_gtest_pkgconfig VERSION 0.0.1 LANGUAGES CXX) - -find_package(PkgConfig) -pkg_search_module(GTEST REQUIRED gtest_main) - -add_executable(testapp samples/sample3_unittest.cc) -target_link_libraries(testapp ${GTEST_LDFLAGS}) -target_compile_options(testapp PUBLIC ${GTEST_CFLAGS}) - -include(CTest) -add_test(first_and_only_test testapp) -``` - -It is generally recommended that you use `target_compile_options` + `_CFLAGS` -over `target_include_directories` + `_INCLUDE_DIRS` as the former includes not -just -I flags (GoogleTest might require a macro indicating to internal headers -that all libraries have been compiled with threading enabled. In addition, -GoogleTest might also require `-pthread` in the compiling step, and as such -splitting the pkg-config `Cflags` variable into include dirs and macros for -`target_compile_definitions()` might still miss this). The same recommendation -goes for using `_LDFLAGS` over the more commonplace `_LIBRARIES`, which happens -to discard `-L` flags and `-pthread`. - -### Help! pkg-config can't find GoogleTest! - -Let's say you have a `CMakeLists.txt` along the lines of the one in this -tutorial and you try to run `cmake`. It is very possible that you get a failure -along the lines of: - -``` --- Checking for one of the modules 'gtest_main' -CMake Error at /usr/share/cmake/Modules/FindPkgConfig.cmake:640 (message): - None of the required 'gtest_main' found -``` - -These failures are common if you installed GoogleTest yourself and have not -sourced it from a distro or other package manager. If so, you need to tell -pkg-config where it can find the `.pc` files containing the information. Say you -installed GoogleTest to `/usr/local`, then it might be that the `.pc` files are -installed under `/usr/local/lib64/pkgconfig`. If you set - -``` -export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig -``` - -pkg-config will also try to look in `PKG_CONFIG_PATH` to find `gtest_main.pc`. - -### Using pkg-config in a cross-compilation setting - -Pkg-config can be used in a cross-compilation setting too. To do this, let's -assume the final prefix of the cross-compiled installation will be `/usr`, and -your sysroot is `/home/MYUSER/sysroot`. Configure and install GTest using - -``` -mkdir build && cmake -DCMAKE_INSTALL_PREFIX=/usr .. -``` - -Install into the sysroot using `DESTDIR`: - -``` -make -j install DESTDIR=/home/MYUSER/sysroot -``` - -Before we continue, it is recommended to **always** define the following two -variables for pkg-config in a cross-compilation setting: - -``` -export PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=yes -export PKG_CONFIG_ALLOW_SYSTEM_LIBS=yes -``` - -otherwise `pkg-config` will filter `-I` and `-L` flags against standard prefixes -such as `/usr` (see https://bugs.freedesktop.org/show_bug.cgi?id=28264#c3 for -reasons why this stripping needs to occur usually). - -If you look at the generated pkg-config file, it will look something like - -``` -libdir=/usr/lib64 -includedir=/usr/include - -Name: gtest -Description: GoogleTest (without main() function) -Version: 1.11.0 -URL: https://github.com/google/googletest -Libs: -L${libdir} -lgtest -lpthread -Cflags: -I${includedir} -DGTEST_HAS_PTHREAD=1 -lpthread -``` - -Notice that the sysroot is not included in `libdir` and `includedir`! If you try -to run `pkg-config` with the correct -`PKG_CONFIG_LIBDIR=/home/MYUSER/sysroot/usr/lib64/pkgconfig` against this `.pc` -file, you will get - -``` -$ pkg-config --cflags gtest --DGTEST_HAS_PTHREAD=1 -lpthread -I/usr/include -$ pkg-config --libs gtest --L/usr/lib64 -lgtest -lpthread -``` - -which is obviously wrong and points to the `CBUILD` and not `CHOST` root. In -order to use this in a cross-compilation setting, we need to tell pkg-config to -inject the actual sysroot into `-I` and `-L` variables. Let us now tell -pkg-config about the actual sysroot - -``` -export PKG_CONFIG_DIR= -export PKG_CONFIG_SYSROOT_DIR=/home/MYUSER/sysroot -export PKG_CONFIG_LIBDIR=${PKG_CONFIG_SYSROOT_DIR}/usr/lib64/pkgconfig -``` - -and running `pkg-config` again we get - -``` -$ pkg-config --cflags gtest --DGTEST_HAS_PTHREAD=1 -lpthread -I/home/MYUSER/sysroot/usr/include -$ pkg-config --libs gtest --L/home/MYUSER/sysroot/usr/lib64 -lgtest -lpthread -``` - -which contains the correct sysroot now. For a more comprehensive guide to also -including `${CHOST}` in build system calls, see the excellent tutorial by Diego -Elio Pettenò: diff --git a/tests/rocm_smi_test/gtest/docs/platforms.md b/tests/rocm_smi_test/gtest/docs/platforms.md deleted file mode 100644 index eba6ef8056..0000000000 --- a/tests/rocm_smi_test/gtest/docs/platforms.md +++ /dev/null @@ -1,35 +0,0 @@ -# Supported Platforms - -GoogleTest requires a codebase and compiler compliant with the C++11 standard or -newer. - -The GoogleTest code is officially supported on the following platforms. -Operating systems or tools not listed below are community-supported. For -community-supported platforms, patches that do not complicate the code may be -considered. - -If you notice any problems on your platform, please file an issue on the -[GoogleTest GitHub Issue Tracker](https://github.com/google/googletest/issues). -Pull requests containing fixes are welcome! - -### Operating systems - -* Linux -* macOS -* Windows - -### Compilers - -* gcc 5.0+ -* clang 5.0+ -* MSVC 2015+ - -**macOS users:** Xcode 9.3+ provides clang 5.0+. - -### Build systems - -* [Bazel](https://bazel.build/) -* [CMake](https://cmake.org/) - -Bazel is the build system used by the team internally and in tests. CMake is -supported on a best-effort basis and by the community. diff --git a/tests/rocm_smi_test/gtest/docs/primer.md b/tests/rocm_smi_test/gtest/docs/primer.md deleted file mode 100644 index aecc368b08..0000000000 --- a/tests/rocm_smi_test/gtest/docs/primer.md +++ /dev/null @@ -1,482 +0,0 @@ -# Googletest Primer - -## Introduction: Why googletest? - -*googletest* helps you write better C++ tests. - -googletest is a testing framework developed by the Testing Technology team with -Google's specific requirements and constraints in mind. Whether you work on -Linux, Windows, or a Mac, if you write C++ code, googletest can help you. And it -supports *any* kind of tests, not just unit tests. - -So what makes a good test, and how does googletest fit in? We believe: - -1. Tests should be *independent* and *repeatable*. It's a pain to debug a test - that succeeds or fails as a result of other tests. googletest isolates the - tests by running each of them on a different object. When a test fails, - googletest allows you to run it in isolation for quick debugging. -2. Tests should be well *organized* and reflect the structure of the tested - code. googletest groups related tests into test suites that can share data - and subroutines. This common pattern is easy to recognize and makes tests - easy to maintain. Such consistency is especially helpful when people switch - projects and start to work on a new code base. -3. Tests should be *portable* and *reusable*. Google has a lot of code that is - platform-neutral; its tests should also be platform-neutral. googletest - works on different OSes, with different compilers, with or without - exceptions, so googletest tests can work with a variety of configurations. -4. When tests fail, they should provide as much *information* about the problem - as possible. googletest doesn't stop at the first test failure. Instead, it - only stops the current test and continues with the next. You can also set up - tests that report non-fatal failures after which the current test continues. - Thus, you can detect and fix multiple bugs in a single run-edit-compile - cycle. -5. The testing framework should liberate test writers from housekeeping chores - and let them focus on the test *content*. googletest automatically keeps - track of all tests defined, and doesn't require the user to enumerate them - in order to run them. -6. Tests should be *fast*. With googletest, you can reuse shared resources - across tests and pay for the set-up/tear-down only once, without making - tests depend on each other. - -Since googletest is based on the popular xUnit architecture, you'll feel right -at home if you've used JUnit or PyUnit before. If not, it will take you about 10 -minutes to learn the basics and get started. So let's go! - -## Beware of the nomenclature - -{: .callout .note} -_Note:_ There might be some confusion arising from different definitions of the -terms _Test_, _Test Case_ and _Test Suite_, so beware of misunderstanding these. - -Historically, googletest started to use the term _Test Case_ for grouping -related tests, whereas current publications, including International Software -Testing Qualifications Board ([ISTQB](http://www.istqb.org/)) materials and -various textbooks on software quality, use the term -_[Test Suite][istqb test suite]_ for this. - -The related term _Test_, as it is used in googletest, corresponds to the term -_[Test Case][istqb test case]_ of ISTQB and others. - -The term _Test_ is commonly of broad enough sense, including ISTQB's definition -of _Test Case_, so it's not much of a problem here. But the term _Test Case_ as -was used in Google Test is of contradictory sense and thus confusing. - -googletest recently started replacing the term _Test Case_ with _Test Suite_. -The preferred API is *TestSuite*. The older TestCase API is being slowly -deprecated and refactored away. - -So please be aware of the different definitions of the terms: - - -Meaning | googletest Term | [ISTQB](http://www.istqb.org/) Term -:----------------------------------------------------------------------------------- | :---------------------- | :---------------------------------- -Exercise a particular program path with specific input values and verify the results | [TEST()](#simple-tests) | [Test Case][istqb test case] - - -[istqb test case]: http://glossary.istqb.org/en/search/test%20case -[istqb test suite]: http://glossary.istqb.org/en/search/test%20suite - -## Basic Concepts - -When using googletest, you start by writing *assertions*, which are statements -that check whether a condition is true. An assertion's result can be *success*, -*nonfatal failure*, or *fatal failure*. If a fatal failure occurs, it aborts the -current function; otherwise the program continues normally. - -*Tests* use assertions to verify the tested code's behavior. If a test crashes -or has a failed assertion, then it *fails*; otherwise it *succeeds*. - -A *test suite* contains one or many tests. You should group your tests into test -suites that reflect the structure of the tested code. When multiple tests in a -test suite need to share common objects and subroutines, you can put them into a -*test fixture* class. - -A *test program* can contain multiple test suites. - -We'll now explain how to write a test program, starting at the individual -assertion level and building up to tests and test suites. - -## Assertions - -googletest assertions are macros that resemble function calls. You test a class -or function by making assertions about its behavior. When an assertion fails, -googletest prints the assertion's source file and line number location, along -with a failure message. You may also supply a custom failure message which will -be appended to googletest's message. - -The assertions come in pairs that test the same thing but have different effects -on the current function. `ASSERT_*` versions generate fatal failures when they -fail, and **abort the current function**. `EXPECT_*` versions generate nonfatal -failures, which don't abort the current function. Usually `EXPECT_*` are -preferred, as they allow more than one failure to be reported in a test. -However, you should use `ASSERT_*` if it doesn't make sense to continue when the -assertion in question fails. - -Since a failed `ASSERT_*` returns from the current function immediately, -possibly skipping clean-up code that comes after it, it may cause a space leak. -Depending on the nature of the leak, it may or may not be worth fixing - so keep -this in mind if you get a heap checker error in addition to assertion errors. - -To provide a custom failure message, simply stream it into the macro using the -`<<` operator or a sequence of such operators. See the following example, using -the [`ASSERT_EQ` and `EXPECT_EQ`](reference/assertions.md#EXPECT_EQ) macros to -verify value equality: - -```c++ -ASSERT_EQ(x.size(), y.size()) << "Vectors x and y are of unequal length"; - -for (int i = 0; i < x.size(); ++i) { - EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i; -} -``` - -Anything that can be streamed to an `ostream` can be streamed to an assertion -macro--in particular, C strings and `string` objects. If a wide string -(`wchar_t*`, `TCHAR*` in `UNICODE` mode on Windows, or `std::wstring`) is -streamed to an assertion, it will be translated to UTF-8 when printed. - -GoogleTest provides a collection of assertions for verifying the behavior of -your code in various ways. You can check Boolean conditions, compare values -based on relational operators, verify string values, floating-point values, and -much more. There are even assertions that enable you to verify more complex -states by providing custom predicates. For the complete list of assertions -provided by GoogleTest, see the [Assertions Reference](reference/assertions.md). - -## Simple Tests - -To create a test: - -1. Use the `TEST()` macro to define and name a test function. These are - ordinary C++ functions that don't return a value. -2. In this function, along with any valid C++ statements you want to include, - use the various googletest assertions to check values. -3. The test's result is determined by the assertions; if any assertion in the - test fails (either fatally or non-fatally), or if the test crashes, the - entire test fails. Otherwise, it succeeds. - -```c++ -TEST(TestSuiteName, TestName) { - ... test body ... -} -``` - -`TEST()` arguments go from general to specific. The *first* argument is the name -of the test suite, and the *second* argument is the test's name within the test -suite. Both names must be valid C++ identifiers, and they should not contain any -underscores (`_`). A test's *full name* consists of its containing test suite -and its individual name. Tests from different test suites can have the same -individual name. - -For example, let's take a simple integer function: - -```c++ -int Factorial(int n); // Returns the factorial of n -``` - -A test suite for this function might look like: - -```c++ -// Tests factorial of 0. -TEST(FactorialTest, HandlesZeroInput) { - EXPECT_EQ(Factorial(0), 1); -} - -// Tests factorial of positive numbers. -TEST(FactorialTest, HandlesPositiveInput) { - EXPECT_EQ(Factorial(1), 1); - EXPECT_EQ(Factorial(2), 2); - EXPECT_EQ(Factorial(3), 6); - EXPECT_EQ(Factorial(8), 40320); -} -``` - -googletest groups the test results by test suites, so logically related tests -should be in the same test suite; in other words, the first argument to their -`TEST()` should be the same. In the above example, we have two tests, -`HandlesZeroInput` and `HandlesPositiveInput`, that belong to the same test -suite `FactorialTest`. - -When naming your test suites and tests, you should follow the same convention as -for -[naming functions and classes](https://google.github.io/styleguide/cppguide.html#Function_Names). - -**Availability**: Linux, Windows, Mac. - -## Test Fixtures: Using the Same Data Configuration for Multiple Tests {#same-data-multiple-tests} - -If you find yourself writing two or more tests that operate on similar data, you -can use a *test fixture*. This allows you to reuse the same configuration of -objects for several different tests. - -To create a fixture: - -1. Derive a class from `::testing::Test` . Start its body with `protected:`, as - we'll want to access fixture members from sub-classes. -2. Inside the class, declare any objects you plan to use. -3. If necessary, write a default constructor or `SetUp()` function to prepare - the objects for each test. A common mistake is to spell `SetUp()` as - **`Setup()`** with a small `u` - Use `override` in C++11 to make sure you - spelled it correctly. -4. If necessary, write a destructor or `TearDown()` function to release any - resources you allocated in `SetUp()` . To learn when you should use the - constructor/destructor and when you should use `SetUp()/TearDown()`, read - the [FAQ](faq.md#CtorVsSetUp). -5. If needed, define subroutines for your tests to share. - -When using a fixture, use `TEST_F()` instead of `TEST()` as it allows you to -access objects and subroutines in the test fixture: - -```c++ -TEST_F(TestFixtureName, TestName) { - ... test body ... -} -``` - -Like `TEST()`, the first argument is the test suite name, but for `TEST_F()` -this must be the name of the test fixture class. You've probably guessed: `_F` -is for fixture. - -Unfortunately, the C++ macro system does not allow us to create a single macro -that can handle both types of tests. Using the wrong macro causes a compiler -error. - -Also, you must first define a test fixture class before using it in a -`TEST_F()`, or you'll get the compiler error "`virtual outside class -declaration`". - -For each test defined with `TEST_F()`, googletest will create a *fresh* test -fixture at runtime, immediately initialize it via `SetUp()`, run the test, clean -up by calling `TearDown()`, and then delete the test fixture. Note that -different tests in the same test suite have different test fixture objects, and -googletest always deletes a test fixture before it creates the next one. -googletest does **not** reuse the same test fixture for multiple tests. Any -changes one test makes to the fixture do not affect other tests. - -As an example, let's write tests for a FIFO queue class named `Queue`, which has -the following interface: - -```c++ -template // E is the element type. -class Queue { - public: - Queue(); - void Enqueue(const E& element); - E* Dequeue(); // Returns NULL if the queue is empty. - size_t size() const; - ... -}; -``` - -First, define a fixture class. By convention, you should give it the name -`FooTest` where `Foo` is the class being tested. - -```c++ -class QueueTest : public ::testing::Test { - protected: - void SetUp() override { - q1_.Enqueue(1); - q2_.Enqueue(2); - q2_.Enqueue(3); - } - - // void TearDown() override {} - - Queue q0_; - Queue q1_; - Queue q2_; -}; -``` - -In this case, `TearDown()` is not needed since we don't have to clean up after -each test, other than what's already done by the destructor. - -Now we'll write tests using `TEST_F()` and this fixture. - -```c++ -TEST_F(QueueTest, IsEmptyInitially) { - EXPECT_EQ(q0_.size(), 0); -} - -TEST_F(QueueTest, DequeueWorks) { - int* n = q0_.Dequeue(); - EXPECT_EQ(n, nullptr); - - n = q1_.Dequeue(); - ASSERT_NE(n, nullptr); - EXPECT_EQ(*n, 1); - EXPECT_EQ(q1_.size(), 0); - delete n; - - n = q2_.Dequeue(); - ASSERT_NE(n, nullptr); - EXPECT_EQ(*n, 2); - EXPECT_EQ(q2_.size(), 1); - delete n; -} -``` - -The above uses both `ASSERT_*` and `EXPECT_*` assertions. The rule of thumb is -to use `EXPECT_*` when you want the test to continue to reveal more errors after -the assertion failure, and use `ASSERT_*` when continuing after failure doesn't -make sense. For example, the second assertion in the `Dequeue` test is -`ASSERT_NE(n, nullptr)`, as we need to dereference the pointer `n` later, which -would lead to a segfault when `n` is `NULL`. - -When these tests run, the following happens: - -1. googletest constructs a `QueueTest` object (let's call it `t1`). -2. `t1.SetUp()` initializes `t1`. -3. The first test (`IsEmptyInitially`) runs on `t1`. -4. `t1.TearDown()` cleans up after the test finishes. -5. `t1` is destructed. -6. The above steps are repeated on another `QueueTest` object, this time - running the `DequeueWorks` test. - -**Availability**: Linux, Windows, Mac. - -## Invoking the Tests - -`TEST()` and `TEST_F()` implicitly register their tests with googletest. So, -unlike with many other C++ testing frameworks, you don't have to re-list all -your defined tests in order to run them. - -After defining your tests, you can run them with `RUN_ALL_TESTS()`, which -returns `0` if all the tests are successful, or `1` otherwise. Note that -`RUN_ALL_TESTS()` runs *all tests* in your link unit--they can be from different -test suites, or even different source files. - -When invoked, the `RUN_ALL_TESTS()` macro: - -* Saves the state of all googletest flags. - -* Creates a test fixture object for the first test. - -* Initializes it via `SetUp()`. - -* Runs the test on the fixture object. - -* Cleans up the fixture via `TearDown()`. - -* Deletes the fixture. - -* Restores the state of all googletest flags. - -* Repeats the above steps for the next test, until all tests have run. - -If a fatal failure happens the subsequent steps will be skipped. - -{: .callout .important} -> IMPORTANT: You must **not** ignore the return value of `RUN_ALL_TESTS()`, or -> you will get a compiler error. The rationale for this design is that the -> automated testing service determines whether a test has passed based on its -> exit code, not on its stdout/stderr output; thus your `main()` function must -> return the value of `RUN_ALL_TESTS()`. -> -> Also, you should call `RUN_ALL_TESTS()` only **once**. Calling it more than -> once conflicts with some advanced googletest features (e.g., thread-safe -> [death tests](advanced.md#death-tests)) and thus is not supported. - -**Availability**: Linux, Windows, Mac. - -## Writing the main() Function - -Most users should _not_ need to write their own `main` function and instead link -with `gtest_main` (as opposed to with `gtest`), which defines a suitable entry -point. See the end of this section for details. The remainder of this section -should only apply when you need to do something custom before the tests run that -cannot be expressed within the framework of fixtures and test suites. - -If you write your own `main` function, it should return the value of -`RUN_ALL_TESTS()`. - -You can start from this boilerplate: - -```c++ -#include "this/package/foo.h" - -#include "gtest/gtest.h" - -namespace my { -namespace project { -namespace { - -// The fixture for testing class Foo. -class FooTest : public ::testing::Test { - protected: - // You can remove any or all of the following functions if their bodies would - // be empty. - - FooTest() { - // You can do set-up work for each test here. - } - - ~FooTest() override { - // You can do clean-up work that doesn't throw exceptions here. - } - - // If the constructor and destructor are not enough for setting up - // and cleaning up each test, you can define the following methods: - - void SetUp() override { - // Code here will be called immediately after the constructor (right - // before each test). - } - - void TearDown() override { - // Code here will be called immediately after each test (right - // before the destructor). - } - - // Class members declared here can be used by all tests in the test suite - // for Foo. -}; - -// Tests that the Foo::Bar() method does Abc. -TEST_F(FooTest, MethodBarDoesAbc) { - const std::string input_filepath = "this/package/testdata/myinputfile.dat"; - const std::string output_filepath = "this/package/testdata/myoutputfile.dat"; - Foo f; - EXPECT_EQ(f.Bar(input_filepath, output_filepath), 0); -} - -// Tests that Foo does Xyz. -TEST_F(FooTest, DoesXyz) { - // Exercises the Xyz feature of Foo. -} - -} // namespace -} // namespace project -} // namespace my - -int main(int argc, char **argv) { - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} -``` - -The `::testing::InitGoogleTest()` function parses the command line for -googletest flags, and removes all recognized flags. This allows the user to -control a test program's behavior via various flags, which we'll cover in the -[AdvancedGuide](advanced.md). You **must** call this function before calling -`RUN_ALL_TESTS()`, or the flags won't be properly initialized. - -On Windows, `InitGoogleTest()` also works with wide strings, so it can be used -in programs compiled in `UNICODE` mode as well. - -But maybe you think that writing all those `main` functions is too much work? We -agree with you completely, and that's why Google Test provides a basic -implementation of main(). If it fits your needs, then just link your test with -the `gtest_main` library and you are good to go. - -{: .callout .note} -NOTE: `ParseGUnitFlags()` is deprecated in favor of `InitGoogleTest()`. - -## Known Limitations - -* Google Test is designed to be thread-safe. The implementation is thread-safe - on systems where the `pthreads` library is available. It is currently - _unsafe_ to use Google Test assertions from two threads concurrently on - other systems (e.g. Windows). In most tests this is not an issue as usually - the assertions are done in the main thread. If you want to help, you can - volunteer to implement the necessary synchronization primitives in - `gtest-port.h` for your platform. diff --git a/tests/rocm_smi_test/gtest/docs/quickstart-bazel.md b/tests/rocm_smi_test/gtest/docs/quickstart-bazel.md deleted file mode 100644 index 5d6e9c68ad..0000000000 --- a/tests/rocm_smi_test/gtest/docs/quickstart-bazel.md +++ /dev/null @@ -1,147 +0,0 @@ -# Quickstart: Building with Bazel - -This tutorial aims to get you up and running with GoogleTest using the Bazel -build system. If you're using GoogleTest for the first time or need a refresher, -we recommend this tutorial as a starting point. - -## Prerequisites - -To complete this tutorial, you'll need: - -* A compatible operating system (e.g. Linux, macOS, Windows). -* A compatible C++ compiler that supports at least C++11. -* [Bazel](https://bazel.build/), the preferred build system used by the - GoogleTest team. - -See [Supported Platforms](platforms.md) for more information about platforms -compatible with GoogleTest. - -If you don't already have Bazel installed, see the -[Bazel installation guide](https://docs.bazel.build/versions/main/install.html). - -{: .callout .note} -Note: The terminal commands in this tutorial show a Unix shell prompt, but the -commands work on the Windows command line as well. - -## Set up a Bazel workspace - -A -[Bazel workspace](https://docs.bazel.build/versions/main/build-ref.html#workspace) -is a directory on your filesystem that you use to manage source files for the -software you want to build. Each workspace directory has a text file named -`WORKSPACE` which may be empty, or may contain references to external -dependencies required to build the outputs. - -First, create a directory for your workspace: - -``` -$ mkdir my_workspace && cd my_workspace -``` - -Next, you’ll create the `WORKSPACE` file to specify dependencies. A common and -recommended way to depend on GoogleTest is to use a -[Bazel external dependency](https://docs.bazel.build/versions/main/external.html) -via the -[`http_archive` rule](https://docs.bazel.build/versions/main/repo/http.html#http_archive). -To do this, in the root directory of your workspace (`my_workspace/`), create a -file named `WORKSPACE` with the following contents: - -``` -load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") - -http_archive( - name = "com_google_googletest", - urls = ["https://github.com/google/googletest/archive/609281088cfefc76f9d0ce82e1ff6c30cc3591e5.zip"], - strip_prefix = "googletest-609281088cfefc76f9d0ce82e1ff6c30cc3591e5", -) -``` - -The above configuration declares a dependency on GoogleTest which is downloaded -as a ZIP archive from GitHub. In the above example, -`609281088cfefc76f9d0ce82e1ff6c30cc3591e5` is the Git commit hash of the -GoogleTest version to use; we recommend updating the hash often to point to the -latest version. - -Now you're ready to build C++ code that uses GoogleTest. - -## Create and run a binary - -With your Bazel workspace set up, you can now use GoogleTest code within your -own project. - -As an example, create a file named `hello_test.cc` in your `my_workspace` -directory with the following contents: - -```cpp -#include - -// Demonstrate some basic assertions. -TEST(HelloTest, BasicAssertions) { - // Expect two strings not to be equal. - EXPECT_STRNE("hello", "world"); - // Expect equality. - EXPECT_EQ(7 * 6, 42); -} -``` - -GoogleTest provides [assertions](primer.md#assertions) that you use to test the -behavior of your code. The above sample includes the main GoogleTest header file -and demonstrates some basic assertions. - -To build the code, create a file named `BUILD` in the same directory with the -following contents: - -``` -cc_test( - name = "hello_test", - size = "small", - srcs = ["hello_test.cc"], - deps = ["@com_google_googletest//:gtest_main"], -) -``` - -This `cc_test` rule declares the C++ test binary you want to build, and links to -GoogleTest (`//:gtest_main`) using the prefix you specified in the `WORKSPACE` -file (`@com_google_googletest`). For more information about Bazel `BUILD` files, -see the -[Bazel C++ Tutorial](https://docs.bazel.build/versions/main/tutorial/cpp.html). - -Now you can build and run your test: - -
      -my_workspace$ bazel test --test_output=all //:hello_test
      -INFO: Analyzed target //:hello_test (26 packages loaded, 362 targets configured).
      -INFO: Found 1 test target...
      -INFO: From Testing //:hello_test:
      -==================== Test output for //:hello_test:
      -Running main() from gmock_main.cc
      -[==========] Running 1 test from 1 test suite.
      -[----------] Global test environment set-up.
      -[----------] 1 test from HelloTest
      -[ RUN      ] HelloTest.BasicAssertions
      -[       OK ] HelloTest.BasicAssertions (0 ms)
      -[----------] 1 test from HelloTest (0 ms total)
      -
      -[----------] Global test environment tear-down
      -[==========] 1 test from 1 test suite ran. (0 ms total)
      -[  PASSED  ] 1 test.
      -================================================================================
      -Target //:hello_test up-to-date:
      -  bazel-bin/hello_test
      -INFO: Elapsed time: 4.190s, Critical Path: 3.05s
      -INFO: 27 processes: 8 internal, 19 linux-sandbox.
      -INFO: Build completed successfully, 27 total actions
      -//:hello_test                                                     PASSED in 0.1s
      -
      -INFO: Build completed successfully, 27 total actions
      -
      - -Congratulations! You've successfully built and run a test binary using -GoogleTest. - -## Next steps - -* [Check out the Primer](primer.md) to start learning how to write simple - tests. -* [See the code samples](samples.md) for more examples showing how to use a - variety of GoogleTest features. diff --git a/tests/rocm_smi_test/gtest/docs/quickstart-cmake.md b/tests/rocm_smi_test/gtest/docs/quickstart-cmake.md deleted file mode 100644 index 420f1d3a3c..0000000000 --- a/tests/rocm_smi_test/gtest/docs/quickstart-cmake.md +++ /dev/null @@ -1,156 +0,0 @@ -# Quickstart: Building with CMake - -This tutorial aims to get you up and running with GoogleTest using CMake. If -you're using GoogleTest for the first time or need a refresher, we recommend -this tutorial as a starting point. If your project uses Bazel, see the -[Quickstart for Bazel](quickstart-bazel.md) instead. - -## Prerequisites - -To complete this tutorial, you'll need: - -* A compatible operating system (e.g. Linux, macOS, Windows). -* A compatible C++ compiler that supports at least C++11. -* [CMake](https://cmake.org/) and a compatible build tool for building the - project. - * Compatible build tools include - [Make](https://www.gnu.org/software/make/), - [Ninja](https://ninja-build.org/), and others - see - [CMake Generators](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html) - for more information. - -See [Supported Platforms](platforms.md) for more information about platforms -compatible with GoogleTest. - -If you don't already have CMake installed, see the -[CMake installation guide](https://cmake.org/install). - -{: .callout .note} -Note: The terminal commands in this tutorial show a Unix shell prompt, but the -commands work on the Windows command line as well. - -## Set up a project - -CMake uses a file named `CMakeLists.txt` to configure the build system for a -project. You'll use this file to set up your project and declare a dependency on -GoogleTest. - -First, create a directory for your project: - -``` -$ mkdir my_project && cd my_project -``` - -Next, you'll create the `CMakeLists.txt` file and declare a dependency on -GoogleTest. There are many ways to express dependencies in the CMake ecosystem; -in this quickstart, you'll use the -[`FetchContent` CMake module](https://cmake.org/cmake/help/latest/module/FetchContent.html). -To do this, in your project directory (`my_project`), create a file named -`CMakeLists.txt` with the following contents: - -```cmake -cmake_minimum_required(VERSION 3.14) -project(my_project) - -# GoogleTest requires at least C++11 -set(CMAKE_CXX_STANDARD 11) - -include(FetchContent) -FetchContent_Declare( - googletest - URL https://github.com/google/googletest/archive/609281088cfefc76f9d0ce82e1ff6c30cc3591e5.zip -) -# For Windows: Prevent overriding the parent project's compiler/linker settings -set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) -FetchContent_MakeAvailable(googletest) -``` - -The above configuration declares a dependency on GoogleTest which is downloaded -from GitHub. In the above example, `609281088cfefc76f9d0ce82e1ff6c30cc3591e5` is -the Git commit hash of the GoogleTest version to use; we recommend updating the -hash often to point to the latest version. - -For more information about how to create `CMakeLists.txt` files, see the -[CMake Tutorial](https://cmake.org/cmake/help/latest/guide/tutorial/index.html). - -## Create and run a binary - -With GoogleTest declared as a dependency, you can use GoogleTest code within -your own project. - -As an example, create a file named `hello_test.cc` in your `my_project` -directory with the following contents: - -```cpp -#include - -// Demonstrate some basic assertions. -TEST(HelloTest, BasicAssertions) { - // Expect two strings not to be equal. - EXPECT_STRNE("hello", "world"); - // Expect equality. - EXPECT_EQ(7 * 6, 42); -} -``` - -GoogleTest provides [assertions](primer.md#assertions) that you use to test the -behavior of your code. The above sample includes the main GoogleTest header file -and demonstrates some basic assertions. - -To build the code, add the following to the end of your `CMakeLists.txt` file: - -```cmake -enable_testing() - -add_executable( - hello_test - hello_test.cc -) -target_link_libraries( - hello_test - gtest_main -) - -include(GoogleTest) -gtest_discover_tests(hello_test) -``` - -The above configuration enables testing in CMake, declares the C++ test binary -you want to build (`hello_test`), and links it to GoogleTest (`gtest_main`). The -last two lines enable CMake's test runner to discover the tests included in the -binary, using the -[`GoogleTest` CMake module](https://cmake.org/cmake/help/git-stage/module/GoogleTest.html). - -Now you can build and run your test: - -
      -my_project$ cmake -S . -B build
      --- The C compiler identification is GNU 10.2.1
      --- The CXX compiler identification is GNU 10.2.1
      -...
      --- Build files have been written to: .../my_project/build
      -
      -my_project$ cmake --build build
      -Scanning dependencies of target gtest
      -...
      -[100%] Built target gmock_main
      -
      -my_project$ cd build && ctest
      -Test project .../my_project/build
      -    Start 1: HelloTest.BasicAssertions
      -1/1 Test #1: HelloTest.BasicAssertions ........   Passed    0.00 sec
      -
      -100% tests passed, 0 tests failed out of 1
      -
      -Total Test time (real) =   0.01 sec
      -
      - -Congratulations! You've successfully built and run a test binary using -GoogleTest. - -## Next steps - -* [Check out the Primer](primer.md) to start learning how to write simple - tests. -* [See the code samples](samples.md) for more examples showing how to use a - variety of GoogleTest features. diff --git a/tests/rocm_smi_test/gtest/docs/reference/actions.md b/tests/rocm_smi_test/gtest/docs/reference/actions.md deleted file mode 100644 index ab81a129ef..0000000000 --- a/tests/rocm_smi_test/gtest/docs/reference/actions.md +++ /dev/null @@ -1,115 +0,0 @@ -# Actions Reference - -[**Actions**](../gmock_for_dummies.md#actions-what-should-it-do) specify what a -mock function should do when invoked. This page lists the built-in actions -provided by GoogleTest. All actions are defined in the `::testing` namespace. - -## Returning a Value - -| Action | Description | -| :-------------------------------- | :-------------------------------------------- | -| `Return()` | Return from a `void` mock function. | -| `Return(value)` | Return `value`. If the type of `value` is different to the mock function's return type, `value` is converted to the latter type at the time the expectation is set, not when the action is executed. | -| `ReturnArg()` | Return the `N`-th (0-based) argument. | -| `ReturnNew(a1, ..., ak)` | Return `new T(a1, ..., ak)`; a different object is created each time. | -| `ReturnNull()` | Return a null pointer. | -| `ReturnPointee(ptr)` | Return the value pointed to by `ptr`. | -| `ReturnRef(variable)` | Return a reference to `variable`. | -| `ReturnRefOfCopy(value)` | Return a reference to a copy of `value`; the copy lives as long as the action. | -| `ReturnRoundRobin({a1, ..., ak})` | Each call will return the next `ai` in the list, starting at the beginning when the end of the list is reached. | - -## Side Effects - -| Action | Description | -| :--------------------------------- | :-------------------------------------- | -| `Assign(&variable, value)` | Assign `value` to variable. | -| `DeleteArg()` | Delete the `N`-th (0-based) argument, which must be a pointer. | -| `SaveArg(pointer)` | Save the `N`-th (0-based) argument to `*pointer`. | -| `SaveArgPointee(pointer)` | Save the value pointed to by the `N`-th (0-based) argument to `*pointer`. | -| `SetArgReferee(value)` | Assign `value` to the variable referenced by the `N`-th (0-based) argument. | -| `SetArgPointee(value)` | Assign `value` to the variable pointed by the `N`-th (0-based) argument. | -| `SetArgumentPointee(value)` | Same as `SetArgPointee(value)`. Deprecated. Will be removed in v1.7.0. | -| `SetArrayArgument(first, last)` | Copies the elements in source range [`first`, `last`) to the array pointed to by the `N`-th (0-based) argument, which can be either a pointer or an iterator. The action does not take ownership of the elements in the source range. | -| `SetErrnoAndReturn(error, value)` | Set `errno` to `error` and return `value`. | -| `Throw(exception)` | Throws the given exception, which can be any copyable value. Available since v1.1.0. | - -## Using a Function, Functor, or Lambda as an Action - -In the following, by "callable" we mean a free function, `std::function`, -functor, or lambda. - -| Action | Description | -| :---------------------------------- | :------------------------------------- | -| `f` | Invoke `f` with the arguments passed to the mock function, where `f` is a callable. | -| `Invoke(f)` | Invoke `f` with the arguments passed to the mock function, where `f` can be a global/static function or a functor. | -| `Invoke(object_pointer, &class::method)` | Invoke the method on the object with the arguments passed to the mock function. | -| `InvokeWithoutArgs(f)` | Invoke `f`, which can be a global/static function or a functor. `f` must take no arguments. | -| `InvokeWithoutArgs(object_pointer, &class::method)` | Invoke the method on the object, which takes no arguments. | -| `InvokeArgument(arg1, arg2, ..., argk)` | Invoke the mock function's `N`-th (0-based) argument, which must be a function or a functor, with the `k` arguments. | - -The return value of the invoked function is used as the return value of the -action. - -When defining a callable to be used with `Invoke*()`, you can declare any unused -parameters as `Unused`: - -```cpp -using ::testing::Invoke; -double Distance(Unused, double x, double y) { return sqrt(x*x + y*y); } -... -EXPECT_CALL(mock, Foo("Hi", _, _)).WillOnce(Invoke(Distance)); -``` - -`Invoke(callback)` and `InvokeWithoutArgs(callback)` take ownership of -`callback`, which must be permanent. The type of `callback` must be a base -callback type instead of a derived one, e.g. - -```cpp - BlockingClosure* done = new BlockingClosure; - ... Invoke(done) ...; // This won't compile! - - Closure* done2 = new BlockingClosure; - ... Invoke(done2) ...; // This works. -``` - -In `InvokeArgument(...)`, if an argument needs to be passed by reference, -wrap it inside `std::ref()`. For example, - -```cpp -using ::testing::InvokeArgument; -... -InvokeArgument<2>(5, string("Hi"), std::ref(foo)) -``` - -calls the mock function's #2 argument, passing to it `5` and `string("Hi")` by -value, and `foo` by reference. - -## Default Action - -| Action | Description | -| :------------ | :----------------------------------------------------- | -| `DoDefault()` | Do the default action (specified by `ON_CALL()` or the built-in one). | - -{: .callout .note} -**Note:** due to technical reasons, `DoDefault()` cannot be used inside a -composite action - trying to do so will result in a run-time error. - -## Composite Actions - -| Action | Description | -| :----------------------------- | :------------------------------------------ | -| `DoAll(a1, a2, ..., an)` | Do all actions `a1` to `an` and return the result of `an` in each invocation. The first `n - 1` sub-actions must return void and will receive a readonly view of the arguments. | -| `IgnoreResult(a)` | Perform action `a` and ignore its result. `a` must not return void. | -| `WithArg(a)` | Pass the `N`-th (0-based) argument of the mock function to action `a` and perform it. | -| `WithArgs(a)` | Pass the selected (0-based) arguments of the mock function to action `a` and perform it. | -| `WithoutArgs(a)` | Perform action `a` without any arguments. | - -## Defining Actions - -| Macro | Description | -| :--------------------------------- | :-------------------------------------- | -| `ACTION(Sum) { return arg0 + arg1; }` | Defines an action `Sum()` to return the sum of the mock function's argument #0 and #1. | -| `ACTION_P(Plus, n) { return arg0 + n; }` | Defines an action `Plus(n)` to return the sum of the mock function's argument #0 and `n`. | -| `ACTION_Pk(Foo, p1, ..., pk) { statements; }` | Defines a parameterized action `Foo(p1, ..., pk)` to execute the given `statements`. | - -The `ACTION*` macros cannot be used inside a function or class. diff --git a/tests/rocm_smi_test/gtest/docs/reference/assertions.md b/tests/rocm_smi_test/gtest/docs/reference/assertions.md deleted file mode 100644 index 7bf03a3dde..0000000000 --- a/tests/rocm_smi_test/gtest/docs/reference/assertions.md +++ /dev/null @@ -1,633 +0,0 @@ -# Assertions Reference - -This page lists the assertion macros provided by GoogleTest for verifying code -behavior. To use them, include the header `gtest/gtest.h`. - -The majority of the macros listed below come as a pair with an `EXPECT_` variant -and an `ASSERT_` variant. Upon failure, `EXPECT_` macros generate nonfatal -failures and allow the current function to continue running, while `ASSERT_` -macros generate fatal failures and abort the current function. - -All assertion macros support streaming a custom failure message into them with -the `<<` operator, for example: - -```cpp -EXPECT_TRUE(my_condition) << "My condition is not true"; -``` - -Anything that can be streamed to an `ostream` can be streamed to an assertion -macro—in particular, C strings and string objects. If a wide string (`wchar_t*`, -`TCHAR*` in `UNICODE` mode on Windows, or `std::wstring`) is streamed to an -assertion, it will be translated to UTF-8 when printed. - -## Explicit Success and Failure {#success-failure} - -The assertions in this section generate a success or failure directly instead of -testing a value or expression. These are useful when control flow, rather than a -Boolean expression, determines the test's success or failure, as shown by the -following example: - -```c++ -switch(expression) { - case 1: - ... some checks ... - case 2: - ... some other checks ... - default: - FAIL() << "We shouldn't get here."; -} -``` - -### SUCCEED {#SUCCEED} - -`SUCCEED()` - -Generates a success. This *does not* make the overall test succeed. A test is -considered successful only if none of its assertions fail during its execution. - -The `SUCCEED` assertion is purely documentary and currently doesn't generate any -user-visible output. However, we may add `SUCCEED` messages to GoogleTest output -in the future. - -### FAIL {#FAIL} - -`FAIL()` - -Generates a fatal failure, which returns from the current function. - -Can only be used in functions that return `void`. See -[Assertion Placement](../advanced.md#assertion-placement) for more information. - -### ADD_FAILURE {#ADD_FAILURE} - -`ADD_FAILURE()` - -Generates a nonfatal failure, which allows the current function to continue -running. - -### ADD_FAILURE_AT {#ADD_FAILURE_AT} - -`ADD_FAILURE_AT(`*`file_path`*`,`*`line_number`*`)` - -Generates a nonfatal failure at the file and line number specified. - -## Generalized Assertion {#generalized} - -The following assertion allows [matchers](matchers.md) to be used to verify -values. - -### EXPECT_THAT {#EXPECT_THAT} - -`EXPECT_THAT(`*`value`*`,`*`matcher`*`)` \ -`ASSERT_THAT(`*`value`*`,`*`matcher`*`)` - -Verifies that *`value`* matches the [matcher](matchers.md) *`matcher`*. - -For example, the following code verifies that the string `value1` starts with -`"Hello"`, `value2` matches a regular expression, and `value3` is between 5 and -10: - -```cpp -#include "gmock/gmock.h" - -using ::testing::AllOf; -using ::testing::Gt; -using ::testing::Lt; -using ::testing::MatchesRegex; -using ::testing::StartsWith; - -... -EXPECT_THAT(value1, StartsWith("Hello")); -EXPECT_THAT(value2, MatchesRegex("Line \\d+")); -ASSERT_THAT(value3, AllOf(Gt(5), Lt(10))); -``` - -Matchers enable assertions of this form to read like English and generate -informative failure messages. For example, if the above assertion on `value1` -fails, the resulting message will be similar to the following: - -``` -Value of: value1 - Actual: "Hi, world!" -Expected: starts with "Hello" -``` - -GoogleTest provides a built-in library of matchers—see the -[Matchers Reference](matchers.md). It is also possible to write your own -matchers—see [Writing New Matchers Quickly](../gmock_cook_book.md#NewMatchers). -The use of matchers makes `EXPECT_THAT` a powerful, extensible assertion. - -*The idea for this assertion was borrowed from Joe Walnes' Hamcrest project, -which adds `assertThat()` to JUnit.* - -## Boolean Conditions {#boolean} - -The following assertions test Boolean conditions. - -### EXPECT_TRUE {#EXPECT_TRUE} - -`EXPECT_TRUE(`*`condition`*`)` \ -`ASSERT_TRUE(`*`condition`*`)` - -Verifies that *`condition`* is true. - -### EXPECT_FALSE {#EXPECT_FALSE} - -`EXPECT_FALSE(`*`condition`*`)` \ -`ASSERT_FALSE(`*`condition`*`)` - -Verifies that *`condition`* is false. - -## Binary Comparison {#binary-comparison} - -The following assertions compare two values. The value arguments must be -comparable by the assertion's comparison operator, otherwise a compiler error -will result. - -If an argument supports the `<<` operator, it will be called to print the -argument when the assertion fails. Otherwise, GoogleTest will attempt to print -them in the best way it can—see -[Teaching GoogleTest How to Print Your Values](../advanced.md#teaching-googletest-how-to-print-your-values). - -Arguments are always evaluated exactly once, so it's OK for the arguments to -have side effects. However, the argument evaluation order is undefined and -programs should not depend on any particular argument evaluation order. - -These assertions work with both narrow and wide string objects (`string` and -`wstring`). - -See also the [Floating-Point Comparison](#floating-point) assertions to compare -floating-point numbers and avoid problems caused by rounding. - -### EXPECT_EQ {#EXPECT_EQ} - -`EXPECT_EQ(`*`val1`*`,`*`val2`*`)` \ -`ASSERT_EQ(`*`val1`*`,`*`val2`*`)` - -Verifies that *`val1`*`==`*`val2`*. - -Does pointer equality on pointers. If used on two C strings, it tests if they -are in the same memory location, not if they have the same value. Use -[`EXPECT_STREQ`](#EXPECT_STREQ) to compare C strings (e.g. `const char*`) by -value. - -When comparing a pointer to `NULL`, use `EXPECT_EQ(`*`ptr`*`, nullptr)` instead -of `EXPECT_EQ(`*`ptr`*`, NULL)`. - -### EXPECT_NE {#EXPECT_NE} - -`EXPECT_NE(`*`val1`*`,`*`val2`*`)` \ -`ASSERT_NE(`*`val1`*`,`*`val2`*`)` - -Verifies that *`val1`*`!=`*`val2`*. - -Does pointer equality on pointers. If used on two C strings, it tests if they -are in different memory locations, not if they have different values. Use -[`EXPECT_STRNE`](#EXPECT_STRNE) to compare C strings (e.g. `const char*`) by -value. - -When comparing a pointer to `NULL`, use `EXPECT_NE(`*`ptr`*`, nullptr)` instead -of `EXPECT_NE(`*`ptr`*`, NULL)`. - -### EXPECT_LT {#EXPECT_LT} - -`EXPECT_LT(`*`val1`*`,`*`val2`*`)` \ -`ASSERT_LT(`*`val1`*`,`*`val2`*`)` - -Verifies that *`val1`*`<`*`val2`*. - -### EXPECT_LE {#EXPECT_LE} - -`EXPECT_LE(`*`val1`*`,`*`val2`*`)` \ -`ASSERT_LE(`*`val1`*`,`*`val2`*`)` - -Verifies that *`val1`*`<=`*`val2`*. - -### EXPECT_GT {#EXPECT_GT} - -`EXPECT_GT(`*`val1`*`,`*`val2`*`)` \ -`ASSERT_GT(`*`val1`*`,`*`val2`*`)` - -Verifies that *`val1`*`>`*`val2`*. - -### EXPECT_GE {#EXPECT_GE} - -`EXPECT_GE(`*`val1`*`,`*`val2`*`)` \ -`ASSERT_GE(`*`val1`*`,`*`val2`*`)` - -Verifies that *`val1`*`>=`*`val2`*. - -## String Comparison {#c-strings} - -The following assertions compare two **C strings**. To compare two `string` -objects, use [`EXPECT_EQ`](#EXPECT_EQ) or [`EXPECT_NE`](#EXPECT_NE) instead. - -These assertions also accept wide C strings (`wchar_t*`). If a comparison of two -wide strings fails, their values will be printed as UTF-8 narrow strings. - -To compare a C string with `NULL`, use `EXPECT_EQ(`*`c_string`*`, nullptr)` or -`EXPECT_NE(`*`c_string`*`, nullptr)`. - -### EXPECT_STREQ {#EXPECT_STREQ} - -`EXPECT_STREQ(`*`str1`*`,`*`str2`*`)` \ -`ASSERT_STREQ(`*`str1`*`,`*`str2`*`)` - -Verifies that the two C strings *`str1`* and *`str2`* have the same contents. - -### EXPECT_STRNE {#EXPECT_STRNE} - -`EXPECT_STRNE(`*`str1`*`,`*`str2`*`)` \ -`ASSERT_STRNE(`*`str1`*`,`*`str2`*`)` - -Verifies that the two C strings *`str1`* and *`str2`* have different contents. - -### EXPECT_STRCASEEQ {#EXPECT_STRCASEEQ} - -`EXPECT_STRCASEEQ(`*`str1`*`,`*`str2`*`)` \ -`ASSERT_STRCASEEQ(`*`str1`*`,`*`str2`*`)` - -Verifies that the two C strings *`str1`* and *`str2`* have the same contents, -ignoring case. - -### EXPECT_STRCASENE {#EXPECT_STRCASENE} - -`EXPECT_STRCASENE(`*`str1`*`,`*`str2`*`)` \ -`ASSERT_STRCASENE(`*`str1`*`,`*`str2`*`)` - -Verifies that the two C strings *`str1`* and *`str2`* have different contents, -ignoring case. - -## Floating-Point Comparison {#floating-point} - -The following assertions compare two floating-point values. - -Due to rounding errors, it is very unlikely that two floating-point values will -match exactly, so `EXPECT_EQ` is not suitable. In general, for floating-point -comparison to make sense, the user needs to carefully choose the error bound. - -GoogleTest also provides assertions that use a default error bound based on -Units in the Last Place (ULPs). To learn more about ULPs, see the article -[Comparing Floating Point Numbers](https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/). - -### EXPECT_FLOAT_EQ {#EXPECT_FLOAT_EQ} - -`EXPECT_FLOAT_EQ(`*`val1`*`,`*`val2`*`)` \ -`ASSERT_FLOAT_EQ(`*`val1`*`,`*`val2`*`)` - -Verifies that the two `float` values *`val1`* and *`val2`* are approximately -equal, to within 4 ULPs from each other. - -### EXPECT_DOUBLE_EQ {#EXPECT_DOUBLE_EQ} - -`EXPECT_DOUBLE_EQ(`*`val1`*`,`*`val2`*`)` \ -`ASSERT_DOUBLE_EQ(`*`val1`*`,`*`val2`*`)` - -Verifies that the two `double` values *`val1`* and *`val2`* are approximately -equal, to within 4 ULPs from each other. - -### EXPECT_NEAR {#EXPECT_NEAR} - -`EXPECT_NEAR(`*`val1`*`,`*`val2`*`,`*`abs_error`*`)` \ -`ASSERT_NEAR(`*`val1`*`,`*`val2`*`,`*`abs_error`*`)` - -Verifies that the difference between *`val1`* and *`val2`* does not exceed the -absolute error bound *`abs_error`*. - -## Exception Assertions {#exceptions} - -The following assertions verify that a piece of code throws, or does not throw, -an exception. Usage requires exceptions to be enabled in the build environment. - -Note that the piece of code under test can be a compound statement, for example: - -```cpp -EXPECT_NO_THROW({ - int n = 5; - DoSomething(&n); -}); -``` - -### EXPECT_THROW {#EXPECT_THROW} - -`EXPECT_THROW(`*`statement`*`,`*`exception_type`*`)` \ -`ASSERT_THROW(`*`statement`*`,`*`exception_type`*`)` - -Verifies that *`statement`* throws an exception of type *`exception_type`*. - -### EXPECT_ANY_THROW {#EXPECT_ANY_THROW} - -`EXPECT_ANY_THROW(`*`statement`*`)` \ -`ASSERT_ANY_THROW(`*`statement`*`)` - -Verifies that *`statement`* throws an exception of any type. - -### EXPECT_NO_THROW {#EXPECT_NO_THROW} - -`EXPECT_NO_THROW(`*`statement`*`)` \ -`ASSERT_NO_THROW(`*`statement`*`)` - -Verifies that *`statement`* does not throw any exception. - -## Predicate Assertions {#predicates} - -The following assertions enable more complex predicates to be verified while -printing a more clear failure message than if `EXPECT_TRUE` were used alone. - -### EXPECT_PRED* {#EXPECT_PRED} - -`EXPECT_PRED1(`*`pred`*`,`*`val1`*`)` \ -`EXPECT_PRED2(`*`pred`*`,`*`val1`*`,`*`val2`*`)` \ -`EXPECT_PRED3(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`)` \ -`EXPECT_PRED4(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`)` \ -`EXPECT_PRED5(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`,`*`val5`*`)` - -`ASSERT_PRED1(`*`pred`*`,`*`val1`*`)` \ -`ASSERT_PRED2(`*`pred`*`,`*`val1`*`,`*`val2`*`)` \ -`ASSERT_PRED3(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`)` \ -`ASSERT_PRED4(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`)` \ -`ASSERT_PRED5(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`,`*`val5`*`)` - -Verifies that the predicate *`pred`* returns `true` when passed the given values -as arguments. - -The parameter *`pred`* is a function or functor that accepts as many arguments -as the corresponding macro accepts values. If *`pred`* returns `true` for the -given arguments, the assertion succeeds, otherwise the assertion fails. - -When the assertion fails, it prints the value of each argument. Arguments are -always evaluated exactly once. - -As an example, see the following code: - -```cpp -// Returns true if m and n have no common divisors except 1. -bool MutuallyPrime(int m, int n) { ... } -... -const int a = 3; -const int b = 4; -const int c = 10; -... -EXPECT_PRED2(MutuallyPrime, a, b); // Succeeds -EXPECT_PRED2(MutuallyPrime, b, c); // Fails -``` - -In the above example, the first assertion succeeds, and the second fails with -the following message: - -``` -MutuallyPrime(b, c) is false, where -b is 4 -c is 10 -``` - -Note that if the given predicate is an overloaded function or a function -template, the assertion macro might not be able to determine which version to -use, and it might be necessary to explicitly specify the type of the function. -For example, for a Boolean function `IsPositive()` overloaded to take either a -single `int` or `double` argument, it would be necessary to write one of the -following: - -```cpp -EXPECT_PRED1(static_cast(IsPositive), 5); -EXPECT_PRED1(static_cast(IsPositive), 3.14); -``` - -Writing simply `EXPECT_PRED1(IsPositive, 5);` would result in a compiler error. -Similarly, to use a template function, specify the template arguments: - -```cpp -template -bool IsNegative(T x) { - return x < 0; -} -... -EXPECT_PRED1(IsNegative, -5); // Must specify type for IsNegative -``` - -If a template has multiple parameters, wrap the predicate in parentheses so the -macro arguments are parsed correctly: - -```cpp -ASSERT_PRED2((MyPredicate), 5, 0); -``` - -### EXPECT_PRED_FORMAT* {#EXPECT_PRED_FORMAT} - -`EXPECT_PRED_FORMAT1(`*`pred_formatter`*`,`*`val1`*`)` \ -`EXPECT_PRED_FORMAT2(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`)` \ -`EXPECT_PRED_FORMAT3(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`)` \ -`EXPECT_PRED_FORMAT4(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`)` -\ -`EXPECT_PRED_FORMAT5(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`,`*`val5`*`)` - -`ASSERT_PRED_FORMAT1(`*`pred_formatter`*`,`*`val1`*`)` \ -`ASSERT_PRED_FORMAT2(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`)` \ -`ASSERT_PRED_FORMAT3(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`)` \ -`ASSERT_PRED_FORMAT4(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`)` -\ -`ASSERT_PRED_FORMAT5(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`,`*`val5`*`)` - -Verifies that the predicate *`pred_formatter`* succeeds when passed the given -values as arguments. - -The parameter *`pred_formatter`* is a *predicate-formatter*, which is a function -or functor with the signature: - -```cpp -testing::AssertionResult PredicateFormatter(const char* expr1, - const char* expr2, - ... - const char* exprn, - T1 val1, - T2 val2, - ... - Tn valn); -``` - -where *`val1`*, *`val2`*, ..., *`valn`* are the values of the predicate -arguments, and *`expr1`*, *`expr2`*, ..., *`exprn`* are the corresponding -expressions as they appear in the source code. The types `T1`, `T2`, ..., `Tn` -can be either value types or reference types; if an argument has type `T`, it -can be declared as either `T` or `const T&`, whichever is appropriate. For more -about the return type `testing::AssertionResult`, see -[Using a Function That Returns an AssertionResult](../advanced.md#using-a-function-that-returns-an-assertionresult). - -As an example, see the following code: - -```cpp -// Returns the smallest prime common divisor of m and n, -// or 1 when m and n are mutually prime. -int SmallestPrimeCommonDivisor(int m, int n) { ... } - -// Returns true if m and n have no common divisors except 1. -bool MutuallyPrime(int m, int n) { ... } - -// A predicate-formatter for asserting that two integers are mutually prime. -testing::AssertionResult AssertMutuallyPrime(const char* m_expr, - const char* n_expr, - int m, - int n) { - if (MutuallyPrime(m, n)) return testing::AssertionSuccess(); - - return testing::AssertionFailure() << m_expr << " and " << n_expr - << " (" << m << " and " << n << ") are not mutually prime, " - << "as they have a common divisor " << SmallestPrimeCommonDivisor(m, n); -} - -... -const int a = 3; -const int b = 4; -const int c = 10; -... -EXPECT_PRED_FORMAT2(AssertMutuallyPrime, a, b); // Succeeds -EXPECT_PRED_FORMAT2(AssertMutuallyPrime, b, c); // Fails -``` - -In the above example, the final assertion fails and the predicate-formatter -produces the following failure message: - -``` -b and c (4 and 10) are not mutually prime, as they have a common divisor 2 -``` - -## Windows HRESULT Assertions {#HRESULT} - -The following assertions test for `HRESULT` success or failure. For example: - -```cpp -CComPtr shell; -ASSERT_HRESULT_SUCCEEDED(shell.CoCreateInstance(L"Shell.Application")); -CComVariant empty; -ASSERT_HRESULT_SUCCEEDED(shell->ShellExecute(CComBSTR(url), empty, empty, empty, empty)); -``` - -The generated output contains the human-readable error message associated with -the returned `HRESULT` code. - -### EXPECT_HRESULT_SUCCEEDED {#EXPECT_HRESULT_SUCCEEDED} - -`EXPECT_HRESULT_SUCCEEDED(`*`expression`*`)` \ -`ASSERT_HRESULT_SUCCEEDED(`*`expression`*`)` - -Verifies that *`expression`* is a success `HRESULT`. - -### EXPECT_HRESULT_FAILED {#EXPECT_HRESULT_FAILED} - -`EXPECT_HRESULT_FAILED(`*`expression`*`)` \ -`EXPECT_HRESULT_FAILED(`*`expression`*`)` - -Verifies that *`expression`* is a failure `HRESULT`. - -## Death Assertions {#death} - -The following assertions verify that a piece of code causes the process to -terminate. For context, see [Death Tests](../advanced.md#death-tests). - -These assertions spawn a new process and execute the code under test in that -process. How that happens depends on the platform and the variable -`::testing::GTEST_FLAG(death_test_style)`, which is initialized from the -command-line flag `--gtest_death_test_style`. - -* On POSIX systems, `fork()` (or `clone()` on Linux) is used to spawn the - child, after which: - * If the variable's value is `"fast"`, the death test statement is - immediately executed. - * If the variable's value is `"threadsafe"`, the child process re-executes - the unit test binary just as it was originally invoked, but with some - extra flags to cause just the single death test under consideration to - be run. -* On Windows, the child is spawned using the `CreateProcess()` API, and - re-executes the binary to cause just the single death test under - consideration to be run - much like the `"threadsafe"` mode on POSIX. - -Other values for the variable are illegal and will cause the death test to fail. -Currently, the flag's default value is -**`"fast"`**. - -If the death test statement runs to completion without dying, the child process -will nonetheless terminate, and the assertion fails. - -Note that the piece of code under test can be a compound statement, for example: - -```cpp -EXPECT_DEATH({ - int n = 5; - DoSomething(&n); -}, "Error on line .* of DoSomething()"); -``` - -### EXPECT_DEATH {#EXPECT_DEATH} - -`EXPECT_DEATH(`*`statement`*`,`*`matcher`*`)` \ -`ASSERT_DEATH(`*`statement`*`,`*`matcher`*`)` - -Verifies that *`statement`* causes the process to terminate with a nonzero exit -status and produces `stderr` output that matches *`matcher`*. - -The parameter *`matcher`* is either a [matcher](matchers.md) for a `const -std::string&`, or a regular expression (see -[Regular Expression Syntax](../advanced.md#regular-expression-syntax))—a bare -string *`s`* (with no matcher) is treated as -[`ContainsRegex(s)`](matchers.md#string-matchers), **not** -[`Eq(s)`](matchers.md#generic-comparison). - -For example, the following code verifies that calling `DoSomething(42)` causes -the process to die with an error message that contains the text `My error`: - -```cpp -EXPECT_DEATH(DoSomething(42), "My error"); -``` - -### EXPECT_DEATH_IF_SUPPORTED {#EXPECT_DEATH_IF_SUPPORTED} - -`EXPECT_DEATH_IF_SUPPORTED(`*`statement`*`,`*`matcher`*`)` \ -`ASSERT_DEATH_IF_SUPPORTED(`*`statement`*`,`*`matcher`*`)` - -If death tests are supported, behaves the same as -[`EXPECT_DEATH`](#EXPECT_DEATH). Otherwise, verifies nothing. - -### EXPECT_DEBUG_DEATH {#EXPECT_DEBUG_DEATH} - -`EXPECT_DEBUG_DEATH(`*`statement`*`,`*`matcher`*`)` \ -`ASSERT_DEBUG_DEATH(`*`statement`*`,`*`matcher`*`)` - -In debug mode, behaves the same as [`EXPECT_DEATH`](#EXPECT_DEATH). When not in -debug mode (i.e. `NDEBUG` is defined), just executes *`statement`*. - -### EXPECT_EXIT {#EXPECT_EXIT} - -`EXPECT_EXIT(`*`statement`*`,`*`predicate`*`,`*`matcher`*`)` \ -`ASSERT_EXIT(`*`statement`*`,`*`predicate`*`,`*`matcher`*`)` - -Verifies that *`statement`* causes the process to terminate with an exit status -that satisfies *`predicate`*, and produces `stderr` output that matches -*`matcher`*. - -The parameter *`predicate`* is a function or functor that accepts an `int` exit -status and returns a `bool`. GoogleTest provides two predicates to handle common -cases: - -```cpp -// Returns true if the program exited normally with the given exit status code. -::testing::ExitedWithCode(exit_code); - -// Returns true if the program was killed by the given signal. -// Not available on Windows. -::testing::KilledBySignal(signal_number); -``` - -The parameter *`matcher`* is either a [matcher](matchers.md) for a `const -std::string&`, or a regular expression (see -[Regular Expression Syntax](../advanced.md#regular-expression-syntax))—a bare -string *`s`* (with no matcher) is treated as -[`ContainsRegex(s)`](matchers.md#string-matchers), **not** -[`Eq(s)`](matchers.md#generic-comparison). - -For example, the following code verifies that calling `NormalExit()` causes the -process to print a message containing the text `Success` to `stderr` and exit -with exit status code 0: - -```cpp -EXPECT_EXIT(NormalExit(), testing::ExitedWithCode(0), "Success"); -``` diff --git a/tests/rocm_smi_test/gtest/docs/reference/matchers.md b/tests/rocm_smi_test/gtest/docs/reference/matchers.md deleted file mode 100644 index 0f57db4718..0000000000 --- a/tests/rocm_smi_test/gtest/docs/reference/matchers.md +++ /dev/null @@ -1,286 +0,0 @@ -# Matchers Reference - -A **matcher** matches a *single* argument. You can use it inside `ON_CALL()` or -`EXPECT_CALL()`, or use it to validate a value directly using two macros: - -| Macro | Description | -| :----------------------------------- | :------------------------------------ | -| `EXPECT_THAT(actual_value, matcher)` | Asserts that `actual_value` matches `matcher`. | -| `ASSERT_THAT(actual_value, matcher)` | The same as `EXPECT_THAT(actual_value, matcher)`, except that it generates a **fatal** failure. | - -{: .callout .note} -**Note:** Although equality matching via `EXPECT_THAT(actual_value, -expected_value)` is supported, prefer to make the comparison explicit via -`EXPECT_THAT(actual_value, Eq(expected_value))` or `EXPECT_EQ(actual_value, -expected_value)`. - -Built-in matchers (where `argument` is the function argument, e.g. -`actual_value` in the example above, or when used in the context of -`EXPECT_CALL(mock_object, method(matchers))`, the arguments of `method`) are -divided into several categories. All matchers are defined in the `::testing` -namespace unless otherwise noted. - -## Wildcard - -Matcher | Description -:-------------------------- | :----------------------------------------------- -`_` | `argument` can be any value of the correct type. -`A()` or `An()` | `argument` can be any value of type `type`. - -## Generic Comparison - -| Matcher | Description | -| :--------------------- | :-------------------------------------------------- | -| `Eq(value)` or `value` | `argument == value` | -| `Ge(value)` | `argument >= value` | -| `Gt(value)` | `argument > value` | -| `Le(value)` | `argument <= value` | -| `Lt(value)` | `argument < value` | -| `Ne(value)` | `argument != value` | -| `IsFalse()` | `argument` evaluates to `false` in a Boolean context. | -| `IsTrue()` | `argument` evaluates to `true` in a Boolean context. | -| `IsNull()` | `argument` is a `NULL` pointer (raw or smart). | -| `NotNull()` | `argument` is a non-null pointer (raw or smart). | -| `Optional(m)` | `argument` is `optional<>` that contains a value matching `m`. (For testing whether an `optional<>` is set, check for equality with `nullopt`. You may need to use `Eq(nullopt)` if the inner type doesn't have `==`.)| -| `VariantWith(m)` | `argument` is `variant<>` that holds the alternative of type T with a value matching `m`. | -| `Ref(variable)` | `argument` is a reference to `variable`. | -| `TypedEq(value)` | `argument` has type `type` and is equal to `value`. You may need to use this instead of `Eq(value)` when the mock function is overloaded. | - -Except `Ref()`, these matchers make a *copy* of `value` in case it's modified or -destructed later. If the compiler complains that `value` doesn't have a public -copy constructor, try wrap it in `std::ref()`, e.g. -`Eq(std::ref(non_copyable_value))`. If you do that, make sure -`non_copyable_value` is not changed afterwards, or the meaning of your matcher -will be changed. - -`IsTrue` and `IsFalse` are useful when you need to use a matcher, or for types -that can be explicitly converted to Boolean, but are not implicitly converted to -Boolean. In other cases, you can use the basic -[`EXPECT_TRUE` and `EXPECT_FALSE`](assertions.md#boolean) assertions. - -## Floating-Point Matchers {#FpMatchers} - -| Matcher | Description | -| :------------------------------- | :--------------------------------- | -| `DoubleEq(a_double)` | `argument` is a `double` value approximately equal to `a_double`, treating two NaNs as unequal. | -| `FloatEq(a_float)` | `argument` is a `float` value approximately equal to `a_float`, treating two NaNs as unequal. | -| `NanSensitiveDoubleEq(a_double)` | `argument` is a `double` value approximately equal to `a_double`, treating two NaNs as equal. | -| `NanSensitiveFloatEq(a_float)` | `argument` is a `float` value approximately equal to `a_float`, treating two NaNs as equal. | -| `IsNan()` | `argument` is any floating-point type with a NaN value. | - -The above matchers use ULP-based comparison (the same as used in googletest). -They automatically pick a reasonable error bound based on the absolute value of -the expected value. `DoubleEq()` and `FloatEq()` conform to the IEEE standard, -which requires comparing two NaNs for equality to return false. The -`NanSensitive*` version instead treats two NaNs as equal, which is often what a -user wants. - -| Matcher | Description | -| :------------------------------------------------ | :----------------------- | -| `DoubleNear(a_double, max_abs_error)` | `argument` is a `double` value close to `a_double` (absolute error <= `max_abs_error`), treating two NaNs as unequal. | -| `FloatNear(a_float, max_abs_error)` | `argument` is a `float` value close to `a_float` (absolute error <= `max_abs_error`), treating two NaNs as unequal. | -| `NanSensitiveDoubleNear(a_double, max_abs_error)` | `argument` is a `double` value close to `a_double` (absolute error <= `max_abs_error`), treating two NaNs as equal. | -| `NanSensitiveFloatNear(a_float, max_abs_error)` | `argument` is a `float` value close to `a_float` (absolute error <= `max_abs_error`), treating two NaNs as equal. | - -## String Matchers - -The `argument` can be either a C string or a C++ string object: - -| Matcher | Description | -| :---------------------- | :------------------------------------------------- | -| `ContainsRegex(string)` | `argument` matches the given regular expression. | -| `EndsWith(suffix)` | `argument` ends with string `suffix`. | -| `HasSubstr(string)` | `argument` contains `string` as a sub-string. | -| `IsEmpty()` | `argument` is an empty string. | -| `MatchesRegex(string)` | `argument` matches the given regular expression with the match starting at the first character and ending at the last character. | -| `StartsWith(prefix)` | `argument` starts with string `prefix`. | -| `StrCaseEq(string)` | `argument` is equal to `string`, ignoring case. | -| `StrCaseNe(string)` | `argument` is not equal to `string`, ignoring case. | -| `StrEq(string)` | `argument` is equal to `string`. | -| `StrNe(string)` | `argument` is not equal to `string`. | -| `WhenBase64Unescaped(m)` | `argument` is a base-64 escaped string whose unescaped string matches `m`. | - -`ContainsRegex()` and `MatchesRegex()` take ownership of the `RE` object. They -use the regular expression syntax defined -[here](../advanced.md#regular-expression-syntax). All of these matchers, except -`ContainsRegex()` and `MatchesRegex()` work for wide strings as well. - -## Container Matchers - -Most STL-style containers support `==`, so you can use `Eq(expected_container)` -or simply `expected_container` to match a container exactly. If you want to -write the elements in-line, match them more flexibly, or get more informative -messages, you can use: - -| Matcher | Description | -| :---------------------------------------- | :------------------------------- | -| `BeginEndDistanceIs(m)` | `argument` is a container whose `begin()` and `end()` iterators are separated by a number of increments matching `m`. E.g. `BeginEndDistanceIs(2)` or `BeginEndDistanceIs(Lt(2))`. For containers that define a `size()` method, `SizeIs(m)` may be more efficient. | -| `ContainerEq(container)` | The same as `Eq(container)` except that the failure message also includes which elements are in one container but not the other. | -| `Contains(e)` | `argument` contains an element that matches `e`, which can be either a value or a matcher. | -| `Contains(e).Times(n)` | `argument` contains elements that match `e`, which can be either a value or a matcher, and the number of matches is `n`, which can be either a value or a matcher. Unlike the plain `Contains` and `Each` this allows to check for arbitrary occurrences including testing for absence with `Contains(e).Times(0)`. | -| `Each(e)` | `argument` is a container where *every* element matches `e`, which can be either a value or a matcher. | -| `ElementsAre(e0, e1, ..., en)` | `argument` has `n + 1` elements, where the *i*-th element matches `ei`, which can be a value or a matcher. | -| `ElementsAreArray({e0, e1, ..., en})`, `ElementsAreArray(a_container)`, `ElementsAreArray(begin, end)`, `ElementsAreArray(array)`, or `ElementsAreArray(array, count)` | The same as `ElementsAre()` except that the expected element values/matchers come from an initializer list, STL-style container, iterator range, or C-style array. | -| `IsEmpty()` | `argument` is an empty container (`container.empty()`). | -| `IsSubsetOf({e0, e1, ..., en})`, `IsSubsetOf(a_container)`, `IsSubsetOf(begin, end)`, `IsSubsetOf(array)`, or `IsSubsetOf(array, count)` | `argument` matches `UnorderedElementsAre(x0, x1, ..., xk)` for some subset `{x0, x1, ..., xk}` of the expected matchers. | -| `IsSupersetOf({e0, e1, ..., en})`, `IsSupersetOf(a_container)`, `IsSupersetOf(begin, end)`, `IsSupersetOf(array)`, or `IsSupersetOf(array, count)` | Some subset of `argument` matches `UnorderedElementsAre(`expected matchers`)`. | -| `Pointwise(m, container)`, `Pointwise(m, {e0, e1, ..., en})` | `argument` contains the same number of elements as in `container`, and for all i, (the i-th element in `argument`, the i-th element in `container`) match `m`, which is a matcher on 2-tuples. E.g. `Pointwise(Le(), upper_bounds)` verifies that each element in `argument` doesn't exceed the corresponding element in `upper_bounds`. See more detail below. | -| `SizeIs(m)` | `argument` is a container whose size matches `m`. E.g. `SizeIs(2)` or `SizeIs(Lt(2))`. | -| `UnorderedElementsAre(e0, e1, ..., en)` | `argument` has `n + 1` elements, and under *some* permutation of the elements, each element matches an `ei` (for a different `i`), which can be a value or a matcher. | -| `UnorderedElementsAreArray({e0, e1, ..., en})`, `UnorderedElementsAreArray(a_container)`, `UnorderedElementsAreArray(begin, end)`, `UnorderedElementsAreArray(array)`, or `UnorderedElementsAreArray(array, count)` | The same as `UnorderedElementsAre()` except that the expected element values/matchers come from an initializer list, STL-style container, iterator range, or C-style array. | -| `UnorderedPointwise(m, container)`, `UnorderedPointwise(m, {e0, e1, ..., en})` | Like `Pointwise(m, container)`, but ignores the order of elements. | -| `WhenSorted(m)` | When `argument` is sorted using the `<` operator, it matches container matcher `m`. E.g. `WhenSorted(ElementsAre(1, 2, 3))` verifies that `argument` contains elements 1, 2, and 3, ignoring order. | -| `WhenSortedBy(comparator, m)` | The same as `WhenSorted(m)`, except that the given comparator instead of `<` is used to sort `argument`. E.g. `WhenSortedBy(std::greater(), ElementsAre(3, 2, 1))`. | - -**Notes:** - -* These matchers can also match: - 1. a native array passed by reference (e.g. in `Foo(const int (&a)[5])`), - and - 2. an array passed as a pointer and a count (e.g. in `Bar(const T* buffer, - int len)` -- see [Multi-argument Matchers](#MultiArgMatchers)). -* The array being matched may be multi-dimensional (i.e. its elements can be - arrays). -* `m` in `Pointwise(m, ...)` and `UnorderedPointwise(m, ...)` should be a - matcher for `::std::tuple` where `T` and `U` are the element type of - the actual container and the expected container, respectively. For example, - to compare two `Foo` containers where `Foo` doesn't support `operator==`, - one might write: - - ```cpp - MATCHER(FooEq, "") { - return std::get<0>(arg).Equals(std::get<1>(arg)); - } - ... - EXPECT_THAT(actual_foos, Pointwise(FooEq(), expected_foos)); - ``` - -## Member Matchers - -| Matcher | Description | -| :------------------------------ | :----------------------------------------- | -| `Field(&class::field, m)` | `argument.field` (or `argument->field` when `argument` is a plain pointer) matches matcher `m`, where `argument` is an object of type _class_. | -| `Field(field_name, &class::field, m)` | The same as the two-parameter version, but provides a better error message. | -| `Key(e)` | `argument.first` matches `e`, which can be either a value or a matcher. E.g. `Contains(Key(Le(5)))` can verify that a `map` contains a key `<= 5`. | -| `Pair(m1, m2)` | `argument` is an `std::pair` whose `first` field matches `m1` and `second` field matches `m2`. | -| `FieldsAre(m...)` | `argument` is a compatible object where each field matches piecewise with the matchers `m...`. A compatible object is any that supports the `std::tuple_size`+`get(obj)` protocol. In C++17 and up this also supports types compatible with structured bindings, like aggregates. | -| `Property(&class::property, m)` | `argument.property()` (or `argument->property()` when `argument` is a plain pointer) matches matcher `m`, where `argument` is an object of type _class_. The method `property()` must take no argument and be declared as `const`. | -| `Property(property_name, &class::property, m)` | The same as the two-parameter version, but provides a better error message. - -**Notes:** - -* You can use `FieldsAre()` to match any type that supports structured - bindings, such as `std::tuple`, `std::pair`, `std::array`, and aggregate - types. For example: - - ```cpp - std::tuple my_tuple{7, "hello world"}; - EXPECT_THAT(my_tuple, FieldsAre(Ge(0), HasSubstr("hello"))); - - struct MyStruct { - int value = 42; - std::string greeting = "aloha"; - }; - MyStruct s; - EXPECT_THAT(s, FieldsAre(42, "aloha")); - ``` - -* Don't use `Property()` against member functions that you do not own, because - taking addresses of functions is fragile and generally not part of the - contract of the function. - -## Matching the Result of a Function, Functor, or Callback - -| Matcher | Description | -| :--------------- | :------------------------------------------------ | -| `ResultOf(f, m)` | `f(argument)` matches matcher `m`, where `f` is a function or functor. | -| `ResultOf(result_description, f, m)` | The same as the two-parameter version, but provides a better error message. - -## Pointer Matchers - -| Matcher | Description | -| :------------------------ | :---------------------------------------------- | -| `Address(m)` | the result of `std::addressof(argument)` matches `m`. | -| `Pointee(m)` | `argument` (either a smart pointer or a raw pointer) points to a value that matches matcher `m`. | -| `Pointer(m)` | `argument` (either a smart pointer or a raw pointer) contains a pointer that matches `m`. `m` will match against the raw pointer regardless of the type of `argument`. | -| `WhenDynamicCastTo(m)` | when `argument` is passed through `dynamic_cast()`, it matches matcher `m`. | - -## Multi-argument Matchers {#MultiArgMatchers} - -Technically, all matchers match a *single* value. A "multi-argument" matcher is -just one that matches a *tuple*. The following matchers can be used to match a -tuple `(x, y)`: - -Matcher | Description -:------ | :---------- -`Eq()` | `x == y` -`Ge()` | `x >= y` -`Gt()` | `x > y` -`Le()` | `x <= y` -`Lt()` | `x < y` -`Ne()` | `x != y` - -You can use the following selectors to pick a subset of the arguments (or -reorder them) to participate in the matching: - -| Matcher | Description | -| :------------------------- | :---------------------------------------------- | -| `AllArgs(m)` | Equivalent to `m`. Useful as syntactic sugar in `.With(AllArgs(m))`. | -| `Args(m)` | The tuple of the `k` selected (using 0-based indices) arguments matches `m`, e.g. `Args<1, 2>(Eq())`. | - -## Composite Matchers - -You can make a matcher from one or more other matchers: - -| Matcher | Description | -| :------------------------------- | :-------------------------------------- | -| `AllOf(m1, m2, ..., mn)` | `argument` matches all of the matchers `m1` to `mn`. | -| `AllOfArray({m0, m1, ..., mn})`, `AllOfArray(a_container)`, `AllOfArray(begin, end)`, `AllOfArray(array)`, or `AllOfArray(array, count)` | The same as `AllOf()` except that the matchers come from an initializer list, STL-style container, iterator range, or C-style array. | -| `AnyOf(m1, m2, ..., mn)` | `argument` matches at least one of the matchers `m1` to `mn`. | -| `AnyOfArray({m0, m1, ..., mn})`, `AnyOfArray(a_container)`, `AnyOfArray(begin, end)`, `AnyOfArray(array)`, or `AnyOfArray(array, count)` | The same as `AnyOf()` except that the matchers come from an initializer list, STL-style container, iterator range, or C-style array. | -| `Not(m)` | `argument` doesn't match matcher `m`. | -| `Conditional(cond, m1, m2)` | Matches matcher `m1` if `cond` evaluates to true, else matches `m2`.| - -## Adapters for Matchers - -| Matcher | Description | -| :---------------------- | :------------------------------------ | -| `MatcherCast(m)` | casts matcher `m` to type `Matcher`. | -| `SafeMatcherCast(m)` | [safely casts](../gmock_cook_book.md#SafeMatcherCast) matcher `m` to type `Matcher`. | -| `Truly(predicate)` | `predicate(argument)` returns something considered by C++ to be true, where `predicate` is a function or functor. | - -`AddressSatisfies(callback)` and `Truly(callback)` take ownership of `callback`, -which must be a permanent callback. - -## Using Matchers as Predicates {#MatchersAsPredicatesCheat} - -| Matcher | Description | -| :---------------------------- | :------------------------------------------ | -| `Matches(m)(value)` | evaluates to `true` if `value` matches `m`. You can use `Matches(m)` alone as a unary functor. | -| `ExplainMatchResult(m, value, result_listener)` | evaluates to `true` if `value` matches `m`, explaining the result to `result_listener`. | -| `Value(value, m)` | evaluates to `true` if `value` matches `m`. | - -## Defining Matchers - -| Macro | Description | -| :----------------------------------- | :------------------------------------ | -| `MATCHER(IsEven, "") { return (arg % 2) == 0; }` | Defines a matcher `IsEven()` to match an even number. | -| `MATCHER_P(IsDivisibleBy, n, "") { *result_listener << "where the remainder is " << (arg % n); return (arg % n) == 0; }` | Defines a matcher `IsDivisibleBy(n)` to match a number divisible by `n`. | -| `MATCHER_P2(IsBetween, a, b, absl::StrCat(negation ? "isn't" : "is", " between ", PrintToString(a), " and ", PrintToString(b))) { return a <= arg && arg <= b; }` | Defines a matcher `IsBetween(a, b)` to match a value in the range [`a`, `b`]. | - -**Notes:** - -1. The `MATCHER*` macros cannot be used inside a function or class. -2. The matcher body must be *purely functional* (i.e. it cannot have any side - effect, and the result must not depend on anything other than the value - being matched and the matcher parameters). -3. You can use `PrintToString(x)` to convert a value `x` of any type to a - string. -4. You can use `ExplainMatchResult()` in a custom matcher to wrap another - matcher, for example: - - ```cpp - MATCHER_P(NestedPropertyMatches, matcher, "") { - return ExplainMatchResult(matcher, arg.nested().property(), result_listener); - } - ``` diff --git a/tests/rocm_smi_test/gtest/docs/reference/mocking.md b/tests/rocm_smi_test/gtest/docs/reference/mocking.md deleted file mode 100644 index c29f71603f..0000000000 --- a/tests/rocm_smi_test/gtest/docs/reference/mocking.md +++ /dev/null @@ -1,587 +0,0 @@ -# Mocking Reference - -This page lists the facilities provided by GoogleTest for creating and working -with mock objects. To use them, include the header -`gmock/gmock.h`. - -## Macros {#macros} - -GoogleTest defines the following macros for working with mocks. - -### MOCK_METHOD {#MOCK_METHOD} - -`MOCK_METHOD(`*`return_type`*`,`*`method_name`*`, (`*`args...`*`));` \ -`MOCK_METHOD(`*`return_type`*`,`*`method_name`*`, (`*`args...`*`), -(`*`specs...`*`));` - -Defines a mock method *`method_name`* with arguments `(`*`args...`*`)` and -return type *`return_type`* within a mock class. - -The parameters of `MOCK_METHOD` mirror the method declaration. The optional -fourth parameter *`specs...`* is a comma-separated list of qualifiers. The -following qualifiers are accepted: - -| Qualifier | Meaning | -| -------------------------- | -------------------------------------------- | -| `const` | Makes the mocked method a `const` method. Required if overriding a `const` method. | -| `override` | Marks the method with `override`. Recommended if overriding a `virtual` method. | -| `noexcept` | Marks the method with `noexcept`. Required if overriding a `noexcept` method. | -| `Calltype(`*`calltype`*`)` | Sets the call type for the method, for example `Calltype(STDMETHODCALLTYPE)`. Useful on Windows. | -| `ref(`*`qualifier`*`)` | Marks the method with the given reference qualifier, for example `ref(&)` or `ref(&&)`. Required if overriding a method that has a reference qualifier. | - -Note that commas in arguments prevent `MOCK_METHOD` from parsing the arguments -correctly if they are not appropriately surrounded by parentheses. See the -following example: - -```cpp -class MyMock { - public: - // The following 2 lines will not compile due to commas in the arguments: - MOCK_METHOD(std::pair, GetPair, ()); // Error! - MOCK_METHOD(bool, CheckMap, (std::map, bool)); // Error! - - // One solution - wrap arguments that contain commas in parentheses: - MOCK_METHOD((std::pair), GetPair, ()); - MOCK_METHOD(bool, CheckMap, ((std::map), bool)); - - // Another solution - use type aliases: - using BoolAndInt = std::pair; - MOCK_METHOD(BoolAndInt, GetPair, ()); - using MapIntDouble = std::map; - MOCK_METHOD(bool, CheckMap, (MapIntDouble, bool)); -}; -``` - -`MOCK_METHOD` must be used in the `public:` section of a mock class definition, -regardless of whether the method being mocked is `public`, `protected`, or -`private` in the base class. - -### EXPECT_CALL {#EXPECT_CALL} - -`EXPECT_CALL(`*`mock_object`*`,`*`method_name`*`(`*`matchers...`*`))` - -Creates an [expectation](../gmock_for_dummies.md#setting-expectations) that the -method *`method_name`* of the object *`mock_object`* is called with arguments -that match the given matchers *`matchers...`*. `EXPECT_CALL` must precede any -code that exercises the mock object. - -The parameter *`matchers...`* is a comma-separated list of -[matchers](../gmock_for_dummies.md#matchers-what-arguments-do-we-expect) that -correspond to each argument of the method *`method_name`*. The expectation will -apply only to calls of *`method_name`* whose arguments match all of the -matchers. If `(`*`matchers...`*`)` is omitted, the expectation behaves as if -each argument's matcher were a [wildcard matcher (`_`)](matchers.md#wildcard). -See the [Matchers Reference](matchers.md) for a list of all built-in matchers. - -The following chainable clauses can be used to modify the expectation, and they -must be used in the following order: - -```cpp -EXPECT_CALL(mock_object, method_name(matchers...)) - .With(multi_argument_matcher) // Can be used at most once - .Times(cardinality) // Can be used at most once - .InSequence(sequences...) // Can be used any number of times - .After(expectations...) // Can be used any number of times - .WillOnce(action) // Can be used any number of times - .WillRepeatedly(action) // Can be used at most once - .RetiresOnSaturation(); // Can be used at most once -``` - -See details for each modifier clause below. - -#### With {#EXPECT_CALL.With} - -`.With(`*`multi_argument_matcher`*`)` - -Restricts the expectation to apply only to mock function calls whose arguments -as a whole match the multi-argument matcher *`multi_argument_matcher`*. - -GoogleTest passes all of the arguments as one tuple into the matcher. The -parameter *`multi_argument_matcher`* must thus be a matcher of type -`Matcher>`, where `A1, ..., An` are the types of the -function arguments. - -For example, the following code sets the expectation that -`my_mock.SetPosition()` is called with any two arguments, the first argument -being less than the second: - -```cpp -using ::testing::_; -using ::testing::Lt; -... -EXPECT_CALL(my_mock, SetPosition(_, _)) - .With(Lt()); -``` - -GoogleTest provides some built-in matchers for 2-tuples, including the `Lt()` -matcher above. See [Multi-argument Matchers](matchers.md#MultiArgMatchers). - -The `With` clause can be used at most once on an expectation and must be the -first clause. - -#### Times {#EXPECT_CALL.Times} - -`.Times(`*`cardinality`*`)` - -Specifies how many times the mock function call is expected. - -The parameter *`cardinality`* represents the number of expected calls and can be -one of the following, all defined in the `::testing` namespace: - -| Cardinality | Meaning | -| ------------------- | --------------------------------------------------- | -| `AnyNumber()` | The function can be called any number of times. | -| `AtLeast(n)` | The function call is expected at least *n* times. | -| `AtMost(n)` | The function call is expected at most *n* times. | -| `Between(m, n)` | The function call is expected between *m* and *n* times, inclusive. | -| `Exactly(n)` or `n` | The function call is expected exactly *n* times. If *n* is 0, the call should never happen. | - -If the `Times` clause is omitted, GoogleTest infers the cardinality as follows: - -* If neither [`WillOnce`](#EXPECT_CALL.WillOnce) nor - [`WillRepeatedly`](#EXPECT_CALL.WillRepeatedly) are specified, the inferred - cardinality is `Times(1)`. -* If there are *n* `WillOnce` clauses and no `WillRepeatedly` clause, where - *n* >= 1, the inferred cardinality is `Times(n)`. -* If there are *n* `WillOnce` clauses and one `WillRepeatedly` clause, where - *n* >= 0, the inferred cardinality is `Times(AtLeast(n))`. - -The `Times` clause can be used at most once on an expectation. - -#### InSequence {#EXPECT_CALL.InSequence} - -`.InSequence(`*`sequences...`*`)` - -Specifies that the mock function call is expected in a certain sequence. - -The parameter *`sequences...`* is any number of [`Sequence`](#Sequence) objects. -Expected calls assigned to the same sequence are expected to occur in the order -the expectations are declared. - -For example, the following code sets the expectation that the `Reset()` method -of `my_mock` is called before both `GetSize()` and `Describe()`, and `GetSize()` -and `Describe()` can occur in any order relative to each other: - -```cpp -using ::testing::Sequence; -Sequence s1, s2; -... -EXPECT_CALL(my_mock, Reset()) - .InSequence(s1, s2); -EXPECT_CALL(my_mock, GetSize()) - .InSequence(s1); -EXPECT_CALL(my_mock, Describe()) - .InSequence(s2); -``` - -The `InSequence` clause can be used any number of times on an expectation. - -See also the [`InSequence` class](#InSequence). - -#### After {#EXPECT_CALL.After} - -`.After(`*`expectations...`*`)` - -Specifies that the mock function call is expected to occur after one or more -other calls. - -The parameter *`expectations...`* can be up to five -[`Expectation`](#Expectation) or [`ExpectationSet`](#ExpectationSet) objects. -The mock function call is expected to occur after all of the given expectations. - -For example, the following code sets the expectation that the `Describe()` -method of `my_mock` is called only after both `InitX()` and `InitY()` have been -called. - -```cpp -using ::testing::Expectation; -... -Expectation init_x = EXPECT_CALL(my_mock, InitX()); -Expectation init_y = EXPECT_CALL(my_mock, InitY()); -EXPECT_CALL(my_mock, Describe()) - .After(init_x, init_y); -``` - -The `ExpectationSet` object is helpful when the number of prerequisites for an -expectation is large or variable, for example: - -```cpp -using ::testing::ExpectationSet; -... -ExpectationSet all_inits; -// Collect all expectations of InitElement() calls -for (int i = 0; i < element_count; i++) { - all_inits += EXPECT_CALL(my_mock, InitElement(i)); -} -EXPECT_CALL(my_mock, Describe()) - .After(all_inits); // Expect Describe() call after all InitElement() calls -``` - -The `After` clause can be used any number of times on an expectation. - -#### WillOnce {#EXPECT_CALL.WillOnce} - -`.WillOnce(`*`action`*`)` - -Specifies the mock function's actual behavior when invoked, for a single -matching function call. - -The parameter *`action`* represents the -[action](../gmock_for_dummies.md#actions-what-should-it-do) that the function -call will perform. See the [Actions Reference](actions.md) for a list of -built-in actions. - -The use of `WillOnce` implicitly sets a cardinality on the expectation when -`Times` is not specified. See [`Times`](#EXPECT_CALL.Times). - -Each matching function call will perform the next action in the order declared. -For example, the following code specifies that `my_mock.GetNumber()` is expected -to be called exactly 3 times and will return `1`, `2`, and `3` respectively on -the first, second, and third calls: - -```cpp -using ::testing::Return; -... -EXPECT_CALL(my_mock, GetNumber()) - .WillOnce(Return(1)) - .WillOnce(Return(2)) - .WillOnce(Return(3)); -``` - -The `WillOnce` clause can be used any number of times on an expectation. - -#### WillRepeatedly {#EXPECT_CALL.WillRepeatedly} - -`.WillRepeatedly(`*`action`*`)` - -Specifies the mock function's actual behavior when invoked, for all subsequent -matching function calls. Takes effect after the actions specified in the -[`WillOnce`](#EXPECT_CALL.WillOnce) clauses, if any, have been performed. - -The parameter *`action`* represents the -[action](../gmock_for_dummies.md#actions-what-should-it-do) that the function -call will perform. See the [Actions Reference](actions.md) for a list of -built-in actions. - -The use of `WillRepeatedly` implicitly sets a cardinality on the expectation -when `Times` is not specified. See [`Times`](#EXPECT_CALL.Times). - -If any `WillOnce` clauses have been specified, matching function calls will -perform those actions before the action specified by `WillRepeatedly`. See the -following example: - -```cpp -using ::testing::Return; -... -EXPECT_CALL(my_mock, GetName()) - .WillRepeatedly(Return("John Doe")); // Return "John Doe" on all calls - -EXPECT_CALL(my_mock, GetNumber()) - .WillOnce(Return(42)) // Return 42 on the first call - .WillRepeatedly(Return(7)); // Return 7 on all subsequent calls -``` - -The `WillRepeatedly` clause can be used at most once on an expectation. - -#### RetiresOnSaturation {#EXPECT_CALL.RetiresOnSaturation} - -`.RetiresOnSaturation()` - -Indicates that the expectation will no longer be active after the expected -number of matching function calls has been reached. - -The `RetiresOnSaturation` clause is only meaningful for expectations with an -upper-bounded cardinality. The expectation will *retire* (no longer match any -function calls) after it has been *saturated* (the upper bound has been -reached). See the following example: - -```cpp -using ::testing::_; -using ::testing::AnyNumber; -... -EXPECT_CALL(my_mock, SetNumber(_)) // Expectation 1 - .Times(AnyNumber()); -EXPECT_CALL(my_mock, SetNumber(7)) // Expectation 2 - .Times(2) - .RetiresOnSaturation(); -``` - -In the above example, the first two calls to `my_mock.SetNumber(7)` match -expectation 2, which then becomes inactive and no longer matches any calls. A -third call to `my_mock.SetNumber(7)` would then match expectation 1. Without -`RetiresOnSaturation()` on expectation 2, a third call to `my_mock.SetNumber(7)` -would match expectation 2 again, producing a failure since the limit of 2 calls -was exceeded. - -The `RetiresOnSaturation` clause can be used at most once on an expectation and -must be the last clause. - -### ON_CALL {#ON_CALL} - -`ON_CALL(`*`mock_object`*`,`*`method_name`*`(`*`matchers...`*`))` - -Defines what happens when the method *`method_name`* of the object -*`mock_object`* is called with arguments that match the given matchers -*`matchers...`*. Requires a modifier clause to specify the method's behavior. -*Does not* set any expectations that the method will be called. - -The parameter *`matchers...`* is a comma-separated list of -[matchers](../gmock_for_dummies.md#matchers-what-arguments-do-we-expect) that -correspond to each argument of the method *`method_name`*. The `ON_CALL` -specification will apply only to calls of *`method_name`* whose arguments match -all of the matchers. If `(`*`matchers...`*`)` is omitted, the behavior is as if -each argument's matcher were a [wildcard matcher (`_`)](matchers.md#wildcard). -See the [Matchers Reference](matchers.md) for a list of all built-in matchers. - -The following chainable clauses can be used to set the method's behavior, and -they must be used in the following order: - -```cpp -ON_CALL(mock_object, method_name(matchers...)) - .With(multi_argument_matcher) // Can be used at most once - .WillByDefault(action); // Required -``` - -See details for each modifier clause below. - -#### With {#ON_CALL.With} - -`.With(`*`multi_argument_matcher`*`)` - -Restricts the specification to only mock function calls whose arguments as a -whole match the multi-argument matcher *`multi_argument_matcher`*. - -GoogleTest passes all of the arguments as one tuple into the matcher. The -parameter *`multi_argument_matcher`* must thus be a matcher of type -`Matcher>`, where `A1, ..., An` are the types of the -function arguments. - -For example, the following code sets the default behavior when -`my_mock.SetPosition()` is called with any two arguments, the first argument -being less than the second: - -```cpp -using ::testing::_; -using ::testing::Lt; -using ::testing::Return; -... -ON_CALL(my_mock, SetPosition(_, _)) - .With(Lt()) - .WillByDefault(Return(true)); -``` - -GoogleTest provides some built-in matchers for 2-tuples, including the `Lt()` -matcher above. See [Multi-argument Matchers](matchers.md#MultiArgMatchers). - -The `With` clause can be used at most once with each `ON_CALL` statement. - -#### WillByDefault {#ON_CALL.WillByDefault} - -`.WillByDefault(`*`action`*`)` - -Specifies the default behavior of a matching mock function call. - -The parameter *`action`* represents the -[action](../gmock_for_dummies.md#actions-what-should-it-do) that the function -call will perform. See the [Actions Reference](actions.md) for a list of -built-in actions. - -For example, the following code specifies that by default, a call to -`my_mock.Greet()` will return `"hello"`: - -```cpp -using ::testing::Return; -... -ON_CALL(my_mock, Greet()) - .WillByDefault(Return("hello")); -``` - -The action specified by `WillByDefault` is superseded by the actions specified -on a matching `EXPECT_CALL` statement, if any. See the -[`WillOnce`](#EXPECT_CALL.WillOnce) and -[`WillRepeatedly`](#EXPECT_CALL.WillRepeatedly) clauses of `EXPECT_CALL`. - -The `WillByDefault` clause must be used exactly once with each `ON_CALL` -statement. - -## Classes {#classes} - -GoogleTest defines the following classes for working with mocks. - -### DefaultValue {#DefaultValue} - -`::testing::DefaultValue` - -Allows a user to specify the default value for a type `T` that is both copyable -and publicly destructible (i.e. anything that can be used as a function return -type). For mock functions with a return type of `T`, this default value is -returned from function calls that do not specify an action. - -Provides the static methods `Set()`, `SetFactory()`, and `Clear()` to manage the -default value: - -```cpp -// Sets the default value to be returned. T must be copy constructible. -DefaultValue::Set(value); - -// Sets a factory. Will be invoked on demand. T must be move constructible. -T MakeT(); -DefaultValue::SetFactory(&MakeT); - -// Unsets the default value. -DefaultValue::Clear(); -``` - -### NiceMock {#NiceMock} - -`::testing::NiceMock` - -Represents a mock object that suppresses warnings on -[uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The -template parameter `T` is any mock class, except for another `NiceMock`, -`NaggyMock`, or `StrictMock`. - -Usage of `NiceMock` is analogous to usage of `T`. `NiceMock` is a subclass -of `T`, so it can be used wherever an object of type `T` is accepted. In -addition, `NiceMock` can be constructed with any arguments that a constructor -of `T` accepts. - -For example, the following code suppresses warnings on the mock `my_mock` of -type `MockClass` if a method other than `DoSomething()` is called: - -```cpp -using ::testing::NiceMock; -... -NiceMock my_mock("some", "args"); -EXPECT_CALL(my_mock, DoSomething()); -... code that uses my_mock ... -``` - -`NiceMock` only works for mock methods defined using the `MOCK_METHOD` macro -directly in the definition of class `T`. If a mock method is defined in a base -class of `T`, a warning might still be generated. - -`NiceMock` might not work correctly if the destructor of `T` is not virtual. - -### NaggyMock {#NaggyMock} - -`::testing::NaggyMock` - -Represents a mock object that generates warnings on -[uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The -template parameter `T` is any mock class, except for another `NiceMock`, -`NaggyMock`, or `StrictMock`. - -Usage of `NaggyMock` is analogous to usage of `T`. `NaggyMock` is a -subclass of `T`, so it can be used wherever an object of type `T` is accepted. -In addition, `NaggyMock` can be constructed with any arguments that a -constructor of `T` accepts. - -For example, the following code generates warnings on the mock `my_mock` of type -`MockClass` if a method other than `DoSomething()` is called: - -```cpp -using ::testing::NaggyMock; -... -NaggyMock my_mock("some", "args"); -EXPECT_CALL(my_mock, DoSomething()); -... code that uses my_mock ... -``` - -Mock objects of type `T` by default behave the same way as `NaggyMock`. - -### StrictMock {#StrictMock} - -`::testing::StrictMock` - -Represents a mock object that generates test failures on -[uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The -template parameter `T` is any mock class, except for another `NiceMock`, -`NaggyMock`, or `StrictMock`. - -Usage of `StrictMock` is analogous to usage of `T`. `StrictMock` is a -subclass of `T`, so it can be used wherever an object of type `T` is accepted. -In addition, `StrictMock` can be constructed with any arguments that a -constructor of `T` accepts. - -For example, the following code generates a test failure on the mock `my_mock` -of type `MockClass` if a method other than `DoSomething()` is called: - -```cpp -using ::testing::StrictMock; -... -StrictMock my_mock("some", "args"); -EXPECT_CALL(my_mock, DoSomething()); -... code that uses my_mock ... -``` - -`StrictMock` only works for mock methods defined using the `MOCK_METHOD` -macro directly in the definition of class `T`. If a mock method is defined in a -base class of `T`, a failure might not be generated. - -`StrictMock` might not work correctly if the destructor of `T` is not -virtual. - -### Sequence {#Sequence} - -`::testing::Sequence` - -Represents a chronological sequence of expectations. See the -[`InSequence`](#EXPECT_CALL.InSequence) clause of `EXPECT_CALL` for usage. - -### InSequence {#InSequence} - -`::testing::InSequence` - -An object of this type causes all expectations encountered in its scope to be -put in an anonymous sequence. - -This allows more convenient expression of multiple expectations in a single -sequence: - -```cpp -using ::testing::InSequence; -{ - InSequence seq; - - // The following are expected to occur in the order declared. - EXPECT_CALL(...); - EXPECT_CALL(...); - ... - EXPECT_CALL(...); -} -``` - -The name of the `InSequence` object does not matter. - -### Expectation {#Expectation} - -`::testing::Expectation` - -Represents a mock function call expectation as created by -[`EXPECT_CALL`](#EXPECT_CALL): - -```cpp -using ::testing::Expectation; -Expectation my_expectation = EXPECT_CALL(...); -``` - -Useful for specifying sequences of expectations; see the -[`After`](#EXPECT_CALL.After) clause of `EXPECT_CALL`. - -### ExpectationSet {#ExpectationSet} - -`::testing::ExpectationSet` - -Represents a set of mock function call expectations. - -Use the `+=` operator to add [`Expectation`](#Expectation) objects to the set: - -```cpp -using ::testing::ExpectationSet; -ExpectationSet my_expectations; -my_expectations += EXPECT_CALL(...); -``` - -Useful for specifying sequences of expectations; see the -[`After`](#EXPECT_CALL.After) clause of `EXPECT_CALL`. diff --git a/tests/rocm_smi_test/gtest/docs/reference/testing.md b/tests/rocm_smi_test/gtest/docs/reference/testing.md deleted file mode 100644 index 554d6c9584..0000000000 --- a/tests/rocm_smi_test/gtest/docs/reference/testing.md +++ /dev/null @@ -1,1431 +0,0 @@ -# Testing Reference - - - -This page lists the facilities provided by GoogleTest for writing test programs. -To use them, include the header `gtest/gtest.h`. - -## Macros - -GoogleTest defines the following macros for writing tests. - -### TEST {#TEST} - -
      -TEST(TestSuiteName, TestName) {
      -  ... statements ...
      -}
      -
      - -Defines an individual test named *`TestName`* in the test suite -*`TestSuiteName`*, consisting of the given statements. - -Both arguments *`TestSuiteName`* and *`TestName`* must be valid C++ identifiers -and must not contain underscores (`_`). Tests in different test suites can have -the same individual name. - -The statements within the test body can be any code under test. -[Assertions](assertions.md) used within the test body determine the outcome of -the test. - -### TEST_F {#TEST_F} - -
      -TEST_F(TestFixtureName, TestName) {
      -  ... statements ...
      -}
      -
      - -Defines an individual test named *`TestName`* that uses the test fixture class -*`TestFixtureName`*. The test suite name is *`TestFixtureName`*. - -Both arguments *`TestFixtureName`* and *`TestName`* must be valid C++ -identifiers and must not contain underscores (`_`). *`TestFixtureName`* must be -the name of a test fixture class—see -[Test Fixtures](../primer.md#same-data-multiple-tests). - -The statements within the test body can be any code under test. -[Assertions](assertions.md) used within the test body determine the outcome of -the test. - -### TEST_P {#TEST_P} - -
      -TEST_P(TestFixtureName, TestName) {
      -  ... statements ...
      -}
      -
      - -Defines an individual value-parameterized test named *`TestName`* that uses the -test fixture class *`TestFixtureName`*. The test suite name is -*`TestFixtureName`*. - -Both arguments *`TestFixtureName`* and *`TestName`* must be valid C++ -identifiers and must not contain underscores (`_`). *`TestFixtureName`* must be -the name of a value-parameterized test fixture class—see -[Value-Parameterized Tests](../advanced.md#value-parameterized-tests). - -The statements within the test body can be any code under test. Within the test -body, the test parameter can be accessed with the `GetParam()` function (see -[`WithParamInterface`](#WithParamInterface)). For example: - -```cpp -TEST_P(MyTestSuite, DoesSomething) { - ... - EXPECT_TRUE(DoSomething(GetParam())); - ... -} -``` - -[Assertions](assertions.md) used within the test body determine the outcome of -the test. - -See also [`INSTANTIATE_TEST_SUITE_P`](#INSTANTIATE_TEST_SUITE_P). - -### INSTANTIATE_TEST_SUITE_P {#INSTANTIATE_TEST_SUITE_P} - -`INSTANTIATE_TEST_SUITE_P(`*`InstantiationName`*`,`*`TestSuiteName`*`,`*`param_generator`*`)` -\ -`INSTANTIATE_TEST_SUITE_P(`*`InstantiationName`*`,`*`TestSuiteName`*`,`*`param_generator`*`,`*`name_generator`*`)` - -Instantiates the value-parameterized test suite *`TestSuiteName`* (defined with -[`TEST_P`](#TEST_P)). - -The argument *`InstantiationName`* is a unique name for the instantiation of the -test suite, to distinguish between multiple instantiations. In test output, the -instantiation name is added as a prefix to the test suite name -*`TestSuiteName`*. - -The argument *`param_generator`* is one of the following GoogleTest-provided -functions that generate the test parameters, all defined in the `::testing` -namespace: - - - -| Parameter Generator | Behavior | -| ------------------- | ---------------------------------------------------- | -| `Range(begin, end [, step])` | Yields values `{begin, begin+step, begin+step+step, ...}`. The values do not include `end`. `step` defaults to 1. | -| `Values(v1, v2, ..., vN)` | Yields values `{v1, v2, ..., vN}`. | -| `ValuesIn(container)` or `ValuesIn(begin,end)` | Yields values from a C-style array, an STL-style container, or an iterator range `[begin, end)`. | -| `Bool()` | Yields sequence `{false, true}`. | -| `Combine(g1, g2, ..., gN)` | Yields as `std::tuple` *n*-tuples all combinations (Cartesian product) of the values generated by the given *n* generators `g1`, `g2`, ..., `gN`. | - -The optional last argument *`name_generator`* is a function or functor that -generates custom test name suffixes based on the test parameters. The function -must accept an argument of type -[`TestParamInfo`](#TestParamInfo) and return a `std::string`. -The test name suffix can only contain alphanumeric characters and underscores. -GoogleTest provides [`PrintToStringParamName`](#PrintToStringParamName), or a -custom function can be used for more control: - -```cpp -INSTANTIATE_TEST_SUITE_P( - MyInstantiation, MyTestSuite, - ::testing::Values(...), - [](const ::testing::TestParamInfo& info) { - // Can use info.param here to generate the test suffix - std::string name = ... - return name; - }); -``` - -For more information, see -[Value-Parameterized Tests](../advanced.md#value-parameterized-tests). - -See also -[`GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST`](#GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST). - -### TYPED_TEST_SUITE {#TYPED_TEST_SUITE} - -`TYPED_TEST_SUITE(`*`TestFixtureName`*`,`*`Types`*`)` - -Defines a typed test suite based on the test fixture *`TestFixtureName`*. The -test suite name is *`TestFixtureName`*. - -The argument *`TestFixtureName`* is a fixture class template, parameterized by a -type, for example: - -```cpp -template -class MyFixture : public ::testing::Test { - public: - ... - using List = std::list; - static T shared_; - T value_; -}; -``` - -The argument *`Types`* is a [`Types`](#Types) object representing the list of -types to run the tests on, for example: - -```cpp -using MyTypes = ::testing::Types; -TYPED_TEST_SUITE(MyFixture, MyTypes); -``` - -The type alias (`using` or `typedef`) is necessary for the `TYPED_TEST_SUITE` -macro to parse correctly. - -See also [`TYPED_TEST`](#TYPED_TEST) and -[Typed Tests](../advanced.md#typed-tests) for more information. - -### TYPED_TEST {#TYPED_TEST} - -
      -TYPED_TEST(TestSuiteName, TestName) {
      -  ... statements ...
      -}
      -
      - -Defines an individual typed test named *`TestName`* in the typed test suite -*`TestSuiteName`*. The test suite must be defined with -[`TYPED_TEST_SUITE`](#TYPED_TEST_SUITE). - -Within the test body, the special name `TypeParam` refers to the type parameter, -and `TestFixture` refers to the fixture class. See the following example: - -```cpp -TYPED_TEST(MyFixture, Example) { - // Inside a test, refer to the special name TypeParam to get the type - // parameter. Since we are inside a derived class template, C++ requires - // us to visit the members of MyFixture via 'this'. - TypeParam n = this->value_; - - // To visit static members of the fixture, add the 'TestFixture::' - // prefix. - n += TestFixture::shared_; - - // To refer to typedefs in the fixture, add the 'typename TestFixture::' - // prefix. The 'typename' is required to satisfy the compiler. - typename TestFixture::List values; - - values.push_back(n); - ... -} -``` - -For more information, see [Typed Tests](../advanced.md#typed-tests). - -### TYPED_TEST_SUITE_P {#TYPED_TEST_SUITE_P} - -`TYPED_TEST_SUITE_P(`*`TestFixtureName`*`)` - -Defines a type-parameterized test suite based on the test fixture -*`TestFixtureName`*. The test suite name is *`TestFixtureName`*. - -The argument *`TestFixtureName`* is a fixture class template, parameterized by a -type. See [`TYPED_TEST_SUITE`](#TYPED_TEST_SUITE) for an example. - -See also [`TYPED_TEST_P`](#TYPED_TEST_P) and -[Type-Parameterized Tests](../advanced.md#type-parameterized-tests) for more -information. - -### TYPED_TEST_P {#TYPED_TEST_P} - -
      -TYPED_TEST_P(TestSuiteName, TestName) {
      -  ... statements ...
      -}
      -
      - -Defines an individual type-parameterized test named *`TestName`* in the -type-parameterized test suite *`TestSuiteName`*. The test suite must be defined -with [`TYPED_TEST_SUITE_P`](#TYPED_TEST_SUITE_P). - -Within the test body, the special name `TypeParam` refers to the type parameter, -and `TestFixture` refers to the fixture class. See [`TYPED_TEST`](#TYPED_TEST) -for an example. - -See also [`REGISTER_TYPED_TEST_SUITE_P`](#REGISTER_TYPED_TEST_SUITE_P) and -[Type-Parameterized Tests](../advanced.md#type-parameterized-tests) for more -information. - -### REGISTER_TYPED_TEST_SUITE_P {#REGISTER_TYPED_TEST_SUITE_P} - -`REGISTER_TYPED_TEST_SUITE_P(`*`TestSuiteName`*`,`*`TestNames...`*`)` - -Registers the type-parameterized tests *`TestNames...`* of the test suite -*`TestSuiteName`*. The test suite and tests must be defined with -[`TYPED_TEST_SUITE_P`](#TYPED_TEST_SUITE_P) and [`TYPED_TEST_P`](#TYPED_TEST_P). - -For example: - -```cpp -// Define the test suite and tests. -TYPED_TEST_SUITE_P(MyFixture); -TYPED_TEST_P(MyFixture, HasPropertyA) { ... } -TYPED_TEST_P(MyFixture, HasPropertyB) { ... } - -// Register the tests in the test suite. -REGISTER_TYPED_TEST_SUITE_P(MyFixture, HasPropertyA, HasPropertyB); -``` - -See also [`INSTANTIATE_TYPED_TEST_SUITE_P`](#INSTANTIATE_TYPED_TEST_SUITE_P) and -[Type-Parameterized Tests](../advanced.md#type-parameterized-tests) for more -information. - -### INSTANTIATE_TYPED_TEST_SUITE_P {#INSTANTIATE_TYPED_TEST_SUITE_P} - -`INSTANTIATE_TYPED_TEST_SUITE_P(`*`InstantiationName`*`,`*`TestSuiteName`*`,`*`Types`*`)` - -Instantiates the type-parameterized test suite *`TestSuiteName`*. The test suite -must be registered with -[`REGISTER_TYPED_TEST_SUITE_P`](#REGISTER_TYPED_TEST_SUITE_P). - -The argument *`InstantiationName`* is a unique name for the instantiation of the -test suite, to distinguish between multiple instantiations. In test output, the -instantiation name is added as a prefix to the test suite name -*`TestSuiteName`*. - -The argument *`Types`* is a [`Types`](#Types) object representing the list of -types to run the tests on, for example: - -```cpp -using MyTypes = ::testing::Types; -INSTANTIATE_TYPED_TEST_SUITE_P(MyInstantiation, MyFixture, MyTypes); -``` - -The type alias (`using` or `typedef`) is necessary for the -`INSTANTIATE_TYPED_TEST_SUITE_P` macro to parse correctly. - -For more information, see -[Type-Parameterized Tests](../advanced.md#type-parameterized-tests). - -### FRIEND_TEST {#FRIEND_TEST} - -`FRIEND_TEST(`*`TestSuiteName`*`,`*`TestName`*`)` - -Within a class body, declares an individual test as a friend of the class, -enabling the test to access private class members. - -If the class is defined in a namespace, then in order to be friends of the -class, test fixtures and tests must be defined in the exact same namespace, -without inline or anonymous namespaces. - -For example, if the class definition looks like the following: - -```cpp -namespace my_namespace { - -class MyClass { - friend class MyClassTest; - FRIEND_TEST(MyClassTest, HasPropertyA); - FRIEND_TEST(MyClassTest, HasPropertyB); - ... definition of class MyClass ... -}; - -} // namespace my_namespace -``` - -Then the test code should look like: - -```cpp -namespace my_namespace { - -class MyClassTest : public ::testing::Test { - ... -}; - -TEST_F(MyClassTest, HasPropertyA) { ... } -TEST_F(MyClassTest, HasPropertyB) { ... } - -} // namespace my_namespace -``` - -See [Testing Private Code](../advanced.md#testing-private-code) for more -information. - -### SCOPED_TRACE {#SCOPED_TRACE} - -`SCOPED_TRACE(`*`message`*`)` - -Causes the current file name, line number, and the given message *`message`* to -be added to the failure message for each assertion failure that occurs in the -scope. - -For more information, see -[Adding Traces to Assertions](../advanced.md#adding-traces-to-assertions). - -See also the [`ScopedTrace` class](#ScopedTrace). - -### GTEST_SKIP {#GTEST_SKIP} - -`GTEST_SKIP()` - -Prevents further test execution at runtime. - -Can be used in individual test cases or in the `SetUp()` methods of test -environments or test fixtures (classes derived from the -[`Environment`](#Environment) or [`Test`](#Test) classes). If used in a global -test environment `SetUp()` method, it skips all tests in the test program. If -used in a test fixture `SetUp()` method, it skips all tests in the corresponding -test suite. - -Similar to assertions, `GTEST_SKIP` allows streaming a custom message into it. - -See [Skipping Test Execution](../advanced.md#skipping-test-execution) for more -information. - -### GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST {#GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST} - -`GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(`*`TestSuiteName`*`)` - -Allows the value-parameterized test suite *`TestSuiteName`* to be -uninstantiated. - -By default, every [`TEST_P`](#TEST_P) call without a corresponding -[`INSTANTIATE_TEST_SUITE_P`](#INSTANTIATE_TEST_SUITE_P) call causes a failing -test in the test suite `GoogleTestVerification`. -`GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST` suppresses this failure for the -given test suite. - -## Classes and types - -GoogleTest defines the following classes and types to help with writing tests. - -### AssertionResult {#AssertionResult} - -`::testing::AssertionResult` - -A class for indicating whether an assertion was successful. - -When the assertion wasn't successful, the `AssertionResult` object stores a -non-empty failure message that can be retrieved with the object's `message()` -method. - -To create an instance of this class, use one of the factory functions -[`AssertionSuccess()`](#AssertionSuccess) or -[`AssertionFailure()`](#AssertionFailure). - -### AssertionException {#AssertionException} - -`::testing::AssertionException` - -Exception which can be thrown from -[`TestEventListener::OnTestPartResult`](#TestEventListener::OnTestPartResult). - -### EmptyTestEventListener {#EmptyTestEventListener} - -`::testing::EmptyTestEventListener` - -Provides an empty implementation of all methods in the -[`TestEventListener`](#TestEventListener) interface, such that a subclass only -needs to override the methods it cares about. - -### Environment {#Environment} - -`::testing::Environment` - -Represents a global test environment. See -[Global Set-Up and Tear-Down](../advanced.md#global-set-up-and-tear-down). - -#### Protected Methods {#Environment-protected} - -##### SetUp {#Environment::SetUp} - -`virtual void Environment::SetUp()` - -Override this to define how to set up the environment. - -##### TearDown {#Environment::TearDown} - -`virtual void Environment::TearDown()` - -Override this to define how to tear down the environment. - -### ScopedTrace {#ScopedTrace} - -`::testing::ScopedTrace` - -An instance of this class causes a trace to be included in every test failure -message generated by code in the scope of the lifetime of the `ScopedTrace` -instance. The effect is undone with the destruction of the instance. - -The `ScopedTrace` constructor has the following form: - -```cpp -template -ScopedTrace(const char* file, int line, const T& message) -``` - -Example usage: - -```cpp -::testing::ScopedTrace trace("file.cc", 123, "message"); -``` - -The resulting trace includes the given source file path and line number, and the -given message. The `message` argument can be anything streamable to -`std::ostream`. - -See also [`SCOPED_TRACE`](#SCOPED_TRACE). - -### Test {#Test} - -`::testing::Test` - -The abstract class that all tests inherit from. `Test` is not copyable. - -#### Public Methods {#Test-public} - -##### SetUpTestSuite {#Test::SetUpTestSuite} - -`static void Test::SetUpTestSuite()` - -Performs shared setup for all tests in the test suite. GoogleTest calls -`SetUpTestSuite()` before running the first test in the test suite. - -##### TearDownTestSuite {#Test::TearDownTestSuite} - -`static void Test::TearDownTestSuite()` - -Performs shared teardown for all tests in the test suite. GoogleTest calls -`TearDownTestSuite()` after running the last test in the test suite. - -##### HasFatalFailure {#Test::HasFatalFailure} - -`static bool Test::HasFatalFailure()` - -Returns true if and only if the current test has a fatal failure. - -##### HasNonfatalFailure {#Test::HasNonfatalFailure} - -`static bool Test::HasNonfatalFailure()` - -Returns true if and only if the current test has a nonfatal failure. - -##### HasFailure {#Test::HasFailure} - -`static bool Test::HasFailure()` - -Returns true if and only if the current test has any failure, either fatal or -nonfatal. - -##### IsSkipped {#Test::IsSkipped} - -`static bool Test::IsSkipped()` - -Returns true if and only if the current test was skipped. - -##### RecordProperty {#Test::RecordProperty} - -`static void Test::RecordProperty(const std::string& key, const std::string& -value)` \ -`static void Test::RecordProperty(const std::string& key, int value)` - -Logs a property for the current test, test suite, or entire invocation of the -test program. Only the last value for a given key is logged. - -The key must be a valid XML attribute name, and cannot conflict with the ones -already used by GoogleTest (`name`, `status`, `time`, `classname`, `type_param`, -and `value_param`). - -`RecordProperty` is `public static` so it can be called from utility functions -that are not members of the test fixture. - -Calls to `RecordProperty` made during the lifespan of the test (from the moment -its constructor starts to the moment its destructor finishes) are output in XML -as attributes of the `` element. Properties recorded from a fixture's -`SetUpTestSuite` or `TearDownTestSuite` methods are logged as attributes of the -corresponding `` element. Calls to `RecordProperty` made in the -global context (before or after invocation of `RUN_ALL_TESTS` or from the -`SetUp`/`TearDown` methods of registered `Environment` objects) are output as -attributes of the `` element. - -#### Protected Methods {#Test-protected} - -##### SetUp {#Test::SetUp} - -`virtual void Test::SetUp()` - -Override this to perform test fixture setup. GoogleTest calls `SetUp()` before -running each individual test. - -##### TearDown {#Test::TearDown} - -`virtual void Test::TearDown()` - -Override this to perform test fixture teardown. GoogleTest calls `TearDown()` -after running each individual test. - -### TestWithParam {#TestWithParam} - -`::testing::TestWithParam` - -A convenience class which inherits from both [`Test`](#Test) and -[`WithParamInterface`](#WithParamInterface). - -### TestSuite {#TestSuite} - -Represents a test suite. `TestSuite` is not copyable. - -#### Public Methods {#TestSuite-public} - -##### name {#TestSuite::name} - -`const char* TestSuite::name() const` - -Gets the name of the test suite. - -##### type_param {#TestSuite::type_param} - -`const char* TestSuite::type_param() const` - -Returns the name of the parameter type, or `NULL` if this is not a typed or -type-parameterized test suite. See [Typed Tests](../advanced.md#typed-tests) and -[Type-Parameterized Tests](../advanced.md#type-parameterized-tests). - -##### should_run {#TestSuite::should_run} - -`bool TestSuite::should_run() const` - -Returns true if any test in this test suite should run. - -##### successful_test_count {#TestSuite::successful_test_count} - -`int TestSuite::successful_test_count() const` - -Gets the number of successful tests in this test suite. - -##### skipped_test_count {#TestSuite::skipped_test_count} - -`int TestSuite::skipped_test_count() const` - -Gets the number of skipped tests in this test suite. - -##### failed_test_count {#TestSuite::failed_test_count} - -`int TestSuite::failed_test_count() const` - -Gets the number of failed tests in this test suite. - -##### reportable_disabled_test_count {#TestSuite::reportable_disabled_test_count} - -`int TestSuite::reportable_disabled_test_count() const` - -Gets the number of disabled tests that will be reported in the XML report. - -##### disabled_test_count {#TestSuite::disabled_test_count} - -`int TestSuite::disabled_test_count() const` - -Gets the number of disabled tests in this test suite. - -##### reportable_test_count {#TestSuite::reportable_test_count} - -`int TestSuite::reportable_test_count() const` - -Gets the number of tests to be printed in the XML report. - -##### test_to_run_count {#TestSuite::test_to_run_count} - -`int TestSuite::test_to_run_count() const` - -Get the number of tests in this test suite that should run. - -##### total_test_count {#TestSuite::total_test_count} - -`int TestSuite::total_test_count() const` - -Gets the number of all tests in this test suite. - -##### Passed {#TestSuite::Passed} - -`bool TestSuite::Passed() const` - -Returns true if and only if the test suite passed. - -##### Failed {#TestSuite::Failed} - -`bool TestSuite::Failed() const` - -Returns true if and only if the test suite failed. - -##### elapsed_time {#TestSuite::elapsed_time} - -`TimeInMillis TestSuite::elapsed_time() const` - -Returns the elapsed time, in milliseconds. - -##### start_timestamp {#TestSuite::start_timestamp} - -`TimeInMillis TestSuite::start_timestamp() const` - -Gets the time of the test suite start, in ms from the start of the UNIX epoch. - -##### GetTestInfo {#TestSuite::GetTestInfo} - -`const TestInfo* TestSuite::GetTestInfo(int i) const` - -Returns the [`TestInfo`](#TestInfo) for the `i`-th test among all the tests. `i` -can range from 0 to `total_test_count() - 1`. If `i` is not in that range, -returns `NULL`. - -##### ad_hoc_test_result {#TestSuite::ad_hoc_test_result} - -`const TestResult& TestSuite::ad_hoc_test_result() const` - -Returns the [`TestResult`](#TestResult) that holds test properties recorded -during execution of `SetUpTestSuite` and `TearDownTestSuite`. - -### TestInfo {#TestInfo} - -`::testing::TestInfo` - -Stores information about a test. - -#### Public Methods {#TestInfo-public} - -##### test_suite_name {#TestInfo::test_suite_name} - -`const char* TestInfo::test_suite_name() const` - -Returns the test suite name. - -##### name {#TestInfo::name} - -`const char* TestInfo::name() const` - -Returns the test name. - -##### type_param {#TestInfo::type_param} - -`const char* TestInfo::type_param() const` - -Returns the name of the parameter type, or `NULL` if this is not a typed or -type-parameterized test. See [Typed Tests](../advanced.md#typed-tests) and -[Type-Parameterized Tests](../advanced.md#type-parameterized-tests). - -##### value_param {#TestInfo::value_param} - -`const char* TestInfo::value_param() const` - -Returns the text representation of the value parameter, or `NULL` if this is not -a value-parameterized test. See -[Value-Parameterized Tests](../advanced.md#value-parameterized-tests). - -##### file {#TestInfo::file} - -`const char* TestInfo::file() const` - -Returns the file name where this test is defined. - -##### line {#TestInfo::line} - -`int TestInfo::line() const` - -Returns the line where this test is defined. - -##### is_in_another_shard {#TestInfo::is_in_another_shard} - -`bool TestInfo::is_in_another_shard() const` - -Returns true if this test should not be run because it's in another shard. - -##### should_run {#TestInfo::should_run} - -`bool TestInfo::should_run() const` - -Returns true if this test should run, that is if the test is not disabled (or it -is disabled but the `also_run_disabled_tests` flag has been specified) and its -full name matches the user-specified filter. - -GoogleTest allows the user to filter the tests by their full names. Only the -tests that match the filter will run. See -[Running a Subset of the Tests](../advanced.md#running-a-subset-of-the-tests) -for more information. - -##### is_reportable {#TestInfo::is_reportable} - -`bool TestInfo::is_reportable() const` - -Returns true if and only if this test will appear in the XML report. - -##### result {#TestInfo::result} - -`const TestResult* TestInfo::result() const` - -Returns the result of the test. See [`TestResult`](#TestResult). - -### TestParamInfo {#TestParamInfo} - -`::testing::TestParamInfo` - -Describes a parameter to a value-parameterized test. The type `T` is the type of -the parameter. - -Contains the fields `param` and `index` which hold the value of the parameter -and its integer index respectively. - -### UnitTest {#UnitTest} - -`::testing::UnitTest` - -This class contains information about the test program. - -`UnitTest` is a singleton class. The only instance is created when -`UnitTest::GetInstance()` is first called. This instance is never deleted. - -`UnitTest` is not copyable. - -#### Public Methods {#UnitTest-public} - -##### GetInstance {#UnitTest::GetInstance} - -`static UnitTest* UnitTest::GetInstance()` - -Gets the singleton `UnitTest` object. The first time this method is called, a -`UnitTest` object is constructed and returned. Consecutive calls will return the -same object. - -##### original_working_dir {#UnitTest::original_working_dir} - -`const char* UnitTest::original_working_dir() const` - -Returns the working directory when the first [`TEST()`](#TEST) or -[`TEST_F()`](#TEST_F) was executed. The `UnitTest` object owns the string. - -##### current_test_suite {#UnitTest::current_test_suite} - -`const TestSuite* UnitTest::current_test_suite() const` - -Returns the [`TestSuite`](#TestSuite) object for the test that's currently -running, or `NULL` if no test is running. - -##### current_test_info {#UnitTest::current_test_info} - -`const TestInfo* UnitTest::current_test_info() const` - -Returns the [`TestInfo`](#TestInfo) object for the test that's currently -running, or `NULL` if no test is running. - -##### random_seed {#UnitTest::random_seed} - -`int UnitTest::random_seed() const` - -Returns the random seed used at the start of the current test run. - -##### successful_test_suite_count {#UnitTest::successful_test_suite_count} - -`int UnitTest::successful_test_suite_count() const` - -Gets the number of successful test suites. - -##### failed_test_suite_count {#UnitTest::failed_test_suite_count} - -`int UnitTest::failed_test_suite_count() const` - -Gets the number of failed test suites. - -##### total_test_suite_count {#UnitTest::total_test_suite_count} - -`int UnitTest::total_test_suite_count() const` - -Gets the number of all test suites. - -##### test_suite_to_run_count {#UnitTest::test_suite_to_run_count} - -`int UnitTest::test_suite_to_run_count() const` - -Gets the number of all test suites that contain at least one test that should -run. - -##### successful_test_count {#UnitTest::successful_test_count} - -`int UnitTest::successful_test_count() const` - -Gets the number of successful tests. - -##### skipped_test_count {#UnitTest::skipped_test_count} - -`int UnitTest::skipped_test_count() const` - -Gets the number of skipped tests. - -##### failed_test_count {#UnitTest::failed_test_count} - -`int UnitTest::failed_test_count() const` - -Gets the number of failed tests. - -##### reportable_disabled_test_count {#UnitTest::reportable_disabled_test_count} - -`int UnitTest::reportable_disabled_test_count() const` - -Gets the number of disabled tests that will be reported in the XML report. - -##### disabled_test_count {#UnitTest::disabled_test_count} - -`int UnitTest::disabled_test_count() const` - -Gets the number of disabled tests. - -##### reportable_test_count {#UnitTest::reportable_test_count} - -`int UnitTest::reportable_test_count() const` - -Gets the number of tests to be printed in the XML report. - -##### total_test_count {#UnitTest::total_test_count} - -`int UnitTest::total_test_count() const` - -Gets the number of all tests. - -##### test_to_run_count {#UnitTest::test_to_run_count} - -`int UnitTest::test_to_run_count() const` - -Gets the number of tests that should run. - -##### start_timestamp {#UnitTest::start_timestamp} - -`TimeInMillis UnitTest::start_timestamp() const` - -Gets the time of the test program start, in ms from the start of the UNIX epoch. - -##### elapsed_time {#UnitTest::elapsed_time} - -`TimeInMillis UnitTest::elapsed_time() const` - -Gets the elapsed time, in milliseconds. - -##### Passed {#UnitTest::Passed} - -`bool UnitTest::Passed() const` - -Returns true if and only if the unit test passed (i.e. all test suites passed). - -##### Failed {#UnitTest::Failed} - -`bool UnitTest::Failed() const` - -Returns true if and only if the unit test failed (i.e. some test suite failed or -something outside of all tests failed). - -##### GetTestSuite {#UnitTest::GetTestSuite} - -`const TestSuite* UnitTest::GetTestSuite(int i) const` - -Gets the [`TestSuite`](#TestSuite) object for the `i`-th test suite among all -the test suites. `i` can range from 0 to `total_test_suite_count() - 1`. If `i` -is not in that range, returns `NULL`. - -##### ad_hoc_test_result {#UnitTest::ad_hoc_test_result} - -`const TestResult& UnitTest::ad_hoc_test_result() const` - -Returns the [`TestResult`](#TestResult) containing information on test failures -and properties logged outside of individual test suites. - -##### listeners {#UnitTest::listeners} - -`TestEventListeners& UnitTest::listeners()` - -Returns the list of event listeners that can be used to track events inside -GoogleTest. See [`TestEventListeners`](#TestEventListeners). - -### TestEventListener {#TestEventListener} - -`::testing::TestEventListener` - -The interface for tracing execution of tests. The methods below are listed in -the order the corresponding events are fired. - -#### Public Methods {#TestEventListener-public} - -##### OnTestProgramStart {#TestEventListener::OnTestProgramStart} - -`virtual void TestEventListener::OnTestProgramStart(const UnitTest& unit_test)` - -Fired before any test activity starts. - -##### OnTestIterationStart {#TestEventListener::OnTestIterationStart} - -`virtual void TestEventListener::OnTestIterationStart(const UnitTest& unit_test, -int iteration)` - -Fired before each iteration of tests starts. There may be more than one -iteration if `GTEST_FLAG(repeat)` is set. `iteration` is the iteration index, -starting from 0. - -##### OnEnvironmentsSetUpStart {#TestEventListener::OnEnvironmentsSetUpStart} - -`virtual void TestEventListener::OnEnvironmentsSetUpStart(const UnitTest& -unit_test)` - -Fired before environment set-up for each iteration of tests starts. - -##### OnEnvironmentsSetUpEnd {#TestEventListener::OnEnvironmentsSetUpEnd} - -`virtual void TestEventListener::OnEnvironmentsSetUpEnd(const UnitTest& -unit_test)` - -Fired after environment set-up for each iteration of tests ends. - -##### OnTestSuiteStart {#TestEventListener::OnTestSuiteStart} - -`virtual void TestEventListener::OnTestSuiteStart(const TestSuite& test_suite)` - -Fired before the test suite starts. - -##### OnTestStart {#TestEventListener::OnTestStart} - -`virtual void TestEventListener::OnTestStart(const TestInfo& test_info)` - -Fired before the test starts. - -##### OnTestPartResult {#TestEventListener::OnTestPartResult} - -`virtual void TestEventListener::OnTestPartResult(const TestPartResult& -test_part_result)` - -Fired after a failed assertion or a `SUCCEED()` invocation. If you want to throw -an exception from this function to skip to the next test, it must be an -[`AssertionException`](#AssertionException) or inherited from it. - -##### OnTestEnd {#TestEventListener::OnTestEnd} - -`virtual void TestEventListener::OnTestEnd(const TestInfo& test_info)` - -Fired after the test ends. - -##### OnTestSuiteEnd {#TestEventListener::OnTestSuiteEnd} - -`virtual void TestEventListener::OnTestSuiteEnd(const TestSuite& test_suite)` - -Fired after the test suite ends. - -##### OnEnvironmentsTearDownStart {#TestEventListener::OnEnvironmentsTearDownStart} - -`virtual void TestEventListener::OnEnvironmentsTearDownStart(const UnitTest& -unit_test)` - -Fired before environment tear-down for each iteration of tests starts. - -##### OnEnvironmentsTearDownEnd {#TestEventListener::OnEnvironmentsTearDownEnd} - -`virtual void TestEventListener::OnEnvironmentsTearDownEnd(const UnitTest& -unit_test)` - -Fired after environment tear-down for each iteration of tests ends. - -##### OnTestIterationEnd {#TestEventListener::OnTestIterationEnd} - -`virtual void TestEventListener::OnTestIterationEnd(const UnitTest& unit_test, -int iteration)` - -Fired after each iteration of tests finishes. - -##### OnTestProgramEnd {#TestEventListener::OnTestProgramEnd} - -`virtual void TestEventListener::OnTestProgramEnd(const UnitTest& unit_test)` - -Fired after all test activities have ended. - -### TestEventListeners {#TestEventListeners} - -`::testing::TestEventListeners` - -Lets users add listeners to track events in GoogleTest. - -#### Public Methods {#TestEventListeners-public} - -##### Append {#TestEventListeners::Append} - -`void TestEventListeners::Append(TestEventListener* listener)` - -Appends an event listener to the end of the list. GoogleTest assumes ownership -of the listener (i.e. it will delete the listener when the test program -finishes). - -##### Release {#TestEventListeners::Release} - -`TestEventListener* TestEventListeners::Release(TestEventListener* listener)` - -Removes the given event listener from the list and returns it. It then becomes -the caller's responsibility to delete the listener. Returns `NULL` if the -listener is not found in the list. - -##### default_result_printer {#TestEventListeners::default_result_printer} - -`TestEventListener* TestEventListeners::default_result_printer() const` - -Returns the standard listener responsible for the default console output. Can be -removed from the listeners list to shut down default console output. Note that -removing this object from the listener list with -[`Release()`](#TestEventListeners::Release) transfers its ownership to the -caller and makes this function return `NULL` the next time. - -##### default_xml_generator {#TestEventListeners::default_xml_generator} - -`TestEventListener* TestEventListeners::default_xml_generator() const` - -Returns the standard listener responsible for the default XML output controlled -by the `--gtest_output=xml` flag. Can be removed from the listeners list by -users who want to shut down the default XML output controlled by this flag and -substitute it with custom one. Note that removing this object from the listener -list with [`Release()`](#TestEventListeners::Release) transfers its ownership to -the caller and makes this function return `NULL` the next time. - -### TestPartResult {#TestPartResult} - -`::testing::TestPartResult` - -A copyable object representing the result of a test part (i.e. an assertion or -an explicit `FAIL()`, `ADD_FAILURE()`, or `SUCCESS()`). - -#### Public Methods {#TestPartResult-public} - -##### type {#TestPartResult::type} - -`Type TestPartResult::type() const` - -Gets the outcome of the test part. - -The return type `Type` is an enum defined as follows: - -```cpp -enum Type { - kSuccess, // Succeeded. - kNonFatalFailure, // Failed but the test can continue. - kFatalFailure, // Failed and the test should be terminated. - kSkip // Skipped. -}; -``` - -##### file_name {#TestPartResult::file_name} - -`const char* TestPartResult::file_name() const` - -Gets the name of the source file where the test part took place, or `NULL` if -it's unknown. - -##### line_number {#TestPartResult::line_number} - -`int TestPartResult::line_number() const` - -Gets the line in the source file where the test part took place, or `-1` if it's -unknown. - -##### summary {#TestPartResult::summary} - -`const char* TestPartResult::summary() const` - -Gets the summary of the failure message. - -##### message {#TestPartResult::message} - -`const char* TestPartResult::message() const` - -Gets the message associated with the test part. - -##### skipped {#TestPartResult::skipped} - -`bool TestPartResult::skipped() const` - -Returns true if and only if the test part was skipped. - -##### passed {#TestPartResult::passed} - -`bool TestPartResult::passed() const` - -Returns true if and only if the test part passed. - -##### nonfatally_failed {#TestPartResult::nonfatally_failed} - -`bool TestPartResult::nonfatally_failed() const` - -Returns true if and only if the test part non-fatally failed. - -##### fatally_failed {#TestPartResult::fatally_failed} - -`bool TestPartResult::fatally_failed() const` - -Returns true if and only if the test part fatally failed. - -##### failed {#TestPartResult::failed} - -`bool TestPartResult::failed() const` - -Returns true if and only if the test part failed. - -### TestProperty {#TestProperty} - -`::testing::TestProperty` - -A copyable object representing a user-specified test property which can be -output as a key/value string pair. - -#### Public Methods {#TestProperty-public} - -##### key {#key} - -`const char* key() const` - -Gets the user-supplied key. - -##### value {#value} - -`const char* value() const` - -Gets the user-supplied value. - -##### SetValue {#SetValue} - -`void SetValue(const std::string& new_value)` - -Sets a new value, overriding the previous one. - -### TestResult {#TestResult} - -`::testing::TestResult` - -Contains information about the result of a single test. - -`TestResult` is not copyable. - -#### Public Methods {#TestResult-public} - -##### total_part_count {#TestResult::total_part_count} - -`int TestResult::total_part_count() const` - -Gets the number of all test parts. This is the sum of the number of successful -test parts and the number of failed test parts. - -##### test_property_count {#TestResult::test_property_count} - -`int TestResult::test_property_count() const` - -Returns the number of test properties. - -##### Passed {#TestResult::Passed} - -`bool TestResult::Passed() const` - -Returns true if and only if the test passed (i.e. no test part failed). - -##### Skipped {#TestResult::Skipped} - -`bool TestResult::Skipped() const` - -Returns true if and only if the test was skipped. - -##### Failed {#TestResult::Failed} - -`bool TestResult::Failed() const` - -Returns true if and only if the test failed. - -##### HasFatalFailure {#TestResult::HasFatalFailure} - -`bool TestResult::HasFatalFailure() const` - -Returns true if and only if the test fatally failed. - -##### HasNonfatalFailure {#TestResult::HasNonfatalFailure} - -`bool TestResult::HasNonfatalFailure() const` - -Returns true if and only if the test has a non-fatal failure. - -##### elapsed_time {#TestResult::elapsed_time} - -`TimeInMillis TestResult::elapsed_time() const` - -Returns the elapsed time, in milliseconds. - -##### start_timestamp {#TestResult::start_timestamp} - -`TimeInMillis TestResult::start_timestamp() const` - -Gets the time of the test case start, in ms from the start of the UNIX epoch. - -##### GetTestPartResult {#TestResult::GetTestPartResult} - -`const TestPartResult& TestResult::GetTestPartResult(int i) const` - -Returns the [`TestPartResult`](#TestPartResult) for the `i`-th test part result -among all the results. `i` can range from 0 to `total_part_count() - 1`. If `i` -is not in that range, aborts the program. - -##### GetTestProperty {#TestResult::GetTestProperty} - -`const TestProperty& TestResult::GetTestProperty(int i) const` - -Returns the [`TestProperty`](#TestProperty) object for the `i`-th test property. -`i` can range from 0 to `test_property_count() - 1`. If `i` is not in that -range, aborts the program. - -### TimeInMillis {#TimeInMillis} - -`::testing::TimeInMillis` - -An integer type representing time in milliseconds. - -### Types {#Types} - -`::testing::Types` - -Represents a list of types for use in typed tests and type-parameterized tests. - -The template argument `T...` can be any number of types, for example: - -``` -::testing::Types -``` - -See [Typed Tests](../advanced.md#typed-tests) and -[Type-Parameterized Tests](../advanced.md#type-parameterized-tests) for more -information. - -### WithParamInterface {#WithParamInterface} - -`::testing::WithParamInterface` - -The pure interface class that all value-parameterized tests inherit from. - -A value-parameterized test fixture class must inherit from both [`Test`](#Test) -and `WithParamInterface`. In most cases that just means inheriting from -[`TestWithParam`](#TestWithParam), but more complicated test hierarchies may -need to inherit from `Test` and `WithParamInterface` at different levels. - -This interface defines the type alias `ParamType` for the parameter type `T` and -has support for accessing the test parameter value via the `GetParam()` method: - -``` -static const ParamType& GetParam() -``` - -For more information, see -[Value-Parameterized Tests](../advanced.md#value-parameterized-tests). - -## Functions - -GoogleTest defines the following functions to help with writing and running -tests. - -### InitGoogleTest {#InitGoogleTest} - -`void ::testing::InitGoogleTest(int* argc, char** argv)` \ -`void ::testing::InitGoogleTest(int* argc, wchar_t** argv)` \ -`void ::testing::InitGoogleTest()` - -Initializes GoogleTest. This must be called before calling -[`RUN_ALL_TESTS()`](#RUN_ALL_TESTS). In particular, it parses the command line -for the flags that GoogleTest recognizes. Whenever a GoogleTest flag is seen, it -is removed from `argv`, and `*argc` is decremented. - -No value is returned. Instead, the GoogleTest flag variables are updated. - -The `InitGoogleTest(int* argc, wchar_t** argv)` overload can be used in Windows -programs compiled in `UNICODE` mode. - -The argument-less `InitGoogleTest()` overload can be used on Arduino/embedded -platforms where there is no `argc`/`argv`. - -### AddGlobalTestEnvironment {#AddGlobalTestEnvironment} - -`Environment* ::testing::AddGlobalTestEnvironment(Environment* env)` - -Adds a test environment to the test program. Must be called before -[`RUN_ALL_TESTS()`](#RUN_ALL_TESTS) is called. See -[Global Set-Up and Tear-Down](../advanced.md#global-set-up-and-tear-down) for -more information. - -See also [`Environment`](#Environment). - -### RegisterTest {#RegisterTest} - -```cpp -template -TestInfo* ::testing::RegisterTest(const char* test_suite_name, const char* test_name, - const char* type_param, const char* value_param, - const char* file, int line, Factory factory) -``` - -Dynamically registers a test with the framework. - -The `factory` argument is a factory callable (move-constructible) object or -function pointer that creates a new instance of the `Test` object. It handles -ownership to the caller. The signature of the callable is `Fixture*()`, where -`Fixture` is the test fixture class for the test. All tests registered with the -same `test_suite_name` must return the same fixture type. This is checked at -runtime. - -The framework will infer the fixture class from the factory and will call the -`SetUpTestSuite` and `TearDownTestSuite` methods for it. - -Must be called before [`RUN_ALL_TESTS()`](#RUN_ALL_TESTS) is invoked, otherwise -behavior is undefined. - -See -[Registering tests programmatically](../advanced.md#registering-tests-programmatically) -for more information. - -### RUN_ALL_TESTS {#RUN_ALL_TESTS} - -`int RUN_ALL_TESTS()` - -Use this function in `main()` to run all tests. It returns `0` if all tests are -successful, or `1` otherwise. - -`RUN_ALL_TESTS()` should be invoked after the command line has been parsed by -[`InitGoogleTest()`](#InitGoogleTest). - -This function was formerly a macro; thus, it is in the global namespace and has -an all-caps name. - -### AssertionSuccess {#AssertionSuccess} - -`AssertionResult ::testing::AssertionSuccess()` - -Creates a successful assertion result. See -[`AssertionResult`](#AssertionResult). - -### AssertionFailure {#AssertionFailure} - -`AssertionResult ::testing::AssertionFailure()` - -Creates a failed assertion result. Use the `<<` operator to store a failure -message: - -```cpp -::testing::AssertionFailure() << "My failure message"; -``` - -See [`AssertionResult`](#AssertionResult). - -### StaticAssertTypeEq {#StaticAssertTypeEq} - -`::testing::StaticAssertTypeEq()` - -Compile-time assertion for type equality. Compiles if and only if `T1` and `T2` -are the same type. The value it returns is irrelevant. - -See [Type Assertions](../advanced.md#type-assertions) for more information. - -### PrintToString {#PrintToString} - -`std::string ::testing::PrintToString(x)` - -Prints any value `x` using GoogleTest's value printer. - -See -[Teaching GoogleTest How to Print Your Values](../advanced.md#teaching-googletest-how-to-print-your-values) -for more information. - -### PrintToStringParamName {#PrintToStringParamName} - -`std::string ::testing::PrintToStringParamName(TestParamInfo& info)` - -A built-in parameterized test name generator which returns the result of -[`PrintToString`](#PrintToString) called on `info.param`. Does not work when the -test parameter is a `std::string` or C string. See -[Specifying Names for Value-Parameterized Test Parameters](../advanced.md#specifying-names-for-value-parameterized-test-parameters) -for more information. - -See also [`TestParamInfo`](#TestParamInfo) and -[`INSTANTIATE_TEST_SUITE_P`](#INSTANTIATE_TEST_SUITE_P). diff --git a/tests/rocm_smi_test/gtest/docs/samples.md b/tests/rocm_smi_test/gtest/docs/samples.md deleted file mode 100644 index 2d97ca55b2..0000000000 --- a/tests/rocm_smi_test/gtest/docs/samples.md +++ /dev/null @@ -1,22 +0,0 @@ -# Googletest Samples - -If you're like us, you'd like to look at -[googletest samples.](https://github.com/google/googletest/tree/master/googletest/samples) -The sample directory has a number of well-commented samples showing how to use a -variety of googletest features. - -* Sample #1 shows the basic steps of using googletest to test C++ functions. -* Sample #2 shows a more complex unit test for a class with multiple member - functions. -* Sample #3 uses a test fixture. -* Sample #4 teaches you how to use googletest and `googletest.h` together to - get the best of both libraries. -* Sample #5 puts shared testing logic in a base test fixture, and reuses it in - derived fixtures. -* Sample #6 demonstrates type-parameterized tests. -* Sample #7 teaches the basics of value-parameterized tests. -* Sample #8 shows using `Combine()` in value-parameterized tests. -* Sample #9 shows use of the listener API to modify Google Test's console - output and the use of its reflection API to inspect test results. -* Sample #10 shows use of the listener API to implement a primitive memory - leak checker. diff --git a/tests/rocm_smi_test/gtest/googlemock/CMakeLists.txt b/tests/rocm_smi_test/gtest/googlemock/CMakeLists.txt deleted file mode 100644 index 3ab75a1b43..0000000000 --- a/tests/rocm_smi_test/gtest/googlemock/CMakeLists.txt +++ /dev/null @@ -1,215 +0,0 @@ -######################################################################## -# Note: CMake support is community-based. The maintainers do not use CMake -# internally. -# -# CMake build script for Google Mock. -# -# To run the tests for Google Mock itself on Linux, use 'make test' or -# ctest. You can select which tests to run using 'ctest -R regex'. -# For more options, run 'ctest --help'. - -option(gmock_build_tests "Build all of Google Mock's own tests." OFF) - -# A directory to find Google Test sources. -if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/gtest/CMakeLists.txt") - set(gtest_dir gtest) -else() - set(gtest_dir ../googletest) -endif() - -# Defines pre_project_set_up_hermetic_build() and set_up_hermetic_build(). -include("${gtest_dir}/cmake/hermetic_build.cmake" OPTIONAL) - -if (COMMAND pre_project_set_up_hermetic_build) - # Google Test also calls hermetic setup functions from add_subdirectory, - # although its changes will not affect things at the current scope. - pre_project_set_up_hermetic_build() -endif() - -######################################################################## -# -# Project-wide settings - -# Name of the project. -# -# CMake files in this project can refer to the root source directory -# as ${gmock_SOURCE_DIR} and to the root binary directory as -# ${gmock_BINARY_DIR}. -# Language "C" is required for find_package(Threads). -cmake_minimum_required(VERSION 3.5) -cmake_policy(SET CMP0048 NEW) -project(gmock VERSION ${GOOGLETEST_VERSION} LANGUAGES CXX C) - -if (COMMAND set_up_hermetic_build) - set_up_hermetic_build() -endif() - -# Instructs CMake to process Google Test's CMakeLists.txt and add its -# targets to the current scope. We are placing Google Test's binary -# directory in a subdirectory of our own as VC compilation may break -# if they are the same (the default). -add_subdirectory("${gtest_dir}" "${gmock_BINARY_DIR}/${gtest_dir}") - - -# These commands only run if this is the main project -if(CMAKE_PROJECT_NAME STREQUAL "gmock" OR CMAKE_PROJECT_NAME STREQUAL "googletest-distribution") - # BUILD_SHARED_LIBS is a standard CMake variable, but we declare it here to - # make it prominent in the GUI. - option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)." OFF) -else() - mark_as_advanced(gmock_build_tests) -endif() - -# Although Google Test's CMakeLists.txt calls this function, the -# changes there don't affect the current scope. Therefore we have to -# call it again here. -config_compiler_and_linker() # from ${gtest_dir}/cmake/internal_utils.cmake - -# Adds Google Mock's and Google Test's header directories to the search path. -set(gmock_build_include_dirs - "${gmock_SOURCE_DIR}/include" - "${gmock_SOURCE_DIR}" - "${gtest_SOURCE_DIR}/include" - # This directory is needed to build directly from Google Test sources. - "${gtest_SOURCE_DIR}") -include_directories(${gmock_build_include_dirs}) - -######################################################################## -# -# Defines the gmock & gmock_main libraries. User tests should link -# with one of them. - -# Google Mock libraries. We build them using more strict warnings than what -# are used for other targets, to ensure that Google Mock can be compiled by -# a user aggressive about warnings. -if (MSVC) - cxx_library(gmock - "${cxx_strict}" - "${gtest_dir}/src/gtest-all.cc" - src/gmock-all.cc) - - cxx_library(gmock_main - "${cxx_strict}" - "${gtest_dir}/src/gtest-all.cc" - src/gmock-all.cc - src/gmock_main.cc) -else() - cxx_library(gmock "${cxx_strict}" src/gmock-all.cc) - target_link_libraries(gmock PUBLIC gtest) - set_target_properties(gmock PROPERTIES VERSION ${GOOGLETEST_VERSION}) - cxx_library(gmock_main "${cxx_strict}" src/gmock_main.cc) - target_link_libraries(gmock_main PUBLIC gmock) - set_target_properties(gmock_main PROPERTIES VERSION ${GOOGLETEST_VERSION}) -endif() -# If the CMake version supports it, attach header directory information -# to the targets for when we are part of a parent build (ie being pulled -# in via add_subdirectory() rather than being a standalone build). -if (DEFINED CMAKE_VERSION AND NOT "${CMAKE_VERSION}" VERSION_LESS "2.8.11") - string(REPLACE ";" "$" dirs "${gmock_build_include_dirs}") - target_include_directories(gmock SYSTEM INTERFACE - "$" - "$/${CMAKE_INSTALL_INCLUDEDIR}>") - target_include_directories(gmock_main SYSTEM INTERFACE - "$" - "$/${CMAKE_INSTALL_INCLUDEDIR}>") -endif() - -######################################################################## -# -# Install rules -install_project(gmock gmock_main) - -######################################################################## -# -# Google Mock's own tests. -# -# You can skip this section if you aren't interested in testing -# Google Mock itself. -# -# The tests are not built by default. To build them, set the -# gmock_build_tests option to ON. You can do it by running ccmake -# or specifying the -Dgmock_build_tests=ON flag when running cmake. - -if (gmock_build_tests) - # This must be set in the root directory for the tests to be run by - # 'make test' or ctest. - enable_testing() - - if (MINGW OR CYGWIN) - if (CMAKE_VERSION VERSION_LESS "2.8.12") - add_compile_options("-Wa,-mbig-obj") - else() - add_definitions("-Wa,-mbig-obj") - endif() - endif() - - ############################################################ - # C++ tests built with standard compiler flags. - - cxx_test(gmock-actions_test gmock_main) - cxx_test(gmock-cardinalities_test gmock_main) - cxx_test(gmock_ex_test gmock_main) - cxx_test(gmock-function-mocker_test gmock_main) - cxx_test(gmock-internal-utils_test gmock_main) - cxx_test(gmock-matchers_test gmock_main) - cxx_test(gmock-more-actions_test gmock_main) - cxx_test(gmock-nice-strict_test gmock_main) - cxx_test(gmock-port_test gmock_main) - cxx_test(gmock-spec-builders_test gmock_main) - cxx_test(gmock_link_test gmock_main test/gmock_link2_test.cc) - cxx_test(gmock_test gmock_main) - - if (DEFINED GTEST_HAS_PTHREAD) - cxx_test(gmock_stress_test gmock) - endif() - - # gmock_all_test is commented to save time building and running tests. - # Uncomment if necessary. - # cxx_test(gmock_all_test gmock_main) - - ############################################################ - # C++ tests built with non-standard compiler flags. - - if (MSVC) - cxx_library(gmock_main_no_exception "${cxx_no_exception}" - "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc) - - cxx_library(gmock_main_no_rtti "${cxx_no_rtti}" - "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc) - - else() - cxx_library(gmock_main_no_exception "${cxx_no_exception}" src/gmock_main.cc) - target_link_libraries(gmock_main_no_exception PUBLIC gmock) - - cxx_library(gmock_main_no_rtti "${cxx_no_rtti}" src/gmock_main.cc) - target_link_libraries(gmock_main_no_rtti PUBLIC gmock) - endif() - cxx_test_with_flags(gmock-more-actions_no_exception_test "${cxx_no_exception}" - gmock_main_no_exception test/gmock-more-actions_test.cc) - - cxx_test_with_flags(gmock_no_rtti_test "${cxx_no_rtti}" - gmock_main_no_rtti test/gmock-spec-builders_test.cc) - - cxx_shared_library(shared_gmock_main "${cxx_default}" - "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc) - - # Tests that a binary can be built with Google Mock as a shared library. On - # some system configurations, it may not possible to run the binary without - # knowing more details about the system configurations. We do not try to run - # this binary. To get a more robust shared library coverage, configure with - # -DBUILD_SHARED_LIBS=ON. - cxx_executable_with_flags(shared_gmock_test_ "${cxx_default}" - shared_gmock_main test/gmock-spec-builders_test.cc) - set_target_properties(shared_gmock_test_ - PROPERTIES - COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") - - ############################################################ - # Python tests. - - cxx_executable(gmock_leak_test_ test gmock_main) - py_test(gmock_leak_test) - - cxx_executable(gmock_output_test_ test gmock) - py_test(gmock_output_test) -endif() diff --git a/tests/rocm_smi_test/gtest/googlemock/README.md b/tests/rocm_smi_test/gtest/googlemock/README.md deleted file mode 100644 index 7da60655db..0000000000 --- a/tests/rocm_smi_test/gtest/googlemock/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# Googletest Mocking (gMock) Framework - -### Overview - -Google's framework for writing and using C++ mock classes. It can help you -derive better designs of your system and write better tests. - -It is inspired by: - -* [jMock](http://www.jmock.org/) -* [EasyMock](http://www.easymock.org/) -* [Hamcrest](http://code.google.com/p/hamcrest/) - -It is designed with C++'s specifics in mind. - -gMock: - -- Provides a declarative syntax for defining mocks. -- Can define partial (hybrid) mocks, which are a cross of real and mock - objects. -- Handles functions of arbitrary types and overloaded functions. -- Comes with a rich set of matchers for validating function arguments. -- Uses an intuitive syntax for controlling the behavior of a mock. -- Does automatic verification of expectations (no record-and-replay needed). -- Allows arbitrary (partial) ordering constraints on function calls to be - expressed. -- Lets a user extend it by defining new matchers and actions. -- Does not use exceptions. -- Is easy to learn and use. - -Details and examples can be found here: - -* [gMock for Dummies](https://google.github.io/googletest/gmock_for_dummies.html) -* [Legacy gMock FAQ](https://google.github.io/googletest/gmock_faq.html) -* [gMock Cookbook](https://google.github.io/googletest/gmock_cook_book.html) -* [gMock Cheat Sheet](https://google.github.io/googletest/gmock_cheat_sheet.html) - -GoogleMock is a part of -[GoogleTest C++ testing framework](http://github.com/google/googletest/) and a -subject to the same requirements. diff --git a/tests/rocm_smi_test/gtest/googlemock/cmake/gmock.pc.in b/tests/rocm_smi_test/gtest/googlemock/cmake/gmock.pc.in deleted file mode 100644 index 23c67b5c88..0000000000 --- a/tests/rocm_smi_test/gtest/googlemock/cmake/gmock.pc.in +++ /dev/null @@ -1,10 +0,0 @@ -libdir=@CMAKE_INSTALL_FULL_LIBDIR@ -includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ - -Name: gmock -Description: GoogleMock (without main() function) -Version: @PROJECT_VERSION@ -URL: https://github.com/google/googletest -Requires: gtest = @PROJECT_VERSION@ -Libs: -L${libdir} -lgmock @CMAKE_THREAD_LIBS_INIT@ -Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ diff --git a/tests/rocm_smi_test/gtest/googlemock/cmake/gmock_main.pc.in b/tests/rocm_smi_test/gtest/googlemock/cmake/gmock_main.pc.in deleted file mode 100644 index 66ffea7f44..0000000000 --- a/tests/rocm_smi_test/gtest/googlemock/cmake/gmock_main.pc.in +++ /dev/null @@ -1,10 +0,0 @@ -libdir=@CMAKE_INSTALL_FULL_LIBDIR@ -includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ - -Name: gmock_main -Description: GoogleMock (with main() function) -Version: @PROJECT_VERSION@ -URL: https://github.com/google/googletest -Requires: gmock = @PROJECT_VERSION@ -Libs: -L${libdir} -lgmock_main @CMAKE_THREAD_LIBS_INIT@ -Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ diff --git a/tests/rocm_smi_test/gtest/googlemock/docs/README.md b/tests/rocm_smi_test/gtest/googlemock/docs/README.md deleted file mode 100644 index 1bc57b799c..0000000000 --- a/tests/rocm_smi_test/gtest/googlemock/docs/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# Content Moved - -We are working on updates to the GoogleTest documentation, which has moved to -the top-level [docs](../../docs) directory. diff --git a/tests/rocm_smi_test/gtest/googlemock/include/gmock/gmock-actions.h b/tests/rocm_smi_test/gtest/googlemock/include/gmock/gmock-actions.h deleted file mode 100644 index 70c325a464..0000000000 --- a/tests/rocm_smi_test/gtest/googlemock/include/gmock/gmock-actions.h +++ /dev/null @@ -1,1687 +0,0 @@ -// Copyright 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Google Mock - a framework for writing C++ mock classes. -// -// The ACTION* family of macros can be used in a namespace scope to -// define custom actions easily. The syntax: -// -// ACTION(name) { statements; } -// -// will define an action with the given name that executes the -// statements. The value returned by the statements will be used as -// the return value of the action. Inside the statements, you can -// refer to the K-th (0-based) argument of the mock function by -// 'argK', and refer to its type by 'argK_type'. For example: -// -// ACTION(IncrementArg1) { -// arg1_type temp = arg1; -// return ++(*temp); -// } -// -// allows you to write -// -// ...WillOnce(IncrementArg1()); -// -// You can also refer to the entire argument tuple and its type by -// 'args' and 'args_type', and refer to the mock function type and its -// return type by 'function_type' and 'return_type'. -// -// Note that you don't need to specify the types of the mock function -// arguments. However rest assured that your code is still type-safe: -// you'll get a compiler error if *arg1 doesn't support the ++ -// operator, or if the type of ++(*arg1) isn't compatible with the -// mock function's return type, for example. -// -// Sometimes you'll want to parameterize the action. For that you can use -// another macro: -// -// ACTION_P(name, param_name) { statements; } -// -// For example: -// -// ACTION_P(Add, n) { return arg0 + n; } -// -// will allow you to write: -// -// ...WillOnce(Add(5)); -// -// Note that you don't need to provide the type of the parameter -// either. If you need to reference the type of a parameter named -// 'foo', you can write 'foo_type'. For example, in the body of -// ACTION_P(Add, n) above, you can write 'n_type' to refer to the type -// of 'n'. -// -// We also provide ACTION_P2, ACTION_P3, ..., up to ACTION_P10 to support -// multi-parameter actions. -// -// For the purpose of typing, you can view -// -// ACTION_Pk(Foo, p1, ..., pk) { ... } -// -// as shorthand for -// -// template -// FooActionPk Foo(p1_type p1, ..., pk_type pk) { ... } -// -// In particular, you can provide the template type arguments -// explicitly when invoking Foo(), as in Foo(5, false); -// although usually you can rely on the compiler to infer the types -// for you automatically. You can assign the result of expression -// Foo(p1, ..., pk) to a variable of type FooActionPk. This can be useful when composing actions. -// -// You can also overload actions with different numbers of parameters: -// -// ACTION_P(Plus, a) { ... } -// ACTION_P2(Plus, a, b) { ... } -// -// While it's tempting to always use the ACTION* macros when defining -// a new action, you should also consider implementing ActionInterface -// or using MakePolymorphicAction() instead, especially if you need to -// use the action a lot. While these approaches require more work, -// they give you more control on the types of the mock function -// arguments and the action parameters, which in general leads to -// better compiler error messages that pay off in the long run. They -// also allow overloading actions based on parameter types (as opposed -// to just based on the number of parameters). -// -// CAVEAT: -// -// ACTION*() can only be used in a namespace scope as templates cannot be -// declared inside of a local class. -// Users can, however, define any local functors (e.g. a lambda) that -// can be used as actions. -// -// MORE INFORMATION: -// -// To learn more about using these macros, please search for 'ACTION' on -// https://github.com/google/googletest/blob/master/docs/gmock_cook_book.md - -// IWYU pragma: private, include "gmock/gmock.h" -// IWYU pragma: friend gmock/.* - -#ifndef GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ -#define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ - -#ifndef _WIN32_WCE -# include -#endif - -#include -#include -#include -#include -#include -#include -#include - -#include "gmock/internal/gmock-internal-utils.h" -#include "gmock/internal/gmock-port.h" -#include "gmock/internal/gmock-pp.h" - -#ifdef _MSC_VER -# pragma warning(push) -# pragma warning(disable:4100) -#endif - -namespace testing { - -// To implement an action Foo, define: -// 1. a class FooAction that implements the ActionInterface interface, and -// 2. a factory function that creates an Action object from a -// const FooAction*. -// -// The two-level delegation design follows that of Matcher, providing -// consistency for extension developers. It also eases ownership -// management as Action objects can now be copied like plain values. - -namespace internal { - -// BuiltInDefaultValueGetter::Get() returns a -// default-constructed T value. BuiltInDefaultValueGetter::Get() crashes with an error. -// -// This primary template is used when kDefaultConstructible is true. -template -struct BuiltInDefaultValueGetter { - static T Get() { return T(); } -}; -template -struct BuiltInDefaultValueGetter { - static T Get() { - Assert(false, __FILE__, __LINE__, - "Default action undefined for the function return type."); - return internal::Invalid(); - // The above statement will never be reached, but is required in - // order for this function to compile. - } -}; - -// BuiltInDefaultValue::Get() returns the "built-in" default value -// for type T, which is NULL when T is a raw pointer type, 0 when T is -// a numeric type, false when T is bool, or "" when T is string or -// std::string. In addition, in C++11 and above, it turns a -// default-constructed T value if T is default constructible. For any -// other type T, the built-in default T value is undefined, and the -// function will abort the process. -template -class BuiltInDefaultValue { - public: - // This function returns true if and only if type T has a built-in default - // value. - static bool Exists() { - return ::std::is_default_constructible::value; - } - - static T Get() { - return BuiltInDefaultValueGetter< - T, ::std::is_default_constructible::value>::Get(); - } -}; - -// This partial specialization says that we use the same built-in -// default value for T and const T. -template -class BuiltInDefaultValue { - public: - static bool Exists() { return BuiltInDefaultValue::Exists(); } - static T Get() { return BuiltInDefaultValue::Get(); } -}; - -// This partial specialization defines the default values for pointer -// types. -template -class BuiltInDefaultValue { - public: - static bool Exists() { return true; } - static T* Get() { return nullptr; } -}; - -// The following specializations define the default values for -// specific types we care about. -#define GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(type, value) \ - template <> \ - class BuiltInDefaultValue { \ - public: \ - static bool Exists() { return true; } \ - static type Get() { return value; } \ - } - -GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(void, ); // NOLINT -GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(::std::string, ""); -GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(bool, false); -GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned char, '\0'); -GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed char, '\0'); -GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(char, '\0'); - -// There's no need for a default action for signed wchar_t, as that -// type is the same as wchar_t for gcc, and invalid for MSVC. -// -// There's also no need for a default action for unsigned wchar_t, as -// that type is the same as unsigned int for gcc, and invalid for -// MSVC. -#if GMOCK_WCHAR_T_IS_NATIVE_ -GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(wchar_t, 0U); // NOLINT -#endif - -GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned short, 0U); // NOLINT -GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed short, 0); // NOLINT -GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned int, 0U); -GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed int, 0); -GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned long, 0UL); // NOLINT -GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed long, 0L); // NOLINT -GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned long long, 0); // NOLINT -GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed long long, 0); // NOLINT -GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(float, 0); -GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(double, 0); - -#undef GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_ - -// Simple two-arg form of std::disjunction. -template -using disjunction = typename ::std::conditional::type; - -} // namespace internal - -// When an unexpected function call is encountered, Google Mock will -// let it return a default value if the user has specified one for its -// return type, or if the return type has a built-in default value; -// otherwise Google Mock won't know what value to return and will have -// to abort the process. -// -// The DefaultValue class allows a user to specify the -// default value for a type T that is both copyable and publicly -// destructible (i.e. anything that can be used as a function return -// type). The usage is: -// -// // Sets the default value for type T to be foo. -// DefaultValue::Set(foo); -template -class DefaultValue { - public: - // Sets the default value for type T; requires T to be - // copy-constructable and have a public destructor. - static void Set(T x) { - delete producer_; - producer_ = new FixedValueProducer(x); - } - - // Provides a factory function to be called to generate the default value. - // This method can be used even if T is only move-constructible, but it is not - // limited to that case. - typedef T (*FactoryFunction)(); - static void SetFactory(FactoryFunction factory) { - delete producer_; - producer_ = new FactoryValueProducer(factory); - } - - // Unsets the default value for type T. - static void Clear() { - delete producer_; - producer_ = nullptr; - } - - // Returns true if and only if the user has set the default value for type T. - static bool IsSet() { return producer_ != nullptr; } - - // Returns true if T has a default return value set by the user or there - // exists a built-in default value. - static bool Exists() { - return IsSet() || internal::BuiltInDefaultValue::Exists(); - } - - // Returns the default value for type T if the user has set one; - // otherwise returns the built-in default value. Requires that Exists() - // is true, which ensures that the return value is well-defined. - static T Get() { - return producer_ == nullptr ? internal::BuiltInDefaultValue::Get() - : producer_->Produce(); - } - - private: - class ValueProducer { - public: - virtual ~ValueProducer() {} - virtual T Produce() = 0; - }; - - class FixedValueProducer : public ValueProducer { - public: - explicit FixedValueProducer(T value) : value_(value) {} - T Produce() override { return value_; } - - private: - const T value_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(FixedValueProducer); - }; - - class FactoryValueProducer : public ValueProducer { - public: - explicit FactoryValueProducer(FactoryFunction factory) - : factory_(factory) {} - T Produce() override { return factory_(); } - - private: - const FactoryFunction factory_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(FactoryValueProducer); - }; - - static ValueProducer* producer_; -}; - -// This partial specialization allows a user to set default values for -// reference types. -template -class DefaultValue { - public: - // Sets the default value for type T&. - static void Set(T& x) { // NOLINT - address_ = &x; - } - - // Unsets the default value for type T&. - static void Clear() { address_ = nullptr; } - - // Returns true if and only if the user has set the default value for type T&. - static bool IsSet() { return address_ != nullptr; } - - // Returns true if T has a default return value set by the user or there - // exists a built-in default value. - static bool Exists() { - return IsSet() || internal::BuiltInDefaultValue::Exists(); - } - - // Returns the default value for type T& if the user has set one; - // otherwise returns the built-in default value if there is one; - // otherwise aborts the process. - static T& Get() { - return address_ == nullptr ? internal::BuiltInDefaultValue::Get() - : *address_; - } - - private: - static T* address_; -}; - -// This specialization allows DefaultValue::Get() to -// compile. -template <> -class DefaultValue { - public: - static bool Exists() { return true; } - static void Get() {} -}; - -// Points to the user-set default value for type T. -template -typename DefaultValue::ValueProducer* DefaultValue::producer_ = nullptr; - -// Points to the user-set default value for type T&. -template -T* DefaultValue::address_ = nullptr; - -// Implement this interface to define an action for function type F. -template -class ActionInterface { - public: - typedef typename internal::Function::Result Result; - typedef typename internal::Function::ArgumentTuple ArgumentTuple; - - ActionInterface() {} - virtual ~ActionInterface() {} - - // Performs the action. This method is not const, as in general an - // action can have side effects and be stateful. For example, a - // get-the-next-element-from-the-collection action will need to - // remember the current element. - virtual Result Perform(const ArgumentTuple& args) = 0; - - private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(ActionInterface); -}; - -// An Action is a copyable and IMMUTABLE (except by assignment) -// object that represents an action to be taken when a mock function -// of type F is called. The implementation of Action is just a -// std::shared_ptr to const ActionInterface. Don't inherit from Action! -// You can view an object implementing ActionInterface as a -// concrete action (including its current state), and an Action -// object as a handle to it. -template -class Action { - // Adapter class to allow constructing Action from a legacy ActionInterface. - // New code should create Actions from functors instead. - struct ActionAdapter { - // Adapter must be copyable to satisfy std::function requirements. - ::std::shared_ptr> impl_; - - template - typename internal::Function::Result operator()(Args&&... args) { - return impl_->Perform( - ::std::forward_as_tuple(::std::forward(args)...)); - } - }; - - template - using IsCompatibleFunctor = std::is_constructible, G>; - - public: - typedef typename internal::Function::Result Result; - typedef typename internal::Function::ArgumentTuple ArgumentTuple; - - // Constructs a null Action. Needed for storing Action objects in - // STL containers. - Action() {} - - // Construct an Action from a specified callable. - // This cannot take std::function directly, because then Action would not be - // directly constructible from lambda (it would require two conversions). - template < - typename G, - typename = typename std::enable_if, std::is_constructible, - G>>::value>::type> - Action(G&& fun) { // NOLINT - Init(::std::forward(fun), IsCompatibleFunctor()); - } - - // Constructs an Action from its implementation. - explicit Action(ActionInterface* impl) - : fun_(ActionAdapter{::std::shared_ptr>(impl)}) {} - - // This constructor allows us to turn an Action object into an - // Action, as long as F's arguments can be implicitly converted - // to Func's and Func's return type can be implicitly converted to F's. - template - explicit Action(const Action& action) : fun_(action.fun_) {} - - // Returns true if and only if this is the DoDefault() action. - bool IsDoDefault() const { return fun_ == nullptr; } - - // Performs the action. Note that this method is const even though - // the corresponding method in ActionInterface is not. The reason - // is that a const Action means that it cannot be re-bound to - // another concrete action, not that the concrete action it binds to - // cannot change state. (Think of the difference between a const - // pointer and a pointer to const.) - Result Perform(ArgumentTuple args) const { - if (IsDoDefault()) { - internal::IllegalDoDefault(__FILE__, __LINE__); - } - return internal::Apply(fun_, ::std::move(args)); - } - - private: - template - friend class Action; - - template - void Init(G&& g, ::std::true_type) { - fun_ = ::std::forward(g); - } - - template - void Init(G&& g, ::std::false_type) { - fun_ = IgnoreArgs::type>{::std::forward(g)}; - } - - template - struct IgnoreArgs { - template - Result operator()(const Args&...) const { - return function_impl(); - } - - FunctionImpl function_impl; - }; - - // fun_ is an empty function if and only if this is the DoDefault() action. - ::std::function fun_; -}; - -// The PolymorphicAction class template makes it easy to implement a -// polymorphic action (i.e. an action that can be used in mock -// functions of than one type, e.g. Return()). -// -// To define a polymorphic action, a user first provides a COPYABLE -// implementation class that has a Perform() method template: -// -// class FooAction { -// public: -// template -// Result Perform(const ArgumentTuple& args) const { -// // Processes the arguments and returns a result, using -// // std::get(args) to get the N-th (0-based) argument in the tuple. -// } -// ... -// }; -// -// Then the user creates the polymorphic action using -// MakePolymorphicAction(object) where object has type FooAction. See -// the definition of Return(void) and SetArgumentPointee(value) for -// complete examples. -template -class PolymorphicAction { - public: - explicit PolymorphicAction(const Impl& impl) : impl_(impl) {} - - template - operator Action() const { - return Action(new MonomorphicImpl(impl_)); - } - - private: - template - class MonomorphicImpl : public ActionInterface { - public: - typedef typename internal::Function::Result Result; - typedef typename internal::Function::ArgumentTuple ArgumentTuple; - - explicit MonomorphicImpl(const Impl& impl) : impl_(impl) {} - - Result Perform(const ArgumentTuple& args) override { - return impl_.template Perform(args); - } - - private: - Impl impl_; - }; - - Impl impl_; -}; - -// Creates an Action from its implementation and returns it. The -// created Action object owns the implementation. -template -Action MakeAction(ActionInterface* impl) { - return Action(impl); -} - -// Creates a polymorphic action from its implementation. This is -// easier to use than the PolymorphicAction constructor as it -// doesn't require you to explicitly write the template argument, e.g. -// -// MakePolymorphicAction(foo); -// vs -// PolymorphicAction(foo); -template -inline PolymorphicAction MakePolymorphicAction(const Impl& impl) { - return PolymorphicAction(impl); -} - -namespace internal { - -// Helper struct to specialize ReturnAction to execute a move instead of a copy -// on return. Useful for move-only types, but could be used on any type. -template -struct ByMoveWrapper { - explicit ByMoveWrapper(T value) : payload(std::move(value)) {} - T payload; -}; - -// Implements the polymorphic Return(x) action, which can be used in -// any function that returns the type of x, regardless of the argument -// types. -// -// Note: The value passed into Return must be converted into -// Function::Result when this action is cast to Action rather than -// when that action is performed. This is important in scenarios like -// -// MOCK_METHOD1(Method, T(U)); -// ... -// { -// Foo foo; -// X x(&foo); -// EXPECT_CALL(mock, Method(_)).WillOnce(Return(x)); -// } -// -// In the example above the variable x holds reference to foo which leaves -// scope and gets destroyed. If copying X just copies a reference to foo, -// that copy will be left with a hanging reference. If conversion to T -// makes a copy of foo, the above code is safe. To support that scenario, we -// need to make sure that the type conversion happens inside the EXPECT_CALL -// statement, and conversion of the result of Return to Action is a -// good place for that. -// -// The real life example of the above scenario happens when an invocation -// of gtl::Container() is passed into Return. -// -template -class ReturnAction { - public: - // Constructs a ReturnAction object from the value to be returned. - // 'value' is passed by value instead of by const reference in order - // to allow Return("string literal") to compile. - explicit ReturnAction(R value) : value_(new R(std::move(value))) {} - - // This template type conversion operator allows Return(x) to be - // used in ANY function that returns x's type. - template - operator Action() const { // NOLINT - // Assert statement belongs here because this is the best place to verify - // conditions on F. It produces the clearest error messages - // in most compilers. - // Impl really belongs in this scope as a local class but can't - // because MSVC produces duplicate symbols in different translation units - // in this case. Until MS fixes that bug we put Impl into the class scope - // and put the typedef both here (for use in assert statement) and - // in the Impl class. But both definitions must be the same. - typedef typename Function::Result Result; - GTEST_COMPILE_ASSERT_( - !std::is_reference::value, - use_ReturnRef_instead_of_Return_to_return_a_reference); - static_assert(!std::is_void::value, - "Can't use Return() on an action expected to return `void`."); - return Action(new Impl(value_)); - } - - private: - // Implements the Return(x) action for a particular function type F. - template - class Impl : public ActionInterface { - public: - typedef typename Function::Result Result; - typedef typename Function::ArgumentTuple ArgumentTuple; - - // The implicit cast is necessary when Result has more than one - // single-argument constructor (e.g. Result is std::vector) and R - // has a type conversion operator template. In that case, value_(value) - // won't compile as the compiler doesn't known which constructor of - // Result to call. ImplicitCast_ forces the compiler to convert R to - // Result without considering explicit constructors, thus resolving the - // ambiguity. value_ is then initialized using its copy constructor. - explicit Impl(const std::shared_ptr& value) - : value_before_cast_(*value), - value_(ImplicitCast_(value_before_cast_)) {} - - Result Perform(const ArgumentTuple&) override { return value_; } - - private: - GTEST_COMPILE_ASSERT_(!std::is_reference::value, - Result_cannot_be_a_reference_type); - // We save the value before casting just in case it is being cast to a - // wrapper type. - R value_before_cast_; - Result value_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(Impl); - }; - - // Partially specialize for ByMoveWrapper. This version of ReturnAction will - // move its contents instead. - template - class Impl, F> : public ActionInterface { - public: - typedef typename Function::Result Result; - typedef typename Function::ArgumentTuple ArgumentTuple; - - explicit Impl(const std::shared_ptr& wrapper) - : performed_(false), wrapper_(wrapper) {} - - Result Perform(const ArgumentTuple&) override { - GTEST_CHECK_(!performed_) - << "A ByMove() action should only be performed once."; - performed_ = true; - return std::move(wrapper_->payload); - } - - private: - bool performed_; - const std::shared_ptr wrapper_; - }; - - const std::shared_ptr value_; -}; - -// Implements the ReturnNull() action. -class ReturnNullAction { - public: - // Allows ReturnNull() to be used in any pointer-returning function. In C++11 - // this is enforced by returning nullptr, and in non-C++11 by asserting a - // pointer type on compile time. - template - static Result Perform(const ArgumentTuple&) { - return nullptr; - } -}; - -// Implements the Return() action. -class ReturnVoidAction { - public: - // Allows Return() to be used in any void-returning function. - template - static void Perform(const ArgumentTuple&) { - static_assert(std::is_void::value, "Result should be void."); - } -}; - -// Implements the polymorphic ReturnRef(x) action, which can be used -// in any function that returns a reference to the type of x, -// regardless of the argument types. -template -class ReturnRefAction { - public: - // Constructs a ReturnRefAction object from the reference to be returned. - explicit ReturnRefAction(T& ref) : ref_(ref) {} // NOLINT - - // This template type conversion operator allows ReturnRef(x) to be - // used in ANY function that returns a reference to x's type. - template - operator Action() const { - typedef typename Function::Result Result; - // Asserts that the function return type is a reference. This - // catches the user error of using ReturnRef(x) when Return(x) - // should be used, and generates some helpful error message. - GTEST_COMPILE_ASSERT_(std::is_reference::value, - use_Return_instead_of_ReturnRef_to_return_a_value); - return Action(new Impl(ref_)); - } - - private: - // Implements the ReturnRef(x) action for a particular function type F. - template - class Impl : public ActionInterface { - public: - typedef typename Function::Result Result; - typedef typename Function::ArgumentTuple ArgumentTuple; - - explicit Impl(T& ref) : ref_(ref) {} // NOLINT - - Result Perform(const ArgumentTuple&) override { return ref_; } - - private: - T& ref_; - }; - - T& ref_; -}; - -// Implements the polymorphic ReturnRefOfCopy(x) action, which can be -// used in any function that returns a reference to the type of x, -// regardless of the argument types. -template -class ReturnRefOfCopyAction { - public: - // Constructs a ReturnRefOfCopyAction object from the reference to - // be returned. - explicit ReturnRefOfCopyAction(const T& value) : value_(value) {} // NOLINT - - // This template type conversion operator allows ReturnRefOfCopy(x) to be - // used in ANY function that returns a reference to x's type. - template - operator Action() const { - typedef typename Function::Result Result; - // Asserts that the function return type is a reference. This - // catches the user error of using ReturnRefOfCopy(x) when Return(x) - // should be used, and generates some helpful error message. - GTEST_COMPILE_ASSERT_( - std::is_reference::value, - use_Return_instead_of_ReturnRefOfCopy_to_return_a_value); - return Action(new Impl(value_)); - } - - private: - // Implements the ReturnRefOfCopy(x) action for a particular function type F. - template - class Impl : public ActionInterface { - public: - typedef typename Function::Result Result; - typedef typename Function::ArgumentTuple ArgumentTuple; - - explicit Impl(const T& value) : value_(value) {} // NOLINT - - Result Perform(const ArgumentTuple&) override { return value_; } - - private: - T value_; - }; - - const T value_; -}; - -// Implements the polymorphic ReturnRoundRobin(v) action, which can be -// used in any function that returns the element_type of v. -template -class ReturnRoundRobinAction { - public: - explicit ReturnRoundRobinAction(std::vector values) { - GTEST_CHECK_(!values.empty()) - << "ReturnRoundRobin requires at least one element."; - state_->values = std::move(values); - } - - template - T operator()(Args&&...) const { - return state_->Next(); - } - - private: - struct State { - T Next() { - T ret_val = values[i++]; - if (i == values.size()) i = 0; - return ret_val; - } - - std::vector values; - size_t i = 0; - }; - std::shared_ptr state_ = std::make_shared(); -}; - -// Implements the polymorphic DoDefault() action. -class DoDefaultAction { - public: - // This template type conversion operator allows DoDefault() to be - // used in any function. - template - operator Action() const { return Action(); } // NOLINT -}; - -// Implements the Assign action to set a given pointer referent to a -// particular value. -template -class AssignAction { - public: - AssignAction(T1* ptr, T2 value) : ptr_(ptr), value_(value) {} - - template - void Perform(const ArgumentTuple& /* args */) const { - *ptr_ = value_; - } - - private: - T1* const ptr_; - const T2 value_; -}; - -#if !GTEST_OS_WINDOWS_MOBILE - -// Implements the SetErrnoAndReturn action to simulate return from -// various system calls and libc functions. -template -class SetErrnoAndReturnAction { - public: - SetErrnoAndReturnAction(int errno_value, T result) - : errno_(errno_value), - result_(result) {} - template - Result Perform(const ArgumentTuple& /* args */) const { - errno = errno_; - return result_; - } - - private: - const int errno_; - const T result_; -}; - -#endif // !GTEST_OS_WINDOWS_MOBILE - -// Implements the SetArgumentPointee(x) action for any function -// whose N-th argument (0-based) is a pointer to x's type. -template -struct SetArgumentPointeeAction { - A value; - - template - void operator()(const Args&... args) const { - *::std::get(std::tie(args...)) = value; - } -}; - -// Implements the Invoke(object_ptr, &Class::Method) action. -template -struct InvokeMethodAction { - Class* const obj_ptr; - const MethodPtr method_ptr; - - template - auto operator()(Args&&... args) const - -> decltype((obj_ptr->*method_ptr)(std::forward(args)...)) { - return (obj_ptr->*method_ptr)(std::forward(args)...); - } -}; - -// Implements the InvokeWithoutArgs(f) action. The template argument -// FunctionImpl is the implementation type of f, which can be either a -// function pointer or a functor. InvokeWithoutArgs(f) can be used as an -// Action as long as f's type is compatible with F. -template -struct InvokeWithoutArgsAction { - FunctionImpl function_impl; - - // Allows InvokeWithoutArgs(f) to be used as any action whose type is - // compatible with f. - template - auto operator()(const Args&...) -> decltype(function_impl()) { - return function_impl(); - } -}; - -// Implements the InvokeWithoutArgs(object_ptr, &Class::Method) action. -template -struct InvokeMethodWithoutArgsAction { - Class* const obj_ptr; - const MethodPtr method_ptr; - - using ReturnType = - decltype((std::declval()->*std::declval())()); - - template - ReturnType operator()(const Args&...) const { - return (obj_ptr->*method_ptr)(); - } -}; - -// Implements the IgnoreResult(action) action. -template -class IgnoreResultAction { - public: - explicit IgnoreResultAction(const A& action) : action_(action) {} - - template - operator Action() const { - // Assert statement belongs here because this is the best place to verify - // conditions on F. It produces the clearest error messages - // in most compilers. - // Impl really belongs in this scope as a local class but can't - // because MSVC produces duplicate symbols in different translation units - // in this case. Until MS fixes that bug we put Impl into the class scope - // and put the typedef both here (for use in assert statement) and - // in the Impl class. But both definitions must be the same. - typedef typename internal::Function::Result Result; - - // Asserts at compile time that F returns void. - static_assert(std::is_void::value, "Result type should be void."); - - return Action(new Impl(action_)); - } - - private: - template - class Impl : public ActionInterface { - public: - typedef typename internal::Function::Result Result; - typedef typename internal::Function::ArgumentTuple ArgumentTuple; - - explicit Impl(const A& action) : action_(action) {} - - void Perform(const ArgumentTuple& args) override { - // Performs the action and ignores its result. - action_.Perform(args); - } - - private: - // Type OriginalFunction is the same as F except that its return - // type is IgnoredValue. - typedef typename internal::Function::MakeResultIgnoredValue - OriginalFunction; - - const Action action_; - }; - - const A action_; -}; - -template -struct WithArgsAction { - InnerAction action; - - // The inner action could be anything convertible to Action. - // We use the conversion operator to detect the signature of the inner Action. - template - operator Action() const { // NOLINT - using TupleType = std::tuple; - Action::type...)> - converted(action); - - return [converted](Args... args) -> R { - return converted.Perform(std::forward_as_tuple( - std::get(std::forward_as_tuple(std::forward(args)...))...)); - }; - } -}; - -template -struct DoAllAction { - private: - template - using NonFinalType = - typename std::conditional::value, T, const T&>::type; - - template - std::vector Convert(IndexSequence) const { - return {ActionT(std::get(actions))...}; - } - - public: - std::tuple actions; - - template - operator Action() const { // NOLINT - struct Op { - std::vector...)>> converted; - Action last; - R operator()(Args... args) const { - auto tuple_args = std::forward_as_tuple(std::forward(args)...); - for (auto& a : converted) { - a.Perform(tuple_args); - } - return last.Perform(std::move(tuple_args)); - } - }; - return Op{Convert...)>>( - MakeIndexSequence()), - std::get(actions)}; - } -}; - -template -struct ReturnNewAction { - T* operator()() const { - return internal::Apply( - [](const Params&... unpacked_params) { - return new T(unpacked_params...); - }, - params); - } - std::tuple params; -}; - -template -struct ReturnArgAction { - template - auto operator()(Args&&... args) const -> decltype(std::get( - std::forward_as_tuple(std::forward(args)...))) { - return std::get(std::forward_as_tuple(std::forward(args)...)); - } -}; - -template -struct SaveArgAction { - Ptr pointer; - - template - void operator()(const Args&... args) const { - *pointer = std::get(std::tie(args...)); - } -}; - -template -struct SaveArgPointeeAction { - Ptr pointer; - - template - void operator()(const Args&... args) const { - *pointer = *std::get(std::tie(args...)); - } -}; - -template -struct SetArgRefereeAction { - T value; - - template - void operator()(Args&&... args) const { - using argk_type = - typename ::std::tuple_element>::type; - static_assert(std::is_lvalue_reference::value, - "Argument must be a reference type."); - std::get(std::tie(args...)) = value; - } -}; - -template -struct SetArrayArgumentAction { - I1 first; - I2 last; - - template - void operator()(const Args&... args) const { - auto value = std::get(std::tie(args...)); - for (auto it = first; it != last; ++it, (void)++value) { - *value = *it; - } - } -}; - -template -struct DeleteArgAction { - template - void operator()(const Args&... args) const { - delete std::get(std::tie(args...)); - } -}; - -template -struct ReturnPointeeAction { - Ptr pointer; - template - auto operator()(const Args&...) const -> decltype(*pointer) { - return *pointer; - } -}; - -#if GTEST_HAS_EXCEPTIONS -template -struct ThrowAction { - T exception; - // We use a conversion operator to adapt to any return type. - template - operator Action() const { // NOLINT - T copy = exception; - return [copy](Args...) -> R { throw copy; }; - } -}; -#endif // GTEST_HAS_EXCEPTIONS - -} // namespace internal - -// An Unused object can be implicitly constructed from ANY value. -// This is handy when defining actions that ignore some or all of the -// mock function arguments. For example, given -// -// MOCK_METHOD3(Foo, double(const string& label, double x, double y)); -// MOCK_METHOD3(Bar, double(int index, double x, double y)); -// -// instead of -// -// double DistanceToOriginWithLabel(const string& label, double x, double y) { -// return sqrt(x*x + y*y); -// } -// double DistanceToOriginWithIndex(int index, double x, double y) { -// return sqrt(x*x + y*y); -// } -// ... -// EXPECT_CALL(mock, Foo("abc", _, _)) -// .WillOnce(Invoke(DistanceToOriginWithLabel)); -// EXPECT_CALL(mock, Bar(5, _, _)) -// .WillOnce(Invoke(DistanceToOriginWithIndex)); -// -// you could write -// -// // We can declare any uninteresting argument as Unused. -// double DistanceToOrigin(Unused, double x, double y) { -// return sqrt(x*x + y*y); -// } -// ... -// EXPECT_CALL(mock, Foo("abc", _, _)).WillOnce(Invoke(DistanceToOrigin)); -// EXPECT_CALL(mock, Bar(5, _, _)).WillOnce(Invoke(DistanceToOrigin)); -typedef internal::IgnoredValue Unused; - -// Creates an action that does actions a1, a2, ..., sequentially in -// each invocation. All but the last action will have a readonly view of the -// arguments. -template -internal::DoAllAction::type...> DoAll( - Action&&... action) { - return {std::forward_as_tuple(std::forward(action)...)}; -} - -// WithArg(an_action) creates an action that passes the k-th -// (0-based) argument of the mock function to an_action and performs -// it. It adapts an action accepting one argument to one that accepts -// multiple arguments. For convenience, we also provide -// WithArgs(an_action) (defined below) as a synonym. -template -internal::WithArgsAction::type, k> -WithArg(InnerAction&& action) { - return {std::forward(action)}; -} - -// WithArgs(an_action) creates an action that passes -// the selected arguments of the mock function to an_action and -// performs it. It serves as an adaptor between actions with -// different argument lists. -template -internal::WithArgsAction::type, k, ks...> -WithArgs(InnerAction&& action) { - return {std::forward(action)}; -} - -// WithoutArgs(inner_action) can be used in a mock function with a -// non-empty argument list to perform inner_action, which takes no -// argument. In other words, it adapts an action accepting no -// argument to one that accepts (and ignores) arguments. -template -internal::WithArgsAction::type> -WithoutArgs(InnerAction&& action) { - return {std::forward(action)}; -} - -// Creates an action that returns 'value'. 'value' is passed by value -// instead of const reference - otherwise Return("string literal") -// will trigger a compiler error about using array as initializer. -template -internal::ReturnAction Return(R value) { - return internal::ReturnAction(std::move(value)); -} - -// Creates an action that returns NULL. -inline PolymorphicAction ReturnNull() { - return MakePolymorphicAction(internal::ReturnNullAction()); -} - -// Creates an action that returns from a void function. -inline PolymorphicAction Return() { - return MakePolymorphicAction(internal::ReturnVoidAction()); -} - -// Creates an action that returns the reference to a variable. -template -inline internal::ReturnRefAction ReturnRef(R& x) { // NOLINT - return internal::ReturnRefAction(x); -} - -// Prevent using ReturnRef on reference to temporary. -template -internal::ReturnRefAction ReturnRef(R&&) = delete; - -// Creates an action that returns the reference to a copy of the -// argument. The copy is created when the action is constructed and -// lives as long as the action. -template -inline internal::ReturnRefOfCopyAction ReturnRefOfCopy(const R& x) { - return internal::ReturnRefOfCopyAction(x); -} - -// Modifies the parent action (a Return() action) to perform a move of the -// argument instead of a copy. -// Return(ByMove()) actions can only be executed once and will assert this -// invariant. -template -internal::ByMoveWrapper ByMove(R x) { - return internal::ByMoveWrapper(std::move(x)); -} - -// Creates an action that returns an element of `vals`. Calling this action will -// repeatedly return the next value from `vals` until it reaches the end and -// will restart from the beginning. -template -internal::ReturnRoundRobinAction ReturnRoundRobin(std::vector vals) { - return internal::ReturnRoundRobinAction(std::move(vals)); -} - -// Creates an action that returns an element of `vals`. Calling this action will -// repeatedly return the next value from `vals` until it reaches the end and -// will restart from the beginning. -template -internal::ReturnRoundRobinAction ReturnRoundRobin( - std::initializer_list vals) { - return internal::ReturnRoundRobinAction(std::vector(vals)); -} - -// Creates an action that does the default action for the give mock function. -inline internal::DoDefaultAction DoDefault() { - return internal::DoDefaultAction(); -} - -// Creates an action that sets the variable pointed by the N-th -// (0-based) function argument to 'value'. -template -internal::SetArgumentPointeeAction SetArgPointee(T value) { - return {std::move(value)}; -} - -// The following version is DEPRECATED. -template -internal::SetArgumentPointeeAction SetArgumentPointee(T value) { - return {std::move(value)}; -} - -// Creates an action that sets a pointer referent to a given value. -template -PolymorphicAction > Assign(T1* ptr, T2 val) { - return MakePolymorphicAction(internal::AssignAction(ptr, val)); -} - -#if !GTEST_OS_WINDOWS_MOBILE - -// Creates an action that sets errno and returns the appropriate error. -template -PolymorphicAction > -SetErrnoAndReturn(int errval, T result) { - return MakePolymorphicAction( - internal::SetErrnoAndReturnAction(errval, result)); -} - -#endif // !GTEST_OS_WINDOWS_MOBILE - -// Various overloads for Invoke(). - -// Legacy function. -// Actions can now be implicitly constructed from callables. No need to create -// wrapper objects. -// This function exists for backwards compatibility. -template -typename std::decay::type Invoke(FunctionImpl&& function_impl) { - return std::forward(function_impl); -} - -// Creates an action that invokes the given method on the given object -// with the mock function's arguments. -template -internal::InvokeMethodAction Invoke(Class* obj_ptr, - MethodPtr method_ptr) { - return {obj_ptr, method_ptr}; -} - -// Creates an action that invokes 'function_impl' with no argument. -template -internal::InvokeWithoutArgsAction::type> -InvokeWithoutArgs(FunctionImpl function_impl) { - return {std::move(function_impl)}; -} - -// Creates an action that invokes the given method on the given object -// with no argument. -template -internal::InvokeMethodWithoutArgsAction InvokeWithoutArgs( - Class* obj_ptr, MethodPtr method_ptr) { - return {obj_ptr, method_ptr}; -} - -// Creates an action that performs an_action and throws away its -// result. In other words, it changes the return type of an_action to -// void. an_action MUST NOT return void, or the code won't compile. -template -inline internal::IgnoreResultAction IgnoreResult(const A& an_action) { - return internal::IgnoreResultAction(an_action); -} - -// Creates a reference wrapper for the given L-value. If necessary, -// you can explicitly specify the type of the reference. For example, -// suppose 'derived' is an object of type Derived, ByRef(derived) -// would wrap a Derived&. If you want to wrap a const Base& instead, -// where Base is a base class of Derived, just write: -// -// ByRef(derived) -// -// N.B. ByRef is redundant with std::ref, std::cref and std::reference_wrapper. -// However, it may still be used for consistency with ByMove(). -template -inline ::std::reference_wrapper ByRef(T& l_value) { // NOLINT - return ::std::reference_wrapper(l_value); -} - -// The ReturnNew(a1, a2, ..., a_k) action returns a pointer to a new -// instance of type T, constructed on the heap with constructor arguments -// a1, a2, ..., and a_k. The caller assumes ownership of the returned value. -template -internal::ReturnNewAction::type...> ReturnNew( - Params&&... params) { - return {std::forward_as_tuple(std::forward(params)...)}; -} - -// Action ReturnArg() returns the k-th argument of the mock function. -template -internal::ReturnArgAction ReturnArg() { - return {}; -} - -// Action SaveArg(pointer) saves the k-th (0-based) argument of the -// mock function to *pointer. -template -internal::SaveArgAction SaveArg(Ptr pointer) { - return {pointer}; -} - -// Action SaveArgPointee(pointer) saves the value pointed to -// by the k-th (0-based) argument of the mock function to *pointer. -template -internal::SaveArgPointeeAction SaveArgPointee(Ptr pointer) { - return {pointer}; -} - -// Action SetArgReferee(value) assigns 'value' to the variable -// referenced by the k-th (0-based) argument of the mock function. -template -internal::SetArgRefereeAction::type> SetArgReferee( - T&& value) { - return {std::forward(value)}; -} - -// Action SetArrayArgument(first, last) copies the elements in -// source range [first, last) to the array pointed to by the k-th -// (0-based) argument, which can be either a pointer or an -// iterator. The action does not take ownership of the elements in the -// source range. -template -internal::SetArrayArgumentAction SetArrayArgument(I1 first, - I2 last) { - return {first, last}; -} - -// Action DeleteArg() deletes the k-th (0-based) argument of the mock -// function. -template -internal::DeleteArgAction DeleteArg() { - return {}; -} - -// This action returns the value pointed to by 'pointer'. -template -internal::ReturnPointeeAction ReturnPointee(Ptr pointer) { - return {pointer}; -} - -// Action Throw(exception) can be used in a mock function of any type -// to throw the given exception. Any copyable value can be thrown. -#if GTEST_HAS_EXCEPTIONS -template -internal::ThrowAction::type> Throw(T&& exception) { - return {std::forward(exception)}; -} -#endif // GTEST_HAS_EXCEPTIONS - -namespace internal { - -// A macro from the ACTION* family (defined later in gmock-generated-actions.h) -// defines an action that can be used in a mock function. Typically, -// these actions only care about a subset of the arguments of the mock -// function. For example, if such an action only uses the second -// argument, it can be used in any mock function that takes >= 2 -// arguments where the type of the second argument is compatible. -// -// Therefore, the action implementation must be prepared to take more -// arguments than it needs. The ExcessiveArg type is used to -// represent those excessive arguments. In order to keep the compiler -// error messages tractable, we define it in the testing namespace -// instead of testing::internal. However, this is an INTERNAL TYPE -// and subject to change without notice, so a user MUST NOT USE THIS -// TYPE DIRECTLY. -struct ExcessiveArg {}; - -// Builds an implementation of an Action<> for some particular signature, using -// a class defined by an ACTION* macro. -template struct ActionImpl; - -template -struct ImplBase { - struct Holder { - // Allows each copy of the Action<> to get to the Impl. - explicit operator const Impl&() const { return *ptr; } - std::shared_ptr ptr; - }; - using type = typename std::conditional::value, - Impl, Holder>::type; -}; - -template -struct ActionImpl : ImplBase::type { - using Base = typename ImplBase::type; - using function_type = R(Args...); - using args_type = std::tuple; - - ActionImpl() = default; // Only defined if appropriate for Base. - explicit ActionImpl(std::shared_ptr impl) : Base{std::move(impl)} { } - - R operator()(Args&&... arg) const { - static constexpr size_t kMaxArgs = - sizeof...(Args) <= 10 ? sizeof...(Args) : 10; - return Apply(MakeIndexSequence{}, - MakeIndexSequence<10 - kMaxArgs>{}, - args_type{std::forward(arg)...}); - } - - template - R Apply(IndexSequence, IndexSequence, - const args_type& args) const { - // Impl need not be specific to the signature of action being implemented; - // only the implementing function body needs to have all of the specific - // types instantiated. Up to 10 of the args that are provided by the - // args_type get passed, followed by a dummy of unspecified type for the - // remainder up to 10 explicit args. - static constexpr ExcessiveArg kExcessArg{}; - return static_cast(*this).template gmock_PerformImpl< - /*function_type=*/function_type, /*return_type=*/R, - /*args_type=*/args_type, - /*argN_type=*/typename std::tuple_element::type...>( - /*args=*/args, std::get(args)..., - ((void)excess_id, kExcessArg)...); - } -}; - -// Stores a default-constructed Impl as part of the Action<>'s -// std::function<>. The Impl should be trivial to copy. -template -::testing::Action MakeAction() { - return ::testing::Action(ActionImpl()); -} - -// Stores just the one given instance of Impl. -template -::testing::Action MakeAction(std::shared_ptr impl) { - return ::testing::Action(ActionImpl(std::move(impl))); -} - -#define GMOCK_INTERNAL_ARG_UNUSED(i, data, el) \ - , const arg##i##_type& arg##i GTEST_ATTRIBUTE_UNUSED_ -#define GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_ \ - const args_type& args GTEST_ATTRIBUTE_UNUSED_ GMOCK_PP_REPEAT( \ - GMOCK_INTERNAL_ARG_UNUSED, , 10) - -#define GMOCK_INTERNAL_ARG(i, data, el) , const arg##i##_type& arg##i -#define GMOCK_ACTION_ARG_TYPES_AND_NAMES_ \ - const args_type& args GMOCK_PP_REPEAT(GMOCK_INTERNAL_ARG, , 10) - -#define GMOCK_INTERNAL_TEMPLATE_ARG(i, data, el) , typename arg##i##_type -#define GMOCK_ACTION_TEMPLATE_ARGS_NAMES_ \ - GMOCK_PP_TAIL(GMOCK_PP_REPEAT(GMOCK_INTERNAL_TEMPLATE_ARG, , 10)) - -#define GMOCK_INTERNAL_TYPENAME_PARAM(i, data, param) , typename param##_type -#define GMOCK_ACTION_TYPENAME_PARAMS_(params) \ - GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_TYPENAME_PARAM, , params)) - -#define GMOCK_INTERNAL_TYPE_PARAM(i, data, param) , param##_type -#define GMOCK_ACTION_TYPE_PARAMS_(params) \ - GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_TYPE_PARAM, , params)) - -#define GMOCK_INTERNAL_TYPE_GVALUE_PARAM(i, data, param) \ - , param##_type gmock_p##i -#define GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params) \ - GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_TYPE_GVALUE_PARAM, , params)) - -#define GMOCK_INTERNAL_GVALUE_PARAM(i, data, param) \ - , std::forward(gmock_p##i) -#define GMOCK_ACTION_GVALUE_PARAMS_(params) \ - GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_GVALUE_PARAM, , params)) - -#define GMOCK_INTERNAL_INIT_PARAM(i, data, param) \ - , param(::std::forward(gmock_p##i)) -#define GMOCK_ACTION_INIT_PARAMS_(params) \ - GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_INIT_PARAM, , params)) - -#define GMOCK_INTERNAL_FIELD_PARAM(i, data, param) param##_type param; -#define GMOCK_ACTION_FIELD_PARAMS_(params) \ - GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_FIELD_PARAM, , params) - -#define GMOCK_INTERNAL_ACTION(name, full_name, params) \ - template \ - class full_name { \ - public: \ - explicit full_name(GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) \ - : impl_(std::make_shared( \ - GMOCK_ACTION_GVALUE_PARAMS_(params))) { } \ - full_name(const full_name&) = default; \ - full_name(full_name&&) noexcept = default; \ - template \ - operator ::testing::Action() const { \ - return ::testing::internal::MakeAction(impl_); \ - } \ - private: \ - class gmock_Impl { \ - public: \ - explicit gmock_Impl(GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) \ - : GMOCK_ACTION_INIT_PARAMS_(params) {} \ - template \ - return_type gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_) const; \ - GMOCK_ACTION_FIELD_PARAMS_(params) \ - }; \ - std::shared_ptr impl_; \ - }; \ - template \ - inline full_name name( \ - GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) { \ - return full_name( \ - GMOCK_ACTION_GVALUE_PARAMS_(params)); \ - } \ - template \ - template \ - return_type full_name::gmock_Impl:: \ - gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const - -} // namespace internal - -// Similar to GMOCK_INTERNAL_ACTION, but no bound parameters are stored. -#define ACTION(name) \ - class name##Action { \ - public: \ - explicit name##Action() noexcept {} \ - name##Action(const name##Action&) noexcept {} \ - template \ - operator ::testing::Action() const { \ - return ::testing::internal::MakeAction(); \ - } \ - private: \ - class gmock_Impl { \ - public: \ - template \ - return_type gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_) const; \ - }; \ - }; \ - inline name##Action name() GTEST_MUST_USE_RESULT_; \ - inline name##Action name() { return name##Action(); } \ - template \ - return_type name##Action::gmock_Impl::gmock_PerformImpl( \ - GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const - -#define ACTION_P(name, ...) \ - GMOCK_INTERNAL_ACTION(name, name##ActionP, (__VA_ARGS__)) - -#define ACTION_P2(name, ...) \ - GMOCK_INTERNAL_ACTION(name, name##ActionP2, (__VA_ARGS__)) - -#define ACTION_P3(name, ...) \ - GMOCK_INTERNAL_ACTION(name, name##ActionP3, (__VA_ARGS__)) - -#define ACTION_P4(name, ...) \ - GMOCK_INTERNAL_ACTION(name, name##ActionP4, (__VA_ARGS__)) - -#define ACTION_P5(name, ...) \ - GMOCK_INTERNAL_ACTION(name, name##ActionP5, (__VA_ARGS__)) - -#define ACTION_P6(name, ...) \ - GMOCK_INTERNAL_ACTION(name, name##ActionP6, (__VA_ARGS__)) - -#define ACTION_P7(name, ...) \ - GMOCK_INTERNAL_ACTION(name, name##ActionP7, (__VA_ARGS__)) - -#define ACTION_P8(name, ...) \ - GMOCK_INTERNAL_ACTION(name, name##ActionP8, (__VA_ARGS__)) - -#define ACTION_P9(name, ...) \ - GMOCK_INTERNAL_ACTION(name, name##ActionP9, (__VA_ARGS__)) - -#define ACTION_P10(name, ...) \ - GMOCK_INTERNAL_ACTION(name, name##ActionP10, (__VA_ARGS__)) - -} // namespace testing - -#ifdef _MSC_VER -# pragma warning(pop) -#endif - -#endif // GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ diff --git a/tests/rocm_smi_test/gtest/googlemock/include/gmock/gmock-cardinalities.h b/tests/rocm_smi_test/gtest/googlemock/include/gmock/gmock-cardinalities.h deleted file mode 100644 index 48196dd2f4..0000000000 --- a/tests/rocm_smi_test/gtest/googlemock/include/gmock/gmock-cardinalities.h +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Google Mock - a framework for writing C++ mock classes. -// -// This file implements some commonly used cardinalities. More -// cardinalities can be defined by the user implementing the -// CardinalityInterface interface if necessary. - -// IWYU pragma: private, include "gmock/gmock.h" -// IWYU pragma: friend gmock/.* - -#ifndef GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_ -#define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_ - -#include -#include -#include // NOLINT -#include "gmock/internal/gmock-port.h" -#include "gtest/gtest.h" - -GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \ -/* class A needs to have dll-interface to be used by clients of class B */) - -namespace testing { - -// To implement a cardinality Foo, define: -// 1. a class FooCardinality that implements the -// CardinalityInterface interface, and -// 2. a factory function that creates a Cardinality object from a -// const FooCardinality*. -// -// The two-level delegation design follows that of Matcher, providing -// consistency for extension developers. It also eases ownership -// management as Cardinality objects can now be copied like plain values. - -// The implementation of a cardinality. -class CardinalityInterface { - public: - virtual ~CardinalityInterface() {} - - // Conservative estimate on the lower/upper bound of the number of - // calls allowed. - virtual int ConservativeLowerBound() const { return 0; } - virtual int ConservativeUpperBound() const { return INT_MAX; } - - // Returns true if and only if call_count calls will satisfy this - // cardinality. - virtual bool IsSatisfiedByCallCount(int call_count) const = 0; - - // Returns true if and only if call_count calls will saturate this - // cardinality. - virtual bool IsSaturatedByCallCount(int call_count) const = 0; - - // Describes self to an ostream. - virtual void DescribeTo(::std::ostream* os) const = 0; -}; - -// A Cardinality is a copyable and IMMUTABLE (except by assignment) -// object that specifies how many times a mock function is expected to -// be called. The implementation of Cardinality is just a std::shared_ptr -// to const CardinalityInterface. Don't inherit from Cardinality! -class GTEST_API_ Cardinality { - public: - // Constructs a null cardinality. Needed for storing Cardinality - // objects in STL containers. - Cardinality() {} - - // Constructs a Cardinality from its implementation. - explicit Cardinality(const CardinalityInterface* impl) : impl_(impl) {} - - // Conservative estimate on the lower/upper bound of the number of - // calls allowed. - int ConservativeLowerBound() const { return impl_->ConservativeLowerBound(); } - int ConservativeUpperBound() const { return impl_->ConservativeUpperBound(); } - - // Returns true if and only if call_count calls will satisfy this - // cardinality. - bool IsSatisfiedByCallCount(int call_count) const { - return impl_->IsSatisfiedByCallCount(call_count); - } - - // Returns true if and only if call_count calls will saturate this - // cardinality. - bool IsSaturatedByCallCount(int call_count) const { - return impl_->IsSaturatedByCallCount(call_count); - } - - // Returns true if and only if call_count calls will over-saturate this - // cardinality, i.e. exceed the maximum number of allowed calls. - bool IsOverSaturatedByCallCount(int call_count) const { - return impl_->IsSaturatedByCallCount(call_count) && - !impl_->IsSatisfiedByCallCount(call_count); - } - - // Describes self to an ostream - void DescribeTo(::std::ostream* os) const { impl_->DescribeTo(os); } - - // Describes the given actual call count to an ostream. - static void DescribeActualCallCountTo(int actual_call_count, - ::std::ostream* os); - - private: - std::shared_ptr impl_; -}; - -// Creates a cardinality that allows at least n calls. -GTEST_API_ Cardinality AtLeast(int n); - -// Creates a cardinality that allows at most n calls. -GTEST_API_ Cardinality AtMost(int n); - -// Creates a cardinality that allows any number of calls. -GTEST_API_ Cardinality AnyNumber(); - -// Creates a cardinality that allows between min and max calls. -GTEST_API_ Cardinality Between(int min, int max); - -// Creates a cardinality that allows exactly n calls. -GTEST_API_ Cardinality Exactly(int n); - -// Creates a cardinality from its implementation. -inline Cardinality MakeCardinality(const CardinalityInterface* c) { - return Cardinality(c); -} - -} // namespace testing - -GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 - -#endif // GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_ diff --git a/tests/rocm_smi_test/gtest/googlemock/include/gmock/gmock-function-mocker.h b/tests/rocm_smi_test/gtest/googlemock/include/gmock/gmock-function-mocker.h deleted file mode 100644 index 2de1d41b1a..0000000000 --- a/tests/rocm_smi_test/gtest/googlemock/include/gmock/gmock-function-mocker.h +++ /dev/null @@ -1,514 +0,0 @@ -// Copyright 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Google Mock - a framework for writing C++ mock classes. -// -// This file implements MOCK_METHOD. - -// IWYU pragma: private, include "gmock/gmock.h" -// IWYU pragma: friend gmock/.* - -#ifndef GOOGLEMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_FUNCTION_MOCKER_H_ // NOLINT -#define GOOGLEMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_FUNCTION_MOCKER_H_ // NOLINT - -#include // IWYU pragma: keep -#include // IWYU pragma: keep - -#include "gmock/gmock-spec-builders.h" -#include "gmock/internal/gmock-internal-utils.h" -#include "gmock/internal/gmock-pp.h" - -namespace testing { -namespace internal { -template -using identity_t = T; - -template -struct ThisRefAdjuster { - template - using AdjustT = typename std::conditional< - std::is_const::type>::value, - typename std::conditional::value, - const T&, const T&&>::type, - typename std::conditional::value, T&, - T&&>::type>::type; - - template - static AdjustT Adjust(const MockType& mock) { - return static_cast>(const_cast(mock)); - } -}; - -constexpr bool PrefixOf(const char* a, const char* b) { - return *a == 0 || (*a == *b && internal::PrefixOf(a + 1, b + 1)); -} - -template -constexpr bool StartsWith(const char (&prefix)[N], const char (&str)[M]) { - return N <= M && internal::PrefixOf(prefix, str); -} - -template -constexpr bool EndsWith(const char (&suffix)[N], const char (&str)[M]) { - return N <= M && internal::PrefixOf(suffix, str + M - N); -} - -template -constexpr bool Equals(const char (&a)[N], const char (&b)[M]) { - return N == M && internal::PrefixOf(a, b); -} - -template -constexpr bool ValidateSpec(const char (&spec)[N]) { - return internal::Equals("const", spec) || - internal::Equals("override", spec) || - internal::Equals("final", spec) || - internal::Equals("noexcept", spec) || - (internal::StartsWith("noexcept(", spec) && - internal::EndsWith(")", spec)) || - internal::Equals("ref(&)", spec) || - internal::Equals("ref(&&)", spec) || - (internal::StartsWith("Calltype(", spec) && - internal::EndsWith(")", spec)); -} - -} // namespace internal - -// The style guide prohibits "using" statements in a namespace scope -// inside a header file. However, the FunctionMocker class template -// is meant to be defined in the ::testing namespace. The following -// line is just a trick for working around a bug in MSVC 8.0, which -// cannot handle it if we define FunctionMocker in ::testing. -using internal::FunctionMocker; -} // namespace testing - -#define MOCK_METHOD(...) \ - GMOCK_PP_VARIADIC_CALL(GMOCK_INTERNAL_MOCK_METHOD_ARG_, __VA_ARGS__) - -#define GMOCK_INTERNAL_MOCK_METHOD_ARG_1(...) \ - GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) - -#define GMOCK_INTERNAL_MOCK_METHOD_ARG_2(...) \ - GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) - -#define GMOCK_INTERNAL_MOCK_METHOD_ARG_3(_Ret, _MethodName, _Args) \ - GMOCK_INTERNAL_MOCK_METHOD_ARG_4(_Ret, _MethodName, _Args, ()) - -#define GMOCK_INTERNAL_MOCK_METHOD_ARG_4(_Ret, _MethodName, _Args, _Spec) \ - GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Args); \ - GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Spec); \ - GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE( \ - GMOCK_PP_NARG0 _Args, GMOCK_INTERNAL_SIGNATURE(_Ret, _Args)); \ - GMOCK_INTERNAL_ASSERT_VALID_SPEC(_Spec) \ - GMOCK_INTERNAL_MOCK_METHOD_IMPL( \ - GMOCK_PP_NARG0 _Args, _MethodName, GMOCK_INTERNAL_HAS_CONST(_Spec), \ - GMOCK_INTERNAL_HAS_OVERRIDE(_Spec), GMOCK_INTERNAL_HAS_FINAL(_Spec), \ - GMOCK_INTERNAL_GET_NOEXCEPT_SPEC(_Spec), \ - GMOCK_INTERNAL_GET_CALLTYPE_SPEC(_Spec), \ - GMOCK_INTERNAL_GET_REF_SPEC(_Spec), \ - (GMOCK_INTERNAL_SIGNATURE(_Ret, _Args))) - -#define GMOCK_INTERNAL_MOCK_METHOD_ARG_5(...) \ - GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) - -#define GMOCK_INTERNAL_MOCK_METHOD_ARG_6(...) \ - GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) - -#define GMOCK_INTERNAL_MOCK_METHOD_ARG_7(...) \ - GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) - -#define GMOCK_INTERNAL_WRONG_ARITY(...) \ - static_assert( \ - false, \ - "MOCK_METHOD must be called with 3 or 4 arguments. _Ret, " \ - "_MethodName, _Args and optionally _Spec. _Args and _Spec must be " \ - "enclosed in parentheses. If _Ret is a type with unprotected commas, " \ - "it must also be enclosed in parentheses.") - -#define GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Tuple) \ - static_assert( \ - GMOCK_PP_IS_ENCLOSED_PARENS(_Tuple), \ - GMOCK_PP_STRINGIZE(_Tuple) " should be enclosed in parentheses.") - -#define GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE(_N, ...) \ - static_assert( \ - std::is_function<__VA_ARGS__>::value, \ - "Signature must be a function type, maybe return type contains " \ - "unprotected comma."); \ - static_assert( \ - ::testing::tuple_size::ArgumentTuple>::value == _N, \ - "This method does not take " GMOCK_PP_STRINGIZE( \ - _N) " arguments. Parenthesize all types with unprotected commas.") - -#define GMOCK_INTERNAL_ASSERT_VALID_SPEC(_Spec) \ - GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_ASSERT_VALID_SPEC_ELEMENT, ~, _Spec) - -#define GMOCK_INTERNAL_MOCK_METHOD_IMPL(_N, _MethodName, _Constness, \ - _Override, _Final, _NoexceptSpec, \ - _CallType, _RefSpec, _Signature) \ - typename ::testing::internal::Function::Result \ - GMOCK_INTERNAL_EXPAND(_CallType) \ - _MethodName(GMOCK_PP_REPEAT(GMOCK_INTERNAL_PARAMETER, _Signature, _N)) \ - GMOCK_PP_IF(_Constness, const, ) _RefSpec _NoexceptSpec \ - GMOCK_PP_IF(_Override, override, ) GMOCK_PP_IF(_Final, final, ) { \ - GMOCK_MOCKER_(_N, _Constness, _MethodName) \ - .SetOwnerAndName(this, #_MethodName); \ - return GMOCK_MOCKER_(_N, _Constness, _MethodName) \ - .Invoke(GMOCK_PP_REPEAT(GMOCK_INTERNAL_FORWARD_ARG, _Signature, _N)); \ - } \ - ::testing::MockSpec gmock_##_MethodName( \ - GMOCK_PP_REPEAT(GMOCK_INTERNAL_MATCHER_PARAMETER, _Signature, _N)) \ - GMOCK_PP_IF(_Constness, const, ) _RefSpec { \ - GMOCK_MOCKER_(_N, _Constness, _MethodName).RegisterOwner(this); \ - return GMOCK_MOCKER_(_N, _Constness, _MethodName) \ - .With(GMOCK_PP_REPEAT(GMOCK_INTERNAL_MATCHER_ARGUMENT, , _N)); \ - } \ - ::testing::MockSpec gmock_##_MethodName( \ - const ::testing::internal::WithoutMatchers&, \ - GMOCK_PP_IF(_Constness, const, )::testing::internal::Function< \ - GMOCK_PP_REMOVE_PARENS(_Signature)>*) const _RefSpec _NoexceptSpec { \ - return ::testing::internal::ThisRefAdjuster::Adjust(*this) \ - .gmock_##_MethodName(GMOCK_PP_REPEAT( \ - GMOCK_INTERNAL_A_MATCHER_ARGUMENT, _Signature, _N)); \ - } \ - mutable ::testing::FunctionMocker \ - GMOCK_MOCKER_(_N, _Constness, _MethodName) - -#define GMOCK_INTERNAL_EXPAND(...) __VA_ARGS__ - -// Valid modifiers. -#define GMOCK_INTERNAL_HAS_CONST(_Tuple) \ - GMOCK_PP_HAS_COMMA(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_DETECT_CONST, ~, _Tuple)) - -#define GMOCK_INTERNAL_HAS_OVERRIDE(_Tuple) \ - GMOCK_PP_HAS_COMMA( \ - GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_DETECT_OVERRIDE, ~, _Tuple)) - -#define GMOCK_INTERNAL_HAS_FINAL(_Tuple) \ - GMOCK_PP_HAS_COMMA(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_DETECT_FINAL, ~, _Tuple)) - -#define GMOCK_INTERNAL_GET_NOEXCEPT_SPEC(_Tuple) \ - GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_NOEXCEPT_SPEC_IF_NOEXCEPT, ~, _Tuple) - -#define GMOCK_INTERNAL_NOEXCEPT_SPEC_IF_NOEXCEPT(_i, _, _elem) \ - GMOCK_PP_IF( \ - GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_NOEXCEPT(_i, _, _elem)), \ - _elem, ) - -#define GMOCK_INTERNAL_GET_CALLTYPE_SPEC(_Tuple) \ - GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_CALLTYPE_SPEC_IF_CALLTYPE, ~, _Tuple) - -#define GMOCK_INTERNAL_CALLTYPE_SPEC_IF_CALLTYPE(_i, _, _elem) \ - GMOCK_PP_IF( \ - GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_CALLTYPE(_i, _, _elem)), \ - GMOCK_PP_CAT(GMOCK_INTERNAL_UNPACK_, _elem), ) - -#define GMOCK_INTERNAL_GET_REF_SPEC(_Tuple) \ - GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_REF_SPEC_IF_REF, ~, _Tuple) - -#define GMOCK_INTERNAL_REF_SPEC_IF_REF(_i, _, _elem) \ - GMOCK_PP_IF(GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_REF(_i, _, _elem)), \ - GMOCK_PP_CAT(GMOCK_INTERNAL_UNPACK_, _elem), ) - -#ifdef GMOCK_INTERNAL_STRICT_SPEC_ASSERT -#define GMOCK_INTERNAL_ASSERT_VALID_SPEC_ELEMENT(_i, _, _elem) \ - static_assert( \ - ::testing::internal::ValidateSpec(GMOCK_PP_STRINGIZE(_elem)), \ - "Token \'" GMOCK_PP_STRINGIZE( \ - _elem) "\' cannot be recognized as a valid specification " \ - "modifier. Is a ',' missing?"); -#else -#define GMOCK_INTERNAL_ASSERT_VALID_SPEC_ELEMENT(_i, _, _elem) \ - static_assert( \ - (GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_CONST(_i, _, _elem)) + \ - GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_OVERRIDE(_i, _, _elem)) + \ - GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_FINAL(_i, _, _elem)) + \ - GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_NOEXCEPT(_i, _, _elem)) + \ - GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_REF(_i, _, _elem)) + \ - GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_CALLTYPE(_i, _, _elem))) == 1, \ - GMOCK_PP_STRINGIZE( \ - _elem) " cannot be recognized as a valid specification modifier."); -#endif // GMOCK_INTERNAL_STRICT_SPEC_ASSERT - -// Modifiers implementation. -#define GMOCK_INTERNAL_DETECT_CONST(_i, _, _elem) \ - GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_CONST_I_, _elem) - -#define GMOCK_INTERNAL_DETECT_CONST_I_const , - -#define GMOCK_INTERNAL_DETECT_OVERRIDE(_i, _, _elem) \ - GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_OVERRIDE_I_, _elem) - -#define GMOCK_INTERNAL_DETECT_OVERRIDE_I_override , - -#define GMOCK_INTERNAL_DETECT_FINAL(_i, _, _elem) \ - GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_FINAL_I_, _elem) - -#define GMOCK_INTERNAL_DETECT_FINAL_I_final , - -#define GMOCK_INTERNAL_DETECT_NOEXCEPT(_i, _, _elem) \ - GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_NOEXCEPT_I_, _elem) - -#define GMOCK_INTERNAL_DETECT_NOEXCEPT_I_noexcept , - -#define GMOCK_INTERNAL_DETECT_REF(_i, _, _elem) \ - GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_REF_I_, _elem) - -#define GMOCK_INTERNAL_DETECT_REF_I_ref , - -#define GMOCK_INTERNAL_UNPACK_ref(x) x - -#define GMOCK_INTERNAL_DETECT_CALLTYPE(_i, _, _elem) \ - GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_CALLTYPE_I_, _elem) - -#define GMOCK_INTERNAL_DETECT_CALLTYPE_I_Calltype , - -#define GMOCK_INTERNAL_UNPACK_Calltype(...) __VA_ARGS__ - -// Note: The use of `identity_t` here allows _Ret to represent return types that -// would normally need to be specified in a different way. For example, a method -// returning a function pointer must be written as -// -// fn_ptr_return_t (*method(method_args_t...))(fn_ptr_args_t...) -// -// But we only support placing the return type at the beginning. To handle this, -// we wrap all calls in identity_t, so that a declaration will be expanded to -// -// identity_t method(method_args_t...) -// -// This allows us to work around the syntactic oddities of function/method -// types. -#define GMOCK_INTERNAL_SIGNATURE(_Ret, _Args) \ - ::testing::internal::identity_t( \ - GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_GET_TYPE, _, _Args)) - -#define GMOCK_INTERNAL_GET_TYPE(_i, _, _elem) \ - GMOCK_PP_COMMA_IF(_i) \ - GMOCK_PP_IF(GMOCK_PP_IS_BEGIN_PARENS(_elem), GMOCK_PP_REMOVE_PARENS, \ - GMOCK_PP_IDENTITY) \ - (_elem) - -#define GMOCK_INTERNAL_PARAMETER(_i, _Signature, _) \ - GMOCK_PP_COMMA_IF(_i) \ - GMOCK_INTERNAL_ARG_O(_i, GMOCK_PP_REMOVE_PARENS(_Signature)) \ - gmock_a##_i - -#define GMOCK_INTERNAL_FORWARD_ARG(_i, _Signature, _) \ - GMOCK_PP_COMMA_IF(_i) \ - ::std::forward(gmock_a##_i) - -#define GMOCK_INTERNAL_MATCHER_PARAMETER(_i, _Signature, _) \ - GMOCK_PP_COMMA_IF(_i) \ - GMOCK_INTERNAL_MATCHER_O(_i, GMOCK_PP_REMOVE_PARENS(_Signature)) \ - gmock_a##_i - -#define GMOCK_INTERNAL_MATCHER_ARGUMENT(_i, _1, _2) \ - GMOCK_PP_COMMA_IF(_i) \ - gmock_a##_i - -#define GMOCK_INTERNAL_A_MATCHER_ARGUMENT(_i, _Signature, _) \ - GMOCK_PP_COMMA_IF(_i) \ - ::testing::A() - -#define GMOCK_INTERNAL_ARG_O(_i, ...) \ - typename ::testing::internal::Function<__VA_ARGS__>::template Arg<_i>::type - -#define GMOCK_INTERNAL_MATCHER_O(_i, ...) \ - const ::testing::Matcher::template Arg<_i>::type>& - -#define MOCK_METHOD0(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 0, __VA_ARGS__) -#define MOCK_METHOD1(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 1, __VA_ARGS__) -#define MOCK_METHOD2(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 2, __VA_ARGS__) -#define MOCK_METHOD3(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 3, __VA_ARGS__) -#define MOCK_METHOD4(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 4, __VA_ARGS__) -#define MOCK_METHOD5(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 5, __VA_ARGS__) -#define MOCK_METHOD6(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 6, __VA_ARGS__) -#define MOCK_METHOD7(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 7, __VA_ARGS__) -#define MOCK_METHOD8(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 8, __VA_ARGS__) -#define MOCK_METHOD9(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 9, __VA_ARGS__) -#define MOCK_METHOD10(m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(, , m, 10, __VA_ARGS__) - -#define MOCK_CONST_METHOD0(m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, , m, 0, __VA_ARGS__) -#define MOCK_CONST_METHOD1(m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, , m, 1, __VA_ARGS__) -#define MOCK_CONST_METHOD2(m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, , m, 2, __VA_ARGS__) -#define MOCK_CONST_METHOD3(m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, , m, 3, __VA_ARGS__) -#define MOCK_CONST_METHOD4(m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, , m, 4, __VA_ARGS__) -#define MOCK_CONST_METHOD5(m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, , m, 5, __VA_ARGS__) -#define MOCK_CONST_METHOD6(m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, , m, 6, __VA_ARGS__) -#define MOCK_CONST_METHOD7(m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, , m, 7, __VA_ARGS__) -#define MOCK_CONST_METHOD8(m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, , m, 8, __VA_ARGS__) -#define MOCK_CONST_METHOD9(m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, , m, 9, __VA_ARGS__) -#define MOCK_CONST_METHOD10(m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, , m, 10, __VA_ARGS__) - -#define MOCK_METHOD0_T(m, ...) MOCK_METHOD0(m, __VA_ARGS__) -#define MOCK_METHOD1_T(m, ...) MOCK_METHOD1(m, __VA_ARGS__) -#define MOCK_METHOD2_T(m, ...) MOCK_METHOD2(m, __VA_ARGS__) -#define MOCK_METHOD3_T(m, ...) MOCK_METHOD3(m, __VA_ARGS__) -#define MOCK_METHOD4_T(m, ...) MOCK_METHOD4(m, __VA_ARGS__) -#define MOCK_METHOD5_T(m, ...) MOCK_METHOD5(m, __VA_ARGS__) -#define MOCK_METHOD6_T(m, ...) MOCK_METHOD6(m, __VA_ARGS__) -#define MOCK_METHOD7_T(m, ...) MOCK_METHOD7(m, __VA_ARGS__) -#define MOCK_METHOD8_T(m, ...) MOCK_METHOD8(m, __VA_ARGS__) -#define MOCK_METHOD9_T(m, ...) MOCK_METHOD9(m, __VA_ARGS__) -#define MOCK_METHOD10_T(m, ...) MOCK_METHOD10(m, __VA_ARGS__) - -#define MOCK_CONST_METHOD0_T(m, ...) MOCK_CONST_METHOD0(m, __VA_ARGS__) -#define MOCK_CONST_METHOD1_T(m, ...) MOCK_CONST_METHOD1(m, __VA_ARGS__) -#define MOCK_CONST_METHOD2_T(m, ...) MOCK_CONST_METHOD2(m, __VA_ARGS__) -#define MOCK_CONST_METHOD3_T(m, ...) MOCK_CONST_METHOD3(m, __VA_ARGS__) -#define MOCK_CONST_METHOD4_T(m, ...) MOCK_CONST_METHOD4(m, __VA_ARGS__) -#define MOCK_CONST_METHOD5_T(m, ...) MOCK_CONST_METHOD5(m, __VA_ARGS__) -#define MOCK_CONST_METHOD6_T(m, ...) MOCK_CONST_METHOD6(m, __VA_ARGS__) -#define MOCK_CONST_METHOD7_T(m, ...) MOCK_CONST_METHOD7(m, __VA_ARGS__) -#define MOCK_CONST_METHOD8_T(m, ...) MOCK_CONST_METHOD8(m, __VA_ARGS__) -#define MOCK_CONST_METHOD9_T(m, ...) MOCK_CONST_METHOD9(m, __VA_ARGS__) -#define MOCK_CONST_METHOD10_T(m, ...) MOCK_CONST_METHOD10(m, __VA_ARGS__) - -#define MOCK_METHOD0_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 0, __VA_ARGS__) -#define MOCK_METHOD1_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 1, __VA_ARGS__) -#define MOCK_METHOD2_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 2, __VA_ARGS__) -#define MOCK_METHOD3_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 3, __VA_ARGS__) -#define MOCK_METHOD4_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 4, __VA_ARGS__) -#define MOCK_METHOD5_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 5, __VA_ARGS__) -#define MOCK_METHOD6_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 6, __VA_ARGS__) -#define MOCK_METHOD7_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 7, __VA_ARGS__) -#define MOCK_METHOD8_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 8, __VA_ARGS__) -#define MOCK_METHOD9_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 9, __VA_ARGS__) -#define MOCK_METHOD10_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 10, __VA_ARGS__) - -#define MOCK_CONST_METHOD0_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 0, __VA_ARGS__) -#define MOCK_CONST_METHOD1_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 1, __VA_ARGS__) -#define MOCK_CONST_METHOD2_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 2, __VA_ARGS__) -#define MOCK_CONST_METHOD3_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 3, __VA_ARGS__) -#define MOCK_CONST_METHOD4_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 4, __VA_ARGS__) -#define MOCK_CONST_METHOD5_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 5, __VA_ARGS__) -#define MOCK_CONST_METHOD6_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 6, __VA_ARGS__) -#define MOCK_CONST_METHOD7_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 7, __VA_ARGS__) -#define MOCK_CONST_METHOD8_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 8, __VA_ARGS__) -#define MOCK_CONST_METHOD9_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 9, __VA_ARGS__) -#define MOCK_CONST_METHOD10_WITH_CALLTYPE(ct, m, ...) \ - GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 10, __VA_ARGS__) - -#define MOCK_METHOD0_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_METHOD0_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_METHOD1_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_METHOD1_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_METHOD2_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_METHOD2_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_METHOD3_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_METHOD3_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_METHOD4_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_METHOD4_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_METHOD5_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_METHOD5_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_METHOD6_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_METHOD6_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_METHOD7_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_METHOD7_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_METHOD8_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_METHOD8_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_METHOD9_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_METHOD9_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_METHOD10_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_METHOD10_WITH_CALLTYPE(ct, m, __VA_ARGS__) - -#define MOCK_CONST_METHOD0_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_CONST_METHOD0_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_CONST_METHOD1_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_CONST_METHOD1_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_CONST_METHOD2_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_CONST_METHOD2_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_CONST_METHOD3_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_CONST_METHOD3_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_CONST_METHOD4_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_CONST_METHOD4_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_CONST_METHOD5_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_CONST_METHOD5_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_CONST_METHOD6_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_CONST_METHOD6_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_CONST_METHOD7_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_CONST_METHOD7_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_CONST_METHOD8_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_CONST_METHOD8_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_CONST_METHOD9_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_CONST_METHOD9_WITH_CALLTYPE(ct, m, __VA_ARGS__) -#define MOCK_CONST_METHOD10_T_WITH_CALLTYPE(ct, m, ...) \ - MOCK_CONST_METHOD10_WITH_CALLTYPE(ct, m, __VA_ARGS__) - -#define GMOCK_INTERNAL_MOCK_METHODN(constness, ct, Method, args_num, ...) \ - GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE( \ - args_num, ::testing::internal::identity_t<__VA_ARGS__>); \ - GMOCK_INTERNAL_MOCK_METHOD_IMPL( \ - args_num, Method, GMOCK_PP_NARG0(constness), 0, 0, , ct, , \ - (::testing::internal::identity_t<__VA_ARGS__>)) - -#define GMOCK_MOCKER_(arity, constness, Method) \ - GTEST_CONCAT_TOKEN_(gmock##constness##arity##_##Method##_, __LINE__) - -#endif // GOOGLEMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_FUNCTION_MOCKER_H_ diff --git a/tests/rocm_smi_test/gtest/googlemock/include/gmock/gmock-matchers.h b/tests/rocm_smi_test/gtest/googlemock/include/gmock/gmock-matchers.h deleted file mode 100644 index 9584586481..0000000000 --- a/tests/rocm_smi_test/gtest/googlemock/include/gmock/gmock-matchers.h +++ /dev/null @@ -1,5603 +0,0 @@ -// Copyright 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Google Mock - a framework for writing C++ mock classes. -// -// The MATCHER* family of macros can be used in a namespace scope to -// define custom matchers easily. -// -// Basic Usage -// =========== -// -// The syntax -// -// MATCHER(name, description_string) { statements; } -// -// defines a matcher with the given name that executes the statements, -// which must return a bool to indicate if the match succeeds. Inside -// the statements, you can refer to the value being matched by 'arg', -// and refer to its type by 'arg_type'. -// -// The description string documents what the matcher does, and is used -// to generate the failure message when the match fails. Since a -// MATCHER() is usually defined in a header file shared by multiple -// C++ source files, we require the description to be a C-string -// literal to avoid possible side effects. It can be empty, in which -// case we'll use the sequence of words in the matcher name as the -// description. -// -// For example: -// -// MATCHER(IsEven, "") { return (arg % 2) == 0; } -// -// allows you to write -// -// // Expects mock_foo.Bar(n) to be called where n is even. -// EXPECT_CALL(mock_foo, Bar(IsEven())); -// -// or, -// -// // Verifies that the value of some_expression is even. -// EXPECT_THAT(some_expression, IsEven()); -// -// If the above assertion fails, it will print something like: -// -// Value of: some_expression -// Expected: is even -// Actual: 7 -// -// where the description "is even" is automatically calculated from the -// matcher name IsEven. -// -// Argument Type -// ============= -// -// Note that the type of the value being matched (arg_type) is -// determined by the context in which you use the matcher and is -// supplied to you by the compiler, so you don't need to worry about -// declaring it (nor can you). This allows the matcher to be -// polymorphic. For example, IsEven() can be used to match any type -// where the value of "(arg % 2) == 0" can be implicitly converted to -// a bool. In the "Bar(IsEven())" example above, if method Bar() -// takes an int, 'arg_type' will be int; if it takes an unsigned long, -// 'arg_type' will be unsigned long; and so on. -// -// Parameterizing Matchers -// ======================= -// -// Sometimes you'll want to parameterize the matcher. For that you -// can use another macro: -// -// MATCHER_P(name, param_name, description_string) { statements; } -// -// For example: -// -// MATCHER_P(HasAbsoluteValue, value, "") { return abs(arg) == value; } -// -// will allow you to write: -// -// EXPECT_THAT(Blah("a"), HasAbsoluteValue(n)); -// -// which may lead to this message (assuming n is 10): -// -// Value of: Blah("a") -// Expected: has absolute value 10 -// Actual: -9 -// -// Note that both the matcher description and its parameter are -// printed, making the message human-friendly. -// -// In the matcher definition body, you can write 'foo_type' to -// reference the type of a parameter named 'foo'. For example, in the -// body of MATCHER_P(HasAbsoluteValue, value) above, you can write -// 'value_type' to refer to the type of 'value'. -// -// We also provide MATCHER_P2, MATCHER_P3, ..., up to MATCHER_P$n to -// support multi-parameter matchers. -// -// Describing Parameterized Matchers -// ================================= -// -// The last argument to MATCHER*() is a string-typed expression. The -// expression can reference all of the matcher's parameters and a -// special bool-typed variable named 'negation'. When 'negation' is -// false, the expression should evaluate to the matcher's description; -// otherwise it should evaluate to the description of the negation of -// the matcher. For example, -// -// using testing::PrintToString; -// -// MATCHER_P2(InClosedRange, low, hi, -// std::string(negation ? "is not" : "is") + " in range [" + -// PrintToString(low) + ", " + PrintToString(hi) + "]") { -// return low <= arg && arg <= hi; -// } -// ... -// EXPECT_THAT(3, InClosedRange(4, 6)); -// EXPECT_THAT(3, Not(InClosedRange(2, 4))); -// -// would generate two failures that contain the text: -// -// Expected: is in range [4, 6] -// ... -// Expected: is not in range [2, 4] -// -// If you specify "" as the description, the failure message will -// contain the sequence of words in the matcher name followed by the -// parameter values printed as a tuple. For example, -// -// MATCHER_P2(InClosedRange, low, hi, "") { ... } -// ... -// EXPECT_THAT(3, InClosedRange(4, 6)); -// EXPECT_THAT(3, Not(InClosedRange(2, 4))); -// -// would generate two failures that contain the text: -// -// Expected: in closed range (4, 6) -// ... -// Expected: not (in closed range (2, 4)) -// -// Types of Matcher Parameters -// =========================== -// -// For the purpose of typing, you can view -// -// MATCHER_Pk(Foo, p1, ..., pk, description_string) { ... } -// -// as shorthand for -// -// template -// FooMatcherPk -// Foo(p1_type p1, ..., pk_type pk) { ... } -// -// When you write Foo(v1, ..., vk), the compiler infers the types of -// the parameters v1, ..., and vk for you. If you are not happy with -// the result of the type inference, you can specify the types by -// explicitly instantiating the template, as in Foo(5, -// false). As said earlier, you don't get to (or need to) specify -// 'arg_type' as that's determined by the context in which the matcher -// is used. You can assign the result of expression Foo(p1, ..., pk) -// to a variable of type FooMatcherPk. This -// can be useful when composing matchers. -// -// While you can instantiate a matcher template with reference types, -// passing the parameters by pointer usually makes your code more -// readable. If, however, you still want to pass a parameter by -// reference, be aware that in the failure message generated by the -// matcher you will see the value of the referenced object but not its -// address. -// -// Explaining Match Results -// ======================== -// -// Sometimes the matcher description alone isn't enough to explain why -// the match has failed or succeeded. For example, when expecting a -// long string, it can be very helpful to also print the diff between -// the expected string and the actual one. To achieve that, you can -// optionally stream additional information to a special variable -// named result_listener, whose type is a pointer to class -// MatchResultListener: -// -// MATCHER_P(EqualsLongString, str, "") { -// if (arg == str) return true; -// -// *result_listener << "the difference: " -/// << DiffStrings(str, arg); -// return false; -// } -// -// Overloading Matchers -// ==================== -// -// You can overload matchers with different numbers of parameters: -// -// MATCHER_P(Blah, a, description_string1) { ... } -// MATCHER_P2(Blah, a, b, description_string2) { ... } -// -// Caveats -// ======= -// -// When defining a new matcher, you should also consider implementing -// MatcherInterface or using MakePolymorphicMatcher(). These -// approaches require more work than the MATCHER* macros, but also -// give you more control on the types of the value being matched and -// the matcher parameters, which may leads to better compiler error -// messages when the matcher is used wrong. They also allow -// overloading matchers based on parameter types (as opposed to just -// based on the number of parameters). -// -// MATCHER*() can only be used in a namespace scope as templates cannot be -// declared inside of a local class. -// -// More Information -// ================ -// -// To learn more about using these macros, please search for 'MATCHER' -// on -// https://github.com/google/googletest/blob/master/docs/gmock_cook_book.md -// -// This file also implements some commonly used argument matchers. More -// matchers can be defined by the user implementing the -// MatcherInterface interface if necessary. -// -// See googletest/include/gtest/gtest-matchers.h for the definition of class -// Matcher, class MatcherInterface, and others. - -// IWYU pragma: private, include "gmock/gmock.h" -// IWYU pragma: friend gmock/.* - -#ifndef GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_MATCHERS_H_ -#define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_MATCHERS_H_ - -#include -#include -#include -#include -#include -#include -#include // NOLINT -#include -#include -#include -#include -#include - -#include "gmock/internal/gmock-internal-utils.h" -#include "gmock/internal/gmock-port.h" -#include "gmock/internal/gmock-pp.h" -#include "gtest/gtest.h" - -// MSVC warning C5046 is new as of VS2017 version 15.8. -#if defined(_MSC_VER) && _MSC_VER >= 1915 -#define GMOCK_MAYBE_5046_ 5046 -#else -#define GMOCK_MAYBE_5046_ -#endif - -GTEST_DISABLE_MSC_WARNINGS_PUSH_( - 4251 GMOCK_MAYBE_5046_ /* class A needs to have dll-interface to be used by - clients of class B */ - /* Symbol involving type with internal linkage not defined */) - -namespace testing { - -// To implement a matcher Foo for type T, define: -// 1. a class FooMatcherImpl that implements the -// MatcherInterface interface, and -// 2. a factory function that creates a Matcher object from a -// FooMatcherImpl*. -// -// The two-level delegation design makes it possible to allow a user -// to write "v" instead of "Eq(v)" where a Matcher is expected, which -// is impossible if we pass matchers by pointers. It also eases -// ownership management as Matcher objects can now be copied like -// plain values. - -// A match result listener that stores the explanation in a string. -class StringMatchResultListener : public MatchResultListener { - public: - StringMatchResultListener() : MatchResultListener(&ss_) {} - - // Returns the explanation accumulated so far. - std::string str() const { return ss_.str(); } - - // Clears the explanation accumulated so far. - void Clear() { ss_.str(""); } - - private: - ::std::stringstream ss_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(StringMatchResultListener); -}; - -// Anything inside the 'internal' namespace IS INTERNAL IMPLEMENTATION -// and MUST NOT BE USED IN USER CODE!!! -namespace internal { - -// The MatcherCastImpl class template is a helper for implementing -// MatcherCast(). We need this helper in order to partially -// specialize the implementation of MatcherCast() (C++ allows -// class/struct templates to be partially specialized, but not -// function templates.). - -// This general version is used when MatcherCast()'s argument is a -// polymorphic matcher (i.e. something that can be converted to a -// Matcher but is not one yet; for example, Eq(value)) or a value (for -// example, "hello"). -template -class MatcherCastImpl { - public: - static Matcher Cast(const M& polymorphic_matcher_or_value) { - // M can be a polymorphic matcher, in which case we want to use - // its conversion operator to create Matcher. Or it can be a value - // that should be passed to the Matcher's constructor. - // - // We can't call Matcher(polymorphic_matcher_or_value) when M is a - // polymorphic matcher because it'll be ambiguous if T has an implicit - // constructor from M (this usually happens when T has an implicit - // constructor from any type). - // - // It won't work to unconditionally implicit_cast - // polymorphic_matcher_or_value to Matcher because it won't trigger - // a user-defined conversion from M to T if one exists (assuming M is - // a value). - return CastImpl(polymorphic_matcher_or_value, - std::is_convertible>{}, - std::is_convertible{}); - } - - private: - template - static Matcher CastImpl(const M& polymorphic_matcher_or_value, - std::true_type /* convertible_to_matcher */, - std::integral_constant) { - // M is implicitly convertible to Matcher, which means that either - // M is a polymorphic matcher or Matcher has an implicit constructor - // from M. In both cases using the implicit conversion will produce a - // matcher. - // - // Even if T has an implicit constructor from M, it won't be called because - // creating Matcher would require a chain of two user-defined conversions - // (first to create T from M and then to create Matcher from T). - return polymorphic_matcher_or_value; - } - - // M can't be implicitly converted to Matcher, so M isn't a polymorphic - // matcher. It's a value of a type implicitly convertible to T. Use direct - // initialization to create a matcher. - static Matcher CastImpl(const M& value, - std::false_type /* convertible_to_matcher */, - std::true_type /* convertible_to_T */) { - return Matcher(ImplicitCast_(value)); - } - - // M can't be implicitly converted to either Matcher or T. Attempt to use - // polymorphic matcher Eq(value) in this case. - // - // Note that we first attempt to perform an implicit cast on the value and - // only fall back to the polymorphic Eq() matcher afterwards because the - // latter calls bool operator==(const Lhs& lhs, const Rhs& rhs) in the end - // which might be undefined even when Rhs is implicitly convertible to Lhs - // (e.g. std::pair vs. std::pair). - // - // We don't define this method inline as we need the declaration of Eq(). - static Matcher CastImpl(const M& value, - std::false_type /* convertible_to_matcher */, - std::false_type /* convertible_to_T */); -}; - -// This more specialized version is used when MatcherCast()'s argument -// is already a Matcher. This only compiles when type T can be -// statically converted to type U. -template -class MatcherCastImpl> { - public: - static Matcher Cast(const Matcher& source_matcher) { - return Matcher(new Impl(source_matcher)); - } - - private: - class Impl : public MatcherInterface { - public: - explicit Impl(const Matcher& source_matcher) - : source_matcher_(source_matcher) {} - - // We delegate the matching logic to the source matcher. - bool MatchAndExplain(T x, MatchResultListener* listener) const override { - using FromType = typename std::remove_cv::type>::type>::type; - using ToType = typename std::remove_cv::type>::type>::type; - // Do not allow implicitly converting base*/& to derived*/&. - static_assert( - // Do not trigger if only one of them is a pointer. That implies a - // regular conversion and not a down_cast. - (std::is_pointer::type>::value != - std::is_pointer::type>::value) || - std::is_same::value || - !std::is_base_of::value, - "Can't implicitly convert from to "); - - // Do the cast to `U` explicitly if necessary. - // Otherwise, let implicit conversions do the trick. - using CastType = - typename std::conditional::value, - T&, U>::type; - - return source_matcher_.MatchAndExplain(static_cast(x), - listener); - } - - void DescribeTo(::std::ostream* os) const override { - source_matcher_.DescribeTo(os); - } - - void DescribeNegationTo(::std::ostream* os) const override { - source_matcher_.DescribeNegationTo(os); - } - - private: - const Matcher source_matcher_; - }; -}; - -// This even more specialized version is used for efficiently casting -// a matcher to its own type. -template -class MatcherCastImpl> { - public: - static Matcher Cast(const Matcher& matcher) { return matcher; } -}; - -// Template specialization for parameterless Matcher. -template -class MatcherBaseImpl { - public: - MatcherBaseImpl() = default; - - template - operator ::testing::Matcher() const { // NOLINT(runtime/explicit) - return ::testing::Matcher(new - typename Derived::template gmock_Impl()); - } -}; - -// Template specialization for Matcher with parameters. -template

      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�dItX8YzkDU*ESj*6-_T zectCwXvO;SL2_3jYBbX*Gwm0>cEX#ZAI{RFW4g(Q29Fcce*JhK?Z{}_2 zney1%@NhNqTf79{4^u$h^x4N`!_3}aQo1SjzXUZhvDZORSpQPrZ{sQRNsY@h{u*%K z^XC3we_b2;Fh%t>wkM2)F7;y)I%r!G;{aL+cndety{kp>srhgdfXL^!;NWPaj zuzpi^#0M;P!{y5sNRi&+Rr!-8@E1=P9u)-2wJ%0k;rfWhY7qT>$R|nrt4XakZ&sJP zYDSb_;;sHIo_BphMz8UK0VWvvE)FwLb(3}sii7>uZ<7|1;PEL0F6edLc=@Mu9S8jT zf}41Ld>J#Q(7e_`GgrluJb^nbJMqHv^yj&6fB7PI~@a#6L^JNU+6C9{89x zdTHjr@DEJ(0{@Ng{~igrY4`t(f8h+Dkywt8#B~VJ_UX&(nBO2FO{YBe5;IZeASM{^ zBexJB&&2>wNqd0j5^g*KVLPYM1vWPN8B3oEmUoC+i#%bBqK!%jjC4zgW0(^Rg8_^U zr_@ejvjcx^DgTo?LmOq|k<7kdA|0W>Lpy_lOTGW7(#Lz~(~P1+AQcamS>*$tp}l#< z^=K*{s97bc?-1#-qC*N5&oi^i3Ev^XRmJsuDxM6p$~?cJhwF+CFe;vYv&v^LfT8DG zitF`MJSgUsg8oBEyNV87R6K&_m1q7#7(wtD*}tx1WgWkfd6)neD@ax5;^9+2jpW!28uOZbg@e z+N z-8fq8Aa%!BaK8F==pqp(&x&&g5k=BlJIRG)s>0Nt#)5s-Ptshv>SvOC8{VgmIgElV zMOl+ysBs*>Rp0u}5~zOi+@))2CaJ4|{h#mr@7>sYtG>k3W*pu7lc&wFE=v7`hkZuc z;>x9KWAdTZ^PJPK?E4OCKgZtomh!Nhu~U`aj`pSozj=Q7NH!)qZn-j_v;nW>$3&8E z^Lw9&SKKx4TVL?@cJi=O){A|v5++vTA8EQ*d{-r<3>$|b1%{1-2Uvuiqkgs|G8hXC zI>z<^{(_7Xlx?C`qoR7*#&h(41ma7j8K${Q)PICXOfBEvHJL{xmap$cige%bvXX9c zy;v+*p8xeBw?%b*zi2mV0QtDWTsUqGoX~&TO5$@hw$u)h9^x4vhiBS z$(ZodhTS!};o6)#GSccsME)`|(hrPepYtg>wn_Pk$b4#72CT;oZ!%--CFaMh1gh&| z0s7G{e+b=ugIl1^Y=g#4rtnH8=&7#@~8#5bU3i#7SQu0 zu>A`g;Qzw kDevAttribNameMap = { {kDevNumaNode, kDevNumaNodeFName}, {kDevGpuMetrics, kDevGpuMetricsFName}, {kDevGpuReset, kDevGpuResetFName}, + {kDevAvailableComputePartition, kDevAvailableComputePartitionFName}, {kDevComputePartition, kDevComputePartitionFName}, {kDevMemoryPartition, kDevMemoryPartitionFName}, }; @@ -930,6 +933,7 @@ int Device::readDevInfo(DevInfoTypes type, std::string *val) { case kDevVBiosVer: case kDevPCIEThruPut: case kDevSerialNumber: + case kDevAvailableComputePartition: case kDevComputePartition: case kDevMemoryPartition: return readDevInfoStr(type, val); diff --git a/src/rocm_smi_main.cc b/src/rocm_smi_main.cc index 187b25241e..16cd336e2a 100755 --- a/src/rocm_smi_main.cc +++ b/src/rocm_smi_main.cc @@ -75,7 +75,8 @@ static const char *kDeviceNamePrefix = "card"; static const char *kAMDMonitorTypes[] = {"radeon", "amdgpu", ""}; static const std::string amdSMI = "amd::smi::"; -const std::map amd::smi::RocmSMI::devInfoTypesStrings = { +const std::map +amd::smi::RocmSMI::devInfoTypesStrings = { {amd::smi::kDevPerfLevel, amdSMI + "kDevPerfLevel"}, {amd::smi::kDevOverDriveLevel, amdSMI + "kDevOverDriveLevel"}, {amd::smi::kDevMemOverDriveLevel, amdSMI + "kDevMemOverDriveLevel"}, @@ -142,6 +143,8 @@ const std::map amd::smi::RocmSMI::devInfoTy {amd::smi::kDevNumaNode, amdSMI + "kDevNumaNode"}, {amd::smi::kDevGpuMetrics, amdSMI + "kDevGpuMetrics"}, {amd::smi::kDevGpuReset, amdSMI + "kDevGpuReset"}, + {amd::smi::kDevAvailableComputePartition, amdSMI + + "kDevAvailableComputePartition"}, {amd::smi::kDevComputePartition, amdSMI + "kDevComputePartition"}, {amd::smi::kDevMemoryPartition, amdSMI + "kDevMemoryPartition"} }; diff --git a/src/rocm_smi_utils.cc b/src/rocm_smi_utils.cc index 3a2443ddd4..1d22d5d5c7 100755 --- a/src/rocm_smi_utils.cc +++ b/src/rocm_smi_utils.cc @@ -390,7 +390,7 @@ std::string readTemporaryFile(std::string path) { return fileContent; } -// Used to debug application temporary files (idenified by kTmpFilePrefix) +// Used to debug application temporary files (identified by kTmpFilePrefix) // and their content void displayAppTmpFilesContent() { std::vector tmpFiles = getListOfAppTmpFiles(); diff --git a/tests/rocm_smi_test/functional/computepartition_read_write.cc b/tests/rocm_smi_test/functional/computepartition_read_write.cc index 660866df68..1263669cb8 100755 --- a/tests/rocm_smi_test/functional/computepartition_read_write.cc +++ b/tests/rocm_smi_test/functional/computepartition_read_write.cc @@ -174,8 +174,8 @@ void TestComputePartitionReadWrite::Run(void) { IF_VERB(STANDARD) { if (err == RSMI_STATUS_INSUFFICIENT_SIZE) { std::cout << "\t**" - << "Confirmed RSMI_STATUS_INSUFFICIENT_SIZE was returned " - << "and size matches length requested." << std::endl; + << "Confirmed RSMI_STATUS_INSUFFICIENT_SIZE was returned" + << "\n\t and size matches length requested." << std::endl; } } @@ -275,19 +275,48 @@ void TestComputePartitionReadWrite::Run(void) { << computePartitionString(new_computePartition) << std::endl; } ret = rsmi_dev_compute_partition_set(dv_ind, new_computePartition); - CHK_ERR_ASRT(ret) - ret = rsmi_dev_compute_partition_get(dv_ind, current_char_computePartition, - 255); - CHK_ERR_ASRT(ret) + bool isSettingUnavailable = false; + ASSERT_TRUE((ret == RSMI_STATUS_SUCCESS) || + (ret == RSMI_STATUS_SETTING_UNAVAILABLE)); + if (ret == RSMI_STATUS_SETTING_UNAVAILABLE) { + isSettingUnavailable = true; + } + rsmi_status_t retGet = + rsmi_dev_compute_partition_get(dv_ind, current_char_computePartition, + 255); + CHK_ERR_ASRT(retGet) IF_VERB(STANDARD) { std::cout << "\t**" << "Current compute partition: " << current_char_computePartition << std::endl; } - EXPECT_EQ(RSMI_STATUS_SUCCESS, ret); - EXPECT_STREQ(computePartitionString(new_computePartition).c_str(), - current_char_computePartition); + if (isSettingUnavailable) { + ASSERT_EQ(RSMI_STATUS_SETTING_UNAVAILABLE, ret); + ASSERT_STRNE(computePartitionString(new_computePartition).c_str(), + current_char_computePartition); + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Confirmed after receiving " + << "RSMI_STATUS_SETTING_UNAVAILABLE,\n\t current compute " + << "partition (" << current_char_computePartition + << ") did not update to (" + << computePartitionString(new_computePartition) << ")" + << std::endl; + } + } else { + ASSERT_EQ(RSMI_STATUS_SUCCESS, ret); + ASSERT_STREQ(computePartitionString(new_computePartition).c_str(), + current_char_computePartition); + IF_VERB(STANDARD) { + std::cout << "\t**" + << "Confirmed current compute partition (" + << current_char_computePartition << ") matches" + << "\n\t requested compute partition (" + << computePartitionString(new_computePartition) << ")" + << std::endl; + } + } } /* TEST RETURN TO BOOT COMPUTE PARTITION SETTING */ @@ -309,15 +338,15 @@ void TestComputePartitionReadWrite::Run(void) { 255); CHK_ERR_ASRT(ret) IF_VERB(STANDARD) { - std::cout << "\t**" - << "Current compute partition: " << current_char_computePartition << std::endl; + std::cout << "\t**" << "Current compute partition: " + << current_char_computePartition << std::endl; } if (wasResetSuccess) { ASSERT_STRNE(oldPartition.c_str(), current_char_computePartition); IF_VERB(STANDARD) { std::cout << "\t**" << "Confirmed prior partition (" << oldPartition << ") is not " - << "equal to current partition (" + << "equal to current\n\t partition (" << current_char_computePartition << ")" << std::endl; } } else { @@ -325,16 +354,16 @@ void TestComputePartitionReadWrite::Run(void) { IF_VERB(STANDARD) { std::cout << "\t**" << "Confirmed prior partition (" << oldPartition << ") is equal" - << " to current partition (" + << " to current\n\t partition (" << current_char_computePartition << ")" << std::endl; } } - /* TEST RETURN TO ORIGINAL COMPUTE PARTITIONING SETTING */ + /* TEST RETURN TO ORIGINAL COMPUTE PARTITION SETTING */ IF_VERB(STANDARD) { std::cout << std::endl; std::cout << "\t**" - << "=========== TEST RETURN TO ORIGINAL COMPUTE PARTITIONING " + << "=========== TEST RETURN TO ORIGINAL COMPUTE PARTITION " << "SETTING ========" << std::endl; } new_computePartition @@ -351,8 +380,8 @@ void TestComputePartitionReadWrite::Run(void) { IF_VERB(STANDARD) { std::cout << "\t**" << "Attempted to set compute partition: " << computePartitionString(new_computePartition) << std::endl - << "\t**" - << "Current compute partition: " << current_char_computePartition + << "\t**" << "Current compute partition: " + << current_char_computePartition << std::endl; } EXPECT_EQ(RSMI_STATUS_SUCCESS, ret); From fcb6afa28914b92777399bbc89f6c8ed2d6a9c05 Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Mon, 27 Feb 2023 08:01:15 -0600 Subject: [PATCH 39/85] mem_use_pct uninitialized error Initialize mem_use_pct if the memory info is not available. Change-Id: Id8e285050149c51077356826c8f99719b473060d --- python_smi_tools/rocm_smi.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index f99b7f3261..d682ab4490 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -1542,13 +1542,12 @@ def showAllConcise(deviceList): else: gpu_busy = 'Unsupported' memInfo = getMemInfo(device, 'vram') - if memInfo[0] == None or memInfo[1] == None or float(memInfo[1]) == 0: - mem_use = 'N/A' - else: + mem_use_pct = 0 + if memInfo[0] != None and memInfo[1] != None and float(memInfo[1]) != 0: mem_use_pct = '% 3.0f%%' % (100 * (float(memInfo[0]) / float(memInfo[1]))) values['card%s' % (str(device))] = [device, temp, avgPwr, sclk, mclk, fan, str(perf).lower(), pwrCap, mem_use_pct, gpu_busy] - val_widths = {} + val_widths = {} for device in deviceList: val_widths[device] = [len(str(val)) + 2 for val in values['card%s' % (str(device))]] max_widths = head_widths From c252ecccd1a0bc76a23675e9330c86ce24ff90f6 Mon Sep 17 00:00:00 2001 From: Charis Poag Date: Thu, 2 Mar 2023 13:24:38 -0600 Subject: [PATCH 40/85] [SWDEV-335697 + SWDEV-342812] Fix NPS & Compute tests Updates: * Fixed rsmi_dev_compute_partition_get & rsmi_dev_nps_mode_get to properly check for invalid arguments * Updated compute partition & NPS mode tests - Now properly confirms the invalid argument is seen - Spacing for multiple devices is added to better see distinction between separate device's tests (for verbose output) - Changed expect to assert calls, so errors are observed faster for test failures - Fixed multiple device testing where a variable should have been unset, but having multiple devices caused it to set - Updated multiple device testing to iterate accross all devices (previously returned, instead of continuing checking support after RSMI_STATUS_NOT_SUPPORTED detected) - Fixed a few spelling errors & verbose output Change-Id: Ieba9e5b46763c6cd880fbf27fcdf58be8ecbc683 Signed-off-by: Charis Poag --- rocm_smi/docs/ROCm_SMI_Manual.pdf | Bin 527272 -> 527272 bytes src/rocm_smi.cc | 8 +-- .../functional/computepartition_read_write.cc | 51 +++++++----------- .../functional/npsmode_read_write.cc | 46 ++++++++-------- 4 files changed, 49 insertions(+), 56 deletions(-) diff --git a/rocm_smi/docs/ROCm_SMI_Manual.pdf b/rocm_smi/docs/ROCm_SMI_Manual.pdf index 3a3ec7aa6f9428734840c6ed2459fafa04032f93..e3d19724581c408237ba25668d396c2279d7db5d 100644 GIT binary patch delta 128 zcmZ26U17y^g@zW!7N!>F7M2#)7Pc+ymrrsU8yFcH8XKD$Prq}LT?)b7{{JNV5;kW? v10xq_Qxgkw3rA;XHzOBgClgawXE$?G3u9MT0~a$p1sg(2wm-YTe#i;{v>YWN delta 128 zcmZ26U17y^g@zW!7N!>F7M2#)7Pc+ymrrsU85tOw8W(partition); + new_nps_mode = static_cast(partition); IF_VERB(STANDARD) { std::cout << std::endl; std::cout << "\t**" @@ -265,8 +270,8 @@ void TestNPSModeReadWrite::Run(void) { std::cout << "\t**" << "Current nps mode: " << current_nps_mode << std::endl; } - EXPECT_EQ(RSMI_STATUS_SUCCESS, ret); - EXPECT_STREQ(npsModeString(new_nps_mode).c_str(), current_nps_mode); + ASSERT_EQ(RSMI_STATUS_SUCCESS, ret); + ASSERT_STREQ(npsModeString(new_nps_mode).c_str(), current_nps_mode); } /* TEST RETURN TO BOOT NPS MODE SETTING */ @@ -331,8 +336,7 @@ void TestNPSModeReadWrite::Run(void) { << "\t**" << "Current nps mode: " << current_nps_mode << std::endl; } - EXPECT_EQ(RSMI_STATUS_SUCCESS, ret); - EXPECT_STREQ(npsModeString(new_nps_mode).c_str(), current_nps_mode); - + ASSERT_EQ(RSMI_STATUS_SUCCESS, ret); + ASSERT_STREQ(npsModeString(new_nps_mode).c_str(), current_nps_mode); } } From 710649ab660d489c2b2f4688dd80705aa1ab69bb Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Thu, 2 Mar 2023 15:42:00 -0600 Subject: [PATCH 41/85] Filter out the GPUs not assigned to a container in showpid The process ids of other container are still visible in the sysfs file, filter it out to prevent crash. Change-Id: I665912cd09c606804186aff8cba5c24f5e58ded7 --- src/rocm_smi.cc | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/rocm_smi.cc b/src/rocm_smi.cc index 96073462dd..44d8d907eb 100755 --- a/src/rocm_smi.cc +++ b/src/rocm_smi.cc @@ -3315,11 +3315,23 @@ rsmi_compute_process_gpus_get(uint32_t pid, uint32_t *dv_indices, uint32_t i = 0; amd::smi::RocmSMI& smi = amd::smi::RocmSMI::getInstance(); + // filter out the devices not visible to container + auto& nodes = smi.kfd_node_map(); + for (auto nit = gpu_set.begin(); nit != gpu_set.end();) { + uint64_t gpu_id_val = (*nit); + auto kfd_ite = nodes.find(gpu_id_val); + if (kfd_ite == nodes.end()) { + nit = gpu_set.erase(nit); + } else { + nit++; + } + } + if (dv_indices != nullptr) { for (auto it = gpu_set.begin(); i < *num_devices && it != gpu_set.end(); ++it, ++i) { uint64_t gpu_id_val = (*it); - dv_indices[i] = smi.kfd_node_map()[gpu_id_val]->amdgpu_dev_index(); + dv_indices[i] = nodes[gpu_id_val]->amdgpu_dev_index(); } } From 14b86107a7f233ccd89b6f6c8d3dbb41184c503c Mon Sep 17 00:00:00 2001 From: Ranjith Ramakrishnan Date: Fri, 10 Mar 2023 08:55:39 -0800 Subject: [PATCH 42/85] SWDEV-366831 - Compile time flag to switch between #warning and #error message Using backward compatibility paths will provide an #error message. Compile time option added to enable/disable the #error message. Disabling the same will provide a #warning message Change-Id: Ib49633501aa6eb6d97158b1ecfc47de6f18fba85 --- CMakeLists.txt | 15 +++++++++++++++ rocm_smi-backward-compat.cmake | 9 ++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c3446fd4e..5635238099 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -148,6 +148,21 @@ add_subdirectory("oam") option(FILE_REORG_BACKWARD_COMPATIBILITY "Enable File Reorg with backward compatibility" ON) if(FILE_REORG_BACKWARD_COMPATIBILITY) +# To enable/disable #error in wrapper header files + if(NOT DEFINED ROCM_HEADER_WRAPPER_WERROR) + if(DEFINED ENV{ROCM_HEADER_WRAPPER_WERROR}) + set(ROCM_HEADER_WRAPPER_WERROR "$ENV{ROCM_HEADER_WRAPPER_WERROR}" + CACHE STRING "Header wrapper warnings as errors.") + else() + set(ROCM_HEADER_WRAPPER_WERROR "ON" CACHE STRING "Header wrapper warnings as errors.") + endif() + endif() + if(ROCM_HEADER_WRAPPER_WERROR) + set(deprecated_error 1) + else() + set(deprecated_error 0) + endif() + include(rocm_smi-backward-compat.cmake) endif() diff --git a/rocm_smi-backward-compat.cmake b/rocm_smi-backward-compat.cmake index 5f89f2e7f5..fe447f1863 100644 --- a/rocm_smi-backward-compat.cmake +++ b/rocm_smi-backward-compat.cmake @@ -62,11 +62,18 @@ function(create_header_template) #ifndef @include_guard@ #define @include_guard@ -#if defined(__GNUC__) +#ifndef ROCM_HEADER_WRAPPER_WERROR +#define ROCM_HEADER_WRAPPER_WERROR @deprecated_error@ +#endif +#if ROCM_HEADER_WRAPPER_WERROR /* ROCM_HEADER_WRAPPER_WERROR 1 */ #error \"This file is deprecated. Use file from include path /opt/rocm-ver/include/ and prefix with @prefix_name@\" +#else /* ROCM_HEADER_WRAPPER_WERROR 0 */ +#if defined(__GNUC__) +#warning \"This file is deprecated. Use file from include path /opt/rocm-ver/include/ and prefix with @prefix_name@\" #else #pragma message(\"This file is deprecated. Use file from include path /opt/rocm-ver/include/ and prefix with @prefix_name@\") #endif +#endif /* ROCM_HEADER_WRAPPER_WERROR */ @include_statements@ From 1b7eb4e1f4b325b1eec6498a6eb58aec32732301 Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Mon, 13 Mar 2023 09:27:19 -0500 Subject: [PATCH 43/85] Fix cppcheck static analysis report warning Fix some warning from static anaysis tool. Change-Id: I7e8c2f5d6f79aff5fdcad81b1fd832900f213c47 --- oam/example/oam_example.c | 2 +- oam/src/amd_oam.cc | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/oam/example/oam_example.c b/oam/example/oam_example.c index 232fd205af..8d8a106a91 100644 --- a/oam/example/oam_example.c +++ b/oam/example/oam_example.c @@ -51,7 +51,7 @@ int main() // amd_oam_ops.get_mapi_version(&version); if (!amd_oam_ops.discover_devices(&dev_cnt)) - printf("%d AMD devices are discovered\n", dev_cnt); + printf("%u AMD devices are discovered\n", dev_cnt); if (!dev_cnt) { printf("No devices are found.\n"); return amd_oam_ops.free(); diff --git a/oam/src/amd_oam.cc b/oam/src/amd_oam.cc index 1262fcc9e8..8d63d94f40 100755 --- a/oam/src/amd_oam.cc +++ b/oam/src/amd_oam.cc @@ -250,7 +250,7 @@ int amdoam_get_sensors_info(uint32_t device_id, oam_sensor_type_t type, case OAM_SENSOR_TYPE_POWER: for (i = 0; i < num_sensors; i++) { snprintf(sensor_info[i].sensor_name, OAM_SENSOR_NAME_MAX, - "POWER_SENSOR_%d", i+1); + "POWER_SENSOR_%u", i+1); sensor_info[i].sensor_type = type; status = rsmi_dev_power_ave_get(device_id, i, reinterpret_cast(&sensor_info[i].value)); @@ -262,7 +262,7 @@ int amdoam_get_sensors_info(uint32_t device_id, oam_sensor_type_t type, case OAM_SENSOR_TYPE_VOLTAGE: for (i = 0; i < num_sensors; i++) { snprintf(sensor_info[i].sensor_name, OAM_SENSOR_NAME_MAX, - "VOLTAGE_SENSOR_%d", i); + "VOLTAGE_SENSOR_%u", i); sensor_info[i].sensor_type = type; status = rsmi_dev_volt_metric_get(device_id, RSMI_VOLT_TYPE_VDDGFX, RSMI_VOLT_CURRENT, &sensor_info[i].value); @@ -274,7 +274,7 @@ int amdoam_get_sensors_info(uint32_t device_id, oam_sensor_type_t type, case OAM_SENSOR_TYPE_TEMP: for (i = 0; i < num_sensors; i++) { snprintf(sensor_info[i].sensor_name, OAM_SENSOR_NAME_MAX, - "TEMP_SENSOR_%d", i+1); + "TEMP_SENSOR_%u", i+1); sensor_info[i].sensor_type = type; status = rsmi_dev_temp_metric_get(device_id, i, RSMI_TEMP_CURRENT, &sensor_info[i].value); @@ -286,7 +286,7 @@ int amdoam_get_sensors_info(uint32_t device_id, oam_sensor_type_t type, case OAM_SENSOR_TYPE_FAN_SPEED: for (i = 0; i < num_sensors; i++) { snprintf(sensor_info[i].sensor_name, OAM_SENSOR_NAME_MAX, - "FAN_SENSOR_%d", i+1); + "FAN_SENSOR_%u", i+1); sensor_info[i].sensor_type = type; status = rsmi_dev_fan_speed_get(device_id, i, &sensor_info[i].value); if (status != RSMI_STATUS_SUCCESS) From f44d1ea8bcfc55ad662b80ef715df274f341679d Mon Sep 17 00:00:00 2001 From: Charis Poag Date: Fri, 17 Mar 2023 15:04:34 -0500 Subject: [PATCH 44/85] [SWDEV-387906] Fix rocm-smi initialize crash Fix was needed due to hwmon updates. Several voltage sensors (ex. vddgfx/vddnb) are unsupported or not applicable to upcoming hardware. This was not the case for previous hardware sensors, resulting in the rocm-smi crash observed. Change-Id: Ib8593e10811638def26fc7a1eda29309e328db09 Signed-off-by: Charis Poag --- include/rocm_smi/rocm_smi_monitor.h | 2 +- src/rocm_smi_monitor.cc | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/include/rocm_smi/rocm_smi_monitor.h b/include/rocm_smi/rocm_smi_monitor.h index c6bba27a60..648e159b65 100755 --- a/include/rocm_smi/rocm_smi_monitor.h +++ b/include/rocm_smi/rocm_smi_monitor.h @@ -115,6 +115,7 @@ class Monitor { std::string path_; const RocmSMI_env_vars *env_; std::map temp_type_index_map_; + std::map volt_type_index_map_; // This map uses a 64b index instead of 32b (unlike temp_type_index_map_) // for flexibility and simplicity. Currently, some parts of the @@ -124,7 +125,6 @@ class Monitor { // a 64b value. Also, if we need to encode anything else, 64b will give // us more room to do so, without excessive changes. std::map index_temp_type_map_; - std::map volt_type_index_map_; std::map index_volt_type_map_; }; diff --git a/src/rocm_smi_monitor.cc b/src/rocm_smi_monitor.cc index 15c995ebae..b493113a54 100755 --- a/src/rocm_smi_monitor.cc +++ b/src/rocm_smi_monitor.cc @@ -367,15 +367,16 @@ Monitor::setVoltSensorLabelMap(void) { } auto add_volt_sensor_entry = [&](uint32_t file_index) { ret = readMonitor(kMonVoltLabel, file_index, &type_str); - rsmi_voltage_type_t t_type = kVoltSensorNameMap.at(type_str); + rsmi_voltage_type_t t_type; + // If readMonitor fails, there is no label file for the file_index. // In that case, map the type to file index 0, which is not supported // and will fail appropriately later when we check for support. if (ret) { - volt_type_index_map_.insert({t_type, 0}); index_volt_type_map_.insert({file_index, RSMI_VOLT_TYPE_INVALID}); } else { - volt_type_index_map_.insert({t_type, file_index}); + t_type = kVoltSensorNameMap.at(type_str); + volt_type_index_map_[t_type] = file_index; index_volt_type_map_.insert({file_index, t_type}); } return 0; From 778f3b7fdcf8d64046ee4c9102e9c9101508c376 Mon Sep 17 00:00:00 2001 From: AravindanC Date: Fri, 25 Nov 2022 20:55:49 -0800 Subject: [PATCH 45/85] SWDEV-351540 - ASAN packaging for rocm_smi_lib Change-Id: Iab354d02d261a0270a3d118b825835fc6f021c15 --- CMakeLists.txt | 79 ++++++++++++++++--- oam/CMakeLists.txt | 11 ++- rocm_smi-backward-compat.cmake | 16 +++- rocm_smi/CMakeLists.txt | 35 +++++--- .../gtest/googletest/CMakeLists.txt | 6 +- 5 files changed, 116 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5635238099..b6104c02e1 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -143,10 +143,42 @@ set(CMN_INC_LIST ${CMN_INC_LIST} "${COMMON_INC_DIR}/rocm_smi_io_link.h") set(CMN_INC_LIST ${CMN_INC_LIST} "${COMMON_INC_DIR}/rocm_smi.h") set(CMN_INC_LIST ${CMN_INC_LIST} "${SHR_MUTEX_DIR}/shared_mutex.h") +## set components +if(ENABLE_ASAN_PACKAGING) + # ASAN Package requires only asan component with libraries and license file + set(CPACK_COMPONENTS_ALL asan) +else() + set(CPACK_COMPONENTS_ALL dev) +endif() + +# Enable Component Mode & Install Settings +set(CPACK_DEB_COMPONENT_INSTALL ON) +set(CPACK_RPM_COMPONENT_INSTALL ON) + +#Component Specific Configuration/Flags +set(CPACK_DEBIAN_ASAN_PACKAGE_NAME ${ROCM_SMI_PACKAGE}-asan) +set(CPACK_DEBIAN_DEV_PACKAGE_NAME ${ROCM_SMI_PACKAGE}) +set(CPACK_RPM_ASAN_PACKAGE_NAME ${ROCM_SMI_PACKAGE}-asan) +set(CPACK_RPM_DEV_PACKAGE_NAME ${ROCM_SMI_PACKAGE}) + +set (CPACK_DEBIAN_ASAN_PACKAGE_PROVIDES "${ROCM_SMI_PACKAGE}-asan") +set (CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS "python3, rocm-core-asan") +set (CPACK_DEBIAN_DEV_PACKAGE_PROVIDES "rocm-smi") +set (CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "python3, rocm-core") +set (CPACK_RPM_ASAN_PACKAGE_PROVIDES "${ROCM_SMI_PACKAGE}-asan") +set (CPACK_RPM_ASAN_PACKAGE_REQUIRES "python3, rocm-core-asan") +set (CPACK_RPM_DEV_PACKAGE_PROVIDES "rocm-smi") +set (CPACK_RPM_DEV_PACKAGE_REQUIRES "python3, rocm-core") + + add_subdirectory("rocm_smi") add_subdirectory("oam") -option(FILE_REORG_BACKWARD_COMPATIBILITY "Enable File Reorg with backward compatibility" ON) +# Disable file reorg backward compatibility for ASAN packaging +if(NOT ENABLE_ASAN_PACKAGING) + option(FILE_REORG_BACKWARD_COMPATIBILITY "Enable File Reorg with backward compatibility" ON) +endif() + if(FILE_REORG_BACKWARD_COMPATIBILITY) # To enable/disable #error in wrapper header files if(NOT DEFINED ROCM_HEADER_WRAPPER_WERROR) @@ -166,11 +198,12 @@ if(FILE_REORG_BACKWARD_COMPATIBILITY) include(rocm_smi-backward-compat.cmake) endif() +include(CMakePackageConfigHelpers) + set(LIB_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}") set(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}") set(BIN_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") -include(CMakePackageConfigHelpers) configure_package_config_file( rocm_smi-config.cmake.in @@ -201,14 +234,22 @@ export(TARGETS ${ROCM_SMI_TARGET} ${OAM_TARGET} # Export the package for use from the build-tree # (this registers the build-tree with a global CMake-registry) export(PACKAGE rocm_smi) + # Create the rocm_smiConfig.cmake and rocm_smiConfigVersion files # ... for the build tree -install(EXPORT rocm_smiTargets DESTINATION - "${CMAKE_INSTALL_LIBDIR}/cmake/${ROCM_SMI}" COMPONENT dev) +install(EXPORT rocm_smiTargets + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${ROCM_SMI}" + COMPONENT dev) #License file set(CPACK_RPM_PACKAGE_LICENSE "NCSA") -install( FILES ${CPACK_RESOURCE_FILE_LICENSE} DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/${ROCM_SMI} RENAME LICENSE.txt) +# install license file in share/doc/rocm_smi-asan folder +install(FILES ${CPACK_RESOURCE_FILE_LICENSE} + DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/${ROCM_SMI}-asan RENAME LICENSE.txt + COMPONENT asan) +install( FILES ${CPACK_RESOURCE_FILE_LICENSE} + DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/${ROCM_SMI} RENAME LICENSE.txt + COMPONENT dev) ########################### # Packaging directives @@ -216,7 +257,11 @@ install( FILES ${CPACK_RESOURCE_FILE_LICENSE} DESTINATION ${CMAKE_INSTALL_DATADI set(CPACK_GENERATOR "DEB;RPM" CACHE STRING "Default packaging generators.") set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/rocm" CACHE STRING "Default packaging prefix.") set ( ENABLE_LDCONFIG ON CACHE BOOL "Set library links and caches using ldconfig.") -set(CPACK_PACKAGE_NAME ${ROCM_SMI_PACKAGE}) +if( ENABLE_ASAN_PACKAGING ) + set(CPACK_PACKAGE_NAME ${ROCM_SMI_PACKAGE}-asan) +else() + set(CPACK_PACKAGE_NAME ${ROCM_SMI_PACKAGE}) +endif() set(CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc.") set(CPACK_PACKAGE_CONTACT "RocmSMILib Support ") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "AMD System Management libraries") @@ -236,8 +281,8 @@ else() set(CPACK_DEBIAN_PACKAGE_RELEASE "local") endif() set (CPACK_DEBIAN_PACKAGE_PROVIDES "rocm-smi") -set (CPACK_DEBIAN_PACKAGE_SUGGESTS "sudo") set (CPACK_DEBIAN_PACKAGE_DEPENDS "python3, rocm-core") +set (CPACK_DEBIAN_PACKAGE_SUGGESTS "sudo") ## Process the Debian install/remove scripts to update the CPACK variables configure_file ( ${CMAKE_CURRENT_SOURCE_DIR}/DEBIAN/postinst.in DEBIAN/postinst @ONLY ) @@ -279,8 +324,24 @@ set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") set(CPACK_RPM_FILE_NAME "RPM-DEFAULT") # Remove dependency on rocm-core if -DROCM_DEP_ROCMCORE=ON not given to cmake if(NOT ROCM_DEP_ROCMCORE) - string(REGEX REPLACE ",? ?rocm-core" "" CPACK_RPM_PACKAGE_REQUIRES ${CPACK_RPM_PACKAGE_REQUIRES}) - string(REGEX REPLACE ",? ?rocm-core" "" CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS}) + string(REGEX REPLACE ",? ?rocm-core-asan" "" CPACK_RPM_ASAN_PACKAGE_REQUIRES ${CPACK_RPM_ASAN_PACKAGE_REQUIRES}) + string(REGEX REPLACE ",? ?rocm-core-asan" "" CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS}) + string(REGEX REPLACE ",? ?rocm-core" "" CPACK_RPM_DEV_PACKAGE_REQUIRES ${CPACK_RPM_DEV_PACKAGE_REQUIRES}) + string(REGEX REPLACE ",? ?rocm-core" "" CPACK_DEBIAN_DEV_PACKAGE_DEPENDS ${CPACK_DEBIAN_DEV_PACKAGE_DEPENDS}) + string(REGEX REPLACE ",? ?rocm-core" "" CPACK_RPM_PACKAGE_REQUIRES ${CPACK_RPM_PACKAGE_REQUIRES}) + string(REGEX REPLACE ",? ?rocm-core" "" CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS}) endif() include (CPack) + +cpack_add_component( + dev + DISPLAY_NAME "Development" + DESCRIPTION "Development needed header files for ROCM-SMI" + DEPENDS dev) + +cpack_add_component( + asan + DISPLAY_NAME "ASAN" + DESCRIPTION "ASAN libraries for the ROCM-SMI" + DEPENDS asan) diff --git a/oam/CMakeLists.txt b/oam/CMakeLists.txt index 7e96c85a49..dc674b0bb0 100644 --- a/oam/CMakeLists.txt +++ b/oam/CMakeLists.txt @@ -97,16 +97,19 @@ target_include_directories(${OAM_TARGET} "$" "$") - ## Add the install directives for the runtime library. install(TARGETS ${OAM_TARGET} EXPORT rocm_smiTargets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - COMPONENT ${OAM_COMPONENT}) + COMPONENT dev) +install(TARGETS ${OAM_TARGET} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT asan) + install(FILES ${COMMON_SRC_ROOT}/oam/include/oam/oam_mapi.h ${COMMON_SRC_ROOT}/oam/include/oam/amd_oam.h - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/oam) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/oam + COMPONENT dev) # Generate Doxygen documentation if (DOXYGEN_FOUND) diff --git a/rocm_smi-backward-compat.cmake b/rocm_smi-backward-compat.cmake index fe447f1863..d53542b8a7 100644 --- a/rocm_smi-backward-compat.cmake +++ b/rocm_smi-backward-compat.cmake @@ -184,9 +184,17 @@ endfunction() create_header_template() #Use template header file and generater wrapper header files generate_wrapper_header() -install(DIRECTORY ${RSMI_WRAPPER_INC_DIR} DESTINATION ${ROCM_SMI}/include) -install(DIRECTORY ${OAM_WRAPPER_INC_DIR} DESTINATION ${OAM_TARGET_NAME}/include) +install(DIRECTORY ${RSMI_WRAPPER_INC_DIR} + DESTINATION ${ROCM_SMI}/include + COMPONENT dev) +install(DIRECTORY ${OAM_WRAPPER_INC_DIR} + DESTINATION ${OAM_TARGET_NAME}/include + COMPONENT dev) # Create symlink to library files create_library_symlink() -install(DIRECTORY ${RSMI_WRAPPER_LIB_DIR} DESTINATION ${ROCM_SMI} COMPONENT lib${ROCM_SMI}) -install(DIRECTORY ${OAM_WRAPPER_LIB_DIR} DESTINATION ${OAM_TARGET_NAME} COMPONENT lib${OAM_TARGET_NAME} ) +install(DIRECTORY ${RSMI_WRAPPER_LIB_DIR} + DESTINATION ${ROCM_SMI} + COMPONENT dev) +install(DIRECTORY ${OAM_WRAPPER_LIB_DIR} + DESTINATION ${OAM_TARGET_NAME} + COMPONENT dev ) diff --git a/rocm_smi/CMakeLists.txt b/rocm_smi/CMakeLists.txt index 8401dbe858..9b506d573e 100755 --- a/rocm_smi/CMakeLists.txt +++ b/rocm_smi/CMakeLists.txt @@ -107,6 +107,7 @@ if ("${CMAKE_BUILD_TYPE}" STREQUAL Release) POST_BUILD COMMAND ${CMAKE_STRIP} lib${ROCM_SMI_TARGET}.so.${SO_VERSION_STRING}) endif() endif () + #file reorganization changes #rocm_smi.py moved to libexec/rocm_smi. so creating rocm-smi symlink file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) @@ -119,23 +120,31 @@ add_custom_target(link-rocm-smi ALL install(TARGETS ${ROCM_SMI_TARGET} EXPORT rocm_smiTargets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - COMPONENT ${ROCM_SMI_COMPONENT}) + COMPONENT dev) +install(TARGETS ${ROCM_SMI_TARGET} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT asan) install(FILES ${COMMON_SRC_ROOT}/include/rocm_smi/rocm_smi.h - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocm_smi) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocm_smi + COMPONENT dev) install(FILES ${COMMON_SRC_ROOT}/include/rocm_smi/${ROCM_SMI_TARGET}Config.h - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocm_smi) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocm_smi + COMPONENT dev) install(FILES ${COMMON_SRC_ROOT}/include/rocm_smi/kfd_ioctl.h - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocm_smi) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocm_smi + COMPONENT dev) install(FILES ${COMMON_SRC_ROOT}/python_smi_tools/rsmiBindings.py - DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${ROCM_SMI}) + DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${ROCM_SMI} + COMPONENT dev) install(FILES ${COMMON_SRC_ROOT}/python_smi_tools/rocm_smi.py - PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ - GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_EXECUTE - DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${ROCM_SMI}) + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ + GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_EXECUTE + DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${ROCM_SMI} + COMPONENT dev) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/bin/rocm-smi - DESTINATION ${CMAKE_INSTALL_BINDIR}) + DESTINATION ${CMAKE_INSTALL_BINDIR} + COMPONENT dev) # Generate Doxygen documentation find_package(Doxygen) @@ -162,9 +171,11 @@ if (DOXYGEN_FOUND AND LATEX_FOUND) add_dependencies(${ROCM_SMI_TARGET} docs) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf - DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/${ROCM_SMI} RENAME ${RSMI_MANUAL_NAME}.pdf) + DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/${ROCM_SMI} RENAME ${RSMI_MANUAL_NAME}.pdf + COMPONENT dev) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../README.md - DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/${ROCM_SMI}/) + DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/${ROCM_SMI}/ + COMPONENT dev) else() message("Doxygen or Latex is not found. Will not generate documents.") endif(DOXYGEN_FOUND AND LATEX_FOUND) diff --git a/tests/rocm_smi_test/gtest/googletest/CMakeLists.txt b/tests/rocm_smi_test/gtest/googletest/CMakeLists.txt index aa00a5f3d2..1fcb7b1502 100644 --- a/tests/rocm_smi_test/gtest/googletest/CMakeLists.txt +++ b/tests/rocm_smi_test/gtest/googletest/CMakeLists.txt @@ -101,12 +101,14 @@ if (INSTALL_GTEST) write_basic_package_version_file(${version_file} VERSION ${GOOGLETEST_VERSION} COMPATIBILITY AnyNewerVersion) install(EXPORT ${targets_export_name} NAMESPACE ${cmake_package_name}:: - DESTINATION ${cmake_files_install_dir}) + DESTINATION ${cmake_files_install_dir} + COMPONENT dev) set(config_file "${generated_dir}/${cmake_package_name}Config.cmake") configure_package_config_file("${gtest_SOURCE_DIR}/cmake/Config.cmake.in" "${config_file}" INSTALL_DESTINATION ${cmake_files_install_dir}) install(FILES ${version_file} ${config_file} - DESTINATION ${cmake_files_install_dir}) + DESTINATION ${cmake_files_install_dir} + COMPONENT dev) endif() # Where Google Test's .h files can be found. From 0c82a9d57748ac70fcc3c873d5e95a8aabe258e5 Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Fri, 24 Mar 2023 15:36:30 -0500 Subject: [PATCH 46/85] Correct subsystem name by matching device id. The rsmi_dev_subsystem_name_get() only matches subvendor id and subdevice id for a vendor. The change will also match device id. Change-Id: Ife3aedaf6fc7390ed7fa62edbde40c2340689b23 --- src/rocm_smi.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/rocm_smi.cc b/src/rocm_smi.cc index 44d8d907eb..8c3b710ee7 100755 --- a/src/rocm_smi.cc +++ b/src/rocm_smi.cc @@ -1811,6 +1811,8 @@ static rsmi_status_t get_dev_name_from_id(uint32_t dv_ind, char *name, uint16_t subsys_vend_id; uint16_t subsys_id; bool found_device_vendor = false; + // to match subsystem, it must match the device id at previous line + bool found_device_id_for_subsys = false; std::string val_str; assert(name != nullptr); @@ -1857,8 +1859,8 @@ static rsmi_status_t get_dev_name_from_id(uint32_t dv_ind, char *name, if (ln[0] == '\t') { if (found_device_vendor) { if (ln[1] == '\t') { - // This is a subsystem line - if (typ == NAME_STR_SUBSYS) { + // The subsystem line, ignore a line if the device id not match + if (typ == NAME_STR_SUBSYS && found_device_id_for_subsys) { val_str = get_id_name_str_from_line(subsys_vend_id, ln, &ln_str); if (val_str.size() > 0) { @@ -1880,6 +1882,12 @@ static rsmi_status_t get_dev_name_from_id(uint32_t dv_ind, char *name, if (val_str.size() > 0) { break; } + } else if (typ == NAME_STR_SUBSYS) { + // match the device id line + val_str = get_id_name_str_from_line(device_id, ln, &ln_str); + if (val_str.size() > 0) { + found_device_id_for_subsys = true; + } } } } else { // ln[0] != '\t'; Vendor line From 58c83eb379f72e7033b661ddf71f1e82ef00cd58 Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Mon, 27 Mar 2023 09:27:38 -0500 Subject: [PATCH 47/85] Increase the max BDF ID length Increase the max length from 256 to 512. Change-Id: I3114f7ce6852aafa9dfec0186f27c1121c939c69 --- src/rocm_smi_main.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/rocm_smi_main.cc b/src/rocm_smi_main.cc index 16cd336e2a..52c8227c53 100755 --- a/src/rocm_smi_main.cc +++ b/src/rocm_smi_main.cc @@ -259,16 +259,17 @@ static bool bdfid_from_path(const std::string in_name, uint64_t *bdfid) { // 1 = not a good bdfid found static uint32_t ConstructBDFID(std::string path, uint64_t *bdfid) { assert(bdfid != nullptr); - char tpath[256] = {'\0'}; + const unsigned int MAX_BDF_LENGTH = 512; + char tpath[MAX_BDF_LENGTH] = {'\0'}; ssize_t ret; - memset(tpath,0,256); + memset(tpath,0,MAX_BDF_LENGTH); - ret = readlink(path.c_str(), tpath, 256); + ret = readlink(path.c_str(), tpath, MAX_BDF_LENGTH); assert(ret > 0); - assert(ret < 256); + assert(ret < MAX_BDF_LENGTH); - if (ret <= 0 || ret >= 256) { + if (ret <= 0 || ret >= MAX_BDF_LENGTH) { return 1; } From 78a0812f7fa789cb77f8483bb98bedd2b9aaa949 Mon Sep 17 00:00:00 2001 From: Charis Poag Date: Wed, 5 Apr 2023 12:44:29 -0500 Subject: [PATCH 48/85] [SWDEV-391036 + SWDEV-392933] Fixes for VoltRead and ComputePart. Updates: * VoltRead - needed to properly send out RSMI_STATUS_NOT_SUPPORTED when device does not have voltage hwmon files * ComputePart. - test failure was likely caused due to EvtNotif causing conflicts (unknown exactly why). Test passes when moving it ahead of the event notifier. Both API calls may have a system resource issue, TBD. * rocm_smi_example - now indicates when an API call returns RSMI_STATUS_NOT_SUPPORTED or RSMI_STATUS_NOT_YET_IMPLEMENTED. Allows example to fully complete on systems which may not provide support for all API calls. Change-Id: I520b8584e078d412414e8e5797c664220a7e823a Signed-off-by: Charis Poag --- rocm_smi/example/rocm_smi_example.cc | 142 ++++++++++++++------ src/rocm_smi.cc | 9 +- tests/rocm_smi_test/functional/volt_read.cc | 11 +- tests/rocm_smi_test/main.cc | 8 +- 4 files changed, 120 insertions(+), 50 deletions(-) diff --git a/rocm_smi/example/rocm_smi_example.cc b/rocm_smi/example/rocm_smi_example.cc index 3390fb573e..bb456f7a0e 100755 --- a/rocm_smi/example/rocm_smi_example.cc +++ b/rocm_smi/example/rocm_smi_example.cc @@ -93,9 +93,25 @@ } \ } +#define CHK_FILE_PERMISSIONS_AND_NOT_SUPPORTED_OR_UNIMPLEMENTED(RET) { \ + if ((RET) == RSMI_STATUS_PERMISSION) { \ + if (isFileWritable(RET)) { \ + CHK_RSMI_RET(RET) \ + } \ + } else if ((RET) == RSMI_STATUS_NOT_SUPPORTED) { \ + std::cout << "Not Supported." \ + << std::endl; \ + } else if ((RET) == RSMI_STATUS_NOT_YET_IMPLEMENTED) { \ + std::cout << "Not Yet Implemented." \ + << std::endl; \ + } else { \ + CHK_RSMI_RET(RET) \ + } \ +} + #define CHK_RSMI_NOT_SUPPORTED_RET(RET) { \ if ((RET) == RSMI_STATUS_NOT_SUPPORTED) { \ - std::cout << "This function is not supported in the current environment." \ + std::cout << "Not Supported." \ << std::endl; \ } else { \ CHK_RSMI_RET(RET) \ @@ -104,7 +120,7 @@ #define CHK_RSMI_NOT_SUPPORTED_OR_UNEXPECTED_DATA_RET(RET) { \ if ((RET) == RSMI_STATUS_NOT_SUPPORTED) { \ - std::cout << "This function is not supported in the current environment." \ + std::cout << "Not Supported." \ << std::endl; \ } else if ((RET) == RSMI_STATUS_UNEXPECTED_DATA) { \ std::cout << "[ERROR] RSMI_STATUS_UNEXPECTED_DATA retrieved." \ @@ -116,7 +132,7 @@ #define CHK_RSMI_NOT_SUPPORTED_OR_SETTING_UNAVAILABLE_RET(RET) {\ if ((RET) == RSMI_STATUS_NOT_SUPPORTED) { \ - std::cout << "This function is not supported in the current environment."\ + std::cout << "Not Supported."\ << std::endl; \ } else if ((RET) == RSMI_STATUS_SETTING_UNAVAILABLE) { \ std::cout << "[WARN] RSMI_STATUS_SETTING_UNAVAILABLE retrieved." \ @@ -128,7 +144,7 @@ #define CHK_NOT_SUPPORTED_OR_UNEXPECTED_DATA_OR_INSUFFICIENT_SIZE_RET(RET) { \ if ((RET) == RSMI_STATUS_NOT_SUPPORTED) { \ - std::cout << "This function is not supported in the current environment." \ + std::cout << "Not Supported." \ << std::endl; \ } else if ((RET) == RSMI_STATUS_UNEXPECTED_DATA) { \ std::cout << "[WARN] RSMI_STATUS_UNEXPECTED_DATA retrieved." \ @@ -272,7 +288,13 @@ static rsmi_status_t test_power_profile(uint32_t dv_ind) { print_test_header("Power Profile", dv_ind); + std::cout << "The available power profiles are: "; ret = rsmi_dev_power_profile_presets_get(dv_ind, 0, &status); + CHK_RSMI_NOT_SUPPORTED_RET(ret) + if (ret != RSMI_STATUS_SUCCESS) { + std::cout << "***Skipping Power Profile test." << std::endl; + return RSMI_STATUS_SUCCESS; + } CHK_RSMI_RET(ret) std::cout << "The available power profiles are:" << std::endl; @@ -393,13 +415,13 @@ static rsmi_status_t test_set_overdrive(uint32_t dv_ind) { CHK_RSMI_RET(ret) ret = rsmi_dev_overdrive_level_get(dv_ind, &val); CHK_RSMI_RET(ret) - std::cout << "\t**New OverDrive Level:" << val << std::endl; + std::cout << "\t**New OverDrive Level:" << std::dec << val << std::endl; std::cout << "Reset Overdrive level to 0%..." << std::endl; ret = rsmi_dev_overdrive_level_set_v1(dv_ind, 0); CHK_RSMI_RET(ret) ret = rsmi_dev_overdrive_level_get(dv_ind, &val); CHK_RSMI_RET(ret) - std::cout << "\t**New OverDrive Level:" << val << std::endl; + std::cout << "\t**New OverDrive Level:" << std::dec << val << std::endl; return ret; } @@ -412,9 +434,15 @@ static rsmi_status_t test_set_fan_speed(uint32_t dv_ind) { print_test_header("Fan Speed Control", dv_ind); + std::cout << "Original fan speed: "; ret = rsmi_dev_fan_speed_get(dv_ind, 0, &orig_speed); - CHK_RSMI_RET(ret) - std::cout << "Original fan speed: " << orig_speed << std::endl; + if (ret == RSMI_STATUS_SUCCESS) { + std::cout << orig_speed << std::endl; + } else { + CHK_RSMI_NOT_SUPPORTED_RET(ret) + std::cout << "***Skipping Fan Speed Control test." << std::endl; + return RSMI_STATUS_SUCCESS; + } if (orig_speed == 0) { std::cout << "***System fan speed value is 0. Skip fan test." << std::endl; @@ -474,6 +502,11 @@ static rsmi_status_t test_set_perf_level(uint32_t dv_ind) { std::cout << "Set Performance Level to " << (uint32_t)pfl << " ..." << std::endl; ret = rsmi_dev_perf_level_set_v1(dv_ind, pfl); + if (ret != RSMI_STATUS_SUCCESS) { + CHK_RSMI_NOT_SUPPORTED_RET(ret) + std::cout << "***Skipping Performance Level Control test." << std::endl; + return RSMI_STATUS_SUCCESS; + } CHK_RSMI_RET(ret) ret = rsmi_dev_perf_level_get(dv_ind, &pfl); CHK_RSMI_RET(ret) @@ -505,7 +538,7 @@ static rsmi_status_t test_set_freq(uint32_t dv_ind) { rsmi_clk = (rsmi_clk_type)clk; ret = rsmi_dev_gpu_clk_freq_get(dv_ind, rsmi_clk, &f); - CHK_AND_PRINT_RSMI_ERR_RET(ret) + CHK_FILE_PERMISSIONS_AND_NOT_SUPPORTED_OR_UNIMPLEMENTED(ret) std::cout << "Initial frequency for clock" << rsmi_clk << " is " << f.current << std::endl; @@ -524,15 +557,15 @@ static rsmi_status_t test_set_freq(uint32_t dv_ind) { " to 0b" << freq_bm_str << " ..." << std::endl; ret = rsmi_dev_gpu_clk_freq_set(dv_ind, rsmi_clk, freq_bitmask); - CHK_FILE_PERMISSIONS(ret) + CHK_FILE_PERMISSIONS_AND_NOT_SUPPORTED_OR_UNIMPLEMENTED(ret) ret = rsmi_dev_gpu_clk_freq_get(dv_ind, rsmi_clk, &f); - CHK_FILE_PERMISSIONS(ret) + CHK_FILE_PERMISSIONS_AND_NOT_SUPPORTED_OR_UNIMPLEMENTED(ret) std::cout << "Frequency is now index " << f.current << std::endl; std::cout << "Resetting mask to all frequencies." << std::endl; ret = rsmi_dev_gpu_clk_freq_set(dv_ind, rsmi_clk, 0xFFFFFFFF); - CHK_FILE_PERMISSIONS(ret) + CHK_FILE_PERMISSIONS_AND_NOT_SUPPORTED_OR_UNIMPLEMENTED(ret) ret = rsmi_dev_perf_level_set_v1(dv_ind, RSMI_DEV_PERF_LEVEL_AUTO); CHK_FILE_PERMISSIONS(ret) @@ -684,30 +717,38 @@ int main() { for (uint32_t i = 0; i < num_monitor_devs; ++i) { ret = rsmi_dev_id_get(i, &val_ui16); CHK_RSMI_RET_I(ret) - std::cout << "\t**Device ID: 0x" << std::hex << val_ui64 << std::endl; + std::cout << "\t**Device ID: 0x" << std::hex << val_ui16 << std::endl; char current_compute_partition[256]; current_compute_partition[0] = '\0'; ret = rsmi_dev_compute_partition_get(i, current_compute_partition, 256); - CHK_RSMI_NOT_SUPPORTED_OR_UNEXPECTED_DATA_RET(ret) std::cout << "\t**Current Compute Partition: " << (((current_compute_partition == nullptr) || ((current_compute_partition != nullptr) && (current_compute_partition[0] == '\0'))) - ? "UNKNOWN" : current_compute_partition) - << std::endl; + ? "UNKNOWN" : current_compute_partition); + if (ret != RSMI_STATUS_SUCCESS) { + std::cout << ", RSMI_STATUS = "; + } else { + std::cout << std::endl; + } + CHK_RSMI_NOT_SUPPORTED_OR_UNEXPECTED_DATA_RET(ret) uint32_t len = 5; char nps_mode[len]; nps_mode[0] = '\0'; ret = rsmi_dev_nps_mode_get(i, nps_mode, len); - CHK_NOT_SUPPORTED_OR_UNEXPECTED_DATA_OR_INSUFFICIENT_SIZE_RET(ret) std::cout << "\t**NPS Mode: " << (((nps_mode == nullptr) || ((nps_mode != nullptr) && (nps_mode[0] == '\0'))) - ? "UNKNOWN" : nps_mode) - << std::endl; + ? "UNKNOWN" : nps_mode); + if (ret != RSMI_STATUS_SUCCESS) { + std::cout << ", RSMI_STATUS = "; + } else { + std::cout << std::endl; + } + CHK_NOT_SUPPORTED_OR_UNEXPECTED_DATA_OR_INSUFFICIENT_SIZE_RET(ret) ret = rsmi_dev_gpu_metrics_info_get(i, &p); CHK_AND_PRINT_RSMI_ERR_RET(ret) @@ -733,47 +774,66 @@ int main() { std::cout << f.num_supported << std::endl; print_frequencies(&f); + std::cout << "\t**Monitor name: "; char name[128]; ret = rsmi_dev_name_get(i, name, 128); CHK_AND_PRINT_RSMI_ERR_RET(ret) - std::cout << "\t**Monitor name: " << name << std::endl; + std::cout << name << std::endl; + std::cout << "\t**Temperature: "; ret = rsmi_dev_temp_metric_get(i, 0, RSMI_TEMP_CURRENT, &val_i64); - CHK_AND_PRINT_RSMI_ERR_RET(ret) - std::cout << "\t**Temperature: " << val_i64/1000 << "C" << std::endl; + if (ret == RSMI_STATUS_SUCCESS) { + std::cout << val_i64/1000 << "C" << std::endl; + } + CHK_RSMI_NOT_SUPPORTED_RET(ret) + std::cout << "\t**Voltage: "; ret = rsmi_dev_volt_metric_get(i, RSMI_VOLT_TYPE_VDDGFX, RSMI_VOLT_CURRENT, &val_i64); - CHK_AND_PRINT_RSMI_ERR_RET(ret) - std::cout << "\t**Voltage: " << val_i64 << "mV" << std::endl; + if (ret == RSMI_STATUS_SUCCESS) { + std::cout << val_i64 << "mV" << std::endl; + } + CHK_RSMI_NOT_SUPPORTED_RET(ret) - ret = rsmi_dev_fan_speed_get(i, 0, &val_i64); - CHK_AND_PRINT_RSMI_ERR_RET(ret) - ret = rsmi_dev_fan_speed_max_get(i, 0, &val_ui64); - CHK_AND_PRINT_RSMI_ERR_RET(ret) std::cout << "\t**Current Fan Speed: "; - std::cout << val_i64/static_cast(val_ui64)*100; - std::cout << "% ("<< val_i64 << "/" << val_ui64 << ")" << std::endl; + ret = rsmi_dev_fan_speed_get(i, 0, &val_i64); + if (ret == RSMI_STATUS_SUCCESS) { + ret = rsmi_dev_fan_speed_max_get(i, 0, &val_ui64); + CHK_AND_PRINT_RSMI_ERR_RET(ret) + std::cout << (static_cast(val_i64)/val_ui64) * 100; + std::cout << "% (" << std::dec << val_i64 << "/" + << std::dec << val_ui64 << ")" << std::endl; + } + CHK_RSMI_NOT_SUPPORTED_RET(ret) + std::cout << "\t**Current fan RPMs: "; ret = rsmi_dev_fan_rpms_get(i, 0, &val_i64); - CHK_AND_PRINT_RSMI_ERR_RET(ret) - std::cout << "\t**Current fan RPMs: " << val_i64 << std::endl; + if (ret == RSMI_STATUS_SUCCESS) { + std::cout << std::dec << val_i64 << std::endl; + } + CHK_RSMI_NOT_SUPPORTED_RET(ret) + std::cout << "\t**Current Power Cap: "; ret = rsmi_dev_power_cap_get(i, 0, &val_ui64); - CHK_AND_PRINT_RSMI_ERR_RET(ret) - std::cout << "\t**Current Power Cap: " << val_ui64 << "uW" <(val_ui64)/1000 << " W" << std::endl; ret = rsmi_dev_power_ave_get(i, 0, &val_ui64); - CHK_AND_PRINT_RSMI_ERR_RET(ret) + if (ret == RSMI_STATUS_SUCCESS) { + std::cout << static_cast(val_ui64)/1000 << " W" << std::endl; + } + CHK_RSMI_NOT_SUPPORTED_RET(ret) std::cout << "\t=======" << std::endl; } diff --git a/src/rocm_smi.cc b/src/rocm_smi.cc index 8c3b710ee7..c699701ddf 100755 --- a/src/rocm_smi.cc +++ b/src/rocm_smi.cc @@ -2351,8 +2351,13 @@ rsmi_dev_volt_metric_get(uint32_t dv_ind, rsmi_voltage_type_t sensor_type, // getVoltSensorIndex will throw an out of range exception if sensor_type is // not found - uint32_t sensor_index = - m->getVoltSensorIndex(sensor_type); + uint32_t sensor_index; + try { + sensor_index = + m->getVoltSensorIndex(sensor_type); + } catch (...) { + return RSMI_STATUS_NOT_SUPPORTED; + } CHK_API_SUPPORT_ONLY(voltage, metric, sensor_index) ret = get_dev_mon_value(mon_type, dv_ind, sensor_index, voltage); diff --git a/tests/rocm_smi_test/functional/volt_read.cc b/tests/rocm_smi_test/functional/volt_read.cc index a8be24e03f..fec4975647 100644 --- a/tests/rocm_smi_test/functional/volt_read.cc +++ b/tests/rocm_smi_test/functional/volt_read.cc @@ -100,6 +100,11 @@ void TestVoltRead::Run(void) { rsmi_voltage_type_t type = RSMI_VOLT_TYPE_VDDGFX; for (uint32_t i = 0; i < num_monitor_devs(); ++i) { + IF_VERB(STANDARD) { + if (i != 0) { + std::cout << "\n" << std::endl; + } + } PrintDeviceHeader(i); auto print_volt_metric = [&](rsmi_voltage_metric_t met, @@ -111,12 +116,12 @@ void TestVoltRead::Run(void) { IF_VERB(STANDARD) { std::cout << "\t**" << label << ": " << "Not supported on this machine" << std::endl; + } // Verify api support checking functionality is working err = rsmi_dev_volt_metric_get(i, type, met, nullptr); ASSERT_EQ(err, RSMI_STATUS_NOT_SUPPORTED); return; - } } else { CHK_ERR_ASRT(err) } @@ -144,8 +149,8 @@ void TestVoltRead::Run(void) { print_volt_metric(RSMI_VOLT_MIN_CRIT, "Voltage critical min value"); print_volt_metric(RSMI_VOLT_AVERAGE, "Voltage critical max value"); - print_volt_metric(RSMI_VOLT_LOWEST, "Historical minimum temperature"); - print_volt_metric(RSMI_VOLT_HIGHEST, "Historical maximum temperature"); + print_volt_metric(RSMI_VOLT_LOWEST, "Historical minimum voltage"); + print_volt_metric(RSMI_VOLT_HIGHEST, "Historical maximum voltage"); } } } diff --git a/tests/rocm_smi_test/main.cc b/tests/rocm_smi_test/main.cc index e761ac4fd0..bde4539115 100755 --- a/tests/rocm_smi_test/main.cc +++ b/tests/rocm_smi_test/main.cc @@ -270,10 +270,6 @@ TEST(rsmitstReadOnly, TestMutualExclusion) { tst.Run(); RunCustomTestEpilog(&tst); } -TEST(rsmitstReadWrite, TestEvtNotifReadWrite) { - TestEvtNotifReadWrite tst; - RunGenericTest(&tst); -} TEST(rsmitstReadWrite, TestComputePartitionReadWrite) { TestComputePartitionReadWrite tst; RunGenericTest(&tst); @@ -282,6 +278,10 @@ TEST(rsmitstReadWrite, TestNPSModeReadWrite) { TestNPSModeReadWrite tst; RunGenericTest(&tst); } +TEST(rsmitstReadWrite, TestEvtNotifReadWrite) { + TestEvtNotifReadWrite tst; + RunGenericTest(&tst); +} TEST(rsmitstReadOnly, Test) { TestConcurrentInit tst; SetFlags(&tst); From b6789891b05e9097fd2c197bb77a77ae6b8e3d73 Mon Sep 17 00:00:00 2001 From: "Bill(Shuzhou) Liu" Date: Tue, 4 Apr 2023 12:46:38 -0500 Subject: [PATCH 49/85] Validate the clock frequency when set it Add the check of the clock frequency when set it. Change-Id: I707291bfb5007bb69100c780af50a4b0f697bb37 --- python_smi_tools/rocm_smi.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index d682ab4490..665ba2feb3 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -1076,6 +1076,19 @@ def setClocks(deviceList, clktype, clk): RETCODE = 1 return if clktype != 'pcie': + # Validate frequency bitmask + freq = rsmi_frequencies_t() + ret = rocmsmi.rsmi_dev_gpu_clk_freq_get(device, rsmi_clk_names_dict[clktype], byref(freq)) + if rsmi_ret_ok(ret, device, clktype) == False: + RETCODE = 1 + return + # The freq_bitmask should be less than 2^(freqs.num_supported) + # For example, num_supported == 3, the max bitmask is 0111 + if freq_bitmask >= (1 << freq.num_supported): + printErrLog(device, 'Invalid clock frequency %s' % hex(freq_bitmask)) + RETCODE = 1 + return + ret = rocmsmi.rsmi_dev_gpu_clk_freq_set(device, rsmi_clk_names_dict[clktype], freq_bitmask) if rsmi_ret_ok(ret, device): printLog(device, 'Successfully set %s bitmask to' % (clktype), hex(freq_bitmask)) @@ -1083,6 +1096,19 @@ def setClocks(deviceList, clktype, clk): printErrLog(device, 'Unable to set %s bitmask to: %s' % (clktype, hex(freq_bitmask))) RETCODE = 1 else: + # Validate the bandwidth bitmask + bw = rsmi_pcie_bandwidth_t() + ret = rocmsmi.rsmi_dev_pci_bandwidth_get(device, byref(bw)) + if rsmi_ret_ok(ret, device, 'PCIe') == False: + RETCODE = 1 + return + # The freq_bitmask should be less than 2^(bw.transfer_rate.num_supported) + # For example, num_supported == 3, the max bitmask is 0111 + if freq_bitmask >= (1 << bw.transfer_rate.num_supported): + printErrLog(device, 'Invalid PCIe frequency %s' % hex(freq_bitmask)) + RETCODE = 1 + return + ret = rocmsmi.rsmi_dev_pci_bandwidth_set(device, freq_bitmask) if rsmi_ret_ok(ret, device): printLog(device, 'Successfully set %s to level bitmask' % (clktype), hex(freq_bitmask)) From 6be92b9e26fc9fee53f72e2c9c0d5bf75d1a1874 Mon Sep 17 00:00:00 2001 From: Charis Poag Date: Thu, 13 Apr 2023 10:43:52 -0500 Subject: [PATCH 50/85] [SWDEV-392571] Fix concise info when missing VRAM info Updates: * [rocm-smi] Added larger app width size, which helps display missing device info * [rocm-smi] Added better context when rsmi_ret_ok does not return with RSMI_STATUS_SUCCESS * [rocm-smi] Removed all references to an undefined function (printLogNoDev()) * [rocm-smi] Fixed not detecting non-int values when setting the voltage curve * [rocm-smi] Added better context on missing sysfs file when setting clock overdrive values * [rocm-smi] Fixed getMemInfo() calls not referencing tuple values (making it easier to read) * [rocm-smi] Silenced concise info spitting out errors for missing VRAM files, instead display which metric is "unsupported" if the files are missing * [rocm-smi] Updated function descriptions for rsmi_ret_ok & getMemInfo * [rocm-smi] Updated getMemInfo to provide a quiet call, to silence for concise info calls. This provides a way to keep the output clean. * [rocm-smi-lib] Added when using debug sysfs files, to state, which enums are enabled for debug Change-Id: I0e9e0c97ccf71467ced0e1a1f71803327a8be2b7 Signed-off-by: Charis Poag --- python_smi_tools/rocm_smi.py | 241 ++++++++++++++++++----------------- src/rocm_smi_main.cc | 6 +- 2 files changed, 130 insertions(+), 117 deletions(-) diff --git a/python_smi_tools/rocm_smi.py b/python_smi_tools/rocm_smi.py index 665ba2feb3..49ac2ee1a3 100755 --- a/python_smi_tools/rocm_smi.py +++ b/python_smi_tools/rocm_smi.py @@ -47,7 +47,7 @@ headerString = ' ROCm System Management Interface ' footerString = ' End of ROCm SMI Log ' # Output formatting -appWidth = 80 +appWidth = 84 deviceList = [] # Enable or disable serialized format @@ -197,7 +197,7 @@ def getBus(device): function = bdfid.value & 0x7 pic_id = '{:04X}:{:02X}:{:02X}.{:0X}'.format(domain, bus, device, function) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'get_pci_id'): return pic_id @@ -215,10 +215,10 @@ def getFanSpeed(device): fm = 0 ret = rocmsmi.rsmi_dev_fan_speed_get(device, sensor_ind, byref(fanLevel)) - if rsmi_ret_ok(ret, device, None, True): + if rsmi_ret_ok(ret, device, 'get_fan_speed', True): fl = fanLevel.value ret = rocmsmi.rsmi_dev_fan_speed_max_get(device, sensor_ind, byref(fanMax)) - if rsmi_ret_ok(ret, device, None, True): + if rsmi_ret_ok(ret, device, 'get_fan_max_speed', True): fm = fanMax.value if fl == 0 or fm == 0: return (fl, 0) # to prevent division by zero crash @@ -245,7 +245,7 @@ def getId(device): """ dv_id = c_short() ret = rocmsmi.rsmi_dev_id_get(device, byref(dv_id)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'get_device_id'): return hex(dv_id.value) @@ -256,16 +256,21 @@ def getMaxPower(device): """ power_cap = c_uint64() ret = rocmsmi.rsmi_dev_power_cap_get(device, 0, byref(power_cap)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'get_power_cap'): return power_cap.value / 1000000 return -1 -def getMemInfo(device, memType): - """ Return the specified memory usage for the specified device +def getMemInfo(device, memType, quiet=False): + """ Returns a tuple of (memory_used, memory_total) of + the requested memory type usage for the device specified @param device: DRM device identifier @param type: [vram|vis_vram|gtt] Memory type to return + @param quiet=Turn on to silience error output + (you plan to handle manually). Default is off, + which exposes any issue accessing the different + memory types. """ memType = memType.upper() if memType not in memory_type_l: @@ -278,11 +283,11 @@ def getMemInfo(device, memType): memTotal = None ret = rocmsmi.rsmi_dev_memory_usage_get(device, memory_type_l.index(memType), byref(memoryUse)) - if rsmi_ret_ok(ret, device, memType): + if rsmi_ret_ok(ret, device, 'get_memory_usage_' + str(memType), quiet): memUsed = memoryUse.value ret = rocmsmi.rsmi_dev_memory_total_get(device, memory_type_l.index(memType), byref(memoryTot)) - if rsmi_ret_ok(ret, device, memType + ' total'): + if rsmi_ret_ok(ret, device, 'get_memory_total_' + str(memType), quiet): memTotal = memoryTot.value return (memUsed, memTotal) @@ -319,7 +324,7 @@ def getPerfLevel(device): """ perf = rsmi_dev_perf_level_t() ret = rocmsmi.rsmi_dev_perf_level_get(device, byref(perf)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'get_perf_level'): return perf_level_string(perf.value) return -1 @@ -336,7 +341,7 @@ def getPidList(): """ Return a list of KFD process IDs """ num_items = c_uint32() ret = rocmsmi.rsmi_compute_process_info_get(None, byref(num_items)) - if rsmi_ret_ok(ret): + if rsmi_ret_ok(ret, metric='get_compute_process_info'): buff_sz = num_items.value + 10 procs = (rsmi_process_info_t * buff_sz)() procList = [] @@ -354,7 +359,7 @@ def getPower(device): """ power = c_uint32() ret = rocmsmi.rsmi_dev_power_ave_get(device, 0, byref(power)) - if rsmi_ret_ok(ret, device, 'power'): + if rsmi_ret_ok(ret, device, 'get_power_avg'): return power.value / 1000000 return 'N/A' @@ -368,7 +373,7 @@ def getRasEnablement(device, block): state = rsmi_ras_err_state_t() ret = rocmsmi.rsmi_dev_ecc_status_get(device, rsmi_gpu_block_d[block], byref(state)) - if rsmi_ret_ok(ret, device, block, True): + if rsmi_ret_ok(ret, device, 'get_ecc_status_' + str(block), True): return rsmi_ras_err_stale_machine[state.value].upper() return 'N/A' @@ -382,7 +387,7 @@ def getTemp(device, sensor): temp = c_int64(0) metric = rsmi_temperature_metric_t.RSMI_TEMP_CURRENT ret = rocmsmi.rsmi_dev_temp_metric_get(c_uint32(device), temp_type_lst.index(sensor), metric, byref(temp)) - if rsmi_ret_ok(ret, device, sensor, True): + if rsmi_ret_ok(ret, device, 'get_temp_metric' + str(sensor), True): return temp.value / 1000 return 'N/A' @@ -406,7 +411,7 @@ def getVersion(deviceList, component): """ ver_str = create_string_buffer(256) ret = rocmsmi.rsmi_version_str_get(component, ver_str, 256) - if rsmi_ret_ok(ret, None, component): + if rsmi_ret_ok(ret, None, 'get_version_str_' + str(component)): return ver_str.value.decode() return None @@ -418,7 +423,7 @@ def getComputePartition(device): """ currentComputePartition = create_string_buffer(256) ret = rocmsmi.rsmi_dev_compute_partition_get(device, currentComputePartition, 256) - if rsmi_ret_ok(ret, device, silent=True) and currentComputePartition.value.decode(): + if rsmi_ret_ok(ret, device, 'get_compute_partition', silent=True) and currentComputePartition.value.decode(): return str(currentComputePartition.value.decode()) return "UNKNOWN" @@ -430,7 +435,7 @@ def getMemoryPartition(device): """ currentNPSMode = create_string_buffer(256) ret = rocmsmi.rsmi_dev_nps_mode_get(device, currentNPSMode, 256) - if rsmi_ret_ok(ret, device, silent=True) and currentNPSMode.value.decode(): + if rsmi_ret_ok(ret, device, 'get_NPS_mode', silent=True) and currentNPSMode.value.decode(): return str(currentNPSMode.value.decode()) return "UNKNOWN" @@ -518,13 +523,13 @@ def printEventList(device, delay, eventList): """ mask = 0 ret = rocmsmi.rsmi_event_notification_init(device) - if not rsmi_ret_ok(ret, device): + if not rsmi_ret_ok(ret, device, 'event_notification_init'): printErrLog(device, 'Unable to initialize event notifications.') return for eventType in eventList: mask |= 2 ** notification_type_names.index(eventType.upper()) ret = rocmsmi.rsmi_event_notification_mask_set(device, mask) - if not rsmi_ret_ok(ret, device): + if not rsmi_ret_ok(ret, device, 'set_event_notification_mask'): printErrLog(device, 'Unable to set event notification mask.') return while 1: # Exit condition from user keyboard input of 'q' or 'ctrl + c' @@ -555,7 +560,7 @@ def printLog(device, metricName, value, extraSpace=False): else: logstr = 'GPU[%s]\t\t: %s' % (device, metricName) if device is None: - logstr = logstr[13:] + logstr = logstr.split(':')[1][1:] # Force thread safe printing lock = multiprocessing.Lock() lock.acquire() @@ -687,13 +692,13 @@ def checkIfSecondaryDie(device): power_cap = c_uint64() # secondary die can currently be determined by checking if all power1_* (power cap) values are equal to zero. ret = rocmsmi.rsmi_dev_power_cap_get(device, 0, byref(power_cap)) - if not (rsmi_ret_ok(ret, None, None, False) and power_cap.value == 0): + if not (rsmi_ret_ok(ret, None, 'get_power_cap', False) and power_cap.value == 0): return False ret = rocmsmi.rsmi_dev_power_cap_default_get(device, byref(power_cap)) - if not (rsmi_ret_ok(ret, None, None, False) and power_cap.value == 0): + if not (rsmi_ret_ok(ret, None, 'get_power_cap_default', False) and power_cap.value == 0): return False ret = rocmsmi.rsmi_dev_power_ave_get(device, 0, byref(power_cap)) - if not (rsmi_ret_ok(ret, None, None, False) and power_cap.value == 0): + if not (rsmi_ret_ok(ret, None, 'get_power_avg', False) and power_cap.value == 0): return False return True @@ -709,17 +714,17 @@ def resetClocks(deviceList): printLogSpacer(' Reset Clocks ') for device in deviceList: ret = rocmsmi.rsmi_dev_overdrive_level_set(device, rsmi_dev_perf_level_t(0)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'set_overdrive_level'): printLog(device, 'OverDrive set to 0', None) else: printLog(device, 'Unable to reset OverDrive', None) ret = rocmsmi.rsmi_dev_perf_level_set(device, rsmi_dev_perf_level_t(0)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'set_perf_level'): printLog(device, 'Successfully reset clocks', None) else: printLog(device, 'Unable to reset clocks', None) ret = rocmsmi.rsmi_dev_perf_level_set(device, rsmi_dev_perf_level_t(0)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'set_perf_level'): printLog(device, 'Performance level reset to auto', None) else: printLog(device, 'Unable to reset performance level to auto', None) @@ -734,7 +739,7 @@ def resetFans(deviceList): for device in deviceList: sensor_ind = c_uint32(0) ret = rocmsmi.rsmi_dev_fan_reset(device, sensor_ind) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'reset_fan'): printLog(device, 'Successfully reset fan speed to driver control', None) printLogSpacer() @@ -755,12 +760,12 @@ def resetProfile(deviceList): printLogSpacer(' Reset Profile ') for device in deviceList: ret = rocmsmi.rsmi_dev_power_profile_set(device, 0, profileString('BOOTUP DEFAULT')) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'set_power_profile'): printLog(device, 'Successfully reset Power Profile', None) else: printErrLog(device, 'Unable to reset Power Profile') ret = rocmsmi.rsmi_dev_perf_level_set(device, rsmi_dev_perf_level_t(0)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'set_perf_level'): printLog(device, 'Successfully reset Performance Level', None) else: printErrLog(device, 'Unable to reset Performance Level') @@ -806,7 +811,7 @@ def resetComputePartition(deviceList): for device in deviceList: originalPartition = getComputePartition(device) ret = rocmsmi.rsmi_dev_compute_partition_reset(device) - if rsmi_ret_ok(ret, device, silent=True): + if rsmi_ret_ok(ret, device, 'reset_compute_partition', silent=True): resetBootState = getComputePartition(device) printLog(device, "Successfully reset compute partition (" + originalPartition + ") to boot state (" + resetBootState + @@ -816,7 +821,7 @@ def resetComputePartition(deviceList): elif ret == rsmi_status_t.RSMI_STATUS_NOT_SUPPORTED: printLog(device, 'Not supported on the given system', None) else: - rsmi_ret_ok(ret, device) + rsmi_ret_ok(ret, device, 'reset_compute_partition') printErrLog(device, 'Failed to reset the compute partition to boot state') printLogSpacer() @@ -842,7 +847,7 @@ def resetNpsMode(deviceList): t1.join() if duration < float(0.1): # For longer runs, add extra line before output addExtraLine=False # This is to prevent overriding progress bar - if rsmi_ret_ok(ret, device, silent=True): + if rsmi_ret_ok(ret, device, 'reset_NPS_mode', silent=True): resetBootState = getMemoryPartition(device) printLog(device, "Successfully reset nps mode (" + originalPartition + ") to boot state (" + @@ -852,7 +857,7 @@ def resetNpsMode(deviceList): elif ret == rsmi_status_t.RSMI_STATUS_NOT_SUPPORTED: printLog(device, 'Not supported on the given system', None, addExtraLine) else: - rsmi_ret_ok(ret, device) + rsmi_ret_ok(ret, device, 'reset_NPS_mode') printErrLog(device, 'Failed to reset nps mode to boot state') printLogSpacer() @@ -906,16 +911,16 @@ def setVoltageCurve(deviceList, point, clk, volt, autoRespond): global RETCODE value = '%s %s %s' % (point, clk, volt) try: - any(int(item) for item in value) + any(int(item) for item in value.split()) except ValueError: - printLogNoDev('Unable to set Voltage curve') - logging.error('Non-integer characters are present in %s', value) + printErrLog(None, 'Unable to set Voltage curve') + printErrLog(None, 'Non-integer characters are present in %s' %value) RETCODE = 1 return confirmOutOfSpecWarning(autoRespond) for device in deviceList: ret = rocmsmi.rsmi_dev_od_volt_info_set(device, int(point), int(clk), int(volt)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'set_voltage_curve'): printLog(device, 'Successfully set voltage point %s to %s(MHz) %s(mV)' % (point, clk, volt), None) else: printErrLog(device, 'Unable to set voltage point %s to %s(MHz) %s(mV)' % (point, clk, volt)) @@ -935,11 +940,12 @@ def setPowerPlayTableLevel(deviceList, clkType, point, clk, volt, autoRespond): """ global RETCODE value = '%s %s %s' % (point, clk, volt) + listOfValues = value.split(' ') try: any(int(item) for item in value.split()) except ValueError: - printLogNoDev('Unable to set PowerPlay table level') - logging.error('Non-integer characters are present in %s', value) + printErrLog(None, 'Unable to set PowerPlay table level') + printErrLog(None, 'Non-integer characters are present in %s' %value) RETCODE = 1 return confirmOutOfSpecWarning(autoRespond) @@ -947,7 +953,7 @@ def setPowerPlayTableLevel(deviceList, clkType, point, clk, volt, autoRespond): if clkType == 'sclk': ret = rocmsmi.rsmi_dev_od_clk_info_set(device, rsmi_freq_ind_t(int(point)), int(clk), rsmi_clk_names_dict[clkType]) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'set_power_play_table_level_' + str(clkType)): printLog(device, 'Successfully set voltage point %s to %s(MHz) %s(mV)' % (point, clk, volt), None) else: printErrLog(device, 'Unable to set voltage point %s to %s(MHz) %s(mV)' % (point, clk, volt)) @@ -955,7 +961,7 @@ def setPowerPlayTableLevel(deviceList, clkType, point, clk, volt, autoRespond): elif clkType == 'mclk': ret = rocmsmi.rsmi_dev_od_clk_info_set(device, rsmi_freq_ind_t(int(point)), int(clk), rsmi_clk_names_dict[clkType]) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'set_power_play_table_level_' + str(clkType)): printLog(device, 'Successfully set voltage point %s to %s(MHz) %s(mV)' % (point, clk, volt), None) else: printErrLog(device, 'Unable to set voltage point %s to %s(MHz) %s(mV)' % (point, clk, volt)) @@ -996,14 +1002,15 @@ def setClockOverDrive(deviceList, clktype, value, autoRespond): value = '20' if getPerfLevel(device) != 'MANUAL': ret = rocmsmi.rsmi_dev_perf_level_set(device, rsmi_dev_perf_level_t(3)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'set_perf_level_manual_' + str(clktype)): printLog(device, 'Performance level set to manual', None) else: printErrLog(device, 'Unable to set performance level to manual') if clktype == 'mclk': fsFile = os.path.join('/sys/class/drm', 'card%d' % (device), 'device', 'pp_mclk_od') if not os.path.isfile(fsFile): - printLog(None, 'Unable to write to sysfs file', None) + printLog(None, 'Unable to write to sysfs file (' + fsFile + + '), file does not exist', None) logging.debug('%s does not exist', fsFile) continue try: @@ -1011,14 +1018,14 @@ def setClockOverDrive(deviceList, clktype, value, autoRespond): with open(fsFile, 'w') as fs: fs.write(value + '\n') except (IOError, OSError): - printLog(None, 'Unable to write to sysfs file %s' % fsFile, None) + printLog(None, 'Unable to write to sysfs file %s' %fsFile, None) logging.warning('IO or OS error') RETCODE = 1 continue printLog(device, 'Successfully set %s OverDrive to %s%%' % (clktype, value), None) elif clktype == 'sclk': ret = rocmsmi.rsmi_dev_overdrive_level_set(device, rsmi_dev_perf_level_t(int(value))) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'set_overdrive_level_' + str(clktype)): printLog(device, 'Successfully set %s OverDrive to %s%%' % (clktype, value), None) else: printLog(device, 'Unable to set %s OverDrive to %s%%' % (clktype, value), None) @@ -1069,7 +1076,7 @@ def setClocks(deviceList, clktype, clk): # Check if the performance level is manual, if not then set it to manual if getPerfLevel(device).lower() != 'manual': ret = rocmsmi.rsmi_dev_perf_level_set(device, rsmi_dev_perf_level_t(3)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'set_perf_level_manual'): printLog(device, 'Performance level was set to manual', None) else: printErrLog(device, 'Unable to set performance level to manual') @@ -1079,7 +1086,7 @@ def setClocks(deviceList, clktype, clk): # Validate frequency bitmask freq = rsmi_frequencies_t() ret = rocmsmi.rsmi_dev_gpu_clk_freq_get(device, rsmi_clk_names_dict[clktype], byref(freq)) - if rsmi_ret_ok(ret, device, clktype) == False: + if rsmi_ret_ok(ret, device, 'get_gpu_clk_freq_' + str(clktype)) == False: RETCODE = 1 return # The freq_bitmask should be less than 2^(freqs.num_supported) @@ -1090,7 +1097,7 @@ def setClocks(deviceList, clktype, clk): return ret = rocmsmi.rsmi_dev_gpu_clk_freq_set(device, rsmi_clk_names_dict[clktype], freq_bitmask) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'set_gpu_clk_freq_' + str(clktype)): printLog(device, 'Successfully set %s bitmask to' % (clktype), hex(freq_bitmask)) else: printErrLog(device, 'Unable to set %s bitmask to: %s' % (clktype, hex(freq_bitmask))) @@ -1099,7 +1106,7 @@ def setClocks(deviceList, clktype, clk): # Validate the bandwidth bitmask bw = rsmi_pcie_bandwidth_t() ret = rocmsmi.rsmi_dev_pci_bandwidth_get(device, byref(bw)) - if rsmi_ret_ok(ret, device, 'PCIe') == False: + if rsmi_ret_ok(ret, device, 'get_PCIe_bandwidth') == False: RETCODE = 1 return # The freq_bitmask should be less than 2^(bw.transfer_rate.num_supported) @@ -1110,7 +1117,7 @@ def setClocks(deviceList, clktype, clk): return ret = rocmsmi.rsmi_dev_pci_bandwidth_set(device, freq_bitmask) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'set_PCIe_bandwidth'): printLog(device, 'Successfully set %s to level bitmask' % (clktype), hex(freq_bitmask)) else: printErrLog(device, 'Unable to set %s bitmask to: %s' % (clktype, hex(freq_bitmask))) @@ -1135,7 +1142,7 @@ def setPerfDeterminism(deviceList, clkvalue): return for device in deviceList: ret = rocmsmi.rsmi_perf_determinism_mode_set(device, int(clkvalue)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'set_perf_determinism'): printLog(device, 'Successfully enabled performance determinism and set GFX clock frequency', str(clkvalue)) else: printErrLog(device, 'Unable to set performance determinism and clock frequency to %s' % (str(clkvalue))) @@ -1159,7 +1166,7 @@ def resetGpu(device): RETCODE = 1 return ret = rocmsmi.rsmi_dev_gpu_reset(resetDev) - if rsmi_ret_ok(ret, resetDev): + if rsmi_ret_ok(ret, resetDev, 'reset_gpu'): printLog(resetDev, 'Successfully reset GPU %d' % (resetDev), None) else: printErrLog(resetDev, 'Unable to reset GPU %d' % (resetDev)) @@ -1258,7 +1265,7 @@ def setFanSpeed(deviceList, fan): else: fanLevel = int(str(fan)) ret = rocmsmi.rsmi_dev_fan_speed_set(device, 0, int(fanLevel)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'set_fan_speed'): printLog(device, 'Successfully set fan speed to level %s' % (str(int(fanLevel))), None) printLogSpacer() @@ -1277,7 +1284,7 @@ def setPerformanceLevel(deviceList, level): logging.error('Invalid Performance level: %s', level) else: ret = rocmsmi.rsmi_dev_perf_level_set(device, rsmi_dev_perf_level_t(validLevels.index(level))) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'set_perf_level'): printLog(device, 'Performance level set to %s' % (str(level)), None) printLogSpacer() @@ -1336,7 +1343,7 @@ def setPowerOverDrive(deviceList, value, autoRespond): new_power_cap.value = int(value) * 1000000 ret = rocmsmi.rsmi_dev_power_cap_range_get(device, 0, byref(power_cap_max), byref(power_cap_min)) - if rsmi_ret_ok(ret, device) == False: + if rsmi_ret_ok(ret, device, 'get_power_cap_range') == False: printErrLog(device, 'Unable to parse Power OverDrive range') RETCODE = 1 continue @@ -1360,11 +1367,11 @@ def setPowerOverDrive(deviceList, value, autoRespond): specWarningConfirmed = True ret = rocmsmi.rsmi_dev_power_cap_set(device, 0, new_power_cap) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'set_power_cap'): if int(value) == 0: power_cap = c_uint64() ret = rocmsmi.rsmi_dev_power_cap_get(device, 0, byref(power_cap)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'get_power_cap'): if not PRINT_JSON: printLog(device, 'Successfully reset Power OverDrive to: %sW' % (int(power_cap.value / 1000000)), None) @@ -1395,7 +1402,7 @@ def setProfile(deviceList, profile): for device in deviceList: # Get previous profile ret = rocmsmi.rsmi_dev_power_profile_presets_get(device, 0, byref(status)) - if rsmi_ret_ok(ret, device, 'previous profile'): + if rsmi_ret_ok(ret, device, 'get_power_profile'): previousProfile = profileString(status.current) # Get desired profile desiredProfile = 'UNKNOWN' @@ -1412,10 +1419,10 @@ def setProfile(deviceList, profile): return else: ret = rocmsmi.rsmi_dev_power_profile_set(device, 0, profileString(desiredProfile)) - if rsmi_ret_ok(ret, device, 'set profile'): + if rsmi_ret_ok(ret, device, 'set_power_profile'): # Get current profile ret = rocmsmi.rsmi_dev_power_profile_presets_get(device, 0, byref(status)) - if rsmi_ret_ok(ret, device, 'current profile'): + if rsmi_ret_ok(ret, device, 'get_power_profile_presets'): currentProfile = profileString(status.current) if currentProfile == desiredProfile: printLog(device, 'Successfully set profile to', desiredProfile) @@ -1441,7 +1448,7 @@ def setComputePartition(deviceList, computePartitionType): return (None, None) ret = rocmsmi.rsmi_dev_compute_partition_set(device, rsmi_compute_partition_type_dict[computePartitionType]) - if rsmi_ret_ok(ret, device, silent=True): + if rsmi_ret_ok(ret, device, 'set_compute_partition', silent=True): printLog(device, 'Successfully set compute partition to %s' % (computePartitionType), None) @@ -1453,7 +1460,7 @@ def setComputePartition(deviceList, computePartitionType): elif ret == rsmi_status_t.RSMI_STATUS_NOT_SUPPORTED: printLog(device, 'Not supported on the given system', None) else: - rsmi_ret_ok(ret, device) + rsmi_ret_ok(ret, device, 'set_compute_partition') printErrLog(device, 'Failed to retrieve compute partition, even though device supports it.') printLogSpacer() @@ -1514,7 +1521,7 @@ def setNPSMode(deviceList, npsMode): if duration < float(0.1): # For longer runs, add extra line before output addExtraLine=False # This is to prevent overriding progress bar - if rsmi_ret_ok(ret, device, silent=True): + if rsmi_ret_ok(ret, device, 'set_NPS_mode', silent=True): printLog(device, 'Successfully set nps mode to %s' % (npsMode), None, addExtraLine) @@ -1523,7 +1530,7 @@ def setNPSMode(deviceList, npsMode): elif ret == rsmi_status_t.RSMI_STATUS_NOT_SUPPORTED: printLog(device, 'Not supported on the given system', None, addExtraLine) else: - rsmi_ret_ok(ret, device) + rsmi_ret_ok(ret, device, 'set_NPS_mode') printErrLog(device, 'Failed to retrieve NPS mode, even though device supports it.') printLogSpacer() @@ -1567,10 +1574,12 @@ def showAllConcise(deviceList): gpu_busy = str(getGpuUse(device)) + '%' else: gpu_busy = 'Unsupported' - memInfo = getMemInfo(device, 'vram') + vram_used, vram_total = getMemInfo(device, 'vram', True) mem_use_pct = 0 - if memInfo[0] != None and memInfo[1] != None and float(memInfo[1]) != 0: - mem_use_pct = '% 3.0f%%' % (100 * (float(memInfo[0]) / float(memInfo[1]))) + if vram_used is None: + mem_use_pct='Unsupported' + if vram_used != None and vram_total != None and float(vram_total) != 0: + mem_use_pct = '% 3.0f%%' % (100 * (float(vram_used) / float(vram_total))) values['card%s' % (str(device))] = [device, temp, avgPwr, sclk, mclk, fan, str(perf).lower(), pwrCap, mem_use_pct, gpu_busy] val_widths = {} @@ -1650,7 +1659,7 @@ def showClocks(deviceList): freq_list = [] if rocmsmi.rsmi_dev_gpu_clk_freq_get(device, rsmi_clk_names_dict[clk_type], None) == 1: ret = rocmsmi.rsmi_dev_gpu_clk_freq_get(device, rsmi_clk_names_dict[clk_type], byref(freq)) - if rsmi_ret_ok(ret, device, clk_type, True): + if rsmi_ret_ok(ret, device, 'get_clk_freq_' + clk_type, True): printLog(device, 'Supported %s frequencies on GPU%s' % (clk_type, str(device)), None) for x in range(freq.num_supported): fr = '{:>.0f}Mhz'.format(freq.frequency[x] / 1000000) @@ -1664,7 +1673,7 @@ def showClocks(deviceList): printLog(device, '', None) if rocmsmi.rsmi_dev_pci_bandwidth_get(device, None) == 1: ret = rocmsmi.rsmi_dev_pci_bandwidth_get(device, byref(bw)) - if rsmi_ret_ok(ret, device, 'PCIe', True): + if rsmi_ret_ok(ret, device, 'get_PCIe_bandwidth', True): printLog(device, 'Supported %s frequencies on GPU%s' % ('PCIe', str(device)), None) freq_list = [] for x in range(bw.transfer_rate.num_supported): @@ -1698,7 +1707,7 @@ def showCurrentClocks(deviceList, clk_defined=None, concise=False): if clk_defined: if rocmsmi.rsmi_dev_gpu_clk_freq_get(device, rsmi_clk_names_dict[clk_defined], None) == 1: ret = rocmsmi.rsmi_dev_gpu_clk_freq_get(device, rsmi_clk_names_dict[clk_defined], byref(freq)) - if rsmi_ret_ok(ret, device, clk_defined, True): + if rsmi_ret_ok(ret, device, 'get_gpu_clk_freq_' + str(clk_defined), silent=True): levl = freq.current if levl >= freq.num_supported: printLog(device, '%s current clock frequency not found' % (clk_defined), None) @@ -1714,7 +1723,7 @@ def showCurrentClocks(deviceList, clk_defined=None, concise=False): for clk_type in sorted(rsmi_clk_names_dict): if rocmsmi.rsmi_dev_gpu_clk_freq_get(device, rsmi_clk_names_dict[clk_type], None) == 1: ret = rocmsmi.rsmi_dev_gpu_clk_freq_get(device, rsmi_clk_names_dict[clk_type], byref(freq)) - if rsmi_ret_ok(ret, device, clk_type, True): + if rsmi_ret_ok(ret, device, 'get_clk_freq_' + str(clk_type), True): levl = freq.current if levl >= freq.num_supported: printLog(device, '%s current clock frequency not found' % (clk_type), None) @@ -1730,7 +1739,7 @@ def showCurrentClocks(deviceList, clk_defined=None, concise=False): # pcie clocks if rocmsmi.rsmi_dev_pci_bandwidth_get(device, None) == 1: ret = rocmsmi.rsmi_dev_pci_bandwidth_get(device, byref(bw)) - if rsmi_ret_ok(ret, device, 'PCIe', True): + if rsmi_ret_ok(ret, device, 'get_PCIe_bandwidth', True): current_f = bw.transfer_rate.current if current_f >= bw.transfer_rate.num_supported: printLog(device, 'PCIe current clock frequency not found', None ) @@ -1768,7 +1777,7 @@ def showCurrentFans(deviceList): else: printLog(device, 'Fan Level', str(fanLevel) + ' (%s%%)' % (str(fanSpeed))) ret = rocmsmi.rsmi_dev_fan_rpms_get(device, sensor_ind, byref(rpmSpeed)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'get_fan_rpms'): printLog(device, 'Fan RPM', rpmSpeed.value) printLogSpacer() @@ -1809,7 +1818,7 @@ def showFwInfo(deviceList, fwType): for fw_name in firmware_blocks: fw_name = fw_name.upper() ret = rocmsmi.rsmi_dev_firmware_version_get(device, fw_block_names_l.index(fw_name), byref(fw_ver)) - if rsmi_ret_ok(ret, device, fw_name): + if rsmi_ret_ok(ret, device, 'get_firmware_version_' + str(fw_name)): # The VCN, VCE, UVD, SOS and ASD firmware's value needs to be in hexadecimal if fw_name in ['VCN', 'VCE', 'UVD', 'SOS', 'ASD']: printLog(device, '%s firmware version' % (fw_name), @@ -1853,12 +1862,12 @@ def showGpusByPid(pidList): return for pid in pidList: ret = rocmsmi.rsmi_compute_process_gpus_get(int(pid), None, byref(num_devices)) - if rsmi_ret_ok(ret, 'PID ' + pid): + if rsmi_ret_ok(ret, metric=('PID ' + pid)): dv_indices = (c_uint32 * num_devices.value)() ret = rocmsmi.rsmi_compute_process_gpus_get(int(pid), dv_indices, byref(num_devices)) - if rsmi_ret_ok(ret): + if rsmi_ret_ok(ret, metric='get_gpu_compute_process'): metricName = 'PID %s is using %s DRM device(s)' % (pid, str(num_devices.value)) if (num_devices.value): printListLog(metricName, list(dv_indices)) @@ -1900,7 +1909,7 @@ def getCoarseGrainUtil(device, typeName=None): utilization_counters[i].type = c_int(i) ret = rocmsmi.rsmi_utilization_count_get(device, utilization_counters, length, byref(timestamp)) - if rsmi_ret_ok(ret, device, typeName, True): + if rsmi_ret_ok(ret, device, 'get_utilization_count_'+ str(typeName), True): return utilization_counters return -1 @@ -2026,7 +2035,7 @@ def showMemVendor(deviceList): printLogSpacer(' Memory Vendor ') for device in deviceList: ret = rocmsmi.rsmi_dev_vram_vendor_get(device, vendor, 256) - if rsmi_ret_ok(ret, device) and vendor.value.decode(): + if rsmi_ret_ok(ret, device, 'get_vram_vendor') and vendor.value.decode(): printLog(device, 'GPU memory vendor', vendor.value.decode()) else: logging.debug('GPU memory vendor missing or not supported') @@ -2046,13 +2055,13 @@ def showOverDrive(deviceList, odtype): odStr = 'GPU' ret = rocmsmi.rsmi_dev_overdrive_level_get(device, byref(rsmi_od)) od = rsmi_od.value - if not rsmi_ret_ok(ret, device): + if not rsmi_ret_ok(ret, device, 'get_overdrive_level_' + str(odtype)): continue elif odtype == 'mclk': odStr = 'GPU Memory' ret = rocmsmi.rsmi_dev_mem_overdrive_level_get(device, byref(rsmi_od)) od = rsmi_od.value - if not rsmi_ret_ok(ret, device): + if not rsmi_ret_ok(ret, device, 'get_mem_overdrive_level_' + str(odtype)): continue else: printErrLog(device, 'Unable to retrieve OverDrive') @@ -2073,7 +2082,7 @@ def showPcieBw(deviceList): printLogSpacer(' Measured PCIe Bandwidth ') for device in deviceList: ret = rocmsmi.rsmi_dev_pci_throughput_get(device, byref(sent), byref(received), byref(max_pkt_sz)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'get_PCIe_bandwidth'): # Use 1024.0 to ensure that the result is a float and not integer division bw = ((received.value + sent.value) * max_pkt_sz.value) / 1024.0 / 1024.0 # Use the bwstr below to control precision on the string @@ -2131,15 +2140,15 @@ def showPids(): sdmaUsage = 'UNKNOWN' cuOccupancy = 'UNKNOWN' ret = rocmsmi.rsmi_compute_process_gpus_get(int(pid), None, byref(num_devices)) - if rsmi_ret_ok(ret): + if rsmi_ret_ok(ret, metric='get_gpu_compute_process'): dv_indices = (c_uint32 * num_devices.value)() ret = rocmsmi.rsmi_compute_process_gpus_get(int(pid), dv_indices, byref(num_devices)) - if rsmi_ret_ok(ret): + if rsmi_ret_ok(ret, metric='get_gpu_compute_process'): gpuNumber = str(num_devices.value) else: logging.debug('Unable to fetch GPU number by PID') ret = rocmsmi.rsmi_compute_process_info_by_pid_get(int(pid), byref(proc)) - if rsmi_ret_ok(ret): + if rsmi_ret_ok(ret, metric='get_compute_process_info_by_pid'): vramUsage = proc.vram_usage sdmaUsage = proc.sdma_usage cuOccupancy = proc.cu_occupancy @@ -2184,7 +2193,7 @@ def showPowerPlayTable(deviceList): odvf = rsmi_od_volt_freq_data_t() for device in deviceList: ret = rocmsmi.rsmi_dev_od_volt_info_get(device, byref(odvf)) - if rsmi_ret_ok(ret, device, 'od volt'): + if rsmi_ret_ok(ret, device, 'get_od_volt'): # TODO: Make this more dynamic and less hard-coded if possible printLog(device, 'OD_SCLK:', None) printLog(device, '0: %sMhz' % (int(odvf.curr_sclk_range.lower_bound / 1000000)), None) @@ -2224,7 +2233,7 @@ def showProductName(deviceList): # Retrieve card vendor ret = rocmsmi.rsmi_dev_vendor_name_get(device, vendor, 256) # Only continue if GPU vendor is AMD - if rsmi_ret_ok(ret, device) and isAmdDevice(device): + if rsmi_ret_ok(ret, device, 'get_vendor_name') and isAmdDevice(device): try: device_vendor = vendor.value.decode() except UnicodeDecodeError: @@ -2232,7 +2241,7 @@ def showProductName(deviceList): device_vendor = "N/A" # Retrieve the device series ret = rocmsmi.rsmi_dev_name_get(device, series, 256) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'get_name'): try: device_series = series.value.decode() printLog(device, 'Card series', '\t\t' + device_series) @@ -2240,7 +2249,7 @@ def showProductName(deviceList): printErrLog(device, "Unable to read card series") # Retrieve the device model ret = rocmsmi.rsmi_dev_subsystem_name_get(device, model, 256) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'get_subsystem_name'): try: device_model = model.value.decode() # padHexValue is used for applications that expect 4-digit card models @@ -2254,7 +2263,7 @@ def showProductName(deviceList): # device_sku = sku.value.decode() # Retrieve the device SKU as a substring from VBIOS ret = rocmsmi.rsmi_dev_vbios_version_get(device, vbios, 256) - if rsmi_ret_ok(ret, device) and vbios.value.decode(): + if rsmi_ret_ok(ret, device, 'get_vbios_version') and vbios.value.decode(): # Device SKU is just the characters in between the two '-' in vbios_version if vbios.value.decode().count('-') == 2 and len(str(vbios.value.decode().split('-')[1])) > 1: device_sku = vbios.value.decode().split('-')[1] @@ -2282,7 +2291,7 @@ def showProfile(deviceList): status = rsmi_power_profile_status_t() for device in deviceList: ret = rocmsmi.rsmi_dev_power_profile_presets_get(device, 0, byref(status)) - if rsmi_ret_ok(ret, device, 'profiles', silent=False): + if rsmi_ret_ok(ret, device, 'get_power_profiles', silent=False): binaryMaskString = str(format(status.available_profiles, '07b'))[::-1] bitMaskPosition = 0 profileNumber = 0 @@ -2314,7 +2323,7 @@ def showRange(deviceList, rangeType): odvf = rsmi_od_volt_freq_data_t() for device in deviceList: ret = rocmsmi.rsmi_dev_od_volt_info_get(device, byref(odvf)) - if rsmi_ret_ok(ret, device, 'od volt', silent=False): + if rsmi_ret_ok(ret, device, 'get_od_volt', silent=False): if rangeType == 'sclk': printLog(device, 'Valid sclk range: %sMhz - %sMhz' % ( int(odvf.curr_sclk_range.lower_bound / 1000000), int(odvf.curr_sclk_range.upper_bound / 1000000)), None) @@ -2362,7 +2371,7 @@ def showRasInfo(deviceList, rasType): for block in rasBlocks: row = [] ret = rocmsmi.rsmi_dev_ecc_status_get(device, rsmi_gpu_block_d[block], byref(state)) - if rsmi_ret_ok(ret, device, block, True): + if rsmi_ret_ok(ret, device, 'get_ecc_status_' + str(block), True): row.append(block) row.append(rsmi_ras_err_stale_machine[state.value].upper()) # Now add the error count @@ -2424,7 +2433,7 @@ def showSerialNumber(deviceList): printErrLog(device, "FRU Serial Number contains non-alphanumeric characters. FRU is likely corrupted") continue - if rsmi_ret_ok(ret, device) and sn.value.decode(): + if rsmi_ret_ok(ret, device, 'get_serial_number') and sn.value.decode(): printLog(device, 'Serial Number', sn.value.decode()) else: printLog(device, 'Serial Number', 'N/A') @@ -2440,7 +2449,7 @@ def showUId(deviceList): for device in deviceList: dv_uid = c_uint64() ret = rocmsmi.rsmi_dev_unique_id_get(device, byref(dv_uid)) - if rsmi_ret_ok(ret, device, None, True) and str(hex(dv_uid.value)): + if rsmi_ret_ok(ret, device, 'get_unique_id', True) and str(hex(dv_uid.value)): printLog(device, 'Unique ID', hex(dv_uid.value)) else: printLog(device, 'Unique ID', 'N/A') @@ -2510,7 +2519,7 @@ def showEvents(deviceList, eventTypes): if user_input == 'q' or user_input == '\x03': for device in deviceList: ret = rocmsmi.rsmi_event_notification_stop(device) - if not rsmi_ret_ok(ret, device): + if not rsmi_ret_ok(ret, device, 'stop_event_notification'): printErrLog(device, 'Unable to end event notifications.') print('\r') break @@ -2633,7 +2642,7 @@ def showVoltage(deviceList): met = rsmi_voltage_metric_t(0) voltage = c_uint64() ret = rocmsmi.rsmi_dev_volt_metric_get(device, vtype, met, byref(voltage)) - if rsmi_ret_ok(ret, device) and str(voltage.value): + if rsmi_ret_ok(ret, device, 'get_volt_metric') and str(voltage.value): printLog(device, 'Voltage (mV)', str(voltage.value)) else: logging.debug('GPU voltage not supported') @@ -2649,7 +2658,7 @@ def showVoltageCurve(deviceList): odvf = rsmi_od_volt_freq_data_t() for device in deviceList: ret = rocmsmi.rsmi_dev_od_volt_info_get(device, byref(odvf)) - if rsmi_ret_ok(ret, device, 'od volt', silent=False): + if rsmi_ret_ok(ret, device, 'get_od_volt_info', silent=False): for position in range(3): printLog(device, 'Voltage point %d: %sMhz %smV' % ( position, int(list(odvf.curve.vc_points)[position].frequency / 1000000), @@ -2704,7 +2713,7 @@ def showAccessibleTopology(deviceList): for srcdevice in deviceList: for destdevice in deviceList: ret = rocmsmi.rsmi_is_P2P_accessible(srcdevice, destdevice, byref(accessible)) - if rsmi_ret_ok(ret): + if rsmi_ret_ok(ret, metric='is_P2P_accessible'): gpu_links_type[srcdevice][destdevice] = accessible.value else: printErrLog(srcdevice, 'Cannot read link accessibility: Unsupported on this machine') @@ -2743,7 +2752,7 @@ def showWeightTopology(deviceList): continue weight = c_uint64() ret = rocmsmi.rsmi_topo_get_link_weight(srcdevice, destdevice, byref(weight)) - if rsmi_ret_ok(ret): + if rsmi_ret_ok(ret, metric='get_link_weight_topology'): gpu_links_weight[srcdevice][destdevice] = weight else: printErrLog(srcdevice, 'Cannot read Link Weight: Not supported on this machine') @@ -2790,7 +2799,7 @@ def showHopsTopology(deviceList): continue hops = c_uint64() ret = rocmsmi.rsmi_topo_get_link_type(srcdevice, destdevice, byref(hops), byref(linktype)) - if rsmi_ret_ok(ret): + if rsmi_ret_ok(ret, metric='get_link_type_topology'): gpu_links_hops[srcdevice][destdevice] = hops else: printErrLog(srcdevice, 'Cannot read Link Hops: Not supported on this machine') @@ -2836,7 +2845,7 @@ def showTypeTopology(deviceList): gpu_links_type[srcdevice][destdevice] = '0' continue ret = rocmsmi.rsmi_topo_get_link_type(srcdevice, destdevice, byref(hops), byref(linktype)) - if rsmi_ret_ok(ret): + if rsmi_ret_ok(ret, metric='get_link_topology_type'): if (linktype.value == 1): gpu_links_type[srcdevice][destdevice] = "PCIE" elif (linktype.value == 2): @@ -2878,13 +2887,13 @@ def showNumaTopology(deviceList): numa_numbers = c_uint32() for device in deviceList: ret = rocmsmi.rsmi_topo_get_numa_node_number(device, byref(numa_numbers)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'get_numa_node_number'): printLog(device, "(Topology) Numa Node", numa_numbers.value) else: printErrLog(device, "Cannot read Numa Node") ret = rocmsmi.rsmi_topo_numa_affinity_get(device, byref(numa_numbers)) - if rsmi_ret_ok(ret): + if rsmi_ret_ok(ret, metric='get_numa_affinity_topology'): printLog(device, "(Topology) Numa Affinity", numa_numbers.value) else: printErrLog(device, 'Cannot read Numa Affinity') @@ -2927,13 +2936,13 @@ def showNodesBw(deviceList): ret = rocmsmi.rsmi_minmax_bandwidth_get(srcdevice, destdevice, byref(minBW), byref(maxBW)) #verify that link type is xgmi ret2 = rocmsmi.rsmi_topo_get_link_type(srcdevice, destdevice, byref(hops), byref(linktype)) - if rsmi_ret_ok(ret2," {} to {}".format(srcdevice, destdevice), None, True): + if rsmi_ret_ok(ret2," {} to {}".format(srcdevice, destdevice), 'get_link_topology_type', True): if linktype.value != 2: nonXgmi = True silent= True gpu_links_type[srcdevice][destdevice] = "N/A" - if rsmi_ret_ok(ret, " {} to {}".format(srcdevice, destdevice),None,silent): + if rsmi_ret_ok(ret, " {} to {}".format(srcdevice, destdevice), 'get_link_topology_type',silent): gpu_links_type[srcdevice][destdevice] = "{}-{}".format(minBW.value, maxBW.value) else: gpu_links_type[srcdevice][destdevice] = "N/A" @@ -2965,12 +2974,12 @@ def showComputePartition(deviceList): printLogSpacer(' Current Compute Partition ') for device in deviceList: ret = rocmsmi.rsmi_dev_compute_partition_get(device, currentComputePartition, 256) - if rsmi_ret_ok(ret, device, silent=True) and currentComputePartition.value.decode(): + if rsmi_ret_ok(ret, device, 'get_compute_partition', silent=True) and currentComputePartition.value.decode(): printLog(device, 'Compute Partition', currentComputePartition.value.decode()) elif ret == rsmi_status_t.RSMI_STATUS_NOT_SUPPORTED: printLog(device, 'Not supported on the given system', None) else: - rsmi_ret_ok(ret, device) + rsmi_ret_ok(ret, device, 'get_compute_partition') printErrLog(device, 'Failed to retrieve compute partition, even though device supports it.') printLogSpacer() @@ -2983,12 +2992,12 @@ def showNPSMode(deviceList): printLogSpacer(' Current NPS Mode ') for device in deviceList: ret = rocmsmi.rsmi_dev_nps_mode_get(device, npsMode, 256) - if rsmi_ret_ok(ret, device, silent=True) and npsMode.value.decode(): + if rsmi_ret_ok(ret, device, 'get_NPS_mode',silent=True) and npsMode.value.decode(): printLog(device, 'NPS Mode', npsMode.value.decode()) elif ret == rsmi_status_t.RSMI_STATUS_NOT_SUPPORTED: printLog(device, 'Not supported on the given system', None) else: - rsmi_ret_ok(ret, device) + rsmi_ret_ok(ret, device, 'get_NPS_mode') printErrLog(device, 'Failed to retrieve NPS mode, even though device supports it.') printLogSpacer() @@ -3088,7 +3097,7 @@ def listDevices(): """ Returns a list of GPU devices """ numberOfDevices = c_uint32(0) ret = rocmsmi.rsmi_num_monitor_devices(byref(numberOfDevices)) - if rsmi_ret_ok(ret): + if rsmi_ret_ok(ret, metric='get_num_monitor_devices'): deviceList = list(range(numberOfDevices.value)) return deviceList else: @@ -3178,6 +3187,8 @@ def rsmi_ret_ok(my_ret, device=None, metric=None, silent=False): @param device: DRM device identifier @param my_ret: Return of RSMI call (rocm_smi_lib API) @param metric: Parameter of GPU currently being analyzed + @param silent: Echo verbose error reponse. + True siliences err output, False does not silience err output (default). """ global RETCODE global PRINT_JSON @@ -3194,7 +3205,7 @@ def rsmi_ret_ok(my_ret, device=None, metric=None, silent=False): logging.debug('%s', returnString) if not silent: if my_ret in rsmi_status_verbose_err_out: - printLog(device, rsmi_status_verbose_err_out[my_ret], None) + printLog(device, metric + ", " + rsmi_status_verbose_err_out[my_ret], None) RETCODE = my_ret return False return True @@ -3226,14 +3237,14 @@ def save(deviceList, savefilepath): for clk_type in sorted(rsmi_clk_names_dict): clocks[device] = clocks.get(device, {}) ret = rocmsmi.rsmi_dev_gpu_clk_freq_get(device, rsmi_clk_names_dict[clk_type], byref(freq)) - if rsmi_ret_ok(ret, device, clk_type, True): + if rsmi_ret_ok(ret, device, 'get_gpu_clk_freq_' + str(clk_type), True): clocks[device][clk_type] = str(freq.current) else: clocks[device][clk_type] = '0' fanSpeeds[device] = getFanSpeed(device)[0] od = c_uint32() ret = rocmsmi.rsmi_dev_overdrive_level_get(device, byref(od)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, 'get_overdrive_level'): overDriveGpu[device] = str(od.value) else: overDriveGpu[device] = '0' @@ -3241,7 +3252,7 @@ def save(deviceList, savefilepath): overDriveGpuMem[device] = '0' status = rsmi_power_profile_status_t() ret = rocmsmi.rsmi_dev_power_profile_presets_get(device, 0, byref(status)) - if rsmi_ret_ok(ret, device, 'profile'): + if rsmi_ret_ok(ret, device, 'get_profile_presets'): profiles[device] = str(str(bin(status.current))[2:][::-1].index('1') + 1) else: profiles[device] = str('UNKNOWN') diff --git a/src/rocm_smi_main.cc b/src/rocm_smi_main.cc index 52c8227c53..349f6030ef 100755 --- a/src/rocm_smi_main.cc +++ b/src/rocm_smi_main.cc @@ -520,10 +520,12 @@ void RocmSMI::printEnvVarInfo(void) { } for (auto it=env_vars_.enum_overrides.begin(); it != env_vars_.enum_overrides.end(); ++it) { - std::cout << *it; + DevInfoTypes type = static_cast(*it); + std::cout << (std::to_string(*it) + " (" + devInfoTypesStrings.at(type) + + ")"); auto temp_it = it; if(++temp_it != env_vars_.enum_overrides.end()) { - std::cout << ","; + std::cout << ", "; } } std::cout << "}" << std::endl; From daffcdb930ad357e39ed1a407331652b6097c2cb Mon Sep 17 00:00:00 2001 From: Ranjith Ramakrishnan Date: Mon, 8 May 2023 16:56:21 -0700 Subject: [PATCH 51/85] SWDEV-383221 - Set the default value of ROCM_HEADER_WRAPPER_WERROR to OFF Using wrapper header files will result in #warning message by default Change-Id: I8941a96bdc1b921a7646ccb353130cb283957ff8 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b6104c02e1..82306ad3b4 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -186,7 +186,7 @@ if(FILE_REORG_BACKWARD_COMPATIBILITY) set(ROCM_HEADER_WRAPPER_WERROR "$ENV{ROCM_HEADER_WRAPPER_WERROR}" CACHE STRING "Header wrapper warnings as errors.") else() - set(ROCM_HEADER_WRAPPER_WERROR "ON" CACHE STRING "Header wrapper warnings as errors.") + set(ROCM_HEADER_WRAPPER_WERROR "OFF" CACHE STRING "Header wrapper warnings as errors.") endif() endif() if(ROCM_HEADER_WRAPPER_WERROR) From ed74bc6eca120e841d7a3fe5e3a0f1d75fcdf51b Mon Sep 17 00:00:00 2001 From: Sam Wu Date: Wed, 3 May 2023 16:15:04 -0600 Subject: [PATCH 52/85] sphinx documentation ref: https://github.com/RadeonOpenCompute/rocm_smi_lib/pull/119 fix formatting in docs/index.md Change-Id: I940ef8147a40bd3b702aa591bd56557a870621fb --- .github/dependabot.yml | 12 + .readthedocs.yaml | 21 + README.md | 50 +- docs/.doxygen/Doxyfile | 2420 +++++++++++++++++++++++++++++++++ docs/.gitignore | 9 + docs/.sphinx/_toc.yml | 6 + docs/.sphinx/_toc.yml.in | 8 + docs/.sphinx/requirements.in | 1 + docs/.sphinx/requirements.txt | 165 +++ docs/conf.py | 17 + docs/index.md | 3 + rocm_smi/CMakeLists.txt | 35 - 12 files changed, 2694 insertions(+), 53 deletions(-) create mode 100644 .github/dependabot.yml create mode 100644 .readthedocs.yaml create mode 100644 docs/.doxygen/Doxyfile create mode 100644 docs/.gitignore create mode 100644 docs/.sphinx/_toc.yml create mode 100755 docs/.sphinx/_toc.yml.in create mode 100755 docs/.sphinx/requirements.in create mode 100644 docs/.sphinx/requirements.txt create mode 100755 docs/conf.py create mode 100755 docs/index.md diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..9cdf2d670c --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,12 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "pip" # See documentation for possible values + directory: "/docs/.sphinx" # Location of package manifests + open-pull-requests-limit: 10 + schedule: + interval: "daily" diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000000..1240c9c525 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,21 @@ +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +version: 2 + +sphinx: + configuration: docs/conf.py + +formats: [htmlzip] + +python: + install: + - requirements: docs/.sphinx/requirements.txt + +build: + os: ubuntu-20.04 + tools: + python: "3.8" + apt_packages: + - "doxygen" + - "graphviz" # For dot graphs in doxygen diff --git a/README.md b/README.md index abb3a18d89..c36f81f705 100755 --- a/README.md +++ b/README.md @@ -19,35 +19,50 @@ In order to build the ROCm SMI library, the following components are required. N * g++ (5.4.0) In order to build the latest documentation, the following are required: -* DOxygen (1.8.11) -* latex (pdfTeX 3.14159265-2.6-1.40.16) +* Python 3.8+ +* NPM (sass) The source code for ROCm SMI is available on [Github](https://github.com/RadeonOpenCompute/rocm_smi_lib). After the ROCm SMI library git repository has been cloned to a local Linux machine, building the library is achieved by following the typical CMake build sequence. Specifically, -##### ```$ mkdir -p build``` -##### ```$ cd build``` -##### ```$ cmake ``` -##### ```$ make``` -##### ```# Install library file and header; default location is /opt/rocm``` -##### ```$ make install``` +```shell +mkdir -p build +cd build +cmake +make +# Install library file and header; default location is /opt/rocm +$ make install +``` The built library will appear in the `build` folder. To build the rpm and deb packages follow the above steps with: -##### ```$ make package``` +```shell +make package +``` #### Documentation -The reference manual, `refman.pdf` will be in the `latex` directory upon a successful build. +The following is an example of how to build the docs: +```shell +sudo apt install -y npm +sudo npm install -g sass + +python3 -m venv .venv + +.venv/bin/python3 -m pip install -r docs/.sphinx/requirements.txt +.venv/bin/python3 -m sphinx -T -E -b html -d docs/_build/doctrees -D language=en docs docs/_build/html +``` #### Building the Tests In order to verify the build and capability of ROCm SMI on your system and to see an example of how ROCm SMI can be used, you may build and run the tests that are available in the repo. To build the tests, follow these steps: -##### ```# Set environment variables used in CMakeLists.txt file``` -##### ```$ ROCM_DIR=``` -##### ```$ mkdir ``` -##### ```$ cd ``` -##### ```$ cmake -DROCM_DIR=$ROCM_DIR /tests/rocm_smi_test``` -##### ```$ make``` +```shell +# Set environment variables used in CMakeLists.txt file +ROCM_DIR= +mkdir +cd +cmake -DROCM_DIR=$ROCM_DIR /tests/rocm_smi_test +make +``` To run the test, execute the program `rsmitst` that is built from the steps above. @@ -62,7 +77,7 @@ When ROCm-SMI is no longer being used, `rsmi_shut_down()` should be called. This A simple "Hello World" type program that displays the device ID of detected devices would look like this: -``` +```c #include #include "rocm_smi/rocm_smi.h" int main() { @@ -86,4 +101,3 @@ int main() { return 0; } ``` - diff --git a/docs/.doxygen/Doxyfile b/docs/.doxygen/Doxyfile new file mode 100644 index 0000000000..63fcd8c926 --- /dev/null +++ b/docs/.doxygen/Doxyfile @@ -0,0 +1,2420 @@ +# Doxyfile 1.8.11 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "ROCmSMI" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "ROCm SMI LIB Reference Manual" + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = docBin + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = NO + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +# Doxygen says following tag is obsolete; comment to quiet warning +# TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = ../../README.md \ + ../../include/rocm_smi/rocm_smi.h + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f, *.for, *.tcl, +# *.vhd, *.vhdl, *.ucf, *.qsf, *.as and *.js. + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = ../../README.md + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse-libclang=ON option for CMake. +# The default value is: NO. + +# comment following to quiet warning +# CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +# comment following to quiet warning +# CLANG_OPTIONS = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = ../_doxygen/header.html + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = ../_doxygen/footer.html + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = ../_doxygen/stylesheet.css + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = ../_doxygen/extra_stylesheet.css + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 16 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /