diff --git a/.disable.drone/boost.sh b/.disable.drone/boost.sh index 1570f8ac..c195ee57 100644 --- a/.disable.drone/boost.sh +++ b/.disable.drone/boost.sh @@ -15,16 +15,16 @@ echo '==================================> BEFORE_INSTALL' echo '==================================> INSTALL' cd .. -git clone -b $TRAVIS_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root +for i in 1 2 3 4 5; do git clone -b $TRAVIS_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root && break || sleep 15; done cd boost-root -git submodule update --init tools/build -git submodule update --init libs/config -git submodule update --init libs/polygon -git submodule update --init tools/boost_install -git submodule update --init libs/headers -git submodule update --init tools/boostdep +for i in 1 2 3 4 5; do git submodule update --init tools/build && break || sleep 15; done +for i in 1 2 3 4 5; do git submodule update --init libs/config && break || sleep 15; done +for i in 1 2 3 4 5; do git submodule update --init libs/polygon && break || sleep 15; done +for i in 1 2 3 4 5; do git submodule update --init tools/boost_install && break || sleep 15; done +for i in 1 2 3 4 5; do git submodule update --init libs/headers && break || sleep 15; done +for i in 1 2 3 4 5; do git submodule update --init tools/boostdep && break || sleep 15; done cp -r $TRAVIS_BUILD_DIR/* libs/multiprecision -python tools/boostdep/depinst/depinst.py multiprecision +for i in 1 2 3 4 5; do python tools/boostdep/depinst/depinst.py multiprecision && break || sleep 15; done ./bootstrap.sh ./b2 headers @@ -35,7 +35,7 @@ echo '==================================> BEFORE_SCRIPT' echo '==================================> SCRIPT' echo "using $TOOLSET : : $COMPILER : -std=$CXXSTD ;" > ~/user-config.jam -(cd libs/config/test && ../../../b2 config_info_travis_install toolset=$TOOLSET && ./config_info_travis) +(cd libs/config/test && ../../../b2 print_config_info print_math_info toolset=$TOOLSET) (cd libs/multiprecision/test && ../../../b2 -j3 toolset=$TOOLSET $TEST_SUITE define=CI_SUPPRESS_KNOWN_ISSUES define=SLOW_COMPILER) echo '==================================> AFTER_SUCCESS' diff --git a/.drone.star b/.drone.star index 244833da..5163884c 100644 --- a/.drone.star +++ b/.drone.star @@ -184,6 +184,23 @@ def main(ctx): osx_cxx("XCode 8.3, c++14 misc", "clang++", packages="", buildtype="boost", xcode_version="8.3", environment={'TOOLSET': 'clang', 'COMPILER': 'clang++', 'CXXSTD': 'c++14', 'TEST_SUITE': 'misc', }, globalenv=globalenv), osx_cxx("XCode 8.3, c++14 compile_fail examples", "clang++", packages="", buildtype="boost", xcode_version="8.3", environment={'TEST_SUITE': 'compile_fail examples', 'TOOLSET': 'clang', 'COMPILER': 'clang++', 'CXXSTD': 'c++14', }, globalenv=globalenv), osx_cxx("XCode 8.3, c++14 concepts", "clang++", packages="", buildtype="boost", xcode_version="8.3", environment={'TOOLSET': 'clang', 'COMPILER': 'clang++', 'CXXSTD': 'c++14', 'TEST_SUITE': 'concepts', }, globalenv=globalenv), + + linux_cxx("Ubuntu ARM64 g++ std=gnu++17 arithmetic_tests", "g++", packages="libgmp-dev libmpfr-dev libmpc-dev libmpfi-dev libtommath-dev", buildtype="boost", image="cppalliance/droneubuntu2204:multiarch", arch="arm64", environment={'TOOLSET': 'gcc', 'COMPILER': 'g++', 'CXXSTD': 'gnu++17', 'TEST_SUITE': 'arithmetic_tests', }, globalenv=globalenv), + linux_cxx("Ubuntu ARM64 g++ std=gnu++17 cpp_int_tests", "g++", packages="libgmp-dev libmpfr-dev libmpc-dev libmpfi-dev libtommath-dev", buildtype="boost", image="cppalliance/droneubuntu2204:multiarch", arch="arm64", environment={'TOOLSET': 'gcc', 'COMPILER': 'g++', 'CXXSTD': 'gnu++17', 'TEST_SUITE': 'cpp_int_tests', }, globalenv=globalenv), + linux_cxx("Ubuntu ARM64 g++ std=gnu++17 functions_and_limits", "g++", packages="libgmp-dev libmpfr-dev libmpc-dev libmpfi-dev libtommath-dev", buildtype="boost", image="cppalliance/droneubuntu2204:multiarch", arch="arm64", environment={'TOOLSET': 'gcc', 'COMPILER': 'g++', 'CXXSTD': 'gnu++17', 'TEST_SUITE': 'functions_and_limits', }, globalenv=globalenv), + linux_cxx("Ubuntu ARM64 g++ std=gnu++17 conversions performance", "g++", packages="libgmp-dev libmpfr-dev libmpc-dev libmpfi-dev libtommath-dev", buildtype="boost", image="cppalliance/droneubuntu2204:multiarch", arch="arm64", environment={'TEST_SUITE': 'conversions performance', 'TOOLSET': 'gcc', 'COMPILER': 'g++', 'CXXSTD': 'gnu++17', }, globalenv=globalenv), + linux_cxx("Ubuntu ARM64 g++ std=gnu++17 misc", "g++", packages="libgmp-dev libmpfr-dev libmpc-dev libmpfi-dev libtommath-dev", buildtype="boost", image="cppalliance/droneubuntu2204:multiarch", arch="arm64", environment={'TOOLSET': 'gcc', 'COMPILER': 'g++', 'CXXSTD': 'gnu++17', 'TEST_SUITE': 'misc', }, globalenv=globalenv), + linux_cxx("Ubuntu ARM64 g++ std=gnu++17 compile_fail examples", "g++", packages="libgmp-dev libmpfr-dev libmpc-dev libmpfi-dev libtommath-dev", buildtype="boost", image="cppalliance/droneubuntu2204:multiarch", arch="arm64", environment={'TEST_SUITE': 'compile_fail examples', 'TOOLSET': 'gcc', 'COMPILER': 'g++', 'CXXSTD': 'gnu++17', }, globalenv=globalenv), + linux_cxx("Ubuntu ARM64 g++ std=gnu++17 concepts", "g++", packages="libgmp-dev libmpfr-dev libmpc-dev libmpfi-dev libtommath-dev", buildtype="boost", image="cppalliance/droneubuntu2204:multiarch", arch="arm64", environment={'TOOLSET': 'gcc', 'COMPILER': 'g++', 'CXXSTD': 'gnu++17', 'TEST_SUITE': 'concepts', }, globalenv=globalenv), + + linux_cxx("Ubuntu s390x g++ std=gnu++17 arithmetic_tests", "g++", packages="libgmp-dev libmpfr-dev libmpc-dev libmpfi-dev libtommath-dev", buildtype="boost", image="cppalliance/droneubuntu2204:multiarch", arch="s390x", environment={'TOOLSET': 'gcc', 'COMPILER': 'g++', 'CXXSTD': 'gnu++17', 'TEST_SUITE': 'arithmetic_tests', }, globalenv=globalenv), + linux_cxx("Ubuntu s390x g++ std=gnu++17 cpp_int_tests", "g++", packages="libgmp-dev libmpfr-dev libmpc-dev libmpfi-dev libtommath-dev", buildtype="boost", image="cppalliance/droneubuntu2204:multiarch", arch="s390x", environment={'TOOLSET': 'gcc', 'COMPILER': 'g++', 'CXXSTD': 'gnu++17', 'TEST_SUITE': 'cpp_int_tests', }, globalenv=globalenv), + linux_cxx("Ubuntu s390x g++ std=gnu++17 functions_and_limits", "g++", packages="libgmp-dev libmpfr-dev libmpc-dev libmpfi-dev libtommath-dev", buildtype="boost", image="cppalliance/droneubuntu2204:multiarch", arch="s390x", environment={'TOOLSET': 'gcc', 'COMPILER': 'g++', 'CXXSTD': 'gnu++17', 'TEST_SUITE': 'functions_and_limits', }, globalenv=globalenv), + linux_cxx("Ubuntu s390x g++ std=gnu++17 conversions performance", "g++", packages="libgmp-dev libmpfr-dev libmpc-dev libmpfi-dev libtommath-dev", buildtype="boost", image="cppalliance/droneubuntu2204:multiarch", arch="s390x", environment={'TEST_SUITE': 'conversions performance', 'TOOLSET': 'gcc', 'COMPILER': 'g++', 'CXXSTD': 'gnu++17', }, globalenv=globalenv), + linux_cxx("Ubuntu s390x g++ std=gnu++17 misc", "g++", packages="libgmp-dev libmpfr-dev libmpc-dev libmpfi-dev libtommath-dev", buildtype="boost", image="cppalliance/droneubuntu2204:multiarch", arch="s390x", environment={'TOOLSET': 'gcc', 'COMPILER': 'g++', 'CXXSTD': 'gnu++17', 'TEST_SUITE': 'misc', }, globalenv=globalenv), + linux_cxx("Ubuntu s390x g++ std=gnu++17 compile_fail examples", "g++", packages="libgmp-dev libmpfr-dev libmpc-dev libmpfi-dev libtommath-dev", buildtype="boost", image="cppalliance/droneubuntu2204:multiarch", arch="s390x", environment={'TEST_SUITE': 'compile_fail examples', 'TOOLSET': 'gcc', 'COMPILER': 'g++', 'CXXSTD': 'gnu++17', }, globalenv=globalenv), + linux_cxx("Ubuntu s390x g++ std=gnu++17 concepts", "g++", packages="libgmp-dev libmpfr-dev libmpc-dev libmpfi-dev libtommath-dev", buildtype="boost", image="cppalliance/droneubuntu2204:multiarch", arch="s390x", environment={'TOOLSET': 'gcc', 'COMPILER': 'g++', 'CXXSTD': 'gnu++17', 'TEST_SUITE': 'concepts', }, globalenv=globalenv), + ] # from https://github.com/boostorg/boost-ci diff --git a/.github/workflows/multiprecision.yml b/.github/workflows/multiprecision.yml index 1d65a79c..da8de475 100644 --- a/.github/workflows/multiprecision.yml +++ b/.github/workflows/multiprecision.yml @@ -68,15 +68,15 @@ jobs: - name: Generate user config run: 'echo "using $TOOLSET : : ${{ matrix.compiler }} : -std=${{ matrix.standard }} ;" > ~/user-config.jam' working-directory: ../boost-root - - name: Config info install - run: ../../../b2 config_info_travis_install toolset=$TOOLSET - working-directory: ../boost-root/libs/config/test - - name: Config info - run: ./config_info_travis + - name: Config Info + run: ../../../b2 print_config_info print_math_info toolset=$TOOLSET working-directory: ../boost-root/libs/config/test - name: Test run: ../../../b2 -j2 toolset=$TOOLSET ${{ matrix.suite }} define=CI_SUPPRESS_KNOWN_ISSUES include=/usr/include/eigen3 working-directory: ../boost-root/libs/multiprecision/test + - name: b2 config + run: cat bin.v2/config.log + working-directory: ../boost-root/ ubuntu-focal: runs-on: ubuntu-20.04 defaults: @@ -130,15 +130,15 @@ jobs: - name: Generate user config run: 'echo "using $TOOLSET : : ${{ matrix.compiler }} : -std=${{ matrix.standard }} ;" > ~/user-config.jam' working-directory: ../boost-root - - name: Config info install - run: ../../../b2 config_info_travis_install toolset=$TOOLSET - working-directory: ../boost-root/libs/config/test - - name: Config info - run: ./config_info_travis + - name: Config Info + run: ../../../b2 print_config_info print_math_info toolset=$TOOLSET working-directory: ../boost-root/libs/config/test - name: Test run: ../../../b2 -j2 toolset=$TOOLSET ${{ matrix.suite }} define=CI_SUPPRESS_KNOWN_ISSUES include=/usr/include/eigen3 working-directory: ../boost-root/libs/multiprecision/test + - name: b2 config + run: cat bin.v2/config.log + working-directory: ../boost-root/ ubuntu-focal-slow-tests: runs-on: ubuntu-20.04 defaults: @@ -192,15 +192,15 @@ jobs: - name: Generate user config run: 'echo "using $TOOLSET : : ${{ matrix.compiler }} : -std=${{ matrix.standard }} ;" > ~/user-config.jam' working-directory: ../boost-root - - name: Config info install - run: ../../../b2 config_info_travis_install toolset=$TOOLSET - working-directory: ../boost-root/libs/config/test - - name: Config info - run: ./config_info_travis + - name: Config Info + run: ../../../b2 print_config_info print_math_info toolset=$TOOLSET working-directory: ../boost-root/libs/config/test - name: Test run: ../../../b2 -j2 toolset=$TOOLSET ${{ matrix.suite }} define=CI_SUPPRESS_KNOWN_ISSUES include=/usr/include/eigen3 working-directory: ../boost-root/libs/multiprecision/test + - name: b2 config + run: cat bin.v2/config.log + working-directory: ../boost-root/ ubuntu-focal-standalone-tests: runs-on: ubuntu-20.04 defaults: @@ -254,15 +254,15 @@ jobs: - name: Generate user config run: 'echo "using $TOOLSET : : ${{ matrix.compiler }} : -std=${{ matrix.standard }} ;" > ~/user-config.jam' working-directory: ../boost-root - - name: Config info install - run: ../../../b2 config_info_travis_install toolset=$TOOLSET - working-directory: ../boost-root/libs/config/test - - name: Config info - run: ./config_info_travis + - name: Config Info + run: ../../../b2 print_config_info print_math_info toolset=$TOOLSET working-directory: ../boost-root/libs/config/test - name: Test run: ../../../b2 -j2 toolset=$TOOLSET ${{ matrix.suite }} define=CI_SUPPRESS_KNOWN_ISSUES working-directory: ../boost-root/libs/multiprecision/test + - name: b2 config + run: cat bin.v2/config.log + working-directory: ../boost-root/ ubuntu-focal-ASAN: runs-on: ubuntu-20.04 defaults: @@ -316,15 +316,15 @@ jobs: - name: Generate user config run: 'echo "using $TOOLSET : : ${{ matrix.compiler }} : -std=${{ matrix.standard }} ;" > ~/user-config.jam' working-directory: ../boost-root - - name: Config info install - run: ../../../b2 config_info_travis_install toolset=$TOOLSET - working-directory: ../boost-root/libs/config/test - - name: Config info - run: ./config_info_travis + - name: Config Info + run: ../../../b2 print_config_info print_math_info toolset=$TOOLSET working-directory: ../boost-root/libs/config/test - name: Test run: ../../../b2 define=BOOST_CI_ASAN_BUILD define=BOOST_CI_SANITIZER_BUILD cxxflags=-fsanitize=address linkflags=-fsanitize=address toolset=$TOOLSET ${{ matrix.suite }} define=CI_SUPPRESS_KNOWN_ISSUES working-directory: ../boost-root/libs/multiprecision/test + - name: b2 config + run: cat bin.v2/config.log + working-directory: ../boost-root/ ubuntu-focal-UBSAN: runs-on: ubuntu-20.04 defaults: @@ -378,15 +378,15 @@ jobs: - name: Generate user config run: 'echo "using $TOOLSET : : ${{ matrix.compiler }} : -std=${{ matrix.standard }} ;" > ~/user-config.jam' working-directory: ../boost-root - - name: Config info install - run: ../../../b2 config_info_travis_install toolset=$TOOLSET - working-directory: ../boost-root/libs/config/test - - name: Config info - run: ./config_info_travis + - name: Config Info + run: ../../../b2 print_config_info print_math_info toolset=$TOOLSET working-directory: ../boost-root/libs/config/test - name: Test run: ../../../b2 define=BOOST_CI_UBSAN_BUILD define=BOOST_CI_SANITIZER_BUILD cxxflags=-fsanitize=undefined linkflags=-fsanitize=undefined toolset=$TOOLSET ${{ matrix.suite }} define=CI_SUPPRESS_KNOWN_ISSUES working-directory: ../boost-root/libs/multiprecision/test + - name: b2 config + run: cat bin.v2/config.log + working-directory: ../boost-root/ windows_gcc: runs-on: windows-2019 defaults: @@ -421,15 +421,15 @@ jobs: - name: Generate headers run: b2 headers working-directory: ../boost-root - - name: Config info install - run: ..\..\..\b2 config_info_travis_install %ARGS% - working-directory: ../boost-root/libs/config/test - - name: Config info - run: config_info_travis + - name: Config Info + run: ..\..\..\b2 print_config_info print_math_info %ARGS% working-directory: ../boost-root/libs/config/test - name: Test run: ..\..\..\b2 -j2 --hash %ARGS% define=CI_SUPPRESS_KNOWN_ISSUES ${{ matrix.suite }} working-directory: ../boost-root/libs/multiprecision/test + - name: b2 config + run: cat bin.v2/config.log + working-directory: ../boost-root/ windows_msvc_14_0: runs-on: windows-2019 defaults: @@ -464,15 +464,15 @@ jobs: - name: Generate headers run: b2 headers working-directory: ../boost-root - - name: Config info install - run: ..\..\..\b2 config_info_travis_install %ARGS% - working-directory: ../boost-root/libs/config/test - - name: Config info - run: config_info_travis + - name: Config Info + run: ..\..\..\b2 print_config_info print_math_info %ARGS% working-directory: ../boost-root/libs/config/test - name: Test run: ..\..\..\b2 -j2 --hash %ARGS% define=CI_SUPPRESS_KNOWN_ISSUES ${{ matrix.suite }} working-directory: ../boost-root/libs/multiprecision/test + - name: b2 config + run: cat bin.v2/config.log + working-directory: ../boost-root/ windows_msvc_14_2: runs-on: windows-2019 defaults: @@ -507,15 +507,15 @@ jobs: - name: Generate headers run: b2 headers working-directory: ../boost-root - - name: Config info install - run: ..\..\..\b2 config_info_travis_install %ARGS% - working-directory: ../boost-root/libs/config/test - - name: Config info - run: config_info_travis + - name: Config Info + run: ..\..\..\b2 print_config_info print_math_info %ARGS% working-directory: ../boost-root/libs/config/test - name: Test run: ..\..\..\b2 -j2 --hash %ARGS% define=CI_SUPPRESS_KNOWN_ISSUES ${{ matrix.suite }} working-directory: ../boost-root/libs/multiprecision/test + - name: b2 config + run: cat bin.v2/config.log + working-directory: ../boost-root/ macos: runs-on: macos-latest strategy: @@ -545,12 +545,12 @@ jobs: - name: Generate headers run: ./b2 headers working-directory: ../boost-root - - name: Config info install - run: ../../../b2 config_info_travis_install toolset=${{ matrix.toolset }} cxxstd=${{ matrix.standard }} - working-directory: ../boost-root/libs/config/test - - name: Config info - run: ./config_info_travis + - name: Config Info + run: ../../../b2 print_config_info print_math_info toolset=${{ matrix.toolset }} cxxstd=${{ matrix.standard }} working-directory: ../boost-root/libs/config/test - name: Test run: ../../../b2 -j2 toolset=${{ matrix.toolset }} cxxstd=${{ matrix.standard }} ${{ matrix.suite }} define=CI_SUPPRESS_KNOWN_ISSUES working-directory: ../boost-root/libs/multiprecision/test + - name: b2 config + run: cat bin.v2/config.log + working-directory: ../boost-root/ diff --git a/include/boost/multiprecision/cpp_int.hpp b/include/boost/multiprecision/cpp_int.hpp index f8aa29b9..c10d327e 100644 --- a/include/boost/multiprecision/cpp_int.hpp +++ b/include/boost/multiprecision/cpp_int.hpp @@ -2298,6 +2298,25 @@ template > : public std::integral_constant {}; +#ifdef BOOST_HAS_INT128 + +namespace detail { + +template +struct is_convertible_arithmetic > +{ + static constexpr bool value = true; +}; +template +struct is_convertible_arithmetic > +{ + static constexpr bool value = true; +}; + +} + +#endif + #if defined(__GNUC__) && !defined(__clang__) // see https://github.com/boostorg/multiprecision/issues/413 // and https://github.com/boostorg/multiprecision/issues/431 diff --git a/test/constexpr_arithmetric_test.hpp b/test/constexpr_arithmetric_test.hpp index de6a3907..0e09b272 100644 --- a/test/constexpr_arithmetric_test.hpp +++ b/test/constexpr_arithmetric_test.hpp @@ -50,7 +50,10 @@ BOOST_CXX14_CONSTEXPR T test_constexpr_add_subtract(T a) a += do_test_constexpr_add_subtract(a, a); a += do_test_constexpr_add_subtract(a, static_cast(2)); a += do_test_constexpr_add_subtract(a, static_cast(2)); - a += do_test_constexpr_add_subtract(a, static_cast(2)); + if constexpr(std::numeric_limits::is_signed) + a += do_test_constexpr_add_subtract(a, static_cast(2)); + else + a += do_test_constexpr_add_subtract(a, static_cast(2)); // we need a consistent result. a += do_test_constexpr_add_subtract(a, static_cast(2)); a += do_test_constexpr_add_subtract(a, static_cast(2)); a += do_test_constexpr_add_subtract(a, static_cast(2)); diff --git a/test/constexpr_test_cpp_int.cpp b/test/constexpr_test_cpp_int.cpp index 33138cc3..4dc34de9 100644 --- a/test/constexpr_test_cpp_int.cpp +++ b/test/constexpr_test_cpp_int.cpp @@ -28,6 +28,10 @@ int main() constexpr long long llv = (long long)b; +#if defined(BOOST_HAS_INT128) && !defined(BOOST_NO_CXX17_IF_CONSTEXPR) + static_assert(std::is_constructible::value); +#endif + static_assert(b == -108); static_assert(d == 554); static_assert(llv == -108);