feat(cpp-object-oriented-modular-refactoring): step 10 - dense-blas-adapter

This commit is contained in:
KOKO\Mimi
2026-08-16 07:49:57 +09:00
parent 6b0ff31db0
commit 89fc13c873
7 changed files with 146 additions and 49 deletions
+8
View File
@@ -15,6 +15,7 @@ add_executable(
unit/elements/euler_beam_3d_test.cpp
unit/elements/mitc4_shell_test.cpp
unit/fem/dof_manager_test.cpp
unit/math/dense_blas_internal_test.cpp
unit/math/matrix_test.cpp
unit/math/sparse_matrix_test.cpp
unit/math/vector3_test.cpp
@@ -33,11 +34,18 @@ add_executable(
unit/solvers/linear/mkl_pardiso_solver_test.cpp
)
target_include_directories(
fesa_unit_tests
PRIVATE
"${PROJECT_SOURCE_DIR}/src/fesa"
)
target_link_libraries(
fesa_unit_tests
PRIVATE
fesa_solver
Fesa::HDF5
Fesa::MKL
GTest::gtest_main
)
@@ -0,0 +1,39 @@
#include "math/dense_blas_internal.h"
#include <gtest/gtest.h>
#include <array>
#include <cstddef>
#include <limits>
namespace fesa::dense_blas_internal {
namespace {
TEST(DenseBlasInternal, CDup003ConvertsZeroNormalAndOverflowLengths) {
const auto zero = ToMklSize(0U);
ASSERT_TRUE(zero.HasValue());
EXPECT_EQ(zero.Value(), 0);
const auto normal = ToMklSize(3U);
ASSERT_TRUE(normal.HasValue());
EXPECT_EQ(normal.Value(), 3);
const std::size_t overflow =
static_cast<std::size_t>((std::numeric_limits<MKL_INT>::max)()) + 1U;
const auto rejected = ToMklSize(overflow);
EXPECT_FALSE(rejected.HasValue());
EXPECT_FALSE(rejected.GetStatus().IsOk());
}
TEST(DenseBlasInternal, CDup003CopiesZeroAndNonzeroContiguousValues) {
EXPECT_NO_THROW(CopyValues(nullptr, 0U, nullptr));
const std::array<double, 3U> source{1.25, -2.5, 4.0};
std::array<double, 3U> destination{};
CopyValues(source.data(), source.size(), destination.data());
EXPECT_EQ(destination, source);
}
} // namespace
} // namespace fesa::dense_blas_internal