Loading .gitlab-ci.yml +38 −22 Original line number Diff line number Diff line Loading @@ -12,62 +12,78 @@ stages: - upload - release # Regular pipeline - just builds package (runs automatically) build: stage: build script: - dnf install -y gcc-c++ make cmake git doxygen lcov graphviz - echo $CXX - gcc -march=native -dM -E - </dev/null | grep -i sse - cmake -Bbuild -H. -DCPPDUALS_TESTING=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo - cmake --build build - dnf install -y gcc-c++ make cmake git - cmake -Bbuild -H. -DCMAKE_BUILD_TYPE=RelWithDebInfo - cmake --build build --target package artifacts: expire_in: 1 week paths: - build/ only: - merge_requests - master - build/*.tar.gz - build/*.sh rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Manual pipeline - tests (triggered manually) test: stage: test script: - dnf install -y gcc-c++ make cmake git doxygen lcov graphviz - dnf install -y gcc-c++ make cmake git - cmake -Bbuild -H. -DCPPDUALS_TESTING=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo - cmake --build build - cmake --build build --target test dependencies: - build only: - merge_requests - master rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: manual allow_failure: true - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH when: manual allow_failure: true # Manual pipeline - coverage (triggered manually) cover: stage: cover script: - dnf install -y gcc-c++ make cmake git doxygen lcov graphviz - cmake -Bbuild-cov -H. -DCPPDUALS_TESTING=ON -DCPPDUALS_CODE_COVERAGE=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo - cmake -Bbuild-cov -H. -DCPPDUALS_TESTING=ON -DCPPDUALS_CODE_COVERAGE=ON -DCMAKE_BUILD_TYPE=Debug - cmake --build build-cov --target cov - cmake --build build-cov --target cov-html coverage: "/Total:|\\w*\\d+\\.\\d+/" artifacts: expire_in: 1 week paths: - build-cov/ only: - merge_requests - build-cov/coverage/ rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: manual allow_failure: true - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH when: manual allow_failure: true # Manual pipeline - generates website with docs and coverage (triggered manually) pages: stage: pages script: - dnf install -y gcc-c++ make cmake git doxygen lcov graphviz - cmake -Bbuild-cov -H. -DCODE_COVERAGE=ON -DCPPDUALS_TESTING=ON - cmake -Bbuild-cov -H. -DCPPDUALS_CODE_COVERAGE=ON -DCPPDUALS_TESTING=ON -DCMAKE_BUILD_TYPE=Debug - cmake --build build-cov --target cov-html - cmake --build build-cov --target cppduals_docs - mkdir -p public - mv build-cov/coverage public/ - mv build-cov/docs public/ coverage: "/Total:|\\w*\\d+\\.\\d+/" artifacts: paths: - public/ only: - master rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH when: manual allow_failure: true variables: # Package version can only contain numbers (0-9), and dots (.). Loading Makefile +14 −13 Original line number Diff line number Diff line Loading @@ -3,13 +3,15 @@ TARGET=cppduals CMAKE_OPTIONS=-DCPPDUALS_TESTING=ON -DCPPDUALS_BENCHMARK=ON CMAKE=cmake DEFAULT_TARGET=package GCC?=gcc-14 GXX?=g++-14 GCC?=gcc-15 GXX?=g++-15 CLANG?=clang CLANGXX?=clang++ CMAKE_BUILD_PARALLEL_LEVEL?=1 export CMAKE_BUILD_PARALLEL_LEVEL .DEFAULT_GOAL := help all: [ `uname` != Darwin ] || $(MAKE) clang clangr cc ccr osx osxr ios iosr [ `uname` != Linux ] || $(MAKE) cc ccr Loading @@ -18,15 +20,15 @@ help: @echo "Make targets for :" $(TARGET) @echo " clang - build debug package using clang compiler" @echo " clangr - build release package using clang compiler" @echo " test - " @echo " cov - build test coverage report" @echo " test - run tests (uses clang)" @echo " cov - build test coverage report (uses clang)" @echo " cov-gcc - build test coverage report (uses gcc)" @echo " osx - build debug package using XCode command-line" @echo " osxr - build release package using XCode command-line" @echo " cc - build debug package using cc/gcc compiler" @echo " ccr - build release package using cc/gcc compiler" @echo " " @echo " distclean - remove ALL build directories from the above targets" # @echo " tags - " Build-clang/Makefile Build-clang/compile_commands.json: Loading Loading @@ -76,18 +78,17 @@ cc: Build-cc/Makefile ccr: Build-ccr/Makefile $(CMAKE) --build Build-ccr --target $(DEFAULT_TARGET) test: ccr clangr CTEST_OUTPUT_ON_FAILURE=y $(CMAKE) --build Build-ccr --target test test: clangr CTEST_OUTPUT_ON_FAILURE=y $(CMAKE) --build Build-clangr --target test cov: cc CMAKE_BUILD_PARALLEL_LEVEL=8 $(CMAKE) --build Build-cc --target cov-html echo "coverage report is in Build-cc/coverage/index.html" cov-clang: clang cov: clang CMAKE_BUILD_PARALLEL_LEVEL=8 $(CMAKE) --build Build-clang --target cov-html @echo "coverage report is in Build-clang/coverage/html/index.html" cov-gcc: cc CMAKE_BUILD_PARALLEL_LEVEL=8 $(CMAKE) --build Build-cc --target cov-html @echo "coverage report is in Build-cc/coverage/html/index.html" Build-osx/cppduals.xcodeproj: $(CMAKE) . -BBuild-osx -GXcode $(CMAKE_OPTIONS) Loading tests/test_cdual.cpp +29 −1 Original line number Diff line number Diff line Loading @@ -173,3 +173,31 @@ TEST(cduald, div) EXPECT_NEAR(r.imag().dpart(), ref.imag().dpart(), tol); } // Test conversion operator from dual<T> to std::complex<dual<T>> TEST(complex, dual_to_complex_conversion) { dualf d1(3.0f, 2.0f); // Test implicit conversion cdualf c1 = d1; EXPECT_EQ(c1.real().rpart(), 3.0f); EXPECT_EQ(c1.real().dpart(), 2.0f); EXPECT_EQ(c1.imag().rpart(), 0.0f); EXPECT_EQ(c1.imag().dpart(), 0.0f); // Test explicit conversion cdualf c2 = static_cast<cdualf>(d1); EXPECT_EQ(c2.real().rpart(), 3.0f); EXPECT_EQ(c2.real().dpart(), 2.0f); EXPECT_EQ(c2.imag().rpart(), 0.0f); EXPECT_EQ(c2.imag().dpart(), 0.0f); // Test with duald duald d2(5.0, 7.0); cduald c3 = d2; EXPECT_EQ(c3.real().rpart(), 5.0); EXPECT_EQ(c3.real().dpart(), 7.0); EXPECT_EQ(c3.imag().rpart(), 0.0); EXPECT_EQ(c3.imag().dpart(), 0.0); } tests/test_packets.cpp +27 −1 Original line number Diff line number Diff line Loading @@ -151,6 +151,31 @@ using duals::randos::random2; } \ } #define GEN_PACKET_TEST_PALIGN(PTYPE) TEST(PTYPE,palign) { \ using namespace Eigen::internal; \ typedef unpacket_traits<PTYPE>::type DTYPE; \ const static int N = unpacket_traits<PTYPE>::size; \ std::vector<DTYPE,Eigen::aligned_allocator<DTYPE>> cd1(N); \ std::vector<DTYPE,Eigen::aligned_allocator<DTYPE>> cd2(N); \ std::vector<DTYPE,Eigen::aligned_allocator<DTYPE>> r(N); \ for (size_t i = 0; i < N; i++) { \ cd1[i] = random2<DTYPE>(); \ cd2[i] = random2<DTYPE>(); \ } \ PTYPE p1 = pload<PTYPE>(cd1.data()); \ PTYPE p2 = pload<PTYPE>(cd2.data()); \ palign<1>(p1, p2); \ pstore(r.data(), p1); \ for (int i = 0; i < N-1; i++) { \ EXPECT_DEQ(cd1[i+1], r[i]) \ << i << "/" << N << ":" << cd1[i+1] << "," << r[i] << " fail."; \ } \ if (N > 1) { \ EXPECT_DEQ(cd2[0], r[N-1]) \ << (N-1) << "/" << N << ":" << cd2[0] << "," << r[N-1] << " fail."; \ } \ } #define GEN_PACKET_TEST_FIRST(PTYPE) TEST(PTYPE,pfirst) { \ using namespace Eigen::internal; \ typedef unpacket_traits<PTYPE>::type DTYPE; \ Loading Loading @@ -316,7 +341,8 @@ using duals::randos::random2; /*GEN_PACKET_TEST_BROADCAST(PTYPE,2)*/ \ GEN_PACKET_TEST_BROADCAST(PTYPE,4) \ GEN_PACKET_TEST_FIRST(PTYPE) \ GEN_PACKET_TEST_REVERSE(PTYPE) GEN_PACKET_TEST_REVERSE(PTYPE) \ GEN_PACKET_TEST_PALIGN(PTYPE) #define GEN_CPACKET_TESTS(PTYPE) \ GEN_PACKET_TESTS(PTYPE) \ Loading thirdparty/CMakeLists.txt +2 −2 Original line number Diff line number Diff line Loading @@ -129,8 +129,8 @@ endif (hasParent) # ExternalProject_Add (fmtX PREFIX fmtX URL https://github.com/fmtlib/fmt/archive/11.1.4.tar.gz URL_HASH MD5=10c2ae163accd3b82e6b8b4dff877645 URL https://github.com/fmtlib/fmt/archive/12.1.0.tar.gz URL_HASH MD5=92eb6f492e4838e5f024ce5207beafc7 DOWNLOAD_DIR ${DOWNLOAD_DIR} CONFIGURE_COMMAND "" BUILD_COMMAND "" Loading Loading
.gitlab-ci.yml +38 −22 Original line number Diff line number Diff line Loading @@ -12,62 +12,78 @@ stages: - upload - release # Regular pipeline - just builds package (runs automatically) build: stage: build script: - dnf install -y gcc-c++ make cmake git doxygen lcov graphviz - echo $CXX - gcc -march=native -dM -E - </dev/null | grep -i sse - cmake -Bbuild -H. -DCPPDUALS_TESTING=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo - cmake --build build - dnf install -y gcc-c++ make cmake git - cmake -Bbuild -H. -DCMAKE_BUILD_TYPE=RelWithDebInfo - cmake --build build --target package artifacts: expire_in: 1 week paths: - build/ only: - merge_requests - master - build/*.tar.gz - build/*.sh rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Manual pipeline - tests (triggered manually) test: stage: test script: - dnf install -y gcc-c++ make cmake git doxygen lcov graphviz - dnf install -y gcc-c++ make cmake git - cmake -Bbuild -H. -DCPPDUALS_TESTING=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo - cmake --build build - cmake --build build --target test dependencies: - build only: - merge_requests - master rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: manual allow_failure: true - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH when: manual allow_failure: true # Manual pipeline - coverage (triggered manually) cover: stage: cover script: - dnf install -y gcc-c++ make cmake git doxygen lcov graphviz - cmake -Bbuild-cov -H. -DCPPDUALS_TESTING=ON -DCPPDUALS_CODE_COVERAGE=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo - cmake -Bbuild-cov -H. -DCPPDUALS_TESTING=ON -DCPPDUALS_CODE_COVERAGE=ON -DCMAKE_BUILD_TYPE=Debug - cmake --build build-cov --target cov - cmake --build build-cov --target cov-html coverage: "/Total:|\\w*\\d+\\.\\d+/" artifacts: expire_in: 1 week paths: - build-cov/ only: - merge_requests - build-cov/coverage/ rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: manual allow_failure: true - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH when: manual allow_failure: true # Manual pipeline - generates website with docs and coverage (triggered manually) pages: stage: pages script: - dnf install -y gcc-c++ make cmake git doxygen lcov graphviz - cmake -Bbuild-cov -H. -DCODE_COVERAGE=ON -DCPPDUALS_TESTING=ON - cmake -Bbuild-cov -H. -DCPPDUALS_CODE_COVERAGE=ON -DCPPDUALS_TESTING=ON -DCMAKE_BUILD_TYPE=Debug - cmake --build build-cov --target cov-html - cmake --build build-cov --target cppduals_docs - mkdir -p public - mv build-cov/coverage public/ - mv build-cov/docs public/ coverage: "/Total:|\\w*\\d+\\.\\d+/" artifacts: paths: - public/ only: - master rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH when: manual allow_failure: true variables: # Package version can only contain numbers (0-9), and dots (.). Loading
Makefile +14 −13 Original line number Diff line number Diff line Loading @@ -3,13 +3,15 @@ TARGET=cppduals CMAKE_OPTIONS=-DCPPDUALS_TESTING=ON -DCPPDUALS_BENCHMARK=ON CMAKE=cmake DEFAULT_TARGET=package GCC?=gcc-14 GXX?=g++-14 GCC?=gcc-15 GXX?=g++-15 CLANG?=clang CLANGXX?=clang++ CMAKE_BUILD_PARALLEL_LEVEL?=1 export CMAKE_BUILD_PARALLEL_LEVEL .DEFAULT_GOAL := help all: [ `uname` != Darwin ] || $(MAKE) clang clangr cc ccr osx osxr ios iosr [ `uname` != Linux ] || $(MAKE) cc ccr Loading @@ -18,15 +20,15 @@ help: @echo "Make targets for :" $(TARGET) @echo " clang - build debug package using clang compiler" @echo " clangr - build release package using clang compiler" @echo " test - " @echo " cov - build test coverage report" @echo " test - run tests (uses clang)" @echo " cov - build test coverage report (uses clang)" @echo " cov-gcc - build test coverage report (uses gcc)" @echo " osx - build debug package using XCode command-line" @echo " osxr - build release package using XCode command-line" @echo " cc - build debug package using cc/gcc compiler" @echo " ccr - build release package using cc/gcc compiler" @echo " " @echo " distclean - remove ALL build directories from the above targets" # @echo " tags - " Build-clang/Makefile Build-clang/compile_commands.json: Loading Loading @@ -76,18 +78,17 @@ cc: Build-cc/Makefile ccr: Build-ccr/Makefile $(CMAKE) --build Build-ccr --target $(DEFAULT_TARGET) test: ccr clangr CTEST_OUTPUT_ON_FAILURE=y $(CMAKE) --build Build-ccr --target test test: clangr CTEST_OUTPUT_ON_FAILURE=y $(CMAKE) --build Build-clangr --target test cov: cc CMAKE_BUILD_PARALLEL_LEVEL=8 $(CMAKE) --build Build-cc --target cov-html echo "coverage report is in Build-cc/coverage/index.html" cov-clang: clang cov: clang CMAKE_BUILD_PARALLEL_LEVEL=8 $(CMAKE) --build Build-clang --target cov-html @echo "coverage report is in Build-clang/coverage/html/index.html" cov-gcc: cc CMAKE_BUILD_PARALLEL_LEVEL=8 $(CMAKE) --build Build-cc --target cov-html @echo "coverage report is in Build-cc/coverage/html/index.html" Build-osx/cppduals.xcodeproj: $(CMAKE) . -BBuild-osx -GXcode $(CMAKE_OPTIONS) Loading
tests/test_cdual.cpp +29 −1 Original line number Diff line number Diff line Loading @@ -173,3 +173,31 @@ TEST(cduald, div) EXPECT_NEAR(r.imag().dpart(), ref.imag().dpart(), tol); } // Test conversion operator from dual<T> to std::complex<dual<T>> TEST(complex, dual_to_complex_conversion) { dualf d1(3.0f, 2.0f); // Test implicit conversion cdualf c1 = d1; EXPECT_EQ(c1.real().rpart(), 3.0f); EXPECT_EQ(c1.real().dpart(), 2.0f); EXPECT_EQ(c1.imag().rpart(), 0.0f); EXPECT_EQ(c1.imag().dpart(), 0.0f); // Test explicit conversion cdualf c2 = static_cast<cdualf>(d1); EXPECT_EQ(c2.real().rpart(), 3.0f); EXPECT_EQ(c2.real().dpart(), 2.0f); EXPECT_EQ(c2.imag().rpart(), 0.0f); EXPECT_EQ(c2.imag().dpart(), 0.0f); // Test with duald duald d2(5.0, 7.0); cduald c3 = d2; EXPECT_EQ(c3.real().rpart(), 5.0); EXPECT_EQ(c3.real().dpart(), 7.0); EXPECT_EQ(c3.imag().rpart(), 0.0); EXPECT_EQ(c3.imag().dpart(), 0.0); }
tests/test_packets.cpp +27 −1 Original line number Diff line number Diff line Loading @@ -151,6 +151,31 @@ using duals::randos::random2; } \ } #define GEN_PACKET_TEST_PALIGN(PTYPE) TEST(PTYPE,palign) { \ using namespace Eigen::internal; \ typedef unpacket_traits<PTYPE>::type DTYPE; \ const static int N = unpacket_traits<PTYPE>::size; \ std::vector<DTYPE,Eigen::aligned_allocator<DTYPE>> cd1(N); \ std::vector<DTYPE,Eigen::aligned_allocator<DTYPE>> cd2(N); \ std::vector<DTYPE,Eigen::aligned_allocator<DTYPE>> r(N); \ for (size_t i = 0; i < N; i++) { \ cd1[i] = random2<DTYPE>(); \ cd2[i] = random2<DTYPE>(); \ } \ PTYPE p1 = pload<PTYPE>(cd1.data()); \ PTYPE p2 = pload<PTYPE>(cd2.data()); \ palign<1>(p1, p2); \ pstore(r.data(), p1); \ for (int i = 0; i < N-1; i++) { \ EXPECT_DEQ(cd1[i+1], r[i]) \ << i << "/" << N << ":" << cd1[i+1] << "," << r[i] << " fail."; \ } \ if (N > 1) { \ EXPECT_DEQ(cd2[0], r[N-1]) \ << (N-1) << "/" << N << ":" << cd2[0] << "," << r[N-1] << " fail."; \ } \ } #define GEN_PACKET_TEST_FIRST(PTYPE) TEST(PTYPE,pfirst) { \ using namespace Eigen::internal; \ typedef unpacket_traits<PTYPE>::type DTYPE; \ Loading Loading @@ -316,7 +341,8 @@ using duals::randos::random2; /*GEN_PACKET_TEST_BROADCAST(PTYPE,2)*/ \ GEN_PACKET_TEST_BROADCAST(PTYPE,4) \ GEN_PACKET_TEST_FIRST(PTYPE) \ GEN_PACKET_TEST_REVERSE(PTYPE) GEN_PACKET_TEST_REVERSE(PTYPE) \ GEN_PACKET_TEST_PALIGN(PTYPE) #define GEN_CPACKET_TESTS(PTYPE) \ GEN_PACKET_TESTS(PTYPE) \ Loading
thirdparty/CMakeLists.txt +2 −2 Original line number Diff line number Diff line Loading @@ -129,8 +129,8 @@ endif (hasParent) # ExternalProject_Add (fmtX PREFIX fmtX URL https://github.com/fmtlib/fmt/archive/11.1.4.tar.gz URL_HASH MD5=10c2ae163accd3b82e6b8b4dff877645 URL https://github.com/fmtlib/fmt/archive/12.1.0.tar.gz URL_HASH MD5=92eb6f492e4838e5f024ce5207beafc7 DOWNLOAD_DIR ${DOWNLOAD_DIR} CONFIGURE_COMMAND "" BUILD_COMMAND "" Loading