Commit 7ab7ceb4 authored by Michael Tesch's avatar Michael Tesch
Browse files

Merge branch 'fx-cov-faster-release' into 'master'

Fx cov faster release

See merge request !40
parents 5145d1f4 f114cc6a
Loading
Loading
Loading
Loading
Loading
+38 −22
Original line number Diff line number Diff line
@@ -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 (.).
+14 −13
Original line number Diff line number Diff line
@@ -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
@@ -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:
@@ -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)

+29 −1
Original line number Diff line number Diff line
@@ -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);
}
+27 −1
Original line number Diff line number Diff line
@@ -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;                         \
@@ -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)                \
+2 −2
Original line number Diff line number Diff line
@@ -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 ""