diff --git a/.circleci/config.yml b/.circleci/config.yml index 9d1e92369f..5c5d9e4a45 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -57,51 +57,6 @@ commands: ##================================================================================================== ## Jobs setup ##================================================================================================== -base_jobs: &base_jobs - docker: - - image: jfalcou/compilers:latest - parameters: - tool: - type: string - options: - type: string - default: "" - setup: - type: string - default: "" - steps: - - checkout - - configure_toolchain: - tool: << parameters.tool >> - options: << parameters.options >> - setup: << parameters.setup >> - - compile: - targets: "../cmake/toolchain/arch.targets.json" - cpu: 2 - - ctest: - targets: "../cmake/toolchain/arch.targets.json" - - run: - name: Pre-compiling large swizzle functions - command: cd build && ninja unit.api.regular.swizzle.exe -k 0 -j 1 - - compile: - targets: "../cmake/toolchain/api.targets.json" - cpu: 2 - - ctest: - targets: "../cmake/toolchain/api.targets.json" - - compile: - targets: "../cmake/toolchain/doc.targets.json" - cpu: 2 - - ctest: - targets: "../cmake/toolchain/doc.targets.json" - - run: - name: Pre-compiling large math function - command: cd build && ninja unit.real.math.heavy.exe -k 0 -j 2 - - compile: - targets: "../cmake/toolchain/real.targets.json" - cpu: 2 - - ctest: - targets: "../cmake/toolchain/real.targets.json" - random_jobs: &random_jobs docker: - image: jfalcou/compilers:latest @@ -126,44 +81,16 @@ random_jobs: &random_jobs - ctest: targets: "../cmake/toolchain/random.targets.json" -bench_jobs: &bench_jobs - docker: - - image: jfalcou/compilers:latest - parameters: - tool: - type: string - options: - type: string - default: "" - setup: - type: string - default: "" - steps: - - checkout - - configure_toolchain: - tool: << parameters.tool >> - options: << parameters.options >> - setup: << parameters.setup >> - - compile: - targets: "../cmake/toolchain/benchmarks.targets.json" - cpu: 2 - ##================================================================================================== ## Jobs list ##================================================================================================== jobs: - x86_gcc_avx512: - <<: *base_jobs - x86_clang_avx512: - <<: *base_jobs random_sse2: <<: *random_jobs random_avx2: <<: *random_jobs random_arm: <<: *random_jobs - bench_avx2: - <<: *bench_jobs ##================================================================================================== ## Workflow & dependencies @@ -173,32 +100,17 @@ workflows: build_and_test: jobs: ##============================================================================================== - ## X86 - 512 bits - ##============================================================================================== - - x86_gcc_avx512: - tool: "../cmake/toolchain/gcc.x86.cmake" - options: "-march=skylake-avx512" - filters: - branches: - ignore: develop - - x86_clang_avx512: - tool: "../cmake/toolchain/clang.x86.cmake" - options: "-march=skylake-avx512" - filters: - branches: - ignore: develop - ##============================================================================================== ## Random tests ##============================================================================================== - random_sse2: - tool: "../cmake/toolchain/gcc.x86.cmake" + tool: "../cmake/toolchain/gcc.x86.ci.cmake" options: "-msse2" setup: "-DEVE_BUILD_RANDOM=ON" filters: branches: ignore: develop - random_avx2: - tool: "../cmake/toolchain/gcc.x86.cmake" + tool: "../cmake/toolchain/gcc.x86.ci.cmake" options: "-mavx2" setup: "-DEVE_BUILD_RANDOM=ON" filters: @@ -211,13 +123,3 @@ workflows: filters: branches: ignore: develop - ##============================================================================================== - ## Benchmarks compilations - ##============================================================================================== - # - bench_avx2: - # tool: "../cmake/toolchain/gcc.x86.opt.cmake" - # options: "-mavx2" - # setup: "-DEVE_BUILD_BENCHMARKS=ON" - # filters: - # branches: - # ignore: develop diff --git a/.github/actions/run_tests/Dockerfile b/.github/actions/run_docker/Dockerfile similarity index 100% rename from .github/actions/run_tests/Dockerfile rename to .github/actions/run_docker/Dockerfile diff --git a/.github/actions/run_tests/action.yml b/.github/actions/run_docker/action.yml similarity index 100% rename from .github/actions/run_tests/action.yml rename to .github/actions/run_docker/action.yml diff --git a/.github/actions/run_tests/entrypoint.sh b/.github/actions/run_docker/entrypoint.sh similarity index 100% rename from .github/actions/run_tests/entrypoint.sh rename to .github/actions/run_docker/entrypoint.sh diff --git a/.github/actions/run_tests/action.yaml b/.github/actions/run_tests/action.yaml new file mode 100644 index 0000000000..e02d7053b0 --- /dev/null +++ b/.github/actions/run_tests/action.yaml @@ -0,0 +1,21 @@ +# action.yml +name: 'Clone and Build Tests' +description: 'Clone and build a given repository' +inputs: + options: # compiler options + description: 'Compiler options' + required: false + default: '' + cmake-options: # CMake options + description: 'CMake options' + required: false + default: '' + status: # How much of the test we shoudl run + description: 'Completion Status' + required: false + default: '1' +runs: + using: "composite" + steps: + - run: .github/actions/run_tests/run.sh ${{ inputs.options }} ${{ inputs.cmake-options }} ${{ inputs.status }} + shell: bash diff --git a/.github/actions/run_tests/run.sh b/.github/actions/run_tests/run.sh new file mode 100755 index 0000000000..bd44da1618 --- /dev/null +++ b/.github/actions/run_tests/run.sh @@ -0,0 +1,111 @@ +#!/bin/sh -l + +compile_target() +{ + echo "::group::Compiling $1" ; + ninja -v $1 -j 16; + compile=$?; + echo "::endgroup::" ; + + return $compile; +} + +compile_targets() +{ + for i in `../cmake/toolchain/filter.sh $1 keys`; + do + compile_target $i; + if [ "$?" -ne "0" ] + then + echo "::error $i can not be compiled!" ; + return 1; + fi + done; + + return 0; +} + +test_target() +{ + echo "::group::Running $1 tests" ; + ctest --output-on-failure -R $1 -j 16; + tested=$?; + echo "::endgroup::" ; + + return $tested; +} + +test_targets() +{ + for i in `../cmake/toolchain/filter.sh $1 values`; + do + test_target $i; + if [ "$?" -ne "0" ] + then + echo "::error $i tests failed!" ; + return 1; + fi + done; + + return 0; +} + +echo "::group::Running: 'cmake .. -G Ninja -DCMAKE_CXX_FLAGS="$1" $2'" +mkdir build +cd build +cmake .. -G Ninja -DEVE_OPTIONS="$1" $2 +echo "::endgroup::" + +compile_targets ../cmake/toolchain/arch.targets.json +if [ "$?" -eq "1" ] +then + exit 1; +fi + +test_targets ../cmake/toolchain/arch.targets.json +if [ "$?" -eq "1" ] +then + exit 1; +fi + +compile_targets ../cmake/toolchain/api.targets.json +if [ "$?" -eq "1" ] +then + exit 1; +fi + +test_targets ../cmake/toolchain/api.targets.json +if [ "$?" -eq "1" ] +then + exit 1; +fi + +if [ "$3" -eq "1" ] +then + + compile_targets ../cmake/toolchain/doc.targets.json + if [ "$?" -eq "1" ] + then + exit 1; + fi + + test_targets ../cmake/toolchain/doc.targets.json + if [ "$?" -eq "1" ] + then + exit 1; + fi + + compile_targets ../cmake/toolchain/real.targets.json + if [ "$?" -eq "1" ] + then + exit 1; + fi + + test_targets ../cmake/toolchain/real.targets.json + if [ "$?" -eq "1" ] + then + exit 1; + fi +fi + +exit 0 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 58d83e45da..dd573ef8e9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -7,9 +7,13 @@ on: branches: - develop +concurrency: + group: ${{ github.head_ref }} + cancel-in-progress: true + jobs: arch-x86: - runs-on: ubuntu-latest + runs-on: self-hosted strategy: fail-fast: false matrix: @@ -20,12 +24,14 @@ jobs: - { comp: clang, arch: x86 , opts: -mavx , status: 1 } - { comp: clang, arch: x86 , opts: -mavx2 , status: 1 } - { comp: clang, arch: x86 , opts: -DEVE_NO_SIMD , status: 1 } + - { comp: clang, arch: x86_sde, opts: -march=skylake-avx512 , status: 1 } - { comp: gcc , arch: x86 , opts: -msse2 , status: 1 } - { comp: gcc , arch: x86 , opts: -mssse3 , status: 1 } - { comp: gcc , arch: x86 , opts: -msse4.2 , status: 1 } - { comp: gcc , arch: x86 , opts: -mavx , status: 1 } - { comp: gcc , arch: x86 , opts: -mavx2 , status: 1 } - { comp: gcc , arch: x86 , opts: -DEVE_NO_SIMD , status: 1 } + - { comp: gcc , arch: x86_sde, opts: -march=skylake-avx512 , status: 1 } steps: - name: Fetch current branch @@ -50,7 +56,7 @@ jobs: - name: Fetch current branch uses: actions/checkout@v2 - name: Testing EVE with ${{ matrix.cfg.comp }} on ${{ matrix.cfg.arch }} with ${{ matrix.cfg.opts }} - uses: ./.github/actions/run_tests + uses: ./.github/actions/run_docker with: options: '${{ matrix.cfg.opts }}' cmake-options: '-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/${{ matrix.cfg.comp }}.${{ matrix.cfg.arch }}.cmake' @@ -68,7 +74,7 @@ jobs: - name: Fetch current branch uses: actions/checkout@v2 - name: Testing EVE with ${{ matrix.cfg.comp }} on ${{ matrix.cfg.arch }} with ${{ matrix.cfg.opts }} - uses: ./.github/actions/run_tests + uses: ./.github/actions/run_docker with: options: '${{ matrix.cfg.opts }}' cmake-options: '-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/${{ matrix.cfg.comp }}.${{ matrix.cfg.arch }}.cmake' diff --git a/benchmarks/module/math/cos/big/cos.hpp b/benchmarks/module/math/cos/big/cos.hpp deleted file mode 100644 index 4458189102..0000000000 --- a/benchmarks/module/math/cos/big/cos.hpp +++ /dev/null @@ -1,26 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - auto std__cos = [](auto x){return std::cos(x);}; - - eve::bench::experiment xp; - run(EVE_NAME(std__cos) , xp, std__cos , arg0); - run(EVE_NAME(big(eve::cos)) , xp, eve::big(eve::cos) , arg0); - run (EVE_NAME(big(eve::cos)) , xp, eve::big(eve::cos) , arg0); - -} diff --git a/benchmarks/module/math/cos/restricted/cos.hpp b/benchmarks/module/math/cos/full_circle/cos.hpp similarity index 60% rename from benchmarks/module/math/cos/restricted/cos.hpp rename to benchmarks/module/math/cos/full_circle/cos.hpp index c667488a1a..a032bc15a9 100644 --- a/benchmarks/module/math/cos/restricted/cos.hpp +++ b/benchmarks/module/math/cos/full_circle/cos.hpp @@ -6,11 +6,11 @@ */ //================================================================================================== #include -#include +#include int main() { - auto lmax = eve::pio_4(eve::as()); + auto lmax = eve::pi(eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin, lmax); @@ -18,6 +18,8 @@ int main() eve::bench::experiment xp; run(EVE_NAME(scalar std::cos) , xp, std__cos , arg0); - run(EVE_NAME(restricted(cos)) , xp, eve::restricted(eve::cos), arg0); - run(EVE_NAME(restricted(cos)) , xp, eve::restricted(eve::cos), arg0); + run(EVE_NAME(full_circle(cos)) , xp, eve::full_circle(eve::cos), arg0); + run(EVE_NAME(full_circle(cos)) , xp, eve::full_circle(eve::cos), arg0); + run(EVE_NAME(eve::cos) , xp, eve::cos , arg0); + run(EVE_NAME(eve::cos) , xp, eve::cos , arg0); } diff --git a/benchmarks/module/math/cos/medium/cos.hpp b/benchmarks/module/math/cos/half_circle/cos.hpp similarity index 62% rename from benchmarks/module/math/cos/medium/cos.hpp rename to benchmarks/module/math/cos/half_circle/cos.hpp index ff17cf4979..17282f94d3 100644 --- a/benchmarks/module/math/cos/medium/cos.hpp +++ b/benchmarks/module/math/cos/half_circle/cos.hpp @@ -12,7 +12,7 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::half_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); @@ -20,7 +20,9 @@ int main() eve::bench::experiment xp; run(EVE_NAME(std__cos) , xp, std__cos , arg0); - run(EVE_NAME(medium(eve::cos)) , xp, eve::medium(eve::cos) , arg0); - run (EVE_NAME(medium(eve::cos)) , xp, eve::medium(eve::cos) , arg0); + run(EVE_NAME(half_circle(eve::cos)) , xp, eve::half_circle(eve::cos) , arg0); + run (EVE_NAME(half_circle(eve::cos)) , xp, eve::half_circle(eve::cos) , arg0); + run(EVE_NAME(eve::cos) , xp, eve::cos , arg0); + run(EVE_NAME(eve::cos) , xp, eve::cos , arg0); } diff --git a/benchmarks/module/math/cos/quarter_circle/cos.hpp b/benchmarks/module/math/cos/quarter_circle/cos.hpp new file mode 100644 index 0000000000..3ec434ecdc --- /dev/null +++ b/benchmarks/module/math/cos/quarter_circle/cos.hpp @@ -0,0 +1,25 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== +#include +#include + +int main() +{ + auto lmax = eve::pio_4(eve::as()); + auto lmin = -lmax; + + auto arg0 = eve::bench::random_(lmin, lmax); + auto std__cos = [](auto x){return std::cos(x);}; + + eve::bench::experiment xp; + run(EVE_NAME(scalar std::cos) , xp, std__cos , arg0); + run(EVE_NAME(quarter_circle(cos)) , xp, eve::quarter_circle(eve::cos), arg0); + run(EVE_NAME(quarter_circle(cos)) , xp, eve::quarter_circle(eve::cos), arg0); + run(EVE_NAME(cos) , xp, eve::cos , arg0); + run(EVE_NAME(cos) , xp, eve::cos , arg0); +} diff --git a/benchmarks/module/math/cos/small/cos.hpp b/benchmarks/module/math/cos/small/cos.hpp deleted file mode 100644 index a4dd77bb33..0000000000 --- a/benchmarks/module/math/cos/small/cos.hpp +++ /dev/null @@ -1,26 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include - -int main() -{ - auto lmax = eve::detail::Rempio2_limit(eve::small_type(), eve::as()); - auto lmin = -lmax; - - auto arg0 = eve::bench::random_(lmin,lmax); - auto std__cos = [](auto x){return std::cos(x);}; - - eve::bench::experiment xp; - run(EVE_NAME(std__cos) , xp, std__cos , arg0); - run(EVE_NAME(small(eve::cos)) , xp, eve::small(eve::cos) , arg0); - run (EVE_NAME(small(eve::cos)) , xp, eve::small(eve::cos) , arg0); - -} diff --git a/benchmarks/module/math/cosd/big/cosd.hpp b/benchmarks/module/math/cosd/big/cosd.hpp deleted file mode 100644 index e69e3ebc9f..0000000000 --- a/benchmarks/module/math/cosd/big/cosd.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(big(eve::cosd)) , xp, eve::big(eve::cosd) , arg0); - run (EVE_NAME(big(eve::cosd)) , xp, eve::big(eve::cosd) , arg0); - -} diff --git a/benchmarks/module/math/cosd/small/cosd.hpp b/benchmarks/module/math/cosd/half_circle/cosd.hpp similarity index 68% rename from benchmarks/module/math/cosd/small/cosd.hpp rename to benchmarks/module/math/cosd/half_circle/cosd.hpp index 0d260243e4..b9afe5ed52 100644 --- a/benchmarks/module/math/cosd/small/cosd.hpp +++ b/benchmarks/module/math/cosd/half_circle/cosd.hpp @@ -12,13 +12,13 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::small_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::half_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(small(eve::cosd)) , xp, eve::small(eve::cosd) , arg0); - run (EVE_NAME(small(eve::cosd)) , xp, eve::small(eve::cosd) , arg0); + run(EVE_NAME(half_circle(eve::cosd)) , xp, eve::half_circle(eve::cosd) , arg0); + run (EVE_NAME(half_circle(eve::cosd)) , xp, eve::half_circle(eve::cosd) , arg0); } diff --git a/benchmarks/module/math/cosd/medium/cosd.hpp b/benchmarks/module/math/cosd/medium/cosd.hpp deleted file mode 100644 index a56ca2e3c1..0000000000 --- a/benchmarks/module/math/cosd/medium/cosd.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - auto lmin = -lmax; - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(medium(eve::cosd)) , xp, eve::medium(eve::cosd) , arg0); - run (EVE_NAME(medium(eve::cosd)) , xp, eve::medium(eve::cosd) , arg0); - -} diff --git a/benchmarks/module/math/cosd/restricted/cosd.hpp b/benchmarks/module/math/cosd/quarter_circle/cosd.hpp similarity index 74% rename from benchmarks/module/math/cosd/restricted/cosd.hpp rename to benchmarks/module/math/cosd/quarter_circle/cosd.hpp index cd3c868144..6d9d3a8cc2 100644 --- a/benchmarks/module/math/cosd/restricted/cosd.hpp +++ b/benchmarks/module/math/cosd/quarter_circle/cosd.hpp @@ -17,6 +17,6 @@ int main() auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(restricted(eve::cosd)) , xp, eve::restricted(eve::cosd) , arg0); - run (EVE_NAME(restricted(eve::cosd)) , xp, eve::restricted(eve::cosd) , arg0); + run(EVE_NAME(quarter_circle(eve::cosd)) , xp, eve::quarter_circle(eve::cosd) , arg0); + run (EVE_NAME(quarter_circle(eve::cosd)) , xp, eve::quarter_circle(eve::cosd) , arg0); } diff --git a/benchmarks/module/math/cospi/big/cospi.hpp b/benchmarks/module/math/cospi/big/cospi.hpp deleted file mode 100644 index d4b3fefae9..0000000000 --- a/benchmarks/module/math/cospi/big/cospi.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(big(eve::cospi)) , xp, eve::big(eve::cospi) , arg0); - run (EVE_NAME(big(eve::cospi)) , xp, eve::big(eve::cospi) , arg0); - -} diff --git a/benchmarks/module/math/cospi/medium/cospi.hpp b/benchmarks/module/math/cospi/medium/cospi.hpp deleted file mode 100644 index 97a83a6504..0000000000 --- a/benchmarks/module/math/cospi/medium/cospi.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - auto lmin = -lmax; - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(medium(eve::cospi)) , xp, eve::medium(eve::cospi) , arg0); - run (EVE_NAME(medium(eve::cospi)) , xp, eve::medium(eve::cospi) , arg0); - -} diff --git a/benchmarks/module/math/cospi/restricted/cospi.hpp b/benchmarks/module/math/cospi/quarter_circle/cospi.hpp similarity index 72% rename from benchmarks/module/math/cospi/restricted/cospi.hpp rename to benchmarks/module/math/cospi/quarter_circle/cospi.hpp index 1327bde706..15d464abc2 100644 --- a/benchmarks/module/math/cospi/restricted/cospi.hpp +++ b/benchmarks/module/math/cospi/quarter_circle/cospi.hpp @@ -16,6 +16,6 @@ int main() auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(restricted(eve::cospi)) , xp, eve::restricted(eve::cospi) , arg0); - run (EVE_NAME(restricted(eve::cospi)) , xp, eve::restricted(eve::cospi) , arg0); + run(EVE_NAME(quarter_circle(eve::cospi)) , xp, eve::quarter_circle(eve::cospi) , arg0); + run (EVE_NAME(quarter_circle(eve::cospi)) , xp, eve::quarter_circle(eve::cospi) , arg0); } diff --git a/benchmarks/module/math/cot/big/cot.hpp b/benchmarks/module/math/cot/big/cot.hpp deleted file mode 100644 index 8b622903d0..0000000000 --- a/benchmarks/module/math/cot/big/cot.hpp +++ /dev/null @@ -1,26 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(-1000); //eve::valmin(eve::as())); - auto lmax = EVE_VALUE(1000); //eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - auto std__cot = [](auto x){return std::tan(1/x);}; - - eve::bench::experiment xp; - run(EVE_NAME(std__cot) , xp, std__cot , arg0); - run(EVE_NAME(big(eve::cot)) , xp, eve::big(eve::cot) , arg0); - run (EVE_NAME(big(eve::cot)) , xp, eve::big(eve::cot) , arg0); - -} diff --git a/benchmarks/module/math/cot/medium/cot.hpp b/benchmarks/module/math/cot/full_circle/cot.hpp similarity index 66% rename from benchmarks/module/math/cot/medium/cot.hpp rename to benchmarks/module/math/cot/full_circle/cot.hpp index ad5e92d502..c6448d08ee 100644 --- a/benchmarks/module/math/cot/medium/cot.hpp +++ b/benchmarks/module/math/cot/full_circle/cot.hpp @@ -12,15 +12,15 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::full_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); - auto std__cot = [](auto x){return std::tan(1/x);}; + auto std__cot = [](auto x){return 1/std::tan(x);}; eve::bench::experiment xp; run(EVE_NAME(std__cot) , xp, std__cot , arg0); - run(EVE_NAME(medium(eve::cot)) , xp, eve::medium(eve::cot) , arg0); - run (EVE_NAME(medium(eve::cot)) , xp, eve::medium(eve::cot) , arg0); + run(EVE_NAME(full_circle(eve::cot)) , xp, eve::full_circle(eve::cot) , arg0); + run (EVE_NAME(full_circle(eve::cot)) , xp, eve::full_circle(eve::cot) , arg0); } diff --git a/benchmarks/module/math/cot/small/cot.hpp b/benchmarks/module/math/cot/half_circle/cot.hpp similarity index 66% rename from benchmarks/module/math/cot/small/cot.hpp rename to benchmarks/module/math/cot/half_circle/cot.hpp index 29e50cddf2..5ae3488615 100644 --- a/benchmarks/module/math/cot/small/cot.hpp +++ b/benchmarks/module/math/cot/half_circle/cot.hpp @@ -12,15 +12,15 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::small_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::half_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); - auto std__cot = [](auto x){return std::tan(1/x);}; + auto std__cot = [](auto x){return 1/std::tan(x);}; eve::bench::experiment xp; run(EVE_NAME(std__cot) , xp, std__cot , arg0); - run(EVE_NAME(small(eve::cot)) , xp, eve::small(eve::cot) , arg0); - run (EVE_NAME(small(eve::cot)) , xp, eve::small(eve::cot) , arg0); + run(EVE_NAME(half_circle(eve::cot)) , xp, eve::half_circle(eve::cot) , arg0); + run (EVE_NAME(half_circle(eve::cot)) , xp, eve::half_circle(eve::cot) , arg0); } diff --git a/benchmarks/module/math/cot/restricted/cot.hpp b/benchmarks/module/math/cot/quarter_circle/cot.hpp similarity index 71% rename from benchmarks/module/math/cot/restricted/cot.hpp rename to benchmarks/module/math/cot/quarter_circle/cot.hpp index 7def6efc5e..0e51e5240b 100644 --- a/benchmarks/module/math/cot/restricted/cot.hpp +++ b/benchmarks/module/math/cot/quarter_circle/cot.hpp @@ -14,10 +14,10 @@ int main() auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); - auto std__cot = [](auto x){return std::tan(1/x);}; + auto std__cot = [](auto x){return 1/std::tan(x);}; eve::bench::experiment xp; run(EVE_NAME(std__cot) , xp, std__cot , arg0); - run(EVE_NAME(restricted(eve::cot)) , xp, eve::restricted(eve::cot) , arg0); - run (EVE_NAME(restricted(eve::cot)) , xp, eve::restricted(eve::cot) , arg0); + run(EVE_NAME(quarter_circle(eve::cot)) , xp, eve::quarter_circle(eve::cot) , arg0); + run (EVE_NAME(quarter_circle(eve::cot)) , xp, eve::quarter_circle(eve::cot) , arg0); } diff --git a/benchmarks/module/math/cot/regular/cot.hpp b/benchmarks/module/math/cot/regular/cot.hpp index 7449023b93..23b56e7497 100644 --- a/benchmarks/module/math/cot/regular/cot.hpp +++ b/benchmarks/module/math/cot/regular/cot.hpp @@ -16,7 +16,7 @@ int main() auto lmax = EVE_VALUE(eve::valmax(eve::as())); auto arg0 = eve::bench::random_(lmin,lmax); - auto std__cot = [](auto x){return std::tan(1/x);}; + auto std__cot = [](auto x){return 1/std::tan(x);}; eve::bench::experiment xp; run(EVE_NAME(std__cot) , xp, std__cot , arg0); diff --git a/benchmarks/module/math/cotd/big/cotd.hpp b/benchmarks/module/math/cotd/big/cotd.hpp deleted file mode 100644 index e3c9aed8ac..0000000000 --- a/benchmarks/module/math/cotd/big/cotd.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(big(eve::cotd)) , xp, eve::big(eve::cotd) , arg0); - run (EVE_NAME(big(eve::cotd)) , xp, eve::big(eve::cotd) , arg0); - -} diff --git a/benchmarks/module/math/cotd/small/cotd.hpp b/benchmarks/module/math/cotd/half_circle/cotd.hpp similarity index 68% rename from benchmarks/module/math/cotd/small/cotd.hpp rename to benchmarks/module/math/cotd/half_circle/cotd.hpp index 518b63a7bf..183fb17832 100644 --- a/benchmarks/module/math/cotd/small/cotd.hpp +++ b/benchmarks/module/math/cotd/half_circle/cotd.hpp @@ -12,13 +12,13 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::small_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::half_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(small(eve::cotd)) , xp, eve::small(eve::cotd) , arg0); - run (EVE_NAME(small(eve::cotd)) , xp, eve::small(eve::cotd) , arg0); + run(EVE_NAME(half_circle(eve::cotd)) , xp, eve::half_circle(eve::cotd) , arg0); + run (EVE_NAME(half_circle(eve::cotd)) , xp, eve::half_circle(eve::cotd) , arg0); } diff --git a/benchmarks/module/math/cotd/medium/cotd.hpp b/benchmarks/module/math/cotd/medium/cotd.hpp deleted file mode 100644 index 2b0c23d802..0000000000 --- a/benchmarks/module/math/cotd/medium/cotd.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - auto lmin = -lmax; - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(medium(eve::cotd)) , xp, eve::medium(eve::cotd) , arg0); - run (EVE_NAME(medium(eve::cotd)) , xp, eve::medium(eve::cotd) , arg0); - -} diff --git a/benchmarks/module/math/cotd/restricted/cotd.hpp b/benchmarks/module/math/cotd/quarter_circle/cotd.hpp similarity index 74% rename from benchmarks/module/math/cotd/restricted/cotd.hpp rename to benchmarks/module/math/cotd/quarter_circle/cotd.hpp index 725930a3c6..a5199072d4 100644 --- a/benchmarks/module/math/cotd/restricted/cotd.hpp +++ b/benchmarks/module/math/cotd/quarter_circle/cotd.hpp @@ -17,6 +17,6 @@ int main() auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(restricted(eve::cotd)) , xp, eve::restricted(eve::cotd) , arg0); - run (EVE_NAME(restricted(eve::cotd)) , xp, eve::restricted(eve::cotd) , arg0); + run(EVE_NAME(quarter_circle(eve::cotd)) , xp, eve::quarter_circle(eve::cotd) , arg0); + run (EVE_NAME(quarter_circle(eve::cotd)) , xp, eve::quarter_circle(eve::cotd) , arg0); } diff --git a/benchmarks/module/math/cotpi/big/cotpi.hpp b/benchmarks/module/math/cotpi/big/cotpi.hpp deleted file mode 100644 index f90644b1e8..0000000000 --- a/benchmarks/module/math/cotpi/big/cotpi.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(big(eve::cotpi)) , xp, eve::big(eve::cotpi) , arg0); - run (EVE_NAME(big(eve::cotpi)) , xp, eve::big(eve::cotpi) , arg0); - -} diff --git a/benchmarks/module/math/cotpi/medium/cotpi.hpp b/benchmarks/module/math/cotpi/medium/cotpi.hpp deleted file mode 100644 index a00cf584c3..0000000000 --- a/benchmarks/module/math/cotpi/medium/cotpi.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - auto lmin = -lmax; - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(medium(eve::cotpi)) , xp, eve::medium(eve::cotpi) , arg0); - run (EVE_NAME(medium(eve::cotpi)) , xp, eve::medium(eve::cotpi) , arg0); - -} diff --git a/benchmarks/module/math/cotpi/restricted/cotpi.hpp b/benchmarks/module/math/cotpi/quarter_circle/cotpi.hpp similarity index 72% rename from benchmarks/module/math/cotpi/restricted/cotpi.hpp rename to benchmarks/module/math/cotpi/quarter_circle/cotpi.hpp index c8aa40b888..7834f4ee0b 100644 --- a/benchmarks/module/math/cotpi/restricted/cotpi.hpp +++ b/benchmarks/module/math/cotpi/quarter_circle/cotpi.hpp @@ -16,6 +16,6 @@ int main() auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(restricted(eve::cotpi)) , xp, eve::restricted(eve::cotpi) , arg0); - run (EVE_NAME(restricted(eve::cotpi)) , xp, eve::restricted(eve::cotpi) , arg0); + run(EVE_NAME(quarter_circle(eve::cotpi)) , xp, eve::quarter_circle(eve::cotpi) , arg0); + run (EVE_NAME(quarter_circle(eve::cotpi)) , xp, eve::quarter_circle(eve::cotpi) , arg0); } diff --git a/benchmarks/module/math/csc/big/csc.hpp b/benchmarks/module/math/csc/big/csc.hpp deleted file mode 100644 index 69c3f898d0..0000000000 --- a/benchmarks/module/math/csc/big/csc.hpp +++ /dev/null @@ -1,26 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - auto std__csc = [](auto x){return 1/std::sin(x);}; - - eve::bench::experiment xp; - run(EVE_NAME(std__csc) , xp, std__csc , arg0); - run(EVE_NAME(big(eve::csc)) , xp, eve::big(eve::csc) , arg0); - run (EVE_NAME(big(eve::csc)) , xp, eve::big(eve::csc) , arg0); - -} diff --git a/benchmarks/module/math/csc/medium/csc.hpp b/benchmarks/module/math/csc/full_circle/csc.hpp similarity index 72% rename from benchmarks/module/math/csc/medium/csc.hpp rename to benchmarks/module/math/csc/full_circle/csc.hpp index c9b235651d..8993b62a12 100644 --- a/benchmarks/module/math/csc/medium/csc.hpp +++ b/benchmarks/module/math/csc/full_circle/csc.hpp @@ -12,7 +12,7 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::full_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); @@ -20,7 +20,7 @@ int main() eve::bench::experiment xp; run(EVE_NAME(std__csc) , xp, std__csc , arg0); - run(EVE_NAME(medium(eve::csc)) , xp, eve::medium(eve::csc) , arg0); - run (EVE_NAME(medium(eve::csc)) , xp, eve::medium(eve::csc) , arg0); + run(EVE_NAME(full_circle(eve::csc)) , xp, eve::full_circle(eve::csc) , arg0); + run (EVE_NAME(full_circle(eve::csc)) , xp, eve::full_circle(eve::csc) , arg0); } diff --git a/benchmarks/module/math/csc/small/csc.hpp b/benchmarks/module/math/csc/half_circle/csc.hpp similarity index 72% rename from benchmarks/module/math/csc/small/csc.hpp rename to benchmarks/module/math/csc/half_circle/csc.hpp index 2ad0525843..ccc5a6da32 100644 --- a/benchmarks/module/math/csc/small/csc.hpp +++ b/benchmarks/module/math/csc/half_circle/csc.hpp @@ -12,7 +12,7 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::small_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::half_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); @@ -20,7 +20,7 @@ int main() eve::bench::experiment xp; run(EVE_NAME(std__csc) , xp, std__csc , arg0); - run(EVE_NAME(small(eve::csc)) , xp, eve::small(eve::csc) , arg0); - run (EVE_NAME(small(eve::csc)) , xp, eve::small(eve::csc) , arg0); + run(EVE_NAME(half_circle(eve::csc)) , xp, eve::half_circle(eve::csc) , arg0); + run (EVE_NAME(half_circle(eve::csc)) , xp, eve::half_circle(eve::csc) , arg0); } diff --git a/benchmarks/module/math/csc/restricted/csc.hpp b/benchmarks/module/math/csc/quarter_circle/csc.hpp similarity index 77% rename from benchmarks/module/math/csc/restricted/csc.hpp rename to benchmarks/module/math/csc/quarter_circle/csc.hpp index 0b49a2d6b0..a8b2445ca3 100644 --- a/benchmarks/module/math/csc/restricted/csc.hpp +++ b/benchmarks/module/math/csc/quarter_circle/csc.hpp @@ -18,6 +18,6 @@ int main() eve::bench::experiment xp; run(EVE_NAME(std__csc) , xp, std__csc , arg0); - run(EVE_NAME(restricted(eve::csc)) , xp, eve::restricted(eve::csc) , arg0); - run (EVE_NAME(restricted(eve::csc)) , xp, eve::restricted(eve::csc) , arg0); + run(EVE_NAME(quarter_circle(eve::csc)) , xp, eve::quarter_circle(eve::csc) , arg0); + run (EVE_NAME(quarter_circle(eve::csc)) , xp, eve::quarter_circle(eve::csc) , arg0); } diff --git a/benchmarks/module/math/cscd/big/cscd.hpp b/benchmarks/module/math/cscd/big/cscd.hpp deleted file mode 100644 index 7f82ccc91c..0000000000 --- a/benchmarks/module/math/cscd/big/cscd.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(big(eve::cscd)) , xp, eve::big(eve::cscd) , arg0); - run (EVE_NAME(big(eve::cscd)) , xp, eve::big(eve::cscd) , arg0); - -} diff --git a/benchmarks/module/math/cscd/small/cscd.hpp b/benchmarks/module/math/cscd/half_circle/cscd.hpp similarity index 68% rename from benchmarks/module/math/cscd/small/cscd.hpp rename to benchmarks/module/math/cscd/half_circle/cscd.hpp index a09465f6e1..befa07ff59 100644 --- a/benchmarks/module/math/cscd/small/cscd.hpp +++ b/benchmarks/module/math/cscd/half_circle/cscd.hpp @@ -12,13 +12,13 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::small_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::half_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(small(eve::cscd)) , xp, eve::small(eve::cscd) , arg0); - run (EVE_NAME(small(eve::cscd)) , xp, eve::small(eve::cscd) , arg0); + run(EVE_NAME(half_circle(eve::cscd)) , xp, eve::half_circle(eve::cscd) , arg0); + run (EVE_NAME(half_circle(eve::cscd)) , xp, eve::half_circle(eve::cscd) , arg0); } diff --git a/benchmarks/module/math/cscd/medium/cscd.hpp b/benchmarks/module/math/cscd/medium/cscd.hpp deleted file mode 100644 index 242cb9da6b..0000000000 --- a/benchmarks/module/math/cscd/medium/cscd.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - auto lmin = -lmax; - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(medium(eve::cscd)) , xp, eve::medium(eve::cscd) , arg0); - run (EVE_NAME(medium(eve::cscd)) , xp, eve::medium(eve::cscd) , arg0); - -} diff --git a/benchmarks/module/math/cscd/restricted/cscd.hpp b/benchmarks/module/math/cscd/quarter_circle/cscd.hpp similarity index 74% rename from benchmarks/module/math/cscd/restricted/cscd.hpp rename to benchmarks/module/math/cscd/quarter_circle/cscd.hpp index c1c01a3f78..f1b091918a 100644 --- a/benchmarks/module/math/cscd/restricted/cscd.hpp +++ b/benchmarks/module/math/cscd/quarter_circle/cscd.hpp @@ -17,6 +17,6 @@ int main() auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(restricted(eve::cscd)) , xp, eve::restricted(eve::cscd) , arg0); - run (EVE_NAME(restricted(eve::cscd)) , xp, eve::restricted(eve::cscd) , arg0); + run(EVE_NAME(quarter_circle(eve::cscd)) , xp, eve::quarter_circle(eve::cscd) , arg0); + run (EVE_NAME(quarter_circle(eve::cscd)) , xp, eve::quarter_circle(eve::cscd) , arg0); } diff --git a/benchmarks/module/math/cscpi/big/cscpi.hpp b/benchmarks/module/math/cscpi/big/cscpi.hpp deleted file mode 100644 index c4f943e9ae..0000000000 --- a/benchmarks/module/math/cscpi/big/cscpi.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(big(eve::cscpi)) , xp, eve::big(eve::cscpi) , arg0); - run (EVE_NAME(big(eve::cscpi)) , xp, eve::big(eve::cscpi) , arg0); - -} diff --git a/benchmarks/module/math/cscpi/medium/cscpi.hpp b/benchmarks/module/math/cscpi/medium/cscpi.hpp deleted file mode 100644 index 7e2db99aad..0000000000 --- a/benchmarks/module/math/cscpi/medium/cscpi.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - auto lmin = -lmax; - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(medium(eve::cscpi)) , xp, eve::medium(eve::cscpi) , arg0); - run (EVE_NAME(medium(eve::cscpi)) , xp, eve::medium(eve::cscpi) , arg0); - -} diff --git a/benchmarks/module/math/cscpi/restricted/cscpi.hpp b/benchmarks/module/math/cscpi/quarter_circle/cscpi.hpp similarity index 72% rename from benchmarks/module/math/cscpi/restricted/cscpi.hpp rename to benchmarks/module/math/cscpi/quarter_circle/cscpi.hpp index 963eb77ff2..f25cf7ab21 100644 --- a/benchmarks/module/math/cscpi/restricted/cscpi.hpp +++ b/benchmarks/module/math/cscpi/quarter_circle/cscpi.hpp @@ -16,6 +16,6 @@ int main() auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(restricted(eve::cscpi)) , xp, eve::restricted(eve::cscpi) , arg0); - run (EVE_NAME(restricted(eve::cscpi)) , xp, eve::restricted(eve::cscpi) , arg0); + run(EVE_NAME(quarter_circle(eve::cscpi)) , xp, eve::quarter_circle(eve::cscpi) , arg0); + run (EVE_NAME(quarter_circle(eve::cscpi)) , xp, eve::quarter_circle(eve::cscpi) , arg0); } diff --git a/benchmarks/module/math/sec/big/sec.hpp b/benchmarks/module/math/sec/big/sec.hpp deleted file mode 100644 index c08ef62552..0000000000 --- a/benchmarks/module/math/sec/big/sec.hpp +++ /dev/null @@ -1,26 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - auto std__sec = [](auto x){return 1/std::cos(x);}; - - eve::bench::experiment xp; - run(EVE_NAME(std__sec) , xp, std__sec , arg0); - run(EVE_NAME(big(eve::sec)) , xp, eve::big(eve::sec) , arg0); - run (EVE_NAME(big(eve::sec)) , xp, eve::big(eve::sec) , arg0); - -} diff --git a/benchmarks/module/math/sec/medium/sec.hpp b/benchmarks/module/math/sec/full_circle/sec.hpp similarity index 72% rename from benchmarks/module/math/sec/medium/sec.hpp rename to benchmarks/module/math/sec/full_circle/sec.hpp index 8848a64a34..fc0d543d1c 100644 --- a/benchmarks/module/math/sec/medium/sec.hpp +++ b/benchmarks/module/math/sec/full_circle/sec.hpp @@ -12,7 +12,7 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::full_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); @@ -20,7 +20,7 @@ int main() eve::bench::experiment xp; run(EVE_NAME(std__sec) , xp, std__sec , arg0); - run(EVE_NAME(medium(eve::sec)) , xp, eve::medium(eve::sec) , arg0); - run (EVE_NAME(medium(eve::sec)) , xp, eve::medium(eve::sec) , arg0); + run(EVE_NAME(full_circle(eve::sec)) , xp, eve::full_circle(eve::sec) , arg0); + run (EVE_NAME(full_circle(eve::sec)) , xp, eve::full_circle(eve::sec) , arg0); } diff --git a/benchmarks/module/math/sec/small/sec.hpp b/benchmarks/module/math/sec/half_circle/sec.hpp similarity index 72% rename from benchmarks/module/math/sec/small/sec.hpp rename to benchmarks/module/math/sec/half_circle/sec.hpp index 75407a3e01..e740b91d84 100644 --- a/benchmarks/module/math/sec/small/sec.hpp +++ b/benchmarks/module/math/sec/half_circle/sec.hpp @@ -12,7 +12,7 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::small_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::half_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); @@ -20,7 +20,7 @@ int main() eve::bench::experiment xp; run(EVE_NAME(std__sec) , xp, std__sec , arg0); - run(EVE_NAME(small(eve::sec)) , xp, eve::small(eve::sec) , arg0); - run (EVE_NAME(small(eve::sec)) , xp, eve::small(eve::sec) , arg0); + run(EVE_NAME(half_circle(eve::sec)) , xp, eve::half_circle(eve::sec) , arg0); + run (EVE_NAME(half_circle(eve::sec)) , xp, eve::half_circle(eve::sec) , arg0); } diff --git a/benchmarks/module/math/sec/restricted/sec.hpp b/benchmarks/module/math/sec/quarter_circle/sec.hpp similarity index 77% rename from benchmarks/module/math/sec/restricted/sec.hpp rename to benchmarks/module/math/sec/quarter_circle/sec.hpp index 611e3295e3..28fe3bbb97 100644 --- a/benchmarks/module/math/sec/restricted/sec.hpp +++ b/benchmarks/module/math/sec/quarter_circle/sec.hpp @@ -18,6 +18,6 @@ int main() eve::bench::experiment xp; run(EVE_NAME(std__sec) , xp, std__sec , arg0); - run(EVE_NAME(restricted(eve::sec)) , xp, eve::restricted(eve::sec) , arg0); - run (EVE_NAME(restricted(eve::sec)) , xp, eve::restricted(eve::sec) , arg0); + run(EVE_NAME(quarter_circle(eve::sec)) , xp, eve::quarter_circle(eve::sec) , arg0); + run (EVE_NAME(quarter_circle(eve::sec)) , xp, eve::quarter_circle(eve::sec) , arg0); } diff --git a/benchmarks/module/math/secd/big/secd.hpp b/benchmarks/module/math/secd/big/secd.hpp deleted file mode 100644 index 2d8fe4db7b..0000000000 --- a/benchmarks/module/math/secd/big/secd.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(big(eve::secd)) , xp, eve::big(eve::secd) , arg0); - run (EVE_NAME(big(eve::secd)) , xp, eve::big(eve::secd) , arg0); - -} diff --git a/benchmarks/module/math/secd/small/secd.hpp b/benchmarks/module/math/secd/half_circle/secd.hpp similarity index 68% rename from benchmarks/module/math/secd/small/secd.hpp rename to benchmarks/module/math/secd/half_circle/secd.hpp index 929f5f8381..1550341aa7 100644 --- a/benchmarks/module/math/secd/small/secd.hpp +++ b/benchmarks/module/math/secd/half_circle/secd.hpp @@ -12,13 +12,13 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::small_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::half_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(small(eve::secd)) , xp, eve::small(eve::secd) , arg0); - run (EVE_NAME(small(eve::secd)) , xp, eve::small(eve::secd) , arg0); + run(EVE_NAME(half_circle(eve::secd)) , xp, eve::half_circle(eve::secd) , arg0); + run (EVE_NAME(half_circle(eve::secd)) , xp, eve::half_circle(eve::secd) , arg0); } diff --git a/benchmarks/module/math/secd/medium/secd.hpp b/benchmarks/module/math/secd/medium/secd.hpp deleted file mode 100644 index ec94d5c7f4..0000000000 --- a/benchmarks/module/math/secd/medium/secd.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - auto lmin = -lmax; - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(medium(eve::secd)) , xp, eve::medium(eve::secd) , arg0); - run (EVE_NAME(medium(eve::secd)) , xp, eve::medium(eve::secd) , arg0); - -} diff --git a/benchmarks/module/math/secd/restricted/secd.hpp b/benchmarks/module/math/secd/quarter_circle/secd.hpp similarity index 74% rename from benchmarks/module/math/secd/restricted/secd.hpp rename to benchmarks/module/math/secd/quarter_circle/secd.hpp index ed1121a16c..306fef1e2f 100644 --- a/benchmarks/module/math/secd/restricted/secd.hpp +++ b/benchmarks/module/math/secd/quarter_circle/secd.hpp @@ -17,6 +17,6 @@ int main() auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(restricted(eve::secd)) , xp, eve::restricted(eve::secd) , arg0); - run (EVE_NAME(restricted(eve::secd)) , xp, eve::restricted(eve::secd) , arg0); + run(EVE_NAME(quarter_circle(eve::secd)) , xp, eve::quarter_circle(eve::secd) , arg0); + run (EVE_NAME(quarter_circle(eve::secd)) , xp, eve::quarter_circle(eve::secd) , arg0); } diff --git a/benchmarks/module/math/secpi/big/secpi.hpp b/benchmarks/module/math/secpi/big/secpi.hpp deleted file mode 100644 index 6e5a337565..0000000000 --- a/benchmarks/module/math/secpi/big/secpi.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(big(eve::secpi)) , xp, eve::big(eve::secpi) , arg0); - run (EVE_NAME(big(eve::secpi)) , xp, eve::big(eve::secpi) , arg0); - -} diff --git a/benchmarks/module/math/secpi/medium/secpi.hpp b/benchmarks/module/math/secpi/medium/secpi.hpp deleted file mode 100644 index 9700c6c289..0000000000 --- a/benchmarks/module/math/secpi/medium/secpi.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - auto lmin = -lmax; - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(medium(eve::secpi)) , xp, eve::medium(eve::secpi) , arg0); - run (EVE_NAME(medium(eve::secpi)) , xp, eve::medium(eve::secpi) , arg0); - -} diff --git a/benchmarks/module/math/secpi/restricted/secpi.hpp b/benchmarks/module/math/secpi/quarter_circle/secpi.hpp similarity index 72% rename from benchmarks/module/math/secpi/restricted/secpi.hpp rename to benchmarks/module/math/secpi/quarter_circle/secpi.hpp index b59c9899ff..1a33fed0db 100644 --- a/benchmarks/module/math/secpi/restricted/secpi.hpp +++ b/benchmarks/module/math/secpi/quarter_circle/secpi.hpp @@ -16,6 +16,6 @@ int main() auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(restricted(eve::secpi)) , xp, eve::restricted(eve::secpi) , arg0); - run (EVE_NAME(restricted(eve::secpi)) , xp, eve::restricted(eve::secpi) , arg0); + run(EVE_NAME(quarter_circle(eve::secpi)) , xp, eve::quarter_circle(eve::secpi) , arg0); + run (EVE_NAME(quarter_circle(eve::secpi)) , xp, eve::quarter_circle(eve::secpi) , arg0); } diff --git a/benchmarks/module/math/sin/big/sin.hpp b/benchmarks/module/math/sin/big/sin.hpp deleted file mode 100644 index a390ff3f65..0000000000 --- a/benchmarks/module/math/sin/big/sin.hpp +++ /dev/null @@ -1,26 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - auto std__sin = [](auto x){return std::sin(x);}; - - eve::bench::experiment xp; - run(EVE_NAME(std__sin) , xp, std__sin , arg0); - run(EVE_NAME(big(eve::sin)) , xp, eve::big(eve::sin) , arg0); - run (EVE_NAME(big(eve::sin)) , xp, eve::big(eve::sin) , arg0); - -} diff --git a/benchmarks/module/math/sin/medium/sin.hpp b/benchmarks/module/math/sin/full_circle/sin.hpp similarity index 72% rename from benchmarks/module/math/sin/medium/sin.hpp rename to benchmarks/module/math/sin/full_circle/sin.hpp index 5e257a13a0..f06b4c45dd 100644 --- a/benchmarks/module/math/sin/medium/sin.hpp +++ b/benchmarks/module/math/sin/full_circle/sin.hpp @@ -12,7 +12,7 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::full_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); @@ -20,7 +20,7 @@ int main() eve::bench::experiment xp; run(EVE_NAME(std__sin) , xp, std__sin , arg0); - run(EVE_NAME(medium(eve::sin)) , xp, eve::medium(eve::sin) , arg0); - run (EVE_NAME(medium(eve::sin)) , xp, eve::medium(eve::sin) , arg0); + run(EVE_NAME(full_circle(eve::sin)) , xp, eve::full_circle(eve::sin) , arg0); + run (EVE_NAME(full_circle(eve::sin)) , xp, eve::full_circle(eve::sin) , arg0); } diff --git a/benchmarks/module/math/sin/small/sin.hpp b/benchmarks/module/math/sin/half_circle/sin.hpp similarity index 72% rename from benchmarks/module/math/sin/small/sin.hpp rename to benchmarks/module/math/sin/half_circle/sin.hpp index 21de985a55..cb35c19b6e 100644 --- a/benchmarks/module/math/sin/small/sin.hpp +++ b/benchmarks/module/math/sin/half_circle/sin.hpp @@ -12,7 +12,7 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::small_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::half_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); @@ -20,7 +20,7 @@ int main() eve::bench::experiment xp; run(EVE_NAME(std__sin) , xp, std__sin , arg0); - run(EVE_NAME(small(eve::sin)) , xp, eve::small(eve::sin) , arg0); - run (EVE_NAME(small(eve::sin)) , xp, eve::small(eve::sin) , arg0); + run(EVE_NAME(half_circle(eve::sin)) , xp, eve::half_circle(eve::sin) , arg0); + run (EVE_NAME(half_circle(eve::sin)) , xp, eve::half_circle(eve::sin) , arg0); } diff --git a/benchmarks/module/math/sin/restricted/sin.hpp b/benchmarks/module/math/sin/quarter_circle/sin.hpp similarity index 77% rename from benchmarks/module/math/sin/restricted/sin.hpp rename to benchmarks/module/math/sin/quarter_circle/sin.hpp index cc2cfba30d..5ddf8c0056 100644 --- a/benchmarks/module/math/sin/restricted/sin.hpp +++ b/benchmarks/module/math/sin/quarter_circle/sin.hpp @@ -18,6 +18,6 @@ int main() eve::bench::experiment xp; run(EVE_NAME(std__sin) , xp, std__sin , arg0); - run(EVE_NAME(restricted(eve::sin)) , xp, eve::restricted(eve::sin) , arg0); - run (EVE_NAME(restricted(eve::sin)) , xp, eve::restricted(eve::sin) , arg0); + run(EVE_NAME(quarter_circle(eve::sin)) , xp, eve::quarter_circle(eve::sin) , arg0); + run (EVE_NAME(quarter_circle(eve::sin)) , xp, eve::quarter_circle(eve::sin) , arg0); } diff --git a/benchmarks/module/math/sincos/big/sincos.hpp b/benchmarks/module/math/sincos/big/sincos.hpp deleted file mode 100644 index e244d2bc98..0000000000 --- a/benchmarks/module/math/sincos/big/sincos.hpp +++ /dev/null @@ -1,23 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(big(eve::sincos)) , xp, eve::big(eve::sincos) , arg0); - run (EVE_NAME(big(eve::sincos)) , xp, eve::big(eve::sincos) , arg0); - -} diff --git a/benchmarks/module/math/sincos/medium/sincos.hpp b/benchmarks/module/math/sincos/half_circle/sincos.hpp similarity index 67% rename from benchmarks/module/math/sincos/medium/sincos.hpp rename to benchmarks/module/math/sincos/half_circle/sincos.hpp index 668e9bc067..7bc25f19ae 100644 --- a/benchmarks/module/math/sincos/medium/sincos.hpp +++ b/benchmarks/module/math/sincos/half_circle/sincos.hpp @@ -12,13 +12,13 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::half_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(medium(eve::sincos)) , xp, eve::medium(eve::sincos) , arg0); - run (EVE_NAME(medium(eve::sincos)) , xp, eve::medium(eve::sincos) , arg0); + run(EVE_NAME(half_circle(eve::sincos)) , xp, eve::half_circle(eve::sincos) , arg0); + run (EVE_NAME(half_circle(eve::sincos)) , xp, eve::half_circle(eve::sincos) , arg0); } diff --git a/benchmarks/module/math/sincos/restricted/sincos.hpp b/benchmarks/module/math/sincos/quarter_circle/sincos.hpp similarity index 73% rename from benchmarks/module/math/sincos/restricted/sincos.hpp rename to benchmarks/module/math/sincos/quarter_circle/sincos.hpp index 3a078aeb7e..2a14cde12a 100644 --- a/benchmarks/module/math/sincos/restricted/sincos.hpp +++ b/benchmarks/module/math/sincos/quarter_circle/sincos.hpp @@ -16,6 +16,6 @@ int main() auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(restricted(eve::sincos)) , xp, eve::restricted(eve::sincos) , arg0); - run (EVE_NAME(restricted(eve::sincos)) , xp, eve::restricted(eve::sincos) , arg0); + run(EVE_NAME(quarter_circle(eve::sincos)) , xp, eve::quarter_circle(eve::sincos) , arg0); + run (EVE_NAME(quarter_circle(eve::sincos)) , xp, eve::quarter_circle(eve::sincos) , arg0); } diff --git a/benchmarks/module/math/sincos/small/sincos.hpp b/benchmarks/module/math/sincos/small/sincos.hpp deleted file mode 100644 index 4abbc12e73..0000000000 --- a/benchmarks/module/math/sincos/small/sincos.hpp +++ /dev/null @@ -1,24 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include - -int main() -{ - auto lmax = eve::detail::Rempio2_limit(eve::small_type(), eve::as()); - auto lmin = -lmax; - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(small(eve::sincos)) , xp, eve::small(eve::sincos) , arg0); - run (EVE_NAME(small(eve::sincos)) , xp, eve::small(eve::sincos) , arg0); - -} diff --git a/benchmarks/module/math/sind/big/sind.hpp b/benchmarks/module/math/sind/big/sind.hpp deleted file mode 100644 index 0113dee90b..0000000000 --- a/benchmarks/module/math/sind/big/sind.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(big(eve::sind)) , xp, eve::big(eve::sind) , arg0); - run (EVE_NAME(big(eve::sind)) , xp, eve::big(eve::sind) , arg0); - -} diff --git a/benchmarks/module/math/sind/small/sind.hpp b/benchmarks/module/math/sind/half_circle/sind.hpp similarity index 68% rename from benchmarks/module/math/sind/small/sind.hpp rename to benchmarks/module/math/sind/half_circle/sind.hpp index 6635f0642f..5939611373 100644 --- a/benchmarks/module/math/sind/small/sind.hpp +++ b/benchmarks/module/math/sind/half_circle/sind.hpp @@ -12,13 +12,13 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::small_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::half_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(small(eve::sind)) , xp, eve::small(eve::sind) , arg0); - run (EVE_NAME(small(eve::sind)) , xp, eve::small(eve::sind) , arg0); + run(EVE_NAME(half_circle(eve::sind)) , xp, eve::half_circle(eve::sind) , arg0); + run (EVE_NAME(half_circle(eve::sind)) , xp, eve::half_circle(eve::sind) , arg0); } diff --git a/benchmarks/module/math/sind/medium/sind.hpp b/benchmarks/module/math/sind/medium/sind.hpp deleted file mode 100644 index c963b21cf0..0000000000 --- a/benchmarks/module/math/sind/medium/sind.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - auto lmin = -lmax; - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(medium(eve::sind)) , xp, eve::medium(eve::sind) , arg0); - run (EVE_NAME(medium(eve::sind)) , xp, eve::medium(eve::sind) , arg0); - -} diff --git a/benchmarks/module/math/sind/restricted/sind.hpp b/benchmarks/module/math/sind/quarter_circle/sind.hpp similarity index 74% rename from benchmarks/module/math/sind/restricted/sind.hpp rename to benchmarks/module/math/sind/quarter_circle/sind.hpp index 0122e390fe..9a9ca61ab2 100644 --- a/benchmarks/module/math/sind/restricted/sind.hpp +++ b/benchmarks/module/math/sind/quarter_circle/sind.hpp @@ -17,6 +17,6 @@ int main() auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(restricted(eve::sind)) , xp, eve::restricted(eve::sind) , arg0); - run (EVE_NAME(restricted(eve::sind)) , xp, eve::restricted(eve::sind) , arg0); + run(EVE_NAME(quarter_circle(eve::sind)) , xp, eve::quarter_circle(eve::sind) , arg0); + run (EVE_NAME(quarter_circle(eve::sind)) , xp, eve::quarter_circle(eve::sind) , arg0); } diff --git a/benchmarks/module/math/sindcosd/big/sindcosd.hpp b/benchmarks/module/math/sindcosd/big/sindcosd.hpp deleted file mode 100644 index ad87a5cb57..0000000000 --- a/benchmarks/module/math/sindcosd/big/sindcosd.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(big(eve::sindcosd)) , xp, eve::big(eve::sindcosd) , arg0); - run (EVE_NAME(big(eve::sindcosd)) , xp, eve::big(eve::sindcosd) , arg0); - -} diff --git a/benchmarks/module/math/sindcosd/small/sindcosd.hpp b/benchmarks/module/math/sindcosd/half_circle/sindcosd.hpp similarity index 67% rename from benchmarks/module/math/sindcosd/small/sindcosd.hpp rename to benchmarks/module/math/sindcosd/half_circle/sindcosd.hpp index 3de9da18d0..91db262a61 100644 --- a/benchmarks/module/math/sindcosd/small/sindcosd.hpp +++ b/benchmarks/module/math/sindcosd/half_circle/sindcosd.hpp @@ -12,13 +12,13 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::small_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::half_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(small(eve::sindcosd)) , xp, eve::small(eve::sindcosd) , arg0); - run (EVE_NAME(small(eve::sindcosd)) , xp, eve::small(eve::sindcosd) , arg0); + run(EVE_NAME(half_circle(eve::sindcosd)) , xp, eve::half_circle(eve::sindcosd) , arg0); + run (EVE_NAME(half_circle(eve::sindcosd)) , xp, eve::half_circle(eve::sindcosd) , arg0); } diff --git a/benchmarks/module/math/sindcosd/medium/sindcosd.hpp b/benchmarks/module/math/sindcosd/medium/sindcosd.hpp deleted file mode 100644 index 58c3908fa3..0000000000 --- a/benchmarks/module/math/sindcosd/medium/sindcosd.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - auto lmin = -lmax; - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(medium(eve::sindcosd)) , xp, eve::medium(eve::sindcosd) , arg0); - run (EVE_NAME(medium(eve::sindcosd)) , xp, eve::medium(eve::sindcosd) , arg0); - -} diff --git a/benchmarks/module/math/sindcosd/restricted/sindcosd.hpp b/benchmarks/module/math/sindcosd/quarter_circle/sindcosd.hpp similarity index 73% rename from benchmarks/module/math/sindcosd/restricted/sindcosd.hpp rename to benchmarks/module/math/sindcosd/quarter_circle/sindcosd.hpp index 47f0ab138a..d6a682a503 100644 --- a/benchmarks/module/math/sindcosd/restricted/sindcosd.hpp +++ b/benchmarks/module/math/sindcosd/quarter_circle/sindcosd.hpp @@ -17,6 +17,6 @@ int main() auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(restricted(eve::sindcosd)) , xp, eve::restricted(eve::sindcosd) , arg0); - run (EVE_NAME(restricted(eve::sindcosd)) , xp, eve::restricted(eve::sindcosd) , arg0); + run(EVE_NAME(quarter_circle(eve::sindcosd)) , xp, eve::quarter_circle(eve::sindcosd) , arg0); + run (EVE_NAME(quarter_circle(eve::sindcosd)) , xp, eve::quarter_circle(eve::sindcosd) , arg0); } diff --git a/benchmarks/module/math/sinpi/big/sinpi.hpp b/benchmarks/module/math/sinpi/big/sinpi.hpp deleted file mode 100644 index 8a97d6538c..0000000000 --- a/benchmarks/module/math/sinpi/big/sinpi.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(big(eve::sinpi)) , xp, eve::big(eve::sinpi) , arg0); - run (EVE_NAME(big(eve::sinpi)) , xp, eve::big(eve::sinpi) , arg0); - -} diff --git a/benchmarks/module/math/sinpi/medium/sinpi.hpp b/benchmarks/module/math/sinpi/medium/sinpi.hpp deleted file mode 100644 index 0b0e72ae10..0000000000 --- a/benchmarks/module/math/sinpi/medium/sinpi.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - auto lmin = -lmax; - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(medium(eve::sinpi)) , xp, eve::medium(eve::sinpi) , arg0); - run (EVE_NAME(medium(eve::sinpi)) , xp, eve::medium(eve::sinpi) , arg0); - -} diff --git a/benchmarks/module/math/sinpi/restricted/sinpi.hpp b/benchmarks/module/math/sinpi/quarter_circle/sinpi.hpp similarity index 72% rename from benchmarks/module/math/sinpi/restricted/sinpi.hpp rename to benchmarks/module/math/sinpi/quarter_circle/sinpi.hpp index 7e47ed6e94..804f49403c 100644 --- a/benchmarks/module/math/sinpi/restricted/sinpi.hpp +++ b/benchmarks/module/math/sinpi/quarter_circle/sinpi.hpp @@ -16,6 +16,6 @@ int main() auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(restricted(eve::sinpi)) , xp, eve::restricted(eve::sinpi) , arg0); - run (EVE_NAME(restricted(eve::sinpi)) , xp, eve::restricted(eve::sinpi) , arg0); + run(EVE_NAME(quarter_circle(eve::sinpi)) , xp, eve::quarter_circle(eve::sinpi) , arg0); + run (EVE_NAME(quarter_circle(eve::sinpi)) , xp, eve::quarter_circle(eve::sinpi) , arg0); } diff --git a/benchmarks/module/math/sinpicospi/big/sinpicospi.hpp b/benchmarks/module/math/sinpicospi/big/sinpicospi.hpp deleted file mode 100644 index bb7802edbf..0000000000 --- a/benchmarks/module/math/sinpicospi/big/sinpicospi.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(big(eve::sinpicospi)) , xp, eve::big(eve::sinpicospi) , arg0); - run (EVE_NAME(big(eve::sinpicospi)) , xp, eve::big(eve::sinpicospi) , arg0); - -} diff --git a/benchmarks/module/math/sinpicospi/medium/sinpicospi.hpp b/benchmarks/module/math/sinpicospi/medium/sinpicospi.hpp deleted file mode 100644 index 33d3e35e04..0000000000 --- a/benchmarks/module/math/sinpicospi/medium/sinpicospi.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - auto lmin = -lmax; - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(medium(eve::sinpicospi)) , xp, eve::medium(eve::sinpicospi) , arg0); - run (EVE_NAME(medium(eve::sinpicospi)) , xp, eve::medium(eve::sinpicospi) , arg0); - -} diff --git a/benchmarks/module/math/sinpicospi/restricted/sinpicospi.hpp b/benchmarks/module/math/sinpicospi/quarter_circle/sinpicospi.hpp similarity index 71% rename from benchmarks/module/math/sinpicospi/restricted/sinpicospi.hpp rename to benchmarks/module/math/sinpicospi/quarter_circle/sinpicospi.hpp index 27a0a7b443..e587c1a174 100644 --- a/benchmarks/module/math/sinpicospi/restricted/sinpicospi.hpp +++ b/benchmarks/module/math/sinpicospi/quarter_circle/sinpicospi.hpp @@ -16,6 +16,6 @@ int main() auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(restricted(eve::sinpicospi)) , xp, eve::restricted(eve::sinpicospi) , arg0); - run (EVE_NAME(restricted(eve::sinpicospi)) , xp, eve::restricted(eve::sinpicospi) , arg0); + run(EVE_NAME(quarter_circle(eve::sinpicospi)) , xp, eve::quarter_circle(eve::sinpicospi) , arg0); + run (EVE_NAME(quarter_circle(eve::sinpicospi)) , xp, eve::quarter_circle(eve::sinpicospi) , arg0); } diff --git a/benchmarks/module/math/tan/big/tan.hpp b/benchmarks/module/math/tan/big/tan.hpp deleted file mode 100644 index 1c1e1e7dda..0000000000 --- a/benchmarks/module/math/tan/big/tan.hpp +++ /dev/null @@ -1,26 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - auto std__tan = [](auto x){return std::tan(x);}; - - eve::bench::experiment xp; - run(EVE_NAME(std__tan) , xp, std__tan , arg0); - run(EVE_NAME(big(eve::tan)) , xp, eve::big(eve::tan) , arg0); - run (EVE_NAME(big(eve::tan)) , xp, eve::big(eve::tan) , arg0); - -} diff --git a/benchmarks/module/math/tan/medium/tan.hpp b/benchmarks/module/math/tan/full_circle/tan.hpp similarity index 72% rename from benchmarks/module/math/tan/medium/tan.hpp rename to benchmarks/module/math/tan/full_circle/tan.hpp index 1befc054b3..39d32a4a26 100644 --- a/benchmarks/module/math/tan/medium/tan.hpp +++ b/benchmarks/module/math/tan/full_circle/tan.hpp @@ -12,7 +12,7 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::full_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); @@ -20,7 +20,7 @@ int main() eve::bench::experiment xp; run(EVE_NAME(std__tan) , xp, std__tan , arg0); - run(EVE_NAME(medium(eve::tan)) , xp, eve::medium(eve::tan) , arg0); - run (EVE_NAME(medium(eve::tan)) , xp, eve::medium(eve::tan) , arg0); + run(EVE_NAME(full_circle(eve::tan)) , xp, eve::full_circle(eve::tan) , arg0); + run (EVE_NAME(full_circle(eve::tan)) , xp, eve::full_circle(eve::tan) , arg0); } diff --git a/benchmarks/module/math/tan/small/tan.hpp b/benchmarks/module/math/tan/half_circle/tan.hpp similarity index 72% rename from benchmarks/module/math/tan/small/tan.hpp rename to benchmarks/module/math/tan/half_circle/tan.hpp index 3ed6e54031..c7da52b917 100644 --- a/benchmarks/module/math/tan/small/tan.hpp +++ b/benchmarks/module/math/tan/half_circle/tan.hpp @@ -12,7 +12,7 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::small_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::half_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); @@ -20,7 +20,7 @@ int main() eve::bench::experiment xp; run(EVE_NAME(std__tan) , xp, std__tan , arg0); - run(EVE_NAME(small(eve::tan)) , xp, eve::small(eve::tan) , arg0); - run (EVE_NAME(small(eve::tan)) , xp, eve::small(eve::tan) , arg0); + run(EVE_NAME(half_circle(eve::tan)) , xp, eve::half_circle(eve::tan) , arg0); + run (EVE_NAME(half_circle(eve::tan)) , xp, eve::half_circle(eve::tan) , arg0); } diff --git a/benchmarks/module/math/tan/restricted/tan.hpp b/benchmarks/module/math/tan/quarter_circle/tan.hpp similarity index 77% rename from benchmarks/module/math/tan/restricted/tan.hpp rename to benchmarks/module/math/tan/quarter_circle/tan.hpp index a8202eaee6..ae6496f019 100644 --- a/benchmarks/module/math/tan/restricted/tan.hpp +++ b/benchmarks/module/math/tan/quarter_circle/tan.hpp @@ -18,6 +18,6 @@ int main() eve::bench::experiment xp; run(EVE_NAME(std__tan) , xp, std__tan , arg0); - run(EVE_NAME(restricted(eve::tan)) , xp, eve::restricted(eve::tan) , arg0); - run (EVE_NAME(restricted(eve::tan)) , xp, eve::restricted(eve::tan) , arg0); + run(EVE_NAME(quarter_circle(eve::tan)) , xp, eve::quarter_circle(eve::tan) , arg0); + run (EVE_NAME(quarter_circle(eve::tan)) , xp, eve::quarter_circle(eve::tan) , arg0); } diff --git a/benchmarks/module/math/tand/big/tand.hpp b/benchmarks/module/math/tand/big/tand.hpp deleted file mode 100644 index d160abf97b..0000000000 --- a/benchmarks/module/math/tand/big/tand.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(big(eve::tand)) , xp, eve::big(eve::tand) , arg0); - run (EVE_NAME(big(eve::tand)) , xp, eve::big(eve::tand) , arg0); - -} diff --git a/benchmarks/module/math/tand/small/tand.hpp b/benchmarks/module/math/tand/half_circle/tand.hpp similarity index 68% rename from benchmarks/module/math/tand/small/tand.hpp rename to benchmarks/module/math/tand/half_circle/tand.hpp index 921aba6344..025132cee5 100644 --- a/benchmarks/module/math/tand/small/tand.hpp +++ b/benchmarks/module/math/tand/half_circle/tand.hpp @@ -12,13 +12,13 @@ int main() { - auto lmax = eve::detail::Rempio2_limit(eve::small_type(), eve::as()); + auto lmax = eve::detail::Rempio2_limit(eve::half_circle_type(), eve::as()); auto lmin = -lmax; auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(small(eve::tand)) , xp, eve::small(eve::tand) , arg0); - run (EVE_NAME(small(eve::tand)) , xp, eve::small(eve::tand) , arg0); + run(EVE_NAME(half_circle(eve::tand)) , xp, eve::half_circle(eve::tand) , arg0); + run (EVE_NAME(half_circle(eve::tand)) , xp, eve::half_circle(eve::tand) , arg0); } diff --git a/benchmarks/module/math/tand/medium/tand.hpp b/benchmarks/module/math/tand/medium/tand.hpp deleted file mode 100644 index fa1f5179b5..0000000000 --- a/benchmarks/module/math/tand/medium/tand.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - auto lmin = -lmax; - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(medium(eve::tand)) , xp, eve::medium(eve::tand) , arg0); - run (EVE_NAME(medium(eve::tand)) , xp, eve::medium(eve::tand) , arg0); - -} diff --git a/benchmarks/module/math/tand/restricted/tand.hpp b/benchmarks/module/math/tand/quarter_circle/tand.hpp similarity index 74% rename from benchmarks/module/math/tand/restricted/tand.hpp rename to benchmarks/module/math/tand/quarter_circle/tand.hpp index 2e2f58775d..62936b50f0 100644 --- a/benchmarks/module/math/tand/restricted/tand.hpp +++ b/benchmarks/module/math/tand/quarter_circle/tand.hpp @@ -17,6 +17,6 @@ int main() auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(restricted(eve::tand)) , xp, eve::restricted(eve::tand) , arg0); - run (EVE_NAME(restricted(eve::tand)) , xp, eve::restricted(eve::tand) , arg0); + run(EVE_NAME(quarter_circle(eve::tand)) , xp, eve::quarter_circle(eve::tand) , arg0); + run (EVE_NAME(quarter_circle(eve::tand)) , xp, eve::quarter_circle(eve::tand) , arg0); } diff --git a/benchmarks/module/math/tanpi/big/tanpi.hpp b/benchmarks/module/math/tanpi/big/tanpi.hpp deleted file mode 100644 index 1909c3cc59..0000000000 --- a/benchmarks/module/math/tanpi/big/tanpi.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmin = EVE_VALUE(eve::valmin(eve::as())); - auto lmax = EVE_VALUE(eve::valmax(eve::as())); - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(big(eve::tanpi)) , xp, eve::big(eve::tanpi) , arg0); - run (EVE_NAME(big(eve::tanpi)) , xp, eve::big(eve::tanpi) , arg0); - -} diff --git a/benchmarks/module/math/tanpi/medium/tanpi.hpp b/benchmarks/module/math/tanpi/medium/tanpi.hpp deleted file mode 100644 index 4c77d35eab..0000000000 --- a/benchmarks/module/math/tanpi/medium/tanpi.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include - -int main() -{ - auto lmax = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - auto lmin = -lmax; - - auto arg0 = eve::bench::random_(lmin,lmax); - - eve::bench::experiment xp; - run(EVE_NAME(medium(eve::tanpi)) , xp, eve::medium(eve::tanpi) , arg0); - run (EVE_NAME(medium(eve::tanpi)) , xp, eve::medium(eve::tanpi) , arg0); - -} diff --git a/benchmarks/module/math/tanpi/restricted/tanpi.hpp b/benchmarks/module/math/tanpi/quarter_circle/tanpi.hpp similarity index 72% rename from benchmarks/module/math/tanpi/restricted/tanpi.hpp rename to benchmarks/module/math/tanpi/quarter_circle/tanpi.hpp index 4768e1d931..f7ff9aafc1 100644 --- a/benchmarks/module/math/tanpi/restricted/tanpi.hpp +++ b/benchmarks/module/math/tanpi/quarter_circle/tanpi.hpp @@ -16,6 +16,6 @@ int main() auto arg0 = eve::bench::random_(lmin,lmax); eve::bench::experiment xp; - run(EVE_NAME(restricted(eve::tanpi)) , xp, eve::restricted(eve::tanpi) , arg0); - run (EVE_NAME(restricted(eve::tanpi)) , xp, eve::restricted(eve::tanpi) , arg0); + run(EVE_NAME(quarter_circle(eve::tanpi)) , xp, eve::quarter_circle(eve::tanpi) , arg0); + run (EVE_NAME(quarter_circle(eve::tanpi)) , xp, eve::quarter_circle(eve::tanpi) , arg0); } diff --git a/cmake/config/compiler.cmake b/cmake/config/compiler.cmake index a23fba8321..633fad9eed 100644 --- a/cmake/config/compiler.cmake +++ b/cmake/config/compiler.cmake @@ -17,6 +17,7 @@ endif() target_include_directories( eve_test INTERFACE ${PROJECT_SOURCE_DIR}/test + ${PROJECT_SOURCE_DIR}/examples ${PROJECT_SOURCE_DIR}/include ) @@ -37,6 +38,7 @@ endif() target_include_directories( eve_bench INTERFACE ${PROJECT_SOURCE_DIR}/test + ${PROJECT_SOURCE_DIR}/examples ${PROJECT_SOURCE_DIR}/include ) diff --git a/cmake/toolchain/api.targets.json b/cmake/toolchain/api.targets.json index 63f86a040a..e40b4a490e 100644 --- a/cmake/toolchain/api.targets.json +++ b/cmake/toolchain/api.targets.json @@ -3,4 +3,5 @@ , "unit.memory.exe": "^unit.memory\\..*\\.exe" , "unit.real.algorithm.exe": "^unit.real.algorithm\\..*\\simd.exe" , "unit.algo.exe": "^unit.algo\\..*\\.exe" +, "unit.constant.exe": "^unit.constant\\..*\\.exe" } diff --git a/cmake/toolchain/clang.ppc64le.cmake b/cmake/toolchain/clang.ppc64le.cmake deleted file mode 100644 index c2b8a962e5..0000000000 --- a/cmake/toolchain/clang.ppc64le.cmake +++ /dev/null @@ -1,15 +0,0 @@ -##================================================================================================== -## EVE - Expressive Vector Engine -## Copyright : EVE Contributors & Maintainers -## SPDX-License-Identifier: MIT -##================================================================================================== -set(CMAKE_SYSTEM_NAME Linux ) -set(CMAKE_SYSTEM_PROCESSOR powerpc ) - -set(CMAKE_SYSROOT /usr/powerpc64le-linux-gnu/ ) -set(CMAKE_C_COMPILER clang-12 ) -set(CMAKE_CXX_COMPILER clang++-12 ) - -set(CMAKE_CXX_FLAGS "-DEVE_NO_FORCEINLINE ${EVE_OPTIONS} --target=powerpc64le-linux-gnu -I/usr/powerpc64le-linux-gnu/include/c++/10/powerpc64le-linux-gnu" ) -set(CMAKE_EXE_LINKER_FLAGS "-fuse-ld=lld") -set(CMAKE_CROSSCOMPILING_CMD qemu-ppc64le) diff --git a/cmake/toolchain/clang.x86.asan.cmake b/cmake/toolchain/clang.x86.asan.cmake index 6406782609..b4a13d6a96 100644 --- a/cmake/toolchain/clang.x86.asan.cmake +++ b/cmake/toolchain/clang.x86.asan.cmake @@ -3,9 +3,9 @@ ## Copyright : EVE Contributors & Maintainers ## SPDX-License-Identifier: MIT ##================================================================================================== -set(CMAKE_C_COMPILER clang-12 ) -set(CMAKE_CXX_COMPILER clang++-12 ) -set(CMAKE_BUILD_TYPE Debug ) +set(CMAKE_C_COMPILER clang ) +set(CMAKE_CXX_COMPILER clang++ ) +set(CMAKE_BUILD_TYPE Debug ) set(CMAKE_CXX_FLAGS "-DEVE_NO_FORCEINLINE -fsanitize=address ${EVE_OPTIONS}") set(CMAKE_EXE_LINKER_FLAGS "-fsanitize=address") diff --git a/cmake/toolchain/clang.x86.cmake b/cmake/toolchain/clang.x86.cmake index 70c4722116..371229e821 100644 --- a/cmake/toolchain/clang.x86.cmake +++ b/cmake/toolchain/clang.x86.cmake @@ -3,7 +3,7 @@ ## Copyright : EVE Contributors & Maintainers ## SPDX-License-Identifier: MIT ##================================================================================================== -set(CMAKE_C_COMPILER clang-12 ) -set(CMAKE_CXX_COMPILER clang++-12 ) +set(CMAKE_C_COMPILER clang ) +set(CMAKE_CXX_COMPILER clang++ ) set(CMAKE_CXX_FLAGS "-DEVE_NO_FORCEINLINE ${EVE_OPTIONS}" ) diff --git a/cmake/toolchain/clang.x86_sde.cmake b/cmake/toolchain/clang.x86_sde.cmake index 47a9c8edac..18501e0c13 100644 --- a/cmake/toolchain/clang.x86_sde.cmake +++ b/cmake/toolchain/clang.x86_sde.cmake @@ -3,8 +3,8 @@ ## Copyright : EVE Contributors & Maintainers ## SPDX-License-Identifier: MIT ##================================================================================================== -set(CMAKE_C_COMPILER clang-12 ) -set(CMAKE_CXX_COMPILER clang++-12 ) +set(CMAKE_C_COMPILER clang ) +set(CMAKE_CXX_COMPILER clang++ ) set(CMAKE_CXX_FLAGS "-DEVE_NO_FORCEINLINE ${EVE_OPTIONS}" ) set(CMAKE_CROSSCOMPILING_CMD ${PROJECT_SOURCE_DIR}/cmake/toolchain/run_x86_sde.sh ) diff --git a/cmake/toolchain/gcc.x86.ci.cmake b/cmake/toolchain/gcc.x86.ci.cmake new file mode 100644 index 0000000000..5134d91e49 --- /dev/null +++ b/cmake/toolchain/gcc.x86.ci.cmake @@ -0,0 +1,9 @@ +##================================================================================================== +## EVE - Expressive Vector Engine +## Copyright : EVE Contributors & Maintainers +## SPDX-License-Identifier: MIT +##================================================================================================== +set(CMAKE_C_COMPILER gcc-11 ) +set(CMAKE_CXX_COMPILER g++-11 ) + +set(CMAKE_CXX_FLAGS "-DEVE_NO_FORCEINLINE ${EVE_OPTIONS}" ) diff --git a/cmake/toolchain/gcc.x86.cmake b/cmake/toolchain/gcc.x86.cmake index d89df1b886..ebfb43e29c 100644 --- a/cmake/toolchain/gcc.x86.cmake +++ b/cmake/toolchain/gcc.x86.cmake @@ -3,7 +3,7 @@ ## Copyright : EVE Contributors & Maintainers ## SPDX-License-Identifier: MIT ##================================================================================================== -set(CMAKE_C_COMPILER gcc-11 ) -set(CMAKE_CXX_COMPILER g++-11 ) +set(CMAKE_C_COMPILER gcc ) +set(CMAKE_CXX_COMPILER g++ ) set(CMAKE_CXX_FLAGS "-Wno-psabi -DEVE_NO_FORCEINLINE ${EVE_OPTIONS}" ) diff --git a/cmake/toolchain/gcc.x86.opt.cmake b/cmake/toolchain/gcc.x86.opt.cmake index dc1b8fcb0f..1da2e3fc17 100644 --- a/cmake/toolchain/gcc.x86.opt.cmake +++ b/cmake/toolchain/gcc.x86.opt.cmake @@ -3,7 +3,7 @@ ## Copyright : EVE Contributors & Maintainers ## SPDX-License-Identifier: MIT ##================================================================================================== -set(CMAKE_C_COMPILER gcc-11 ) -set(CMAKE_CXX_COMPILER g++-11 ) +set(CMAKE_C_COMPILER gcc ) +set(CMAKE_CXX_COMPILER g++ ) set(CMAKE_CXX_FLAGS "-Wno-psabi -O3 -DNDEBUG" ) diff --git a/cmake/toolchain/gcc.x86_sde.cmake b/cmake/toolchain/gcc.x86_sde.cmake index 3028d58105..29f93fc19a 100644 --- a/cmake/toolchain/gcc.x86_sde.cmake +++ b/cmake/toolchain/gcc.x86_sde.cmake @@ -3,8 +3,8 @@ ## Copyright : EVE Contributors & Maintainers ## SPDX-License-Identifier: MIT ##================================================================================================== -set(CMAKE_C_COMPILER gcc-11 ) -set(CMAKE_CXX_COMPILER g++-11 ) +set(CMAKE_C_COMPILER gcc ) +set(CMAKE_CXX_COMPILER g++ ) -set(CMAKE_CXX_FLAGS "-DEVE_NO_FORCEINLINE ${EVE_OPTIONS}" ) +set(CMAKE_CXX_FLAGS "-DEVE_NO_FORCEINLINE ${EVE_OPTIONS} -no-pie -fno-pie" ) set(CMAKE_CROSSCOMPILING_CMD ${PROJECT_SOURCE_DIR}/cmake/toolchain/run_x86_sde.sh ) diff --git a/cmake/toolchain/run_x86_sde.sh b/cmake/toolchain/run_x86_sde.sh index 7767611cc8..0e6fdfc2fa 100755 --- a/cmake/toolchain/run_x86_sde.sh +++ b/cmake/toolchain/run_x86_sde.sh @@ -5,4 +5,4 @@ ##================================================================================================== #!/bin/sh -sde64 -- $@ +sde64 -skx -- $@ diff --git a/doc/dev/dev_cmake.md b/doc/dev/dev_cmake.md new file mode 100644 index 0000000000..b00424452f --- /dev/null +++ b/doc/dev/dev_cmake.md @@ -0,0 +1,129 @@ +Building and Testing {#dev_cmake} +==================== + +@tableofcontents + +From now on, we make the assumption your Docker instance is running and that you're logged into +its interactive shell as per [the protocol previously defined](@ref dev_environment). +In this tutorial, we will go over the process to configure the tests and run them properly. + +@section dev_cmake_setup CMake setup + +First, you'd need to create a build directory and cd into it + +@verbatim +mkdir build_arch && cd build_arch +@endverbatim + +**EVE** provides a set of CMake toolchain files configured for each compiler present in the Docker +instance. You can simply use them to configure your CMake. If you want to pass additional options, +like specific architecture or optimization settings, you can use the `-DEVE_OPTIONS` CMake arguments. + +The following table provides the CMake command line used for our classic CI setup using the Ninja +generator. + +| Configuration | CMake command | +|----------------------|-------------------------------------------------------------------------------------------------------------------------| +| Emulated | cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.cmake -DEVE_OPTIONS='-DEVE_NO_SIMD' | +| X86_sse2 | cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.cmake -DEVE_OPTIONS='-msse2' | +| X86_sse2-asan | cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.asan.cmake -DEVE_OPTIONS='-msse2' | +| X86_sse4 | cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.cmake -DEVE_OPTIONS='-msse4' | +| X86_avx | cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.cmake -DEVE_OPTIONS='-mavx' | +| X86_avx2 | cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.cmake -DEVE_OPTIONS='-mavx2' | +| X86_fma | cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.cmake -DEVE_OPTIONS='-mavx2 -mfma' | +| X86_avx512 | cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.cmake -DEVE_OPTIONS='-march=skylake-avx512' | +| X86_avx512_no_native | cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.sde.cmake -DEVE_OPTIONS='-march=skylake-avx512' | +| Aarch64(arm-v8) | cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/gcc.aarch64.cmake | +| Arm (arm-v7) | cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/gcc.arm.cmake | + +Once run, your build folder should contain all the necessary artifact to compile and run **EVE** +test suite. + +@section dev_build_test Compiling EVE Unit Tests + +**EVE** provides a large number of test targets that are grouped by theme. Each of these themes +and tests with a theme can be compiled with a proper target. + +In term of options, we encourage you to use the `-DEVE_NO_FORCEINLINE` macro that prevents +costly optimization to be used during the compilation of tests. + +The following table list the main high-level themed target. + +| Target | Content | +|-------------------------------|-----------------------------------------------| +| `doc.exe` | Target for all documentation examples | +| `doc.core.exe` | Target for functions documentation examples | +| `examples.exe` | Target for all tutorials | +| `examples.algo.exe` | Target for algorithms related tutorials | +| `examples.oop.exe` | Target for UDT related tutorials | +| `unit.exe` | Target for all unit tests | +| `unit.algo.exe` | Target for standard algorithm unit tests | +| `unit.api.exe` | Target for base API unit tests | +| `unit.arch.exe` | Target for architecture detection unit tests | +| `unit.constant.exe` | Target for constant unit tests | +| `unit.internals.exe` | Target for internal components unit tests | +| `unit.memory.exe` | Target for memory handling unit tests | +| `unit.meta.exe` | Target for traits unit tests | +| `unit.real.exe` | Target for all functions unit tests | +| `unit.real.algorithm.exe` | Target for SIMD algorithms unit tests | +| `unit.real.combinatorial.exe` | Target for combinatorics functions unit tests | +| `unit.real.core.exe` | Target for arithmetic functions unit tests | +| `unit.real.elliptic.exe` | Target for elliptic functions unit tests | +| `unit.real.math.exe` | Target for math functions unit tests | +| `unit.real.polynomial.exe` | Target for polynomial functions unit tests | +| `unit.real.probas.exe` | Target for probability functions unit tests | +| `unit.real.special.exe` | Target for special functions unit tests | + +For example, the test for the `abs` function, which is a member of the arithmetic +module, can be compiled via: + +@verbatim +ninja unit.real.core.abs.exe +@endverbatim + +Once compiled, the test executable are located in the `unit` folder and can be run via: + +@verbatim +./unit/unit.real.core.abs.exe +@endverbatim + +The `unit.exe` target is very large and requires a comfortable amount of CPUs to be compiled in +parallel. + +@section dev_build_random Compiling EVE Random Tests + +Random tests run a given function over a samples of random values to test its relative precision. +The following table list the main high-level random target. + +| Target | Content | +|---------------------------------|-------------------------------------------------| +| `random.exe` | Target for all random tests | +| `random.algo.exe` | Target for standard algorithm random tests | +| `random.api.exe` | Target for base API random tests | +| `random.arch.exe` | Target for architecture detection random tests | +| `random.constant.exe` | Target for constant random tests | +| `random.internals.exe` | Target for internal components random tests | +| `random.memory.exe` | Target for memory handling random tests | +| `random.meta.exe` | Target for traits random tests | +| `random.real.exe` | Target for all functions random tests | +| `random.real.algorithm.exe` | Target for SIMD algorithms random tests | +| `random.real.combinatorial.exe` | Target for combinatorics functions random tests | +| `random.real.core.exe` | Target for arithmetic functions random tests | +| `random.real.elliptic.exe` | Target for elliptic functions random tests | +| `random.real.math.exe` | Target for math functions random tests | +| `random.real.polynomial.exe` | Target for polynomial functions random tests | +| `random.real.probas.exe` | Target for probability functions random tests | +| `random.real.special.exe` | Target for special functions random tests | + +For example, all the random tests for the `abs` function, which is a member of the arithmetic +module, can be compiled via: + +@verbatim +ninja random.real.core.abs.exe +@endverbatim + +Once compiled, the test executable are located in the `unit` folder and can be run via: + +@verbatim +./unit/unit.real.core.abs.exe +@endverbatim diff --git a/doc/dev/dev_environment.md b/doc/dev/dev_environment.md new file mode 100644 index 0000000000..b988c32de7 --- /dev/null +++ b/doc/dev/dev_environment.md @@ -0,0 +1,77 @@ +Development Environment {#dev_environment} +======================= + +@tableofcontents + +When adding feature or fixing bugs within **EVE**, you may want to locally test your code for a +non-trivial amount of architecture and instruction sets. As you may not have access to all the +compilers or hardware necessary, **EVE** continuous integration and testing environment can be +recreated locally. + +**EVE** use a [pre-configured Docker image](https://github.com/jfalcou/compilers) based on Ubuntu +that comes with preinstalled latest versions of g++ and clang compilers for x86, ARM, AARCH64 and +PowerPC. It is setup so that CI triggers works out of the box but also support manual usage. + +@section dev_docker_setup Docker setup + +First step is to install docker on your system. On most Linux, you can find docker in your +usual package manager. + +* On Ubuntu using snap: + @verbatim + sudo snap install docker + @endverbatim + +* on Arch Linux using pacman + @verbatim + sudo pacman -S docker + @endverbatim + +Depending on your system and privilege, you'll need to start the Docker service using the appropriate +command for your operating system. + +To check that your docker installation and setup are correct, run: + +@verbatim +docker run hello-world +@endverbatim + +This command will download a small docker image, run it and display some message that confirms the +proper installation. + +@section dev_docker_helper Running EVE docker + +Running **EVE** CI docker can be done by moving to **EVE** source folder than run the following +command: + +@verbatim +docker run -i -t -v${PWD}:${PWD} jfalcou/compilers:latest +@endverbatim + +This will give you acces to an interactive shell running inside the Docker Image. We strongly +advice to make a small Bash function that you can add to your bash profile to easily spin up +an instance of Docker. + +@verbatim +# .bashrc +dockhere() +{ + docker run -i -t -v${PWD}:${PWD} jfalcou/compilers:latest +} +@endverbatim + +From there, you can navigate to the source folder by `cd` into your folder: + +@verbatim +@:~/space/eve$ pwd # From eve directory +/home/dyarosh/space/eve +@:dockhere jfalcou/compilers:latest # Get docker with compilers +root@302ed6f6f4fa: # We are in docker in root +root@302ed6f6f4fa:/# cd /home/dyarosh/space/eve # Go back to eve directory +root@302ed6f6f4fa:/home/dyarosh/space/eve# # Done +@endverbatim + +From now on, we make the assumption your Docker instance is running and that you're logged into +its interactive shell. + +NExt step is [configuring CMake and compiling some tests](@ref dev_cmake) diff --git a/doc/doxystrap-footer.html b/doc/doxystrap-footer.html index cc827988f4..09995fb6fe 100644 --- a/doc/doxystrap-footer.html +++ b/doc/doxystrap-footer.html @@ -14,9 +14,7 @@ - + diff --git a/doc/page10_advanced_dev.md b/doc/page10_advanced_dev.md new file mode 100644 index 0000000000..e99eef7560 --- /dev/null +++ b/doc/page10_advanced_dev.md @@ -0,0 +1,9 @@ +EVE Development {#eve-dev} +=============== + +This sections explains some common practices and tools used to work within **EVE** source. +This is mostly reserved to advanced users that want to contribute to **EVE** by fixing bugs +or adding features. + +- \subpage dev_environment +- \subpage dev_cmake diff --git a/docs/html/changelog.html b/docs/html/changelog.html index 5b7289ed14..039571a014 100644 --- a/docs/html/changelog.html +++ b/docs/html/changelog.html @@ -160,8 +160,6 @@

- + diff --git a/docs/html/classes.html b/docs/html/classes.html index 23ee4239f9..226eb23319 100644 --- a/docs/html/classes.html +++ b/docs/html/classes.html @@ -180,8 +180,6 @@ - + diff --git a/docs/html/concepteve_1_1floating__real__scalar__value.html b/docs/html/concepteve_1_1floating__real__scalar__value.html index 91695e497f..bddf7d24bc 100644 --- a/docs/html/concepteve_1_1floating__real__scalar__value.html +++ b/docs/html/concepteve_1_1floating__real__scalar__value.html @@ -169,8 +169,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1floating__real__value.html b/docs/html/concepteve_1_1floating__real__value.html index 2731b54493..cc6e1d97c8 100644 --- a/docs/html/concepteve_1_1floating__real__value.html +++ b/docs/html/concepteve_1_1floating__real__value.html @@ -168,8 +168,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1floating__scalar__value.html b/docs/html/concepteve_1_1floating__scalar__value.html index 822e537f95..a497aa5d4e 100644 --- a/docs/html/concepteve_1_1floating__scalar__value.html +++ b/docs/html/concepteve_1_1floating__scalar__value.html @@ -169,8 +169,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1floating__value.html b/docs/html/concepteve_1_1floating__value.html index f7dc3e1da2..4b84304fbb 100644 --- a/docs/html/concepteve_1_1floating__value.html +++ b/docs/html/concepteve_1_1floating__value.html @@ -168,8 +168,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1generator.html b/docs/html/concepteve_1_1generator.html index 81803cc1de..ef6af20f27 100644 --- a/docs/html/concepteve_1_1generator.html +++ b/docs/html/concepteve_1_1generator.html @@ -166,8 +166,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1integral__real__scalar__value.html b/docs/html/concepteve_1_1integral__real__scalar__value.html index da9c595ff5..8bddddd940 100644 --- a/docs/html/concepteve_1_1integral__real__scalar__value.html +++ b/docs/html/concepteve_1_1integral__real__scalar__value.html @@ -169,8 +169,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1integral__real__value.html b/docs/html/concepteve_1_1integral__real__value.html index 49a0985786..8b0ab0d7fb 100644 --- a/docs/html/concepteve_1_1integral__real__value.html +++ b/docs/html/concepteve_1_1integral__real__value.html @@ -168,8 +168,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1integral__scalar__value.html b/docs/html/concepteve_1_1integral__scalar__value.html index 3f4441662e..f2b4512659 100644 --- a/docs/html/concepteve_1_1integral__scalar__value.html +++ b/docs/html/concepteve_1_1integral__scalar__value.html @@ -168,8 +168,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1integral__simd__value.html b/docs/html/concepteve_1_1integral__simd__value.html index 46e6a4ec8f..5a5861f095 100644 --- a/docs/html/concepteve_1_1integral__simd__value.html +++ b/docs/html/concepteve_1_1integral__simd__value.html @@ -169,8 +169,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1integral__value.html b/docs/html/concepteve_1_1integral__value.html index cbbc9cf921..6e9191ee81 100644 --- a/docs/html/concepteve_1_1integral__value.html +++ b/docs/html/concepteve_1_1integral__value.html @@ -169,8 +169,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1like.html b/docs/html/concepteve_1_1like.html index 2420ae2ac1..255eb1b44b 100644 --- a/docs/html/concepteve_1_1like.html +++ b/docs/html/concepteve_1_1like.html @@ -166,8 +166,6 @@

Concept definition

- + diff --git a/docs/html/concepteve_1_1logical__scalar__value.html b/docs/html/concepteve_1_1logical__scalar__value.html index dda2d402ed..1b65f02795 100644 --- a/docs/html/concepteve_1_1logical__scalar__value.html +++ b/docs/html/concepteve_1_1logical__scalar__value.html @@ -169,8 +169,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1logical__value.html b/docs/html/concepteve_1_1logical__value.html index 811b1c6305..73b6beabc1 100644 --- a/docs/html/concepteve_1_1logical__value.html +++ b/docs/html/concepteve_1_1logical__value.html @@ -168,8 +168,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1real__scalar__value.html b/docs/html/concepteve_1_1real__scalar__value.html index dc2b256fd5..a8ea836623 100644 --- a/docs/html/concepteve_1_1real__scalar__value.html +++ b/docs/html/concepteve_1_1real__scalar__value.html @@ -169,8 +169,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1real__value.html b/docs/html/concepteve_1_1real__value.html index a5cc880574..227c75a9e1 100644 --- a/docs/html/concepteve_1_1real__value.html +++ b/docs/html/concepteve_1_1real__value.html @@ -168,8 +168,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1scalar__value.html b/docs/html/concepteve_1_1scalar__value.html index f60a5766fb..72ef1d9a04 100644 --- a/docs/html/concepteve_1_1scalar__value.html +++ b/docs/html/concepteve_1_1scalar__value.html @@ -168,8 +168,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1signed__integral__scalar__value.html b/docs/html/concepteve_1_1signed__integral__scalar__value.html index 025ec5e24d..94033632fe 100644 --- a/docs/html/concepteve_1_1signed__integral__scalar__value.html +++ b/docs/html/concepteve_1_1signed__integral__scalar__value.html @@ -168,8 +168,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1signed__integral__value.html b/docs/html/concepteve_1_1signed__integral__value.html index ed27b7e6e2..93bfb9e731 100644 --- a/docs/html/concepteve_1_1signed__integral__value.html +++ b/docs/html/concepteve_1_1signed__integral__value.html @@ -168,8 +168,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1signed__scalar__value.html b/docs/html/concepteve_1_1signed__scalar__value.html index 20c0ba26d8..3ad51bd5c6 100644 --- a/docs/html/concepteve_1_1signed__scalar__value.html +++ b/docs/html/concepteve_1_1signed__scalar__value.html @@ -169,8 +169,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1signed__value.html b/docs/html/concepteve_1_1signed__value.html index d0730ccace..88579afcd2 100644 --- a/docs/html/concepteve_1_1signed__value.html +++ b/docs/html/concepteve_1_1signed__value.html @@ -169,8 +169,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1simd__value.html b/docs/html/concepteve_1_1simd__value.html index 58e244fbde..257d577c87 100644 --- a/docs/html/concepteve_1_1simd__value.html +++ b/docs/html/concepteve_1_1simd__value.html @@ -169,8 +169,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1unsigned__scalar__value.html b/docs/html/concepteve_1_1unsigned__scalar__value.html index fe2a86a64d..15b8778c84 100644 --- a/docs/html/concepteve_1_1unsigned__scalar__value.html +++ b/docs/html/concepteve_1_1unsigned__scalar__value.html @@ -168,8 +168,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1unsigned__value.html b/docs/html/concepteve_1_1unsigned__value.html index f55342ccc7..fa9c5fa5d1 100644 --- a/docs/html/concepteve_1_1unsigned__value.html +++ b/docs/html/concepteve_1_1unsigned__value.html @@ -168,8 +168,6 @@

Examples

- + diff --git a/docs/html/concepteve_1_1value.html b/docs/html/concepteve_1_1value.html index 71c71939d9..dc8baccbdd 100644 --- a/docs/html/concepteve_1_1value.html +++ b/docs/html/concepteve_1_1value.html @@ -171,8 +171,6 @@

Examples

- + diff --git a/docs/html/concepts.html b/docs/html/concepts.html index 7dde010a07..f5c0688831 100644 --- a/docs/html/concepts.html +++ b/docs/html/concepts.html @@ -215,8 +215,6 @@ - + diff --git a/docs/html/dev_cmake.html b/docs/html/dev_cmake.html new file mode 100644 index 0000000000..1dab1b671b --- /dev/null +++ b/docs/html/dev_cmake.html @@ -0,0 +1,303 @@ + + + + + + + + + E.V.E: Building and Testing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ + + + + + + +
+
E.V.E +  0.1-beta +
+
+
+
+
+
+
+ + + + + + + +
+
+ + +
+ +
+ + +
+
+
Building and Testing
+
+
+ +

+

From now on, we make the assumption your Docker instance is running and that you're logged into its interactive shell as per the protocol previously defined. In this tutorial, we will go over the process to configure the tests and run them properly.

+

+CMake setup

+

First, you'd need to create a build directory and cd into it

+
mkdir build_arch && cd build_arch
+

EVE provides a set of CMake toolchain files configured for each compiler present in the Docker instance. You can simply use them to configure your CMake. If you want to pass additional options, like specific architecture or optimization settings, you can use the -DEVE_OPTIONS CMake arguments.

+

The following table provides the CMake command line used for our classic CI setup using the Ninja generator.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Configuration CMake command
Emulated cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.cmake -DEVE_OPTIONS='-DEVE_NO_SIMD'
X86_sse2 cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.cmake -DEVE_OPTIONS='-msse2'
X86_sse2-asan cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.asan.cmake -DEVE_OPTIONS='-msse2'
X86_sse4 cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.cmake -DEVE_OPTIONS='-msse4'
X86_avx cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.cmake -DEVE_OPTIONS='-mavx'
X86_avx2 cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.cmake -DEVE_OPTIONS='-mavx2'
X86_fma cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.cmake -DEVE_OPTIONS='-mavx2 -mfma'
X86_avx512 cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.cmake -DEVE_OPTIONS='-march=skylake-avx512'
X86_avx512_no_native cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/clang.x86.sde.cmake -DEVE_OPTIONS='-march=skylake-avx512'
Aarch64(arm-v8) cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/gcc.aarch64.cmake
Arm (arm-v7) cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/gcc.arm.cmake
+

Once run, your build folder should contain all the necessary artifact to compile and run EVE test suite.

+

+Compiling EVE Unit Tests

+

EVE provides a large number of test targets that are grouped by theme. Each of these themes and tests with a theme can be compiled with a proper target.

+

In term of options, we encourage you to use the -DEVE_NO_FORCEINLINE macro that prevents costly optimization to be used during the compilation of tests.

+

The following table list the main high-level themed target.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Target Content
doc.exe Target for all documentation examples
doc.core.exe Target for functions documentation examples
examples.exe Target for all tutorials
examples.algo.exe Target for algorithms related tutorials
examples.oop.exe Target for UDT related tutorials
unit.exe Target for all unit tests
unit.algo.exe Target for standard algorithm unit tests
unit.api.exe Target for base API unit tests
unit.arch.exe Target for architecture detection unit tests
unit.constant.exe Target for constant unit tests
unit.internals.exe Target for internal components unit tests
unit.memory.exe Target for memory handling unit tests
unit.meta.exe Target for traits unit tests
unit.real.exe Target for all functions unit tests
unit.real.algorithm.exe Target for SIMD algorithms unit tests
unit.real.combinatorial.exe Target for combinatorics functions unit tests
unit.real.core.exe Target for arithmetic functions unit tests
unit.real.elliptic.exe Target for elliptic functions unit tests
unit.real.math.exe Target for math functions unit tests
unit.real.polynomial.exe Target for polynomial functions unit tests
unit.real.probas.exe Target for probability functions unit tests
unit.real.special.exe Target for special functions unit tests
+

For example, the test for the abs function, which is a member of the arithmetic module, can be compiled via:

+
ninja unit.real.core.abs.exe
+

Once compiled, the test executable are located in the unit folder and can be run via:

+
./unit/unit.real.core.abs.exe
+

The unit.exe target is very large and requires a comfortable amount of CPUs to be compiled in parallel.

+

+Compiling EVE Random Tests

+

Random tests run a given function over a samples of random values to test its relative precision. The following table list the main high-level random target.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Target Content
random.exe Target for all random tests
random.algo.exe Target for standard algorithm random tests
random.api.exe Target for base API random tests
random.arch.exe Target for architecture detection random tests
random.constant.exe Target for constant random tests
random.internals.exe Target for internal components random tests
random.memory.exe Target for memory handling random tests
random.meta.exe Target for traits random tests
random.real.exe Target for all functions random tests
random.real.algorithm.exe Target for SIMD algorithms random tests
random.real.combinatorial.exe Target for combinatorics functions random tests
random.real.core.exe Target for arithmetic functions random tests
random.real.elliptic.exe Target for elliptic functions random tests
random.real.math.exe Target for math functions random tests
random.real.polynomial.exe Target for polynomial functions random tests
random.real.probas.exe Target for probability functions random tests
random.real.special.exe Target for special functions random tests
+

For example, all the random tests for the abs function, which is a member of the arithmetic module, can be compiled via:

+
ninja random.real.core.abs.exe
+

Once compiled, the test executable are located in the unit folder and can be run via:

+
./unit/unit.real.core.abs.exe
+
+
+ + +
+
+
+
+
+ + + diff --git a/docs/html/dev_environment.html b/docs/html/dev_environment.html new file mode 100644 index 0000000000..a1bc8e62a0 --- /dev/null +++ b/docs/html/dev_environment.html @@ -0,0 +1,197 @@ + + + + + + + + + E.V.E: Development Environment + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ + + + + + + +
+
E.V.E +  0.1-beta +
+
+
+
+
+
+
+ + + + + + + +
+
+ + +
+ +
+ + +
+
+
Development Environment
+
+
+

Table of Contents

+ +
+

+

When adding feature or fixing bugs within EVE, you may want to locally test your code for a non-trivial amount of architecture and instruction sets. As you may not have access to all the compilers or hardware necessary, EVE continuous integration and testing environment can be recreated locally.

+

EVE use a pre-configured Docker image based on Ubuntu that comes with preinstalled latest versions of g++ and clang compilers for x86, ARM, AARCH64 and PowerPC. It is setup so that CI triggers works out of the box but also support manual usage.

+

+Docker setup

+

First step is to install docker on your system. On most Linux, you can find docker in your usual package manager.

+
    +
  • On Ubuntu using snap:
      sudo snap install docker
  • +
  • on Arch Linux using pacman
      sudo pacman -S docker
  • +
+

Depending on your system and privilege, you'll need to start the Docker service using the appropriate command for your operating system.

+

To check that your docker installation and setup are correct, run:

+
docker run hello-world
+

This command will download a small docker image, run it and display some message that confirms the proper installation.

+

+Running EVE docker

+

Running EVE CI docker can be done by moving to EVE source folder than run the following command:

+
docker run -i -t -v${PWD}:${PWD} jfalcou/compilers:latest
+

This will give you acces to an interactive shell running inside the Docker Image. We strongly advice to make a small Bash function that you can add to your bash profile to easily spin up an instance of Docker.

+
# .bashrc
+dockhere()
+{
+  docker run -i -t -v${PWD}:${PWD} jfalcou/compilers:latest
+}
+

From there, you can navigate to the source folder by cd into your folder:

+
@:~/space/eve$ pwd                              # From eve directory
+/home/dyarosh/space/eve
+@:dockhere jfalcou/compilers:latest             # Get docker with compilers
+root@302ed6f6f4fa:                              # We are in docker in root
+root@302ed6f6f4fa:/# cd /home/dyarosh/space/eve # Go back to eve directory
+root@302ed6f6f4fa:/home/dyarosh/space/eve#      # Done
+

From now on, we make the assumption your Docker instance is running and that you're logged into its interactive shell.

+

NExt step is configuring CMake and compiling some tests

+
+
+ + +
+
+
+
+
+ + + diff --git a/docs/html/dir_1c24a8e0a9969000d5e6cf4b40ac2aca.html b/docs/html/dir_1c24a8e0a9969000d5e6cf4b40ac2aca.html index fae23a2c5b..c92deb798a 100644 --- a/docs/html/dir_1c24a8e0a9969000d5e6cf4b40ac2aca.html +++ b/docs/html/dir_1c24a8e0a9969000d5e6cf4b40ac2aca.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_1ed588ddf3088d2ccc1d04e08cb0e4aa.html b/docs/html/dir_1ed588ddf3088d2ccc1d04e08cb0e4aa.html index e872374832..792d80d72d 100644 --- a/docs/html/dir_1ed588ddf3088d2ccc1d04e08cb0e4aa.html +++ b/docs/html/dir_1ed588ddf3088d2ccc1d04e08cb0e4aa.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_234d97a4499affa0e6d8bc647adb0e3b.html b/docs/html/dir_234d97a4499affa0e6d8bc647adb0e3b.html index a2c550bf25..3b8738e5a7 100644 --- a/docs/html/dir_234d97a4499affa0e6d8bc647adb0e3b.html +++ b/docs/html/dir_234d97a4499affa0e6d8bc647adb0e3b.html @@ -150,8 +150,6 @@ - + diff --git a/docs/html/dir_281fee1ba422d6c956d5c88c8b2b73a9.html b/docs/html/dir_281fee1ba422d6c956d5c88c8b2b73a9.html index 0a3bfd5f10..e6c71108ab 100644 --- a/docs/html/dir_281fee1ba422d6c956d5c88c8b2b73a9.html +++ b/docs/html/dir_281fee1ba422d6c956d5c88c8b2b73a9.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_30ec1e017e39e2f76d569858730b2231.html b/docs/html/dir_30ec1e017e39e2f76d569858730b2231.html index 00572d7835..b6fb8ca7bd 100644 --- a/docs/html/dir_30ec1e017e39e2f76d569858730b2231.html +++ b/docs/html/dir_30ec1e017e39e2f76d569858730b2231.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_320065cbf09a252b8245d7f1a35b4a80.html b/docs/html/dir_320065cbf09a252b8245d7f1a35b4a80.html index a30cad6f96..7d0fb8fc8f 100644 --- a/docs/html/dir_320065cbf09a252b8245d7f1a35b4a80.html +++ b/docs/html/dir_320065cbf09a252b8245d7f1a35b4a80.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_37aeed337be603fe9d2e51217e93bd20.html b/docs/html/dir_37aeed337be603fe9d2e51217e93bd20.html index 96004aea33..ebe0015b0c 100644 --- a/docs/html/dir_37aeed337be603fe9d2e51217e93bd20.html +++ b/docs/html/dir_37aeed337be603fe9d2e51217e93bd20.html @@ -150,8 +150,6 @@ - + diff --git a/docs/html/dir_3a4f1c07e90aab9e689841d4c42f1312.html b/docs/html/dir_3a4f1c07e90aab9e689841d4c42f1312.html index 2ebcdea099..4bc919630c 100644 --- a/docs/html/dir_3a4f1c07e90aab9e689841d4c42f1312.html +++ b/docs/html/dir_3a4f1c07e90aab9e689841d4c42f1312.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_3fda8a6c015e3a65bb9134d2b1083a1c.html b/docs/html/dir_3fda8a6c015e3a65bb9134d2b1083a1c.html index 17cf1fd0cf..ea21fb9239 100644 --- a/docs/html/dir_3fda8a6c015e3a65bb9134d2b1083a1c.html +++ b/docs/html/dir_3fda8a6c015e3a65bb9134d2b1083a1c.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_51164585c9bee5c905bd8bfdee809c0d.html b/docs/html/dir_51164585c9bee5c905bd8bfdee809c0d.html index 072c29fea5..f1dab48d33 100644 --- a/docs/html/dir_51164585c9bee5c905bd8bfdee809c0d.html +++ b/docs/html/dir_51164585c9bee5c905bd8bfdee809c0d.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_5547dbfcbc25514aed00098a5285fc32.html b/docs/html/dir_5547dbfcbc25514aed00098a5285fc32.html index 4f189451c6..dcf5c1974a 100644 --- a/docs/html/dir_5547dbfcbc25514aed00098a5285fc32.html +++ b/docs/html/dir_5547dbfcbc25514aed00098a5285fc32.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_6553ba070b22c4303be8db3f8727a19c.html b/docs/html/dir_6553ba070b22c4303be8db3f8727a19c.html index 5c928b357b..1d0985dca5 100644 --- a/docs/html/dir_6553ba070b22c4303be8db3f8727a19c.html +++ b/docs/html/dir_6553ba070b22c4303be8db3f8727a19c.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_75511718cc874ffc7aae4c68d9dc7621.html b/docs/html/dir_75511718cc874ffc7aae4c68d9dc7621.html index 1c769232dd..0d141436d8 100644 --- a/docs/html/dir_75511718cc874ffc7aae4c68d9dc7621.html +++ b/docs/html/dir_75511718cc874ffc7aae4c68d9dc7621.html @@ -150,8 +150,6 @@ - + diff --git a/docs/html/dir_8943b2310bd1ef351bddc5851098d957.html b/docs/html/dir_8943b2310bd1ef351bddc5851098d957.html index f5e5efb38b..b3b359d669 100644 --- a/docs/html/dir_8943b2310bd1ef351bddc5851098d957.html +++ b/docs/html/dir_8943b2310bd1ef351bddc5851098d957.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_8ed9ce8163c2fa730b3d7a8e89a07d67.html b/docs/html/dir_8ed9ce8163c2fa730b3d7a8e89a07d67.html index 1e7b61b514..a9461abb08 100644 --- a/docs/html/dir_8ed9ce8163c2fa730b3d7a8e89a07d67.html +++ b/docs/html/dir_8ed9ce8163c2fa730b3d7a8e89a07d67.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_94831889b0f6b3039e3a418222c30cc0.html b/docs/html/dir_94831889b0f6b3039e3a418222c30cc0.html new file mode 100644 index 0000000000..2b83943221 --- /dev/null +++ b/docs/html/dir_94831889b0f6b3039e3a418222c30cc0.html @@ -0,0 +1,151 @@ + + + + + + + + + E.V.E: /large-hdd/dev/project/eve/doc/dev Directory Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ + + + + + + +
+
E.V.E +  0.1-beta +
+
+
+
+
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
dev Directory Reference
+
+
+
+ + +
+
+
+
+
+ + + diff --git a/docs/html/dir_988a1254be8fba1aadf0177db09d6475.html b/docs/html/dir_988a1254be8fba1aadf0177db09d6475.html index 72c091fc13..5679e1d2ee 100644 --- a/docs/html/dir_988a1254be8fba1aadf0177db09d6475.html +++ b/docs/html/dir_988a1254be8fba1aadf0177db09d6475.html @@ -150,8 +150,6 @@ - + diff --git a/docs/html/dir_9b7ec5371ade1847a7835e0d6417f3f8.html b/docs/html/dir_9b7ec5371ade1847a7835e0d6417f3f8.html index 228d57cb18..c879b7bce2 100644 --- a/docs/html/dir_9b7ec5371ade1847a7835e0d6417f3f8.html +++ b/docs/html/dir_9b7ec5371ade1847a7835e0d6417f3f8.html @@ -150,8 +150,6 @@ - + diff --git a/docs/html/dir_c36944f1d2289d5539949f364a5218fe.html b/docs/html/dir_c36944f1d2289d5539949f364a5218fe.html index 1fa6c4f554..5fa37f0451 100644 --- a/docs/html/dir_c36944f1d2289d5539949f364a5218fe.html +++ b/docs/html/dir_c36944f1d2289d5539949f364a5218fe.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_cb0de163ebfece1c7efff98228d0edb7.html b/docs/html/dir_cb0de163ebfece1c7efff98228d0edb7.html index 7a2106d2aa..5ac4107b13 100644 --- a/docs/html/dir_cb0de163ebfece1c7efff98228d0edb7.html +++ b/docs/html/dir_cb0de163ebfece1c7efff98228d0edb7.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_cd8e927fe694829b989fe827ab9f8947.html b/docs/html/dir_cd8e927fe694829b989fe827ab9f8947.html index 86068ccb5c..e03caadd29 100644 --- a/docs/html/dir_cd8e927fe694829b989fe827ab9f8947.html +++ b/docs/html/dir_cd8e927fe694829b989fe827ab9f8947.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_d2f7a3271b7c5130e4547aaeebd87df5.html b/docs/html/dir_d2f7a3271b7c5130e4547aaeebd87df5.html index d3a2d97415..738d226296 100644 --- a/docs/html/dir_d2f7a3271b7c5130e4547aaeebd87df5.html +++ b/docs/html/dir_d2f7a3271b7c5130e4547aaeebd87df5.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_df6ffc539d4f51e3ba2bdf4748969053.html b/docs/html/dir_df6ffc539d4f51e3ba2bdf4748969053.html index 7d762b90bb..790b4b1383 100644 --- a/docs/html/dir_df6ffc539d4f51e3ba2bdf4748969053.html +++ b/docs/html/dir_df6ffc539d4f51e3ba2bdf4748969053.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_e68e8157741866f444e17edd764ebbae.html b/docs/html/dir_e68e8157741866f444e17edd764ebbae.html index 9b66ffc8b0..c74be95373 100644 --- a/docs/html/dir_e68e8157741866f444e17edd764ebbae.html +++ b/docs/html/dir_e68e8157741866f444e17edd764ebbae.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_eeaf2847f2723dd9e9f63c6b79ca78dd.html b/docs/html/dir_eeaf2847f2723dd9e9f63c6b79ca78dd.html index 2a3676d4ae..3bff59487f 100644 --- a/docs/html/dir_eeaf2847f2723dd9e9f63c6b79ca78dd.html +++ b/docs/html/dir_eeaf2847f2723dd9e9f63c6b79ca78dd.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_f82da1145c84decfda832718418cc02b.html b/docs/html/dir_f82da1145c84decfda832718418cc02b.html index e9430f412c..061956deca 100644 --- a/docs/html/dir_f82da1145c84decfda832718418cc02b.html +++ b/docs/html/dir_f82da1145c84decfda832718418cc02b.html @@ -146,8 +146,6 @@ - + diff --git a/docs/html/dir_ffb8f18a04f3ce8b5873e023bd1c6644.html b/docs/html/dir_ffb8f18a04f3ce8b5873e023bd1c6644.html index ded54a17b5..f3fabbe03e 100644 --- a/docs/html/dir_ffb8f18a04f3ce8b5873e023bd1c6644.html +++ b/docs/html/dir_ffb8f18a04f3ce8b5873e023bd1c6644.html @@ -150,8 +150,6 @@ - + diff --git a/docs/html/eve-dev.html b/docs/html/eve-dev.html new file mode 100644 index 0000000000..d20d287a87 --- /dev/null +++ b/docs/html/eve-dev.html @@ -0,0 +1,161 @@ + + + + + + + + + E.V.E: EVE Development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ + + + + + + +
+
E.V.E +  0.1-beta +
+
+
+
+
+
+
+ + + + + + + +
+
+ + +
+ +
+ +
+
+
EVE Development
+
+
+

+

This sections explains some common practices and tools used to work within EVE source. This is mostly reserved to advanced users that want to contribute to EVE by fixing bugs or adding features.

+ +
+
+ + +
+
+
+
+
+ + + diff --git a/docs/html/glossary.html b/docs/html/glossary.html index 50d8e0263d..6299c7dae8 100644 --- a/docs/html/glossary.html +++ b/docs/html/glossary.html @@ -156,8 +156,6 @@ - + diff --git a/docs/html/glossary_properties.html b/docs/html/glossary_properties.html index 0491f35563..79234fc74d 100644 --- a/docs/html/glossary_properties.html +++ b/docs/html/glossary_properties.html @@ -173,8 +173,6 @@

- + diff --git a/docs/html/glossary_semantic.html b/docs/html/glossary_semantic.html index b7b5fc731b..9b71cba3ac 100644 --- a/docs/html/glossary_semantic.html +++ b/docs/html/glossary_semantic.html @@ -223,8 +223,6 @@

- + diff --git a/docs/html/group__arithmetic.html b/docs/html/group__arithmetic.html index 97ffb389f7..8433edc574 100644 --- a/docs/html/group__arithmetic.html +++ b/docs/html/group__arithmetic.html @@ -317,8 +317,6 @@ - + diff --git a/docs/html/group__arithmetic_ga074ab3f337c7af4c8d8cb430ac4e1cc5.html b/docs/html/group__arithmetic_ga074ab3f337c7af4c8d8cb430ac4e1cc5.html index ee90888dcc..2fbe95fbf0 100644 --- a/docs/html/group__arithmetic_ga074ab3f337c7af4c8d8cb430ac4e1cc5.html +++ b/docs/html/group__arithmetic_ga074ab3f337c7af4c8d8cb430ac4e1cc5.html @@ -679,8 +679,6 @@

- + diff --git a/docs/html/group__arithmetic_ga0cac72b6f927ba13a67764846899b535.html b/docs/html/group__arithmetic_ga0cac72b6f927ba13a67764846899b535.html index a5fe551956..1034fd1f1e 100644 --- a/docs/html/group__arithmetic_ga0cac72b6f927ba13a67764846899b535.html +++ b/docs/html/group__arithmetic_ga0cac72b6f927ba13a67764846899b535.html @@ -675,8 +675,6 @@

- + diff --git a/docs/html/group__arithmetic_ga13ddd05c1c516674e73d2ed018fa5d5a.html b/docs/html/group__arithmetic_ga13ddd05c1c516674e73d2ed018fa5d5a.html index 084580ac7e..d10e552511 100644 --- a/docs/html/group__arithmetic_ga13ddd05c1c516674e73d2ed018fa5d5a.html +++ b/docs/html/group__arithmetic_ga13ddd05c1c516674e73d2ed018fa5d5a.html @@ -665,8 +665,6 @@

- + diff --git a/docs/html/group__arithmetic_ga166acc1f0809dd5181999e09379c8dbe.html b/docs/html/group__arithmetic_ga166acc1f0809dd5181999e09379c8dbe.html index f06583bb91..7580e221b0 100644 --- a/docs/html/group__arithmetic_ga166acc1f0809dd5181999e09379c8dbe.html +++ b/docs/html/group__arithmetic_ga166acc1f0809dd5181999e09379c8dbe.html @@ -683,8 +683,6 @@

- + diff --git a/docs/html/group__arithmetic_ga1d52fbcf5ca3bd73745898c1eca2072e.html b/docs/html/group__arithmetic_ga1d52fbcf5ca3bd73745898c1eca2072e.html index babf2972c9..671c54b592 100644 --- a/docs/html/group__arithmetic_ga1d52fbcf5ca3bd73745898c1eca2072e.html +++ b/docs/html/group__arithmetic_ga1d52fbcf5ca3bd73745898c1eca2072e.html @@ -682,8 +682,6 @@

- + diff --git a/docs/html/group__arithmetic_ga1f3f9f62c04251ff83111a058c2e64b9.html b/docs/html/group__arithmetic_ga1f3f9f62c04251ff83111a058c2e64b9.html index b73c382e53..4b1612f8dc 100644 --- a/docs/html/group__arithmetic_ga1f3f9f62c04251ff83111a058c2e64b9.html +++ b/docs/html/group__arithmetic_ga1f3f9f62c04251ff83111a058c2e64b9.html @@ -670,8 +670,6 @@

- + diff --git a/docs/html/group__arithmetic_ga22a402bb65f6328ecd349368c0f8fe4d.html b/docs/html/group__arithmetic_ga22a402bb65f6328ecd349368c0f8fe4d.html index e0d6e7b296..7cf687eac2 100644 --- a/docs/html/group__arithmetic_ga22a402bb65f6328ecd349368c0f8fe4d.html +++ b/docs/html/group__arithmetic_ga22a402bb65f6328ecd349368c0f8fe4d.html @@ -658,8 +658,6 @@

- + diff --git a/docs/html/group__arithmetic_ga22a598ef861dbecf0613706ecb60c7fb.html b/docs/html/group__arithmetic_ga22a598ef861dbecf0613706ecb60c7fb.html index 602a96631f..832c04ae55 100644 --- a/docs/html/group__arithmetic_ga22a598ef861dbecf0613706ecb60c7fb.html +++ b/docs/html/group__arithmetic_ga22a598ef861dbecf0613706ecb60c7fb.html @@ -658,8 +658,6 @@

- + diff --git a/docs/html/group__arithmetic_ga2d39b164847cc7f9beaf56659102ed94.html b/docs/html/group__arithmetic_ga2d39b164847cc7f9beaf56659102ed94.html index 54c08ec481..cf693e7de2 100644 --- a/docs/html/group__arithmetic_ga2d39b164847cc7f9beaf56659102ed94.html +++ b/docs/html/group__arithmetic_ga2d39b164847cc7f9beaf56659102ed94.html @@ -689,8 +689,6 @@

- + diff --git a/docs/html/group__arithmetic_ga332395d365c5e31c1fbd8bf6cd62aaa3.html b/docs/html/group__arithmetic_ga332395d365c5e31c1fbd8bf6cd62aaa3.html index a2f4d37d7a..947e207c70 100644 --- a/docs/html/group__arithmetic_ga332395d365c5e31c1fbd8bf6cd62aaa3.html +++ b/docs/html/group__arithmetic_ga332395d365c5e31c1fbd8bf6cd62aaa3.html @@ -642,8 +642,6 @@

- + diff --git a/docs/html/group__arithmetic_ga3724675648acb38bcb3008a732d14c64.html b/docs/html/group__arithmetic_ga3724675648acb38bcb3008a732d14c64.html index 7b5d0feb1f..a660c63a63 100644 --- a/docs/html/group__arithmetic_ga3724675648acb38bcb3008a732d14c64.html +++ b/docs/html/group__arithmetic_ga3724675648acb38bcb3008a732d14c64.html @@ -669,8 +669,6 @@

- + diff --git a/docs/html/group__arithmetic_ga386ab1703063915f4b07a18314626ace.html b/docs/html/group__arithmetic_ga386ab1703063915f4b07a18314626ace.html index 2a2f912bb0..88a15c2229 100644 --- a/docs/html/group__arithmetic_ga386ab1703063915f4b07a18314626ace.html +++ b/docs/html/group__arithmetic_ga386ab1703063915f4b07a18314626ace.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__arithmetic_ga39f118f0d4e80751556b9252dd9c7f3d.html b/docs/html/group__arithmetic_ga39f118f0d4e80751556b9252dd9c7f3d.html index 2b5420b1af..0f106e5d28 100644 --- a/docs/html/group__arithmetic_ga39f118f0d4e80751556b9252dd9c7f3d.html +++ b/docs/html/group__arithmetic_ga39f118f0d4e80751556b9252dd9c7f3d.html @@ -689,8 +689,6 @@

- + diff --git a/docs/html/group__arithmetic_ga3da1ad6fd04f08ac14cbe0ff478b6951.html b/docs/html/group__arithmetic_ga3da1ad6fd04f08ac14cbe0ff478b6951.html index c6c83773e6..91d75c8e61 100644 --- a/docs/html/group__arithmetic_ga3da1ad6fd04f08ac14cbe0ff478b6951.html +++ b/docs/html/group__arithmetic_ga3da1ad6fd04f08ac14cbe0ff478b6951.html @@ -651,8 +651,6 @@

- + diff --git a/docs/html/group__arithmetic_ga42fa342353439f0b23e8fab241eecdfc.html b/docs/html/group__arithmetic_ga42fa342353439f0b23e8fab241eecdfc.html index 5c1c77941f..92ddfc5b3c 100644 --- a/docs/html/group__arithmetic_ga42fa342353439f0b23e8fab241eecdfc.html +++ b/docs/html/group__arithmetic_ga42fa342353439f0b23e8fab241eecdfc.html @@ -665,8 +665,6 @@

- + diff --git a/docs/html/group__arithmetic_ga43ce3760cd377286d328b640fd01549b.html b/docs/html/group__arithmetic_ga43ce3760cd377286d328b640fd01549b.html index f933af13cb..d8abde381c 100644 --- a/docs/html/group__arithmetic_ga43ce3760cd377286d328b640fd01549b.html +++ b/docs/html/group__arithmetic_ga43ce3760cd377286d328b640fd01549b.html @@ -679,8 +679,6 @@

- + diff --git a/docs/html/group__arithmetic_ga4e27a35e809af26649f8591ebfc48590.html b/docs/html/group__arithmetic_ga4e27a35e809af26649f8591ebfc48590.html index e9474e000c..dd9c5d55e5 100644 --- a/docs/html/group__arithmetic_ga4e27a35e809af26649f8591ebfc48590.html +++ b/docs/html/group__arithmetic_ga4e27a35e809af26649f8591ebfc48590.html @@ -684,8 +684,6 @@

- + diff --git a/docs/html/group__arithmetic_ga4f4ca543d5f16fa535a0307128ec27aa.html b/docs/html/group__arithmetic_ga4f4ca543d5f16fa535a0307128ec27aa.html index d427797f93..dd41df7b35 100644 --- a/docs/html/group__arithmetic_ga4f4ca543d5f16fa535a0307128ec27aa.html +++ b/docs/html/group__arithmetic_ga4f4ca543d5f16fa535a0307128ec27aa.html @@ -679,8 +679,6 @@

- + diff --git a/docs/html/group__arithmetic_ga51432e6f8f1e6386e37b58e32183bcc4.html b/docs/html/group__arithmetic_ga51432e6f8f1e6386e37b58e32183bcc4.html index 095cddbc7f..736a379852 100644 --- a/docs/html/group__arithmetic_ga51432e6f8f1e6386e37b58e32183bcc4.html +++ b/docs/html/group__arithmetic_ga51432e6f8f1e6386e37b58e32183bcc4.html @@ -664,8 +664,6 @@

- + diff --git a/docs/html/group__arithmetic_ga52e358ea1c9b4df51da813110fd09a30.html b/docs/html/group__arithmetic_ga52e358ea1c9b4df51da813110fd09a30.html index d1cda832ed..134109ee76 100644 --- a/docs/html/group__arithmetic_ga52e358ea1c9b4df51da813110fd09a30.html +++ b/docs/html/group__arithmetic_ga52e358ea1c9b4df51da813110fd09a30.html @@ -683,8 +683,6 @@

- + diff --git a/docs/html/group__arithmetic_ga5520218c452db7b34e883bf0f7a14488.html b/docs/html/group__arithmetic_ga5520218c452db7b34e883bf0f7a14488.html index f460b0e3e9..00403484eb 100644 --- a/docs/html/group__arithmetic_ga5520218c452db7b34e883bf0f7a14488.html +++ b/docs/html/group__arithmetic_ga5520218c452db7b34e883bf0f7a14488.html @@ -661,8 +661,6 @@

- + diff --git a/docs/html/group__arithmetic_ga596c156a6748b0fd395fa08f28e66b7f.html b/docs/html/group__arithmetic_ga596c156a6748b0fd395fa08f28e66b7f.html index 2e976510f2..bcccc6f510 100644 --- a/docs/html/group__arithmetic_ga596c156a6748b0fd395fa08f28e66b7f.html +++ b/docs/html/group__arithmetic_ga596c156a6748b0fd395fa08f28e66b7f.html @@ -689,8 +689,6 @@

- + diff --git a/docs/html/group__arithmetic_ga5fd9c911ac5d067dc2d7b6cd819b05a9.html b/docs/html/group__arithmetic_ga5fd9c911ac5d067dc2d7b6cd819b05a9.html index ed0562826f..76ae21223d 100644 --- a/docs/html/group__arithmetic_ga5fd9c911ac5d067dc2d7b6cd819b05a9.html +++ b/docs/html/group__arithmetic_ga5fd9c911ac5d067dc2d7b6cd819b05a9.html @@ -689,8 +689,6 @@

- + diff --git a/docs/html/group__arithmetic_ga66698fa1c0740a501e7a6f90c7813cec.html b/docs/html/group__arithmetic_ga66698fa1c0740a501e7a6f90c7813cec.html index 12acfd1474..cc35e79fc0 100644 --- a/docs/html/group__arithmetic_ga66698fa1c0740a501e7a6f90c7813cec.html +++ b/docs/html/group__arithmetic_ga66698fa1c0740a501e7a6f90c7813cec.html @@ -655,8 +655,6 @@

- + diff --git a/docs/html/group__arithmetic_ga667bad71b5b7dc2ffffb565f8a4cf401.html b/docs/html/group__arithmetic_ga667bad71b5b7dc2ffffb565f8a4cf401.html index 624c1851cd..7908cc4ccb 100644 --- a/docs/html/group__arithmetic_ga667bad71b5b7dc2ffffb565f8a4cf401.html +++ b/docs/html/group__arithmetic_ga667bad71b5b7dc2ffffb565f8a4cf401.html @@ -689,8 +689,6 @@

- + diff --git a/docs/html/group__arithmetic_ga6745422ee3727af1a6e34182e8efbcb7.html b/docs/html/group__arithmetic_ga6745422ee3727af1a6e34182e8efbcb7.html index 88872ced4f..df4d476962 100644 --- a/docs/html/group__arithmetic_ga6745422ee3727af1a6e34182e8efbcb7.html +++ b/docs/html/group__arithmetic_ga6745422ee3727af1a6e34182e8efbcb7.html @@ -658,8 +658,6 @@

- + diff --git a/docs/html/group__arithmetic_ga677dabc1ce72bb1de0bf181b322aa8b6.html b/docs/html/group__arithmetic_ga677dabc1ce72bb1de0bf181b322aa8b6.html index 5061836207..44066c5a0a 100644 --- a/docs/html/group__arithmetic_ga677dabc1ce72bb1de0bf181b322aa8b6.html +++ b/docs/html/group__arithmetic_ga677dabc1ce72bb1de0bf181b322aa8b6.html @@ -653,8 +653,6 @@

- + diff --git a/docs/html/group__arithmetic_ga7d02a108e868c1deaa0143f6377c7c3f.html b/docs/html/group__arithmetic_ga7d02a108e868c1deaa0143f6377c7c3f.html index cfe40d0963..c36cad4a20 100644 --- a/docs/html/group__arithmetic_ga7d02a108e868c1deaa0143f6377c7c3f.html +++ b/docs/html/group__arithmetic_ga7d02a108e868c1deaa0143f6377c7c3f.html @@ -689,8 +689,6 @@

- + diff --git a/docs/html/group__arithmetic_ga9014bc919ce5fc1ed1db4775671df597.html b/docs/html/group__arithmetic_ga9014bc919ce5fc1ed1db4775671df597.html index 71b19109fd..d21ca33583 100644 --- a/docs/html/group__arithmetic_ga9014bc919ce5fc1ed1db4775671df597.html +++ b/docs/html/group__arithmetic_ga9014bc919ce5fc1ed1db4775671df597.html @@ -689,8 +689,6 @@

- + diff --git a/docs/html/group__arithmetic_ga974ba9a4f4aabf173558a6abedeb518f.html b/docs/html/group__arithmetic_ga974ba9a4f4aabf173558a6abedeb518f.html index 42367df771..604f6a1df8 100644 --- a/docs/html/group__arithmetic_ga974ba9a4f4aabf173558a6abedeb518f.html +++ b/docs/html/group__arithmetic_ga974ba9a4f4aabf173558a6abedeb518f.html @@ -689,8 +689,6 @@

- + diff --git a/docs/html/group__arithmetic_ga9e1abef2b02773654dd566b466e9586a.html b/docs/html/group__arithmetic_ga9e1abef2b02773654dd566b466e9586a.html index 628ea46685..7cda4f18db 100644 --- a/docs/html/group__arithmetic_ga9e1abef2b02773654dd566b466e9586a.html +++ b/docs/html/group__arithmetic_ga9e1abef2b02773654dd566b466e9586a.html @@ -663,8 +663,6 @@

- + diff --git a/docs/html/group__arithmetic_ga9f385ed27d84ed89eab131bf7bbaa5bf.html b/docs/html/group__arithmetic_ga9f385ed27d84ed89eab131bf7bbaa5bf.html index 368c66729d..ce9c359ad4 100644 --- a/docs/html/group__arithmetic_ga9f385ed27d84ed89eab131bf7bbaa5bf.html +++ b/docs/html/group__arithmetic_ga9f385ed27d84ed89eab131bf7bbaa5bf.html @@ -653,8 +653,6 @@

- + diff --git a/docs/html/group__arithmetic_gaa2a5517757d52ac99ece0e6c86a9b7b1.html b/docs/html/group__arithmetic_gaa2a5517757d52ac99ece0e6c86a9b7b1.html index 45de55ba41..3948a5501a 100644 --- a/docs/html/group__arithmetic_gaa2a5517757d52ac99ece0e6c86a9b7b1.html +++ b/docs/html/group__arithmetic_gaa2a5517757d52ac99ece0e6c86a9b7b1.html @@ -689,8 +689,6 @@

- + diff --git a/docs/html/group__arithmetic_gaa581d6441ab304517b9849ab3c5ce732.html b/docs/html/group__arithmetic_gaa581d6441ab304517b9849ab3c5ce732.html index 160a17825f..a1252e1246 100644 --- a/docs/html/group__arithmetic_gaa581d6441ab304517b9849ab3c5ce732.html +++ b/docs/html/group__arithmetic_gaa581d6441ab304517b9849ab3c5ce732.html @@ -661,8 +661,6 @@

- + diff --git a/docs/html/group__arithmetic_gaa9a5f13618342522ebb924a864555cc1.html b/docs/html/group__arithmetic_gaa9a5f13618342522ebb924a864555cc1.html index b2669bc239..5a8ac6d5d9 100644 --- a/docs/html/group__arithmetic_gaa9a5f13618342522ebb924a864555cc1.html +++ b/docs/html/group__arithmetic_gaa9a5f13618342522ebb924a864555cc1.html @@ -689,8 +689,6 @@

- + diff --git a/docs/html/group__arithmetic_gaad956e5cfcc2f6582ae3790fa775a6b0.html b/docs/html/group__arithmetic_gaad956e5cfcc2f6582ae3790fa775a6b0.html index f58dc7e31f..956fe7fe6c 100644 --- a/docs/html/group__arithmetic_gaad956e5cfcc2f6582ae3790fa775a6b0.html +++ b/docs/html/group__arithmetic_gaad956e5cfcc2f6582ae3790fa775a6b0.html @@ -689,8 +689,6 @@

- + diff --git a/docs/html/group__arithmetic_gaae09e7397cee784b81e66dad3f912cc1.html b/docs/html/group__arithmetic_gaae09e7397cee784b81e66dad3f912cc1.html index b8fca2bc91..3c1484d801 100644 --- a/docs/html/group__arithmetic_gaae09e7397cee784b81e66dad3f912cc1.html +++ b/docs/html/group__arithmetic_gaae09e7397cee784b81e66dad3f912cc1.html @@ -660,8 +660,6 @@

- + diff --git a/docs/html/group__arithmetic_gaae2ebed60c826b5686a2599a37bc1a88.html b/docs/html/group__arithmetic_gaae2ebed60c826b5686a2599a37bc1a88.html index 99aa4c80da..3b408357d4 100644 --- a/docs/html/group__arithmetic_gaae2ebed60c826b5686a2599a37bc1a88.html +++ b/docs/html/group__arithmetic_gaae2ebed60c826b5686a2599a37bc1a88.html @@ -687,8 +687,6 @@

- + diff --git a/docs/html/group__arithmetic_gaaf372d425d7522a4a661bf070ef442a4.html b/docs/html/group__arithmetic_gaaf372d425d7522a4a661bf070ef442a4.html index 49d5761ed1..d4ceb2b2c8 100644 --- a/docs/html/group__arithmetic_gaaf372d425d7522a4a661bf070ef442a4.html +++ b/docs/html/group__arithmetic_gaaf372d425d7522a4a661bf070ef442a4.html @@ -664,8 +664,6 @@

- + diff --git a/docs/html/group__arithmetic_gabac32915710c56d7dba2bf23e9bcdbcc.html b/docs/html/group__arithmetic_gabac32915710c56d7dba2bf23e9bcdbcc.html index 6d88f1e96d..4dc206b1e0 100644 --- a/docs/html/group__arithmetic_gabac32915710c56d7dba2bf23e9bcdbcc.html +++ b/docs/html/group__arithmetic_gabac32915710c56d7dba2bf23e9bcdbcc.html @@ -689,8 +689,6 @@

- + diff --git a/docs/html/group__arithmetic_gacb015917b1a95c38dab29df14695c1bf.html b/docs/html/group__arithmetic_gacb015917b1a95c38dab29df14695c1bf.html index 9fc0eca43a..5e086e8921 100644 --- a/docs/html/group__arithmetic_gacb015917b1a95c38dab29df14695c1bf.html +++ b/docs/html/group__arithmetic_gacb015917b1a95c38dab29df14695c1bf.html @@ -669,8 +669,6 @@

- + diff --git a/docs/html/group__arithmetic_gacf950f83c49a8875b30ecf506fbaa85c.html b/docs/html/group__arithmetic_gacf950f83c49a8875b30ecf506fbaa85c.html index ee909b6ef3..62ea7bb24f 100644 --- a/docs/html/group__arithmetic_gacf950f83c49a8875b30ecf506fbaa85c.html +++ b/docs/html/group__arithmetic_gacf950f83c49a8875b30ecf506fbaa85c.html @@ -667,8 +667,6 @@

- + diff --git a/docs/html/group__arithmetic_gad0dd8ae2cec6f99c1523ec4871efce3c.html b/docs/html/group__arithmetic_gad0dd8ae2cec6f99c1523ec4871efce3c.html index c17243a181..720589b04d 100644 --- a/docs/html/group__arithmetic_gad0dd8ae2cec6f99c1523ec4871efce3c.html +++ b/docs/html/group__arithmetic_gad0dd8ae2cec6f99c1523ec4871efce3c.html @@ -651,8 +651,6 @@

- + diff --git a/docs/html/group__arithmetic_gad1d369116a4c78c29e74a36ee641f02a.html b/docs/html/group__arithmetic_gad1d369116a4c78c29e74a36ee641f02a.html index 3fbc50b94d..47265530ca 100644 --- a/docs/html/group__arithmetic_gad1d369116a4c78c29e74a36ee641f02a.html +++ b/docs/html/group__arithmetic_gad1d369116a4c78c29e74a36ee641f02a.html @@ -664,8 +664,6 @@

- + diff --git a/docs/html/group__arithmetic_gae07cec0ceff676cedb02884af507fd2c.html b/docs/html/group__arithmetic_gae07cec0ceff676cedb02884af507fd2c.html index 1e0194def2..11b8e48af9 100644 --- a/docs/html/group__arithmetic_gae07cec0ceff676cedb02884af507fd2c.html +++ b/docs/html/group__arithmetic_gae07cec0ceff676cedb02884af507fd2c.html @@ -648,8 +648,6 @@

Example

- + diff --git a/docs/html/group__arithmetic_gae321c7322c1e89bb6e54b882569caf43.html b/docs/html/group__arithmetic_gae321c7322c1e89bb6e54b882569caf43.html index 11f35a5545..22cf8ff077 100644 --- a/docs/html/group__arithmetic_gae321c7322c1e89bb6e54b882569caf43.html +++ b/docs/html/group__arithmetic_gae321c7322c1e89bb6e54b882569caf43.html @@ -664,8 +664,6 @@

- + diff --git a/docs/html/group__arithmetic_gae716abe66da175d9affa742c7f3446ed.html b/docs/html/group__arithmetic_gae716abe66da175d9affa742c7f3446ed.html index 7fd9e39745..c44e9a5ad3 100644 --- a/docs/html/group__arithmetic_gae716abe66da175d9affa742c7f3446ed.html +++ b/docs/html/group__arithmetic_gae716abe66da175d9affa742c7f3446ed.html @@ -684,8 +684,6 @@

- + diff --git a/docs/html/group__arithmetic_gaeff40f4fe2a2e24a0b2337002530c452.html b/docs/html/group__arithmetic_gaeff40f4fe2a2e24a0b2337002530c452.html index fbefacdc2a..fa494bb99d 100644 --- a/docs/html/group__arithmetic_gaeff40f4fe2a2e24a0b2337002530c452.html +++ b/docs/html/group__arithmetic_gaeff40f4fe2a2e24a0b2337002530c452.html @@ -672,8 +672,6 @@

- + diff --git a/docs/html/group__arithmetic_gaf9bc648f57be07a02903259faabd2df1.html b/docs/html/group__arithmetic_gaf9bc648f57be07a02903259faabd2df1.html index 5b78e7a7c6..25e89c3750 100644 --- a/docs/html/group__arithmetic_gaf9bc648f57be07a02903259faabd2df1.html +++ b/docs/html/group__arithmetic_gaf9bc648f57be07a02903259faabd2df1.html @@ -668,8 +668,6 @@

- + diff --git a/docs/html/group__arithmetic_gafac2fbecb48c62079c84db6314ddc0e8.html b/docs/html/group__arithmetic_gafac2fbecb48c62079c84db6314ddc0e8.html index c5d1d29e88..2167ca9fd0 100644 --- a/docs/html/group__arithmetic_gafac2fbecb48c62079c84db6314ddc0e8.html +++ b/docs/html/group__arithmetic_gafac2fbecb48c62079c84db6314ddc0e8.html @@ -672,8 +672,6 @@

- + diff --git a/docs/html/group__bits.html b/docs/html/group__bits.html index 2385dbd012..152510eae0 100644 --- a/docs/html/group__bits.html +++ b/docs/html/group__bits.html @@ -250,8 +250,6 @@ - + diff --git a/docs/html/group__bits_ga0c17c6e9e0740dc06ac4c9ed8d861695.html b/docs/html/group__bits_ga0c17c6e9e0740dc06ac4c9ed8d861695.html index a7e3b9c19e..cdad45ee0d 100644 --- a/docs/html/group__bits_ga0c17c6e9e0740dc06ac4c9ed8d861695.html +++ b/docs/html/group__bits_ga0c17c6e9e0740dc06ac4c9ed8d861695.html @@ -653,8 +653,6 @@

- + diff --git a/docs/html/group__bits_ga0f2c79073c4fd02eba8f003f2809013a.html b/docs/html/group__bits_ga0f2c79073c4fd02eba8f003f2809013a.html index 48db6f8f35..a19c844627 100644 --- a/docs/html/group__bits_ga0f2c79073c4fd02eba8f003f2809013a.html +++ b/docs/html/group__bits_ga0f2c79073c4fd02eba8f003f2809013a.html @@ -647,8 +647,6 @@

- + diff --git a/docs/html/group__bits_ga1b50817e111b93137f0ce15f44339322.html b/docs/html/group__bits_ga1b50817e111b93137f0ce15f44339322.html index 4cf60ba8fb..ddf087f111 100644 --- a/docs/html/group__bits_ga1b50817e111b93137f0ce15f44339322.html +++ b/docs/html/group__bits_ga1b50817e111b93137f0ce15f44339322.html @@ -638,8 +638,6 @@

- + diff --git a/docs/html/group__bits_ga1fdf2e92b8ef8b2824b3513057ccf2a4.html b/docs/html/group__bits_ga1fdf2e92b8ef8b2824b3513057ccf2a4.html index 965b71c208..2b78d33b35 100644 --- a/docs/html/group__bits_ga1fdf2e92b8ef8b2824b3513057ccf2a4.html +++ b/docs/html/group__bits_ga1fdf2e92b8ef8b2824b3513057ccf2a4.html @@ -646,8 +646,6 @@

- + diff --git a/docs/html/group__bits_ga29c9c15fec7733014b176d759adecc62.html b/docs/html/group__bits_ga29c9c15fec7733014b176d759adecc62.html index df571b1f35..a149f1f5a0 100644 --- a/docs/html/group__bits_ga29c9c15fec7733014b176d759adecc62.html +++ b/docs/html/group__bits_ga29c9c15fec7733014b176d759adecc62.html @@ -647,8 +647,6 @@

- + diff --git a/docs/html/group__bits_ga2b4fed649fc2407cbacc82390c215d7e.html b/docs/html/group__bits_ga2b4fed649fc2407cbacc82390c215d7e.html index 1bc66244ed..191f193731 100644 --- a/docs/html/group__bits_ga2b4fed649fc2407cbacc82390c215d7e.html +++ b/docs/html/group__bits_ga2b4fed649fc2407cbacc82390c215d7e.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__bits_ga5341b3d87dbf8ba07646decaa854ceeb.html b/docs/html/group__bits_ga5341b3d87dbf8ba07646decaa854ceeb.html index ebcd1cf3b0..aa22cdbb3c 100644 --- a/docs/html/group__bits_ga5341b3d87dbf8ba07646decaa854ceeb.html +++ b/docs/html/group__bits_ga5341b3d87dbf8ba07646decaa854ceeb.html @@ -649,8 +649,6 @@

- + diff --git a/docs/html/group__bits_ga593db7047a7d438f4967e8515dd20c3c.html b/docs/html/group__bits_ga593db7047a7d438f4967e8515dd20c3c.html index 9e3ea42de4..7e4f9404fb 100644 --- a/docs/html/group__bits_ga593db7047a7d438f4967e8515dd20c3c.html +++ b/docs/html/group__bits_ga593db7047a7d438f4967e8515dd20c3c.html @@ -645,8 +645,6 @@

- + diff --git a/docs/html/group__bits_ga5c020eebe010e653d992031c6508b55c.html b/docs/html/group__bits_ga5c020eebe010e653d992031c6508b55c.html index 34a38b782a..245f0750b9 100644 --- a/docs/html/group__bits_ga5c020eebe010e653d992031c6508b55c.html +++ b/docs/html/group__bits_ga5c020eebe010e653d992031c6508b55c.html @@ -647,8 +647,6 @@

- + diff --git a/docs/html/group__bits_ga694507ee45226b1c33898f0bb4393575.html b/docs/html/group__bits_ga694507ee45226b1c33898f0bb4393575.html index 1f72865921..aea6ca6bce 100644 --- a/docs/html/group__bits_ga694507ee45226b1c33898f0bb4393575.html +++ b/docs/html/group__bits_ga694507ee45226b1c33898f0bb4393575.html @@ -657,8 +657,6 @@

- + diff --git a/docs/html/group__bits_ga70e5c20a60e3ed6f146abcf971b7b488.html b/docs/html/group__bits_ga70e5c20a60e3ed6f146abcf971b7b488.html index 15a7e008fc..58e8cc45ad 100644 --- a/docs/html/group__bits_ga70e5c20a60e3ed6f146abcf971b7b488.html +++ b/docs/html/group__bits_ga70e5c20a60e3ed6f146abcf971b7b488.html @@ -657,8 +657,6 @@

- + diff --git a/docs/html/group__bits_ga8bc33d70eb0f0eb36126b95e06588748.html b/docs/html/group__bits_ga8bc33d70eb0f0eb36126b95e06588748.html index c3973578fd..ebadfc2378 100644 --- a/docs/html/group__bits_ga8bc33d70eb0f0eb36126b95e06588748.html +++ b/docs/html/group__bits_ga8bc33d70eb0f0eb36126b95e06588748.html @@ -646,8 +646,6 @@

- + diff --git a/docs/html/group__bits_ga91eb277cc0e6eb27b52000c719917395.html b/docs/html/group__bits_ga91eb277cc0e6eb27b52000c719917395.html index 7cf406aa28..18d5b1fea1 100644 --- a/docs/html/group__bits_ga91eb277cc0e6eb27b52000c719917395.html +++ b/docs/html/group__bits_ga91eb277cc0e6eb27b52000c719917395.html @@ -657,8 +657,6 @@

- + diff --git a/docs/html/group__bits_ga97322285148609262baf774000978306.html b/docs/html/group__bits_ga97322285148609262baf774000978306.html index 5b801b323e..fc50aa7b46 100644 --- a/docs/html/group__bits_ga97322285148609262baf774000978306.html +++ b/docs/html/group__bits_ga97322285148609262baf774000978306.html @@ -645,8 +645,6 @@

- + diff --git a/docs/html/group__bits_ga9f6327b5e9978f3905e8ad3c4c711a77.html b/docs/html/group__bits_ga9f6327b5e9978f3905e8ad3c4c711a77.html index 35b4b686ac..098afcc0d8 100644 --- a/docs/html/group__bits_ga9f6327b5e9978f3905e8ad3c4c711a77.html +++ b/docs/html/group__bits_ga9f6327b5e9978f3905e8ad3c4c711a77.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__bits_gaa01b0c4d87a092ea30f0517fde44898e.html b/docs/html/group__bits_gaa01b0c4d87a092ea30f0517fde44898e.html index 49492c9f22..69b15a8792 100644 --- a/docs/html/group__bits_gaa01b0c4d87a092ea30f0517fde44898e.html +++ b/docs/html/group__bits_gaa01b0c4d87a092ea30f0517fde44898e.html @@ -657,8 +657,6 @@

- + diff --git a/docs/html/group__bits_gaa920ed91dcfe6fc7ec9d977dd4aa2c8b.html b/docs/html/group__bits_gaa920ed91dcfe6fc7ec9d977dd4aa2c8b.html index b68e73442e..08777732d4 100644 --- a/docs/html/group__bits_gaa920ed91dcfe6fc7ec9d977dd4aa2c8b.html +++ b/docs/html/group__bits_gaa920ed91dcfe6fc7ec9d977dd4aa2c8b.html @@ -653,8 +653,6 @@

- + diff --git a/docs/html/group__bits_gab4dd44cc3a1c53f08b14a7fcb7a06141.html b/docs/html/group__bits_gab4dd44cc3a1c53f08b14a7fcb7a06141.html index 1616882126..10dfb2ac15 100644 --- a/docs/html/group__bits_gab4dd44cc3a1c53f08b14a7fcb7a06141.html +++ b/docs/html/group__bits_gab4dd44cc3a1c53f08b14a7fcb7a06141.html @@ -653,8 +653,6 @@

- + diff --git a/docs/html/group__bits_gabd39aa0f7b4d3220b9af85691fb09a8c.html b/docs/html/group__bits_gabd39aa0f7b4d3220b9af85691fb09a8c.html index c88ce562b7..9ac01970ec 100644 --- a/docs/html/group__bits_gabd39aa0f7b4d3220b9af85691fb09a8c.html +++ b/docs/html/group__bits_gabd39aa0f7b4d3220b9af85691fb09a8c.html @@ -669,8 +669,6 @@

- + diff --git a/docs/html/group__bits_gabffd912afb59c22c5e51f35becdc4d94.html b/docs/html/group__bits_gabffd912afb59c22c5e51f35becdc4d94.html index b7e35a6bb9..f4772ea6a6 100644 --- a/docs/html/group__bits_gabffd912afb59c22c5e51f35becdc4d94.html +++ b/docs/html/group__bits_gabffd912afb59c22c5e51f35becdc4d94.html @@ -647,8 +647,6 @@

- + diff --git a/docs/html/group__bits_gac3ea8b4c98c60b7969d5204c18e24107.html b/docs/html/group__bits_gac3ea8b4c98c60b7969d5204c18e24107.html index 9bd0d054c3..4b2a13ca47 100644 --- a/docs/html/group__bits_gac3ea8b4c98c60b7969d5204c18e24107.html +++ b/docs/html/group__bits_gac3ea8b4c98c60b7969d5204c18e24107.html @@ -647,8 +647,6 @@

- + diff --git a/docs/html/group__bits_gad0a437aa5d4f510c8b57fe889732c783.html b/docs/html/group__bits_gad0a437aa5d4f510c8b57fe889732c783.html index 69a98b52d3..b376b3e28e 100644 --- a/docs/html/group__bits_gad0a437aa5d4f510c8b57fe889732c783.html +++ b/docs/html/group__bits_gad0a437aa5d4f510c8b57fe889732c783.html @@ -657,8 +657,6 @@

- + diff --git a/docs/html/group__bits_gad17f49d0aa8a13d742091ed5490bf999.html b/docs/html/group__bits_gad17f49d0aa8a13d742091ed5490bf999.html index c86331f749..6a3bb556f4 100644 --- a/docs/html/group__bits_gad17f49d0aa8a13d742091ed5490bf999.html +++ b/docs/html/group__bits_gad17f49d0aa8a13d742091ed5490bf999.html @@ -653,8 +653,6 @@

- + diff --git a/docs/html/group__bits_gad1c74accad79dc78f0147991c3e2b9ae.html b/docs/html/group__bits_gad1c74accad79dc78f0147991c3e2b9ae.html index 0d991ac0da..3fe1da0ded 100644 --- a/docs/html/group__bits_gad1c74accad79dc78f0147991c3e2b9ae.html +++ b/docs/html/group__bits_gad1c74accad79dc78f0147991c3e2b9ae.html @@ -665,8 +665,6 @@

- + diff --git a/docs/html/group__bits_gad440bea367cdc362a6e90919cc601e35.html b/docs/html/group__bits_gad440bea367cdc362a6e90919cc601e35.html index 707c8610a9..e6db550274 100644 --- a/docs/html/group__bits_gad440bea367cdc362a6e90919cc601e35.html +++ b/docs/html/group__bits_gad440bea367cdc362a6e90919cc601e35.html @@ -646,8 +646,6 @@

- + diff --git a/docs/html/group__bits_gae53a4c2d8f8c820d95c7393f4b4b209b.html b/docs/html/group__bits_gae53a4c2d8f8c820d95c7393f4b4b209b.html index de70b9b2c1..24f00105c7 100644 --- a/docs/html/group__bits_gae53a4c2d8f8c820d95c7393f4b4b209b.html +++ b/docs/html/group__bits_gae53a4c2d8f8c820d95c7393f4b4b209b.html @@ -645,8 +645,6 @@

- + diff --git a/docs/html/group__bits_gaeabb8dbb9fe8afe4e47d6a8543cc4399.html b/docs/html/group__bits_gaeabb8dbb9fe8afe4e47d6a8543cc4399.html index 8c7ca0bd4f..06c415ee4c 100644 --- a/docs/html/group__bits_gaeabb8dbb9fe8afe4e47d6a8543cc4399.html +++ b/docs/html/group__bits_gaeabb8dbb9fe8afe4e47d6a8543cc4399.html @@ -653,8 +653,6 @@

- + diff --git a/docs/html/group__bits_gaf996698e31643fc5a631c460bce725fd.html b/docs/html/group__bits_gaf996698e31643fc5a631c460bce725fd.html index 702c859e8a..3603725afa 100644 --- a/docs/html/group__bits_gaf996698e31643fc5a631c460bce725fd.html +++ b/docs/html/group__bits_gaf996698e31643fc5a631c460bce725fd.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__combinatorial.html b/docs/html/group__combinatorial.html index 8c6f4aee06..6f2f9cfebb 100644 --- a/docs/html/group__combinatorial.html +++ b/docs/html/group__combinatorial.html @@ -194,8 +194,6 @@ - + diff --git a/docs/html/group__combinatorial_ga1a7b8f61e2ec6ff6063469c85dc9c665.html b/docs/html/group__combinatorial_ga1a7b8f61e2ec6ff6063469c85dc9c665.html index 7faaedb837..66821c7b73 100644 --- a/docs/html/group__combinatorial_ga1a7b8f61e2ec6ff6063469c85dc9c665.html +++ b/docs/html/group__combinatorial_ga1a7b8f61e2ec6ff6063469c85dc9c665.html @@ -657,8 +657,6 @@

- + diff --git a/docs/html/group__combinatorial_ga24dd00ac2795c25bc9ae228c657133ba.html b/docs/html/group__combinatorial_ga24dd00ac2795c25bc9ae228c657133ba.html index 9ee209a2a4..c5bbb7214a 100644 --- a/docs/html/group__combinatorial_ga24dd00ac2795c25bc9ae228c657133ba.html +++ b/docs/html/group__combinatorial_ga24dd00ac2795c25bc9ae228c657133ba.html @@ -638,8 +638,6 @@

- + diff --git a/docs/html/group__combinatorial_ga2926f86282a2eea8226d89f8111418e6.html b/docs/html/group__combinatorial_ga2926f86282a2eea8226d89f8111418e6.html index 634c5fe62c..e985e6477b 100644 --- a/docs/html/group__combinatorial_ga2926f86282a2eea8226d89f8111418e6.html +++ b/docs/html/group__combinatorial_ga2926f86282a2eea8226d89f8111418e6.html @@ -662,8 +662,6 @@

- + diff --git a/docs/html/group__combinatorial_ga6941228238dd401d770993cc6f5309f2.html b/docs/html/group__combinatorial_ga6941228238dd401d770993cc6f5309f2.html index d539a514f1..d5b09c880b 100644 --- a/docs/html/group__combinatorial_ga6941228238dd401d770993cc6f5309f2.html +++ b/docs/html/group__combinatorial_ga6941228238dd401d770993cc6f5309f2.html @@ -638,8 +638,6 @@

- + diff --git a/docs/html/group__combinatorial_ga88c5c11a1583d1787e367f08385a7dc8.html b/docs/html/group__combinatorial_ga88c5c11a1583d1787e367f08385a7dc8.html index 729220f877..aa55d636f1 100644 --- a/docs/html/group__combinatorial_ga88c5c11a1583d1787e367f08385a7dc8.html +++ b/docs/html/group__combinatorial_ga88c5c11a1583d1787e367f08385a7dc8.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__combinatorial_ga9e601fcbe356949713c9c946bf890611.html b/docs/html/group__combinatorial_ga9e601fcbe356949713c9c946bf890611.html index 3c49d48537..289650c3e3 100644 --- a/docs/html/group__combinatorial_ga9e601fcbe356949713c9c946bf890611.html +++ b/docs/html/group__combinatorial_ga9e601fcbe356949713c9c946bf890611.html @@ -660,8 +660,6 @@

- + diff --git a/docs/html/group__combinatorial_gaa4054bfcccbced74c2d7e7c3e341cddd.html b/docs/html/group__combinatorial_gaa4054bfcccbced74c2d7e7c3e341cddd.html index be709a9d3c..e4a08f4448 100644 --- a/docs/html/group__combinatorial_gaa4054bfcccbced74c2d7e7c3e341cddd.html +++ b/docs/html/group__combinatorial_gaa4054bfcccbced74c2d7e7c3e341cddd.html @@ -668,8 +668,6 @@

- + diff --git a/docs/html/group__combinatorial_gab810f120aa46b31a1b6e437d337e460c.html b/docs/html/group__combinatorial_gab810f120aa46b31a1b6e437d337e460c.html index 722cbbf692..48f3ec6b41 100644 --- a/docs/html/group__combinatorial_gab810f120aa46b31a1b6e437d337e460c.html +++ b/docs/html/group__combinatorial_gab810f120aa46b31a1b6e437d337e460c.html @@ -641,8 +641,6 @@

- + diff --git a/docs/html/group__combinatorial_gac21a6f747ae2df1d45db58a58cbba588.html b/docs/html/group__combinatorial_gac21a6f747ae2df1d45db58a58cbba588.html index 84c3b9d07b..f7c8a1eb5f 100644 --- a/docs/html/group__combinatorial_gac21a6f747ae2df1d45db58a58cbba588.html +++ b/docs/html/group__combinatorial_gac21a6f747ae2df1d45db58a58cbba588.html @@ -651,8 +651,6 @@

- + diff --git a/docs/html/group__combinatorial_gaeb60c975e2f10b34b282682ee10bc687.html b/docs/html/group__combinatorial_gaeb60c975e2f10b34b282682ee10bc687.html index 42c0d012d6..5f32d3af1b 100644 --- a/docs/html/group__combinatorial_gaeb60c975e2f10b34b282682ee10bc687.html +++ b/docs/html/group__combinatorial_gaeb60c975e2f10b34b282682ee10bc687.html @@ -666,8 +666,6 @@

- + diff --git a/docs/html/group__combinatorial_gaf3d9978112857cdad70a9e8e77dbaf58.html b/docs/html/group__combinatorial_gaf3d9978112857cdad70a9e8e77dbaf58.html index c161ef0989..bb98624448 100644 --- a/docs/html/group__combinatorial_gaf3d9978112857cdad70a9e8e77dbaf58.html +++ b/docs/html/group__combinatorial_gaf3d9978112857cdad70a9e8e77dbaf58.html @@ -639,8 +639,6 @@

- + diff --git a/docs/html/group__comparisons.html b/docs/html/group__comparisons.html index 12248d9fb2..f50c60998d 100644 --- a/docs/html/group__comparisons.html +++ b/docs/html/group__comparisons.html @@ -224,8 +224,6 @@ - + diff --git a/docs/html/group__comparisons_ga05739b961c00e13aae340001fd18fd0e.html b/docs/html/group__comparisons_ga05739b961c00e13aae340001fd18fd0e.html index 09af87b6b1..6918417e9a 100644 --- a/docs/html/group__comparisons_ga05739b961c00e13aae340001fd18fd0e.html +++ b/docs/html/group__comparisons_ga05739b961c00e13aae340001fd18fd0e.html @@ -646,8 +646,6 @@

- + diff --git a/docs/html/group__comparisons_ga0e4486901aa47bcb1fb5f7304060387a.html b/docs/html/group__comparisons_ga0e4486901aa47bcb1fb5f7304060387a.html index 510d89659e..fe0ccf7b34 100644 --- a/docs/html/group__comparisons_ga0e4486901aa47bcb1fb5f7304060387a.html +++ b/docs/html/group__comparisons_ga0e4486901aa47bcb1fb5f7304060387a.html @@ -646,8 +646,6 @@

- + diff --git a/docs/html/group__comparisons_ga16303c73443e6529324a75e251ce8a6f.html b/docs/html/group__comparisons_ga16303c73443e6529324a75e251ce8a6f.html index 072233c273..80c0bee751 100644 --- a/docs/html/group__comparisons_ga16303c73443e6529324a75e251ce8a6f.html +++ b/docs/html/group__comparisons_ga16303c73443e6529324a75e251ce8a6f.html @@ -646,8 +646,6 @@

- + diff --git a/docs/html/group__comparisons_ga2016ad6adb1b63cb02162cb75b17ac9e.html b/docs/html/group__comparisons_ga2016ad6adb1b63cb02162cb75b17ac9e.html index 22ee4ed00e..c4b8f29a5f 100644 --- a/docs/html/group__comparisons_ga2016ad6adb1b63cb02162cb75b17ac9e.html +++ b/docs/html/group__comparisons_ga2016ad6adb1b63cb02162cb75b17ac9e.html @@ -659,8 +659,6 @@

- + diff --git a/docs/html/group__comparisons_ga2bd76380375d1e9e8b125f61c1c85829.html b/docs/html/group__comparisons_ga2bd76380375d1e9e8b125f61c1c85829.html index 0e04f26699..9a71c5e854 100644 --- a/docs/html/group__comparisons_ga2bd76380375d1e9e8b125f61c1c85829.html +++ b/docs/html/group__comparisons_ga2bd76380375d1e9e8b125f61c1c85829.html @@ -645,8 +645,6 @@

- + diff --git a/docs/html/group__comparisons_ga419057bf1a8ca5f46624a28a0ea47099.html b/docs/html/group__comparisons_ga419057bf1a8ca5f46624a28a0ea47099.html index a3f149654b..6f52b57029 100644 --- a/docs/html/group__comparisons_ga419057bf1a8ca5f46624a28a0ea47099.html +++ b/docs/html/group__comparisons_ga419057bf1a8ca5f46624a28a0ea47099.html @@ -659,8 +659,6 @@

- + diff --git a/docs/html/group__comparisons_ga42e496a8a71da71cbfbae597c3f62c0e.html b/docs/html/group__comparisons_ga42e496a8a71da71cbfbae597c3f62c0e.html index a7250f1df7..e4612b89cf 100644 --- a/docs/html/group__comparisons_ga42e496a8a71da71cbfbae597c3f62c0e.html +++ b/docs/html/group__comparisons_ga42e496a8a71da71cbfbae597c3f62c0e.html @@ -658,8 +658,6 @@

- + diff --git a/docs/html/group__comparisons_ga66885a9566770fea8e7e3f79f56d2705.html b/docs/html/group__comparisons_ga66885a9566770fea8e7e3f79f56d2705.html index 4f745279c4..6b0299bf67 100644 --- a/docs/html/group__comparisons_ga66885a9566770fea8e7e3f79f56d2705.html +++ b/docs/html/group__comparisons_ga66885a9566770fea8e7e3f79f56d2705.html @@ -657,8 +657,6 @@

- + diff --git a/docs/html/group__comparisons_ga6deb0e67d130c1f8417f3de5b54273d8.html b/docs/html/group__comparisons_ga6deb0e67d130c1f8417f3de5b54273d8.html index 65ffd6f362..c9542592df 100644 --- a/docs/html/group__comparisons_ga6deb0e67d130c1f8417f3de5b54273d8.html +++ b/docs/html/group__comparisons_ga6deb0e67d130c1f8417f3de5b54273d8.html @@ -646,8 +646,6 @@

- + diff --git a/docs/html/group__comparisons_ga7885f935549bf908f247982900555357.html b/docs/html/group__comparisons_ga7885f935549bf908f247982900555357.html index 8faea1d9e1..b7a9d88a6d 100644 --- a/docs/html/group__comparisons_ga7885f935549bf908f247982900555357.html +++ b/docs/html/group__comparisons_ga7885f935549bf908f247982900555357.html @@ -646,8 +646,6 @@

- + diff --git a/docs/html/group__comparisons_ga7ff690d0806cf05be796bdc45cf47801.html b/docs/html/group__comparisons_ga7ff690d0806cf05be796bdc45cf47801.html index ea03fe4907..fa5fccbca9 100644 --- a/docs/html/group__comparisons_ga7ff690d0806cf05be796bdc45cf47801.html +++ b/docs/html/group__comparisons_ga7ff690d0806cf05be796bdc45cf47801.html @@ -658,8 +658,6 @@

- + diff --git a/docs/html/group__comparisons_ga8590bd92bfd11ad943fc8f143e07442a.html b/docs/html/group__comparisons_ga8590bd92bfd11ad943fc8f143e07442a.html index 1fb707a249..1c33290154 100644 --- a/docs/html/group__comparisons_ga8590bd92bfd11ad943fc8f143e07442a.html +++ b/docs/html/group__comparisons_ga8590bd92bfd11ad943fc8f143e07442a.html @@ -646,8 +646,6 @@

- + diff --git a/docs/html/group__comparisons_ga8687ec8d4e16c23dcb5a836e0d1d02cb.html b/docs/html/group__comparisons_ga8687ec8d4e16c23dcb5a836e0d1d02cb.html index 80e5bfdeb0..89785eb74d 100644 --- a/docs/html/group__comparisons_ga8687ec8d4e16c23dcb5a836e0d1d02cb.html +++ b/docs/html/group__comparisons_ga8687ec8d4e16c23dcb5a836e0d1d02cb.html @@ -662,8 +662,6 @@

- + diff --git a/docs/html/group__comparisons_ga8e3d87ee8c698151728cf5e862e2ae97.html b/docs/html/group__comparisons_ga8e3d87ee8c698151728cf5e862e2ae97.html index dcfba98b9c..070717a26e 100644 --- a/docs/html/group__comparisons_ga8e3d87ee8c698151728cf5e862e2ae97.html +++ b/docs/html/group__comparisons_ga8e3d87ee8c698151728cf5e862e2ae97.html @@ -663,8 +663,6 @@

- + diff --git a/docs/html/group__comparisons_ga9138a027fc4acf4517e8e1f2b898ed2d.html b/docs/html/group__comparisons_ga9138a027fc4acf4517e8e1f2b898ed2d.html index 86a7a64074..47a3dbd143 100644 --- a/docs/html/group__comparisons_ga9138a027fc4acf4517e8e1f2b898ed2d.html +++ b/docs/html/group__comparisons_ga9138a027fc4acf4517e8e1f2b898ed2d.html @@ -646,8 +646,6 @@

- + diff --git a/docs/html/group__comparisons_ga9d53c4cb0975665b1da0ed9c637c8b36.html b/docs/html/group__comparisons_ga9d53c4cb0975665b1da0ed9c637c8b36.html index a06c5ba934..e2d51f50aa 100644 --- a/docs/html/group__comparisons_ga9d53c4cb0975665b1da0ed9c637c8b36.html +++ b/docs/html/group__comparisons_ga9d53c4cb0975665b1da0ed9c637c8b36.html @@ -646,8 +646,6 @@

- + diff --git a/docs/html/group__comparisons_gaa8a0ea2b80fef1303a313d1b46fa9394.html b/docs/html/group__comparisons_gaa8a0ea2b80fef1303a313d1b46fa9394.html index c4bcf91040..37828d1ff0 100644 --- a/docs/html/group__comparisons_gaa8a0ea2b80fef1303a313d1b46fa9394.html +++ b/docs/html/group__comparisons_gaa8a0ea2b80fef1303a313d1b46fa9394.html @@ -649,8 +649,6 @@

- + diff --git a/docs/html/group__comparisons_gaae43e7c0594bdcbbc612427d3322c1df.html b/docs/html/group__comparisons_gaae43e7c0594bdcbbc612427d3322c1df.html index 69ad0f7c04..4a15c43408 100644 --- a/docs/html/group__comparisons_gaae43e7c0594bdcbbc612427d3322c1df.html +++ b/docs/html/group__comparisons_gaae43e7c0594bdcbbc612427d3322c1df.html @@ -658,8 +658,6 @@

- + diff --git a/docs/html/group__comparisons_gab009fb2cf8ea7ae35b81b751f14d94fb.html b/docs/html/group__comparisons_gab009fb2cf8ea7ae35b81b751f14d94fb.html index cd9c7a531e..662613a255 100644 --- a/docs/html/group__comparisons_gab009fb2cf8ea7ae35b81b751f14d94fb.html +++ b/docs/html/group__comparisons_gab009fb2cf8ea7ae35b81b751f14d94fb.html @@ -645,8 +645,6 @@

- + diff --git a/docs/html/group__comparisons_gac8e72f365c26b0d3373799e5e3a5f384.html b/docs/html/group__comparisons_gac8e72f365c26b0d3373799e5e3a5f384.html index 691469bebc..63e2d53069 100644 --- a/docs/html/group__comparisons_gac8e72f365c26b0d3373799e5e3a5f384.html +++ b/docs/html/group__comparisons_gac8e72f365c26b0d3373799e5e3a5f384.html @@ -659,8 +659,6 @@

- + diff --git a/docs/html/group__comparisons_gad3071564e3dd31bf2aacba41aa2079e7.html b/docs/html/group__comparisons_gad3071564e3dd31bf2aacba41aa2079e7.html index 64831bfeb9..9088de06d6 100644 --- a/docs/html/group__comparisons_gad3071564e3dd31bf2aacba41aa2079e7.html +++ b/docs/html/group__comparisons_gad3071564e3dd31bf2aacba41aa2079e7.html @@ -662,8 +662,6 @@

- + diff --git a/docs/html/group__constant.html b/docs/html/group__constant.html index 5c38cc5306..cfa8207159 100644 --- a/docs/html/group__constant.html +++ b/docs/html/group__constant.html @@ -364,8 +364,6 @@ - + diff --git a/docs/html/group__constant_ga03181e9677d0f1f28da82a94140f7496.html b/docs/html/group__constant_ga03181e9677d0f1f28da82a94140f7496.html index 341bd1a9da..e6180d40f0 100644 --- a/docs/html/group__constant_ga03181e9677d0f1f28da82a94140f7496.html +++ b/docs/html/group__constant_ga03181e9677d0f1f28da82a94140f7496.html @@ -635,8 +635,6 @@

- + diff --git a/docs/html/group__constant_ga040465fe0ba98419d6ce5397bc60def0.html b/docs/html/group__constant_ga040465fe0ba98419d6ce5397bc60def0.html index cd527e3c57..253711004f 100644 --- a/docs/html/group__constant_ga040465fe0ba98419d6ce5397bc60def0.html +++ b/docs/html/group__constant_ga040465fe0ba98419d6ce5397bc60def0.html @@ -635,8 +635,6 @@

- + diff --git a/docs/html/group__constant_ga048089d9f72f2fecb4dffab41ae615aa.html b/docs/html/group__constant_ga048089d9f72f2fecb4dffab41ae615aa.html index 6795ecd0b3..4569fbb40f 100644 --- a/docs/html/group__constant_ga048089d9f72f2fecb4dffab41ae615aa.html +++ b/docs/html/group__constant_ga048089d9f72f2fecb4dffab41ae615aa.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_ga054fe483e5b5ded0727b05b181360709.html b/docs/html/group__constant_ga054fe483e5b5ded0727b05b181360709.html index 7ea99e4ce2..62260af322 100644 --- a/docs/html/group__constant_ga054fe483e5b5ded0727b05b181360709.html +++ b/docs/html/group__constant_ga054fe483e5b5ded0727b05b181360709.html @@ -635,8 +635,6 @@

- + diff --git a/docs/html/group__constant_ga062b9f19ac5294101b1ca1a70583b2a2.html b/docs/html/group__constant_ga062b9f19ac5294101b1ca1a70583b2a2.html index 5276ec8ca4..3e56d38ed5 100644 --- a/docs/html/group__constant_ga062b9f19ac5294101b1ca1a70583b2a2.html +++ b/docs/html/group__constant_ga062b9f19ac5294101b1ca1a70583b2a2.html @@ -640,8 +640,6 @@

- + diff --git a/docs/html/group__constant_ga08c97899074a949e8ee122d483d77a85.html b/docs/html/group__constant_ga08c97899074a949e8ee122d483d77a85.html index 86e9b63de6..6f33f62809 100644 --- a/docs/html/group__constant_ga08c97899074a949e8ee122d483d77a85.html +++ b/docs/html/group__constant_ga08c97899074a949e8ee122d483d77a85.html @@ -635,8 +635,6 @@

- + diff --git a/docs/html/group__constant_ga09f150f349426116160f46376d5f9063.html b/docs/html/group__constant_ga09f150f349426116160f46376d5f9063.html index 3e3fe76650..26054feb2f 100644 --- a/docs/html/group__constant_ga09f150f349426116160f46376d5f9063.html +++ b/docs/html/group__constant_ga09f150f349426116160f46376d5f9063.html @@ -649,8 +649,6 @@

- + diff --git a/docs/html/group__constant_ga0db30e636a617665260fe6ef9afba989.html b/docs/html/group__constant_ga0db30e636a617665260fe6ef9afba989.html index 6650d1dc07..7638bf2215 100644 --- a/docs/html/group__constant_ga0db30e636a617665260fe6ef9afba989.html +++ b/docs/html/group__constant_ga0db30e636a617665260fe6ef9afba989.html @@ -635,8 +635,6 @@

- + diff --git a/docs/html/group__constant_ga1261b05fe986985da2f916752eeadf57.html b/docs/html/group__constant_ga1261b05fe986985da2f916752eeadf57.html index cdf84f3726..aca392ad0d 100644 --- a/docs/html/group__constant_ga1261b05fe986985da2f916752eeadf57.html +++ b/docs/html/group__constant_ga1261b05fe986985da2f916752eeadf57.html @@ -635,8 +635,6 @@

- + diff --git a/docs/html/group__constant_ga1f2d0ce99a16b97d851663795179afcf.html b/docs/html/group__constant_ga1f2d0ce99a16b97d851663795179afcf.html index fb4ddc5d79..4e6dbf8d8f 100644 --- a/docs/html/group__constant_ga1f2d0ce99a16b97d851663795179afcf.html +++ b/docs/html/group__constant_ga1f2d0ce99a16b97d851663795179afcf.html @@ -635,8 +635,6 @@

- + diff --git a/docs/html/group__constant_ga27166fb22ddd73e9cb6c19b9ab7054a6.html b/docs/html/group__constant_ga27166fb22ddd73e9cb6c19b9ab7054a6.html index 01437d3985..c2f2d6953e 100644 --- a/docs/html/group__constant_ga27166fb22ddd73e9cb6c19b9ab7054a6.html +++ b/docs/html/group__constant_ga27166fb22ddd73e9cb6c19b9ab7054a6.html @@ -636,8 +636,6 @@

- + diff --git a/docs/html/group__constant_ga2a7b9727dd6e38b4230d14630abc3adb.html b/docs/html/group__constant_ga2a7b9727dd6e38b4230d14630abc3adb.html index 2804283da2..734974590c 100644 --- a/docs/html/group__constant_ga2a7b9727dd6e38b4230d14630abc3adb.html +++ b/docs/html/group__constant_ga2a7b9727dd6e38b4230d14630abc3adb.html @@ -639,8 +639,6 @@

- + diff --git a/docs/html/group__constant_ga2e46880609b55c4620cce93efc936c7c.html b/docs/html/group__constant_ga2e46880609b55c4620cce93efc936c7c.html index 042289ecf9..8567c37141 100644 --- a/docs/html/group__constant_ga2e46880609b55c4620cce93efc936c7c.html +++ b/docs/html/group__constant_ga2e46880609b55c4620cce93efc936c7c.html @@ -639,8 +639,6 @@

- + diff --git a/docs/html/group__constant_ga34924224922708e1770206eb025185ec.html b/docs/html/group__constant_ga34924224922708e1770206eb025185ec.html index c7b9ccf3a6..cba251e6d4 100644 --- a/docs/html/group__constant_ga34924224922708e1770206eb025185ec.html +++ b/docs/html/group__constant_ga34924224922708e1770206eb025185ec.html @@ -643,8 +643,6 @@

- + diff --git a/docs/html/group__constant_ga37d9537aa6f66240bd5b8b4e61269ee9.html b/docs/html/group__constant_ga37d9537aa6f66240bd5b8b4e61269ee9.html index 06cd13dc6b..909a149189 100644 --- a/docs/html/group__constant_ga37d9537aa6f66240bd5b8b4e61269ee9.html +++ b/docs/html/group__constant_ga37d9537aa6f66240bd5b8b4e61269ee9.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_ga398c2bd75fec03ae36dc7f220998fbcb.html b/docs/html/group__constant_ga398c2bd75fec03ae36dc7f220998fbcb.html index 03adb146dd..97306be394 100644 --- a/docs/html/group__constant_ga398c2bd75fec03ae36dc7f220998fbcb.html +++ b/docs/html/group__constant_ga398c2bd75fec03ae36dc7f220998fbcb.html @@ -635,8 +635,6 @@

- + diff --git a/docs/html/group__constant_ga49667d76f54c0c7753c703215266975f.html b/docs/html/group__constant_ga49667d76f54c0c7753c703215266975f.html index 2fece582e5..27a3aa8066 100644 --- a/docs/html/group__constant_ga49667d76f54c0c7753c703215266975f.html +++ b/docs/html/group__constant_ga49667d76f54c0c7753c703215266975f.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_ga55b591d755a02c9219c36c5603de6dc2.html b/docs/html/group__constant_ga55b591d755a02c9219c36c5603de6dc2.html index b33a1cd9de..2583e90020 100644 --- a/docs/html/group__constant_ga55b591d755a02c9219c36c5603de6dc2.html +++ b/docs/html/group__constant_ga55b591d755a02c9219c36c5603de6dc2.html @@ -639,8 +639,6 @@

- + diff --git a/docs/html/group__constant_ga5b056b1123bc80ac58687b3d6abfbec6.html b/docs/html/group__constant_ga5b056b1123bc80ac58687b3d6abfbec6.html index 502466d09a..2621abc251 100644 --- a/docs/html/group__constant_ga5b056b1123bc80ac58687b3d6abfbec6.html +++ b/docs/html/group__constant_ga5b056b1123bc80ac58687b3d6abfbec6.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_ga5dda1243e24732f78c849f2d5f0b814d.html b/docs/html/group__constant_ga5dda1243e24732f78c849f2d5f0b814d.html index 40a5ee6d4c..42f5d9324a 100644 --- a/docs/html/group__constant_ga5dda1243e24732f78c849f2d5f0b814d.html +++ b/docs/html/group__constant_ga5dda1243e24732f78c849f2d5f0b814d.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_ga647cf7c845fb8a1139aebeb3d1342f8a.html b/docs/html/group__constant_ga647cf7c845fb8a1139aebeb3d1342f8a.html index 16cb445668..d8087b2323 100644 --- a/docs/html/group__constant_ga647cf7c845fb8a1139aebeb3d1342f8a.html +++ b/docs/html/group__constant_ga647cf7c845fb8a1139aebeb3d1342f8a.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_ga65e61db3f5dad150ee147383c4a8096e.html b/docs/html/group__constant_ga65e61db3f5dad150ee147383c4a8096e.html index d05accee95..74d10f9191 100644 --- a/docs/html/group__constant_ga65e61db3f5dad150ee147383c4a8096e.html +++ b/docs/html/group__constant_ga65e61db3f5dad150ee147383c4a8096e.html @@ -635,8 +635,6 @@

- + diff --git a/docs/html/group__constant_ga68563805ada81165afbd62684a872bc1.html b/docs/html/group__constant_ga68563805ada81165afbd62684a872bc1.html index 98ecc73927..a3960f1bfb 100644 --- a/docs/html/group__constant_ga68563805ada81165afbd62684a872bc1.html +++ b/docs/html/group__constant_ga68563805ada81165afbd62684a872bc1.html @@ -636,8 +636,6 @@

- + diff --git a/docs/html/group__constant_ga69e080db8cbb21e850e7c57f3eb776ff.html b/docs/html/group__constant_ga69e080db8cbb21e850e7c57f3eb776ff.html index 96a7f4b6b4..9e39dd5fee 100644 --- a/docs/html/group__constant_ga69e080db8cbb21e850e7c57f3eb776ff.html +++ b/docs/html/group__constant_ga69e080db8cbb21e850e7c57f3eb776ff.html @@ -603,8 +603,6 @@

+ diff --git a/docs/html/group__constant_ga6a98ab15a9dca6c0d761b0505b222cc5.html b/docs/html/group__constant_ga6a98ab15a9dca6c0d761b0505b222cc5.html index 89680ccac4..97391a3d6c 100644 --- a/docs/html/group__constant_ga6a98ab15a9dca6c0d761b0505b222cc5.html +++ b/docs/html/group__constant_ga6a98ab15a9dca6c0d761b0505b222cc5.html @@ -639,8 +639,6 @@

- + diff --git a/docs/html/group__constant_ga722c967a20debd9ffe04b325134395ba.html b/docs/html/group__constant_ga722c967a20debd9ffe04b325134395ba.html index cf781fba08..f607307113 100644 --- a/docs/html/group__constant_ga722c967a20debd9ffe04b325134395ba.html +++ b/docs/html/group__constant_ga722c967a20debd9ffe04b325134395ba.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_ga7f0e34202816b0108d0d4a31ede311a7.html b/docs/html/group__constant_ga7f0e34202816b0108d0d4a31ede311a7.html index 5e6f9dbeab..680d30e9a3 100644 --- a/docs/html/group__constant_ga7f0e34202816b0108d0d4a31ede311a7.html +++ b/docs/html/group__constant_ga7f0e34202816b0108d0d4a31ede311a7.html @@ -635,8 +635,6 @@

- + diff --git a/docs/html/group__constant_ga8822fec51c8b61d6d21db8b8a2f09228.html b/docs/html/group__constant_ga8822fec51c8b61d6d21db8b8a2f09228.html index fd1f6bcb6f..c8946fe3eb 100644 --- a/docs/html/group__constant_ga8822fec51c8b61d6d21db8b8a2f09228.html +++ b/docs/html/group__constant_ga8822fec51c8b61d6d21db8b8a2f09228.html @@ -639,8 +639,6 @@

- + diff --git a/docs/html/group__constant_ga8d9cee3337e0a95b596cef102e04e1a5.html b/docs/html/group__constant_ga8d9cee3337e0a95b596cef102e04e1a5.html index 3dff6e68c2..676de07efe 100644 --- a/docs/html/group__constant_ga8d9cee3337e0a95b596cef102e04e1a5.html +++ b/docs/html/group__constant_ga8d9cee3337e0a95b596cef102e04e1a5.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_ga8ea0a46980f39915fc1780a3ed3c36f7.html b/docs/html/group__constant_ga8ea0a46980f39915fc1780a3ed3c36f7.html index 01ea16806e..f874e03f7e 100644 --- a/docs/html/group__constant_ga8ea0a46980f39915fc1780a3ed3c36f7.html +++ b/docs/html/group__constant_ga8ea0a46980f39915fc1780a3ed3c36f7.html @@ -639,8 +639,6 @@

- + diff --git a/docs/html/group__constant_ga95e24f644925e19a6b356fa1c28f9799.html b/docs/html/group__constant_ga95e24f644925e19a6b356fa1c28f9799.html index 8364f4bdac..93fc7d4f74 100644 --- a/docs/html/group__constant_ga95e24f644925e19a6b356fa1c28f9799.html +++ b/docs/html/group__constant_ga95e24f644925e19a6b356fa1c28f9799.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_ga9ab3341d4b8bf02105e3142b250ade19.html b/docs/html/group__constant_ga9ab3341d4b8bf02105e3142b250ade19.html index e7d74f7ab0..71686ceafd 100644 --- a/docs/html/group__constant_ga9ab3341d4b8bf02105e3142b250ade19.html +++ b/docs/html/group__constant_ga9ab3341d4b8bf02105e3142b250ade19.html @@ -635,8 +635,6 @@

- + diff --git a/docs/html/group__constant_ga9c49e96e0543e6b6719260adde8cca87.html b/docs/html/group__constant_ga9c49e96e0543e6b6719260adde8cca87.html index 6ecad6ec6e..ef6beb0ae3 100644 --- a/docs/html/group__constant_ga9c49e96e0543e6b6719260adde8cca87.html +++ b/docs/html/group__constant_ga9c49e96e0543e6b6719260adde8cca87.html @@ -635,8 +635,6 @@

- + diff --git a/docs/html/group__constant_gaa262556a49cd7daf77138a7a636e737f.html b/docs/html/group__constant_gaa262556a49cd7daf77138a7a636e737f.html index d026cda2fe..20d772a502 100644 --- a/docs/html/group__constant_gaa262556a49cd7daf77138a7a636e737f.html +++ b/docs/html/group__constant_gaa262556a49cd7daf77138a7a636e737f.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_gaa2beec5955f6701b64b3a2e2ef1a6b85.html b/docs/html/group__constant_gaa2beec5955f6701b64b3a2e2ef1a6b85.html index 71c177bf26..d7a15ab8a5 100644 --- a/docs/html/group__constant_gaa2beec5955f6701b64b3a2e2ef1a6b85.html +++ b/docs/html/group__constant_gaa2beec5955f6701b64b3a2e2ef1a6b85.html @@ -639,8 +639,6 @@

- + diff --git a/docs/html/group__constant_gaa4d31095ad4a8a7f19a8002765638fc6.html b/docs/html/group__constant_gaa4d31095ad4a8a7f19a8002765638fc6.html index f58f5adfd4..397d49646e 100644 --- a/docs/html/group__constant_gaa4d31095ad4a8a7f19a8002765638fc6.html +++ b/docs/html/group__constant_gaa4d31095ad4a8a7f19a8002765638fc6.html @@ -639,8 +639,6 @@

- + diff --git a/docs/html/group__constant_gaa982de3f437f63dd7e92019e186bcb9c.html b/docs/html/group__constant_gaa982de3f437f63dd7e92019e186bcb9c.html index 5bd0c0b283..a75cce1eb6 100644 --- a/docs/html/group__constant_gaa982de3f437f63dd7e92019e186bcb9c.html +++ b/docs/html/group__constant_gaa982de3f437f63dd7e92019e186bcb9c.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_gaad7c9ef60300e0df1ef588da7db5bb17.html b/docs/html/group__constant_gaad7c9ef60300e0df1ef588da7db5bb17.html index d22e5a972f..60dd8cd066 100644 --- a/docs/html/group__constant_gaad7c9ef60300e0df1ef588da7db5bb17.html +++ b/docs/html/group__constant_gaad7c9ef60300e0df1ef588da7db5bb17.html @@ -639,8 +639,6 @@

- + diff --git a/docs/html/group__constant_gab83b9743ff1508e1b62af18f170ed576.html b/docs/html/group__constant_gab83b9743ff1508e1b62af18f170ed576.html index 3b45c43d8d..0fa035598c 100644 --- a/docs/html/group__constant_gab83b9743ff1508e1b62af18f170ed576.html +++ b/docs/html/group__constant_gab83b9743ff1508e1b62af18f170ed576.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_gabbdbd5a281cc068cba8e4551671a8561.html b/docs/html/group__constant_gabbdbd5a281cc068cba8e4551671a8561.html index 9d2c401010..787e40824d 100644 --- a/docs/html/group__constant_gabbdbd5a281cc068cba8e4551671a8561.html +++ b/docs/html/group__constant_gabbdbd5a281cc068cba8e4551671a8561.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_gac0cd00964886659218db19f7dea18b17.html b/docs/html/group__constant_gac0cd00964886659218db19f7dea18b17.html index ce5deb22e6..8511cecd03 100644 --- a/docs/html/group__constant_gac0cd00964886659218db19f7dea18b17.html +++ b/docs/html/group__constant_gac0cd00964886659218db19f7dea18b17.html @@ -639,8 +639,6 @@

- + diff --git a/docs/html/group__constant_gac1255364700394f5b94065c935208f42.html b/docs/html/group__constant_gac1255364700394f5b94065c935208f42.html index 5973dcfa71..0e6e507cc2 100644 --- a/docs/html/group__constant_gac1255364700394f5b94065c935208f42.html +++ b/docs/html/group__constant_gac1255364700394f5b94065c935208f42.html @@ -639,8 +639,6 @@

- + diff --git a/docs/html/group__constant_gac58acf7f9ac1efeb685eb66d3a49aaf8.html b/docs/html/group__constant_gac58acf7f9ac1efeb685eb66d3a49aaf8.html index 776ffc60bd..44872e0f5e 100644 --- a/docs/html/group__constant_gac58acf7f9ac1efeb685eb66d3a49aaf8.html +++ b/docs/html/group__constant_gac58acf7f9ac1efeb685eb66d3a49aaf8.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_gacefed0e3b9ee16507cf649601408be2a.html b/docs/html/group__constant_gacefed0e3b9ee16507cf649601408be2a.html index c6c856a042..e8cd6de3b0 100644 --- a/docs/html/group__constant_gacefed0e3b9ee16507cf649601408be2a.html +++ b/docs/html/group__constant_gacefed0e3b9ee16507cf649601408be2a.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_gad55e4457095a43c4efb949e5ba495113.html b/docs/html/group__constant_gad55e4457095a43c4efb949e5ba495113.html index 3eb327ff55..0815292d73 100644 --- a/docs/html/group__constant_gad55e4457095a43c4efb949e5ba495113.html +++ b/docs/html/group__constant_gad55e4457095a43c4efb949e5ba495113.html @@ -639,8 +639,6 @@

- + diff --git a/docs/html/group__constant_gad73443aeb9673c0e1be3ad1ec7b8d370.html b/docs/html/group__constant_gad73443aeb9673c0e1be3ad1ec7b8d370.html index e3dd1b9f8b..8be8bc892c 100644 --- a/docs/html/group__constant_gad73443aeb9673c0e1be3ad1ec7b8d370.html +++ b/docs/html/group__constant_gad73443aeb9673c0e1be3ad1ec7b8d370.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_gad9bc63b6bdfc034541a2fa40539ec0ae.html b/docs/html/group__constant_gad9bc63b6bdfc034541a2fa40539ec0ae.html index 166c0a84be..a3f945c2a7 100644 --- a/docs/html/group__constant_gad9bc63b6bdfc034541a2fa40539ec0ae.html +++ b/docs/html/group__constant_gad9bc63b6bdfc034541a2fa40539ec0ae.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_gadbdc6ed408ab2a2b8d6270f04f19798b.html b/docs/html/group__constant_gadbdc6ed408ab2a2b8d6270f04f19798b.html index 2db3a395de..ca65a07084 100644 --- a/docs/html/group__constant_gadbdc6ed408ab2a2b8d6270f04f19798b.html +++ b/docs/html/group__constant_gadbdc6ed408ab2a2b8d6270f04f19798b.html @@ -635,8 +635,6 @@

- + diff --git a/docs/html/group__constant_gae22a65c2fd3fabbb0223e51d9a38a47c.html b/docs/html/group__constant_gae22a65c2fd3fabbb0223e51d9a38a47c.html index 46b039ce4b..8d6e8dd88c 100644 --- a/docs/html/group__constant_gae22a65c2fd3fabbb0223e51d9a38a47c.html +++ b/docs/html/group__constant_gae22a65c2fd3fabbb0223e51d9a38a47c.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_gae72600e71c0e7744eb75e5dc754bda7e.html b/docs/html/group__constant_gae72600e71c0e7744eb75e5dc754bda7e.html index 4daf3d6de6..57ac405a39 100644 --- a/docs/html/group__constant_gae72600e71c0e7744eb75e5dc754bda7e.html +++ b/docs/html/group__constant_gae72600e71c0e7744eb75e5dc754bda7e.html @@ -635,8 +635,6 @@

- + diff --git a/docs/html/group__constant_gaeb667b96225f1f9d9e6a5b480d960344.html b/docs/html/group__constant_gaeb667b96225f1f9d9e6a5b480d960344.html index 7ae52a4873..d7f5a431ba 100644 --- a/docs/html/group__constant_gaeb667b96225f1f9d9e6a5b480d960344.html +++ b/docs/html/group__constant_gaeb667b96225f1f9d9e6a5b480d960344.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_gaf0a7a9b81d0b7a73bc26561479fe906e.html b/docs/html/group__constant_gaf0a7a9b81d0b7a73bc26561479fe906e.html index 86fe88dd08..fec8544e51 100644 --- a/docs/html/group__constant_gaf0a7a9b81d0b7a73bc26561479fe906e.html +++ b/docs/html/group__constant_gaf0a7a9b81d0b7a73bc26561479fe906e.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_gaf750842e89385d68afd663f5a9cd0c08.html b/docs/html/group__constant_gaf750842e89385d68afd663f5a9cd0c08.html index 8d22706bbf..5ba0a8dfc3 100644 --- a/docs/html/group__constant_gaf750842e89385d68afd663f5a9cd0c08.html +++ b/docs/html/group__constant_gaf750842e89385d68afd663f5a9cd0c08.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_gaf7d9ac8179e7fa1b3cdbaf16f215bb3d.html b/docs/html/group__constant_gaf7d9ac8179e7fa1b3cdbaf16f215bb3d.html index 7db278f65b..5cf8a72eb1 100644 --- a/docs/html/group__constant_gaf7d9ac8179e7fa1b3cdbaf16f215bb3d.html +++ b/docs/html/group__constant_gaf7d9ac8179e7fa1b3cdbaf16f215bb3d.html @@ -632,8 +632,6 @@

- + diff --git a/docs/html/group__constant_gaf836e8bf4c83978fe3980f5a56a322a1.html b/docs/html/group__constant_gaf836e8bf4c83978fe3980f5a56a322a1.html index 35736dfdc5..ba5b144734 100644 --- a/docs/html/group__constant_gaf836e8bf4c83978fe3980f5a56a322a1.html +++ b/docs/html/group__constant_gaf836e8bf4c83978fe3980f5a56a322a1.html @@ -635,8 +635,6 @@

- + diff --git a/docs/html/group__constant_gaf8c83b159938a524efeaa2a64966d33b.html b/docs/html/group__constant_gaf8c83b159938a524efeaa2a64966d33b.html index 002d95df48..1134b20314 100644 --- a/docs/html/group__constant_gaf8c83b159938a524efeaa2a64966d33b.html +++ b/docs/html/group__constant_gaf8c83b159938a524efeaa2a64966d33b.html @@ -639,8 +639,6 @@

- + diff --git a/docs/html/group__constant_gafc9c7a5e7b96dcb0d2bfb2ef5e323aaa.html b/docs/html/group__constant_gafc9c7a5e7b96dcb0d2bfb2ef5e323aaa.html index e0ce4a1d45..7c830eaa8f 100644 --- a/docs/html/group__constant_gafc9c7a5e7b96dcb0d2bfb2ef5e323aaa.html +++ b/docs/html/group__constant_gafc9c7a5e7b96dcb0d2bfb2ef5e323aaa.html @@ -635,8 +635,6 @@

- + diff --git a/docs/html/group__conversion.html b/docs/html/group__conversion.html index 79b111c8b7..de3c694475 100644 --- a/docs/html/group__conversion.html +++ b/docs/html/group__conversion.html @@ -170,8 +170,6 @@ - + diff --git a/docs/html/group__conversion_gaa19dcccbb0ef0ef464e95ffd7a588867.html b/docs/html/group__conversion_gaa19dcccbb0ef0ef464e95ffd7a588867.html index f1cb361d2c..22f3ed96ee 100644 --- a/docs/html/group__conversion_gaa19dcccbb0ef0ef464e95ffd7a588867.html +++ b/docs/html/group__conversion_gaa19dcccbb0ef0ef464e95ffd7a588867.html @@ -675,8 +675,6 @@

- + diff --git a/docs/html/group__converter.html b/docs/html/group__converter.html index a2d42063da..59796b73fd 100644 --- a/docs/html/group__converter.html +++ b/docs/html/group__converter.html @@ -203,8 +203,6 @@ - + diff --git a/docs/html/group__converter_ga03a0c0686af192634c7b6e0896ba663b.html b/docs/html/group__converter_ga03a0c0686af192634c7b6e0896ba663b.html index f2a8288f64..218b9ca82e 100644 --- a/docs/html/group__converter_ga03a0c0686af192634c7b6e0896ba663b.html +++ b/docs/html/group__converter_ga03a0c0686af192634c7b6e0896ba663b.html @@ -604,8 +604,6 @@

- + diff --git a/docs/html/group__converter_ga1dbf1967fa31abbc08b1ce14a8252acb.html b/docs/html/group__converter_ga1dbf1967fa31abbc08b1ce14a8252acb.html index ca1125507f..ead7ca54ed 100644 --- a/docs/html/group__converter_ga1dbf1967fa31abbc08b1ce14a8252acb.html +++ b/docs/html/group__converter_ga1dbf1967fa31abbc08b1ce14a8252acb.html @@ -604,8 +604,6 @@

- + diff --git a/docs/html/group__converter_ga274dac2c4e1dfa15f47d228529791c5a.html b/docs/html/group__converter_ga274dac2c4e1dfa15f47d228529791c5a.html index 7c0836adcd..bd80683054 100644 --- a/docs/html/group__converter_ga274dac2c4e1dfa15f47d228529791c5a.html +++ b/docs/html/group__converter_ga274dac2c4e1dfa15f47d228529791c5a.html @@ -604,8 +604,6 @@

- + diff --git a/docs/html/group__converter_ga380d6bd2870197f160dda570b1eefc2d.html b/docs/html/group__converter_ga380d6bd2870197f160dda570b1eefc2d.html index a8c24ebcab..467e5d0919 100644 --- a/docs/html/group__converter_ga380d6bd2870197f160dda570b1eefc2d.html +++ b/docs/html/group__converter_ga380d6bd2870197f160dda570b1eefc2d.html @@ -604,8 +604,6 @@

- + diff --git a/docs/html/group__converter_ga5062b84ed3dd16e3b6e72045f66414f6.html b/docs/html/group__converter_ga5062b84ed3dd16e3b6e72045f66414f6.html index 3ee6713043..e1dd3b428d 100644 --- a/docs/html/group__converter_ga5062b84ed3dd16e3b6e72045f66414f6.html +++ b/docs/html/group__converter_ga5062b84ed3dd16e3b6e72045f66414f6.html @@ -604,8 +604,6 @@

- + diff --git a/docs/html/group__converter_ga6004cbdbfdd5ec747cb4fa7ef28c84df.html b/docs/html/group__converter_ga6004cbdbfdd5ec747cb4fa7ef28c84df.html index bf1702b535..8215d44376 100644 --- a/docs/html/group__converter_ga6004cbdbfdd5ec747cb4fa7ef28c84df.html +++ b/docs/html/group__converter_ga6004cbdbfdd5ec747cb4fa7ef28c84df.html @@ -604,8 +604,6 @@

- + diff --git a/docs/html/group__converter_ga8b31dfbeb3cff7a3f1e766c03e19a6f0.html b/docs/html/group__converter_ga8b31dfbeb3cff7a3f1e766c03e19a6f0.html index ab85c57f87..b490ddf8ef 100644 --- a/docs/html/group__converter_ga8b31dfbeb3cff7a3f1e766c03e19a6f0.html +++ b/docs/html/group__converter_ga8b31dfbeb3cff7a3f1e766c03e19a6f0.html @@ -604,8 +604,6 @@

- + diff --git a/docs/html/group__converter_gaab615cc960ad89710ead478748d6b252.html b/docs/html/group__converter_gaab615cc960ad89710ead478748d6b252.html index c9811e15de..a203ca17e8 100644 --- a/docs/html/group__converter_gaab615cc960ad89710ead478748d6b252.html +++ b/docs/html/group__converter_gaab615cc960ad89710ead478748d6b252.html @@ -605,8 +605,6 @@

- + diff --git a/docs/html/group__converter_gabe14f9b1a3924cee1ca3676c2a7846b8.html b/docs/html/group__converter_gabe14f9b1a3924cee1ca3676c2a7846b8.html index 8855b78a1b..6cadc61e82 100644 --- a/docs/html/group__converter_gabe14f9b1a3924cee1ca3676c2a7846b8.html +++ b/docs/html/group__converter_gabe14f9b1a3924cee1ca3676c2a7846b8.html @@ -604,8 +604,6 @@

- + diff --git a/docs/html/group__converter_gac0d5d471080fe5537f1ed3d9296ddf77.html b/docs/html/group__converter_gac0d5d471080fe5537f1ed3d9296ddf77.html index 88ec015895..c7eaa7dad5 100644 --- a/docs/html/group__converter_gac0d5d471080fe5537f1ed3d9296ddf77.html +++ b/docs/html/group__converter_gac0d5d471080fe5537f1ed3d9296ddf77.html @@ -604,8 +604,6 @@

- + diff --git a/docs/html/group__converter_gac9beb69d543a5e978d1edae85069feb6.html b/docs/html/group__converter_gac9beb69d543a5e978d1edae85069feb6.html index 0d647fcb89..48b702c811 100644 --- a/docs/html/group__converter_gac9beb69d543a5e978d1edae85069feb6.html +++ b/docs/html/group__converter_gac9beb69d543a5e978d1edae85069feb6.html @@ -605,8 +605,6 @@

- + diff --git a/docs/html/group__converter_gad236d2923e163d4f72970151d9ff0519.html b/docs/html/group__converter_gad236d2923e163d4f72970151d9ff0519.html index 09f0da53b1..440f6d8be4 100644 --- a/docs/html/group__converter_gad236d2923e163d4f72970151d9ff0519.html +++ b/docs/html/group__converter_gad236d2923e163d4f72970151d9ff0519.html @@ -604,8 +604,6 @@

- + diff --git a/docs/html/group__converter_gaed175cd947b502a735e216cd1fce6d90.html b/docs/html/group__converter_gaed175cd947b502a735e216cd1fce6d90.html index d2d1fe659f..7ee255ee70 100644 --- a/docs/html/group__converter_gaed175cd947b502a735e216cd1fce6d90.html +++ b/docs/html/group__converter_gaed175cd947b502a735e216cd1fce6d90.html @@ -605,8 +605,6 @@

- + diff --git a/docs/html/group__converter_gafd86a79bb4835bef550be50d5b56b342.html b/docs/html/group__converter_gafd86a79bb4835bef550be50d5b56b342.html index b01d40abe5..8240b79368 100644 --- a/docs/html/group__converter_gafd86a79bb4835bef550be50d5b56b342.html +++ b/docs/html/group__converter_gafd86a79bb4835bef550be50d5b56b342.html @@ -605,8 +605,6 @@

- + diff --git a/docs/html/group__decorator.html b/docs/html/group__decorator.html index 9c0f2b9b60..12ba0c328e 100644 --- a/docs/html/group__decorator.html +++ b/docs/html/group__decorator.html @@ -225,8 +225,6 @@ - + diff --git a/docs/html/group__decorator_ga0c470f9154d0e71ce66562f945b01028.html b/docs/html/group__decorator_ga0c470f9154d0e71ce66562f945b01028.html index 53f582763f..32b8aa79cb 100644 --- a/docs/html/group__decorator_ga0c470f9154d0e71ce66562f945b01028.html +++ b/docs/html/group__decorator_ga0c470f9154d0e71ce66562f945b01028.html @@ -606,8 +606,6 @@

- + diff --git a/docs/html/group__decorator_ga0f1f689a82eba82d3e7b36b97b8c15e6.html b/docs/html/group__decorator_ga0f1f689a82eba82d3e7b36b97b8c15e6.html index 73a7988649..1cc8e33893 100644 --- a/docs/html/group__decorator_ga0f1f689a82eba82d3e7b36b97b8c15e6.html +++ b/docs/html/group__decorator_ga0f1f689a82eba82d3e7b36b97b8c15e6.html @@ -604,8 +604,6 @@

- + diff --git a/docs/html/group__decorator_ga1cef78b42db5aeb88da7c503baed5b4a.html b/docs/html/group__decorator_ga1cef78b42db5aeb88da7c503baed5b4a.html index 6d2d59904a..c39a8b8261 100644 --- a/docs/html/group__decorator_ga1cef78b42db5aeb88da7c503baed5b4a.html +++ b/docs/html/group__decorator_ga1cef78b42db5aeb88da7c503baed5b4a.html @@ -602,8 +602,6 @@

Members Functions

- + diff --git a/docs/html/group__decorator_ga3b3cda8b6305e7d7e0dbc9da29c6be80.html b/docs/html/group__decorator_ga3b3cda8b6305e7d7e0dbc9da29c6be80.html index 8263337f5f..9f031c195e 100644 --- a/docs/html/group__decorator_ga3b3cda8b6305e7d7e0dbc9da29c6be80.html +++ b/docs/html/group__decorator_ga3b3cda8b6305e7d7e0dbc9da29c6be80.html @@ -606,8 +606,6 @@

- + diff --git a/docs/html/group__decorator_ga4eb5977c62725094fe76ad7d62387dd0.html b/docs/html/group__decorator_ga4eb5977c62725094fe76ad7d62387dd0.html index 3f0d170d95..77fd9f8e82 100644 --- a/docs/html/group__decorator_ga4eb5977c62725094fe76ad7d62387dd0.html +++ b/docs/html/group__decorator_ga4eb5977c62725094fe76ad7d62387dd0.html @@ -599,8 +599,6 @@

- + diff --git a/docs/html/group__decorator_ga5bbd9036e48f8aac4216a0869806e1df.html b/docs/html/group__decorator_ga5bbd9036e48f8aac4216a0869806e1df.html index cbd792cc01..6617b5f9a4 100644 --- a/docs/html/group__decorator_ga5bbd9036e48f8aac4216a0869806e1df.html +++ b/docs/html/group__decorator_ga5bbd9036e48f8aac4216a0869806e1df.html @@ -604,8 +604,6 @@

- + diff --git a/docs/html/group__decorator_ga65d424f34f684af47b6e2d2653be632e.html b/docs/html/group__decorator_ga65d424f34f684af47b6e2d2653be632e.html index 324ec3637e..7a0b7d1745 100644 --- a/docs/html/group__decorator_ga65d424f34f684af47b6e2d2653be632e.html +++ b/docs/html/group__decorator_ga65d424f34f684af47b6e2d2653be632e.html @@ -618,8 +618,6 @@

- + diff --git a/docs/html/group__decorator_ga77bcbd0260750a88b913fd304baed476.html b/docs/html/group__decorator_ga77bcbd0260750a88b913fd304baed476.html index 412430cc94..cf59ccace2 100644 --- a/docs/html/group__decorator_ga77bcbd0260750a88b913fd304baed476.html +++ b/docs/html/group__decorator_ga77bcbd0260750a88b913fd304baed476.html @@ -604,8 +604,6 @@

- + diff --git a/docs/html/group__decorator_ga8526757ac3b6797bc68ce2072c549cf3.html b/docs/html/group__decorator_ga8526757ac3b6797bc68ce2072c549cf3.html index 4e26cc9467..e9e1e4adf9 100644 --- a/docs/html/group__decorator_ga8526757ac3b6797bc68ce2072c549cf3.html +++ b/docs/html/group__decorator_ga8526757ac3b6797bc68ce2072c549cf3.html @@ -603,8 +603,6 @@

- + diff --git a/docs/html/group__decorator_ga8677881ff2d27fba6adedaeb8f84151b.html b/docs/html/group__decorator_ga8677881ff2d27fba6adedaeb8f84151b.html index dc76e12cd4..9b53e4fa21 100644 --- a/docs/html/group__decorator_ga8677881ff2d27fba6adedaeb8f84151b.html +++ b/docs/html/group__decorator_ga8677881ff2d27fba6adedaeb8f84151b.html @@ -602,8 +602,6 @@

Members Functions

- + diff --git a/docs/html/group__decorator_ga937d8a32ddb68361283b635de3ee5253.html b/docs/html/group__decorator_ga937d8a32ddb68361283b635de3ee5253.html index d4ee5d5df1..180edadec3 100644 --- a/docs/html/group__decorator_ga937d8a32ddb68361283b635de3ee5253.html +++ b/docs/html/group__decorator_ga937d8a32ddb68361283b635de3ee5253.html @@ -602,8 +602,6 @@

- + diff --git a/docs/html/group__decorator_ga9e4172d6b835dc7d61072c41ea61a634.html b/docs/html/group__decorator_ga9e4172d6b835dc7d61072c41ea61a634.html index d90b56a7c2..7e89b41c73 100644 --- a/docs/html/group__decorator_ga9e4172d6b835dc7d61072c41ea61a634.html +++ b/docs/html/group__decorator_ga9e4172d6b835dc7d61072c41ea61a634.html @@ -603,8 +603,6 @@

- + diff --git a/docs/html/group__decorator_gaa19d9ce08b61f17096366e2e638e6cc3.html b/docs/html/group__decorator_gaa19d9ce08b61f17096366e2e638e6cc3.html index 99023e78f0..aa909c0af2 100644 --- a/docs/html/group__decorator_gaa19d9ce08b61f17096366e2e638e6cc3.html +++ b/docs/html/group__decorator_gaa19d9ce08b61f17096366e2e638e6cc3.html @@ -599,8 +599,6 @@

- + diff --git a/docs/html/group__decorator_gaa4398b2ef5de81cacafc812406adf5d0.html b/docs/html/group__decorator_gaa4398b2ef5de81cacafc812406adf5d0.html index 3a57763491..3646bc95c0 100644 --- a/docs/html/group__decorator_gaa4398b2ef5de81cacafc812406adf5d0.html +++ b/docs/html/group__decorator_gaa4398b2ef5de81cacafc812406adf5d0.html @@ -604,8 +604,6 @@

- + diff --git a/docs/html/group__decorator_gaa4853888b0e6be1fdbc24c9f6b372599.html b/docs/html/group__decorator_gaa4853888b0e6be1fdbc24c9f6b372599.html index fb613f8f51..837462146e 100644 --- a/docs/html/group__decorator_gaa4853888b0e6be1fdbc24c9f6b372599.html +++ b/docs/html/group__decorator_gaa4853888b0e6be1fdbc24c9f6b372599.html @@ -598,8 +598,6 @@

- + diff --git a/docs/html/group__decorator_gaa9bc64a3f84f5fdc046854ead9bdf7f6.html b/docs/html/group__decorator_gaa9bc64a3f84f5fdc046854ead9bdf7f6.html index 57d7ea5139..0685dd87fc 100644 --- a/docs/html/group__decorator_gaa9bc64a3f84f5fdc046854ead9bdf7f6.html +++ b/docs/html/group__decorator_gaa9bc64a3f84f5fdc046854ead9bdf7f6.html @@ -606,8 +606,6 @@

- + diff --git a/docs/html/group__decorator_gaaae38dadc2c9ec57e7431dd23a01350d.html b/docs/html/group__decorator_gaaae38dadc2c9ec57e7431dd23a01350d.html index f55cf643b3..2f45d161c0 100644 --- a/docs/html/group__decorator_gaaae38dadc2c9ec57e7431dd23a01350d.html +++ b/docs/html/group__decorator_gaaae38dadc2c9ec57e7431dd23a01350d.html @@ -608,8 +608,6 @@

- + diff --git a/docs/html/group__decorator_gab3e62d0320771141e199eeb36af09ed8.html b/docs/html/group__decorator_gab3e62d0320771141e199eeb36af09ed8.html index bdcd2c5cbe..8d6dc6523c 100644 --- a/docs/html/group__decorator_gab3e62d0320771141e199eeb36af09ed8.html +++ b/docs/html/group__decorator_gab3e62d0320771141e199eeb36af09ed8.html @@ -599,8 +599,6 @@

- + diff --git a/docs/html/group__decorator_gab948026b7cf3543e2fa4b43f32c3311c.html b/docs/html/group__decorator_gab948026b7cf3543e2fa4b43f32c3311c.html index 0d08f58e2b..9bc49dc4a9 100644 --- a/docs/html/group__decorator_gab948026b7cf3543e2fa4b43f32c3311c.html +++ b/docs/html/group__decorator_gab948026b7cf3543e2fa4b43f32c3311c.html @@ -602,8 +602,6 @@

Members Functions

- + diff --git a/docs/html/group__decorator_gac2364bc5fee398715edefffe3c260223.html b/docs/html/group__decorator_gac2364bc5fee398715edefffe3c260223.html index ffbea257bf..6cb01ac3d8 100644 --- a/docs/html/group__decorator_gac2364bc5fee398715edefffe3c260223.html +++ b/docs/html/group__decorator_gac2364bc5fee398715edefffe3c260223.html @@ -606,8 +606,6 @@

- + diff --git a/docs/html/group__decorator_gae5a6d5b7c8c61e7f5c9190e8b69bb4ab.html b/docs/html/group__decorator_gae5a6d5b7c8c61e7f5c9190e8b69bb4ab.html index 68b28b3d22..ad3508b618 100644 --- a/docs/html/group__decorator_gae5a6d5b7c8c61e7f5c9190e8b69bb4ab.html +++ b/docs/html/group__decorator_gae5a6d5b7c8c61e7f5c9190e8b69bb4ab.html @@ -598,8 +598,6 @@

- + diff --git a/docs/html/group__details.html b/docs/html/group__details.html index a68471a068..70248d3753 100644 --- a/docs/html/group__details.html +++ b/docs/html/group__details.html @@ -219,8 +219,6 @@ - + diff --git a/docs/html/group__elliptic.html b/docs/html/group__elliptic.html index cb5ccdd95b..2dd6bb4fce 100644 --- a/docs/html/group__elliptic.html +++ b/docs/html/group__elliptic.html @@ -185,8 +185,6 @@ - + diff --git a/docs/html/group__elliptic_ga399581902e638b91ced137b1673ab42e.html b/docs/html/group__elliptic_ga399581902e638b91ced137b1673ab42e.html index 607e0a3c4c..6e5e13cc74 100644 --- a/docs/html/group__elliptic_ga399581902e638b91ced137b1673ab42e.html +++ b/docs/html/group__elliptic_ga399581902e638b91ced137b1673ab42e.html @@ -666,8 +666,6 @@

- + diff --git a/docs/html/group__elliptic_ga3e59785e4e4746bfe4ad3d4c05677d14.html b/docs/html/group__elliptic_ga3e59785e4e4746bfe4ad3d4c05677d14.html index 3d0aba2d4c..b28d7fe011 100644 --- a/docs/html/group__elliptic_ga3e59785e4e4746bfe4ad3d4c05677d14.html +++ b/docs/html/group__elliptic_ga3e59785e4e4746bfe4ad3d4c05677d14.html @@ -660,8 +660,6 @@

- + diff --git a/docs/html/group__elliptic_ga5d9679ef9ad8f51745ca3ec29ba89c88.html b/docs/html/group__elliptic_ga5d9679ef9ad8f51745ca3ec29ba89c88.html index 484d4d2154..271cbb4d67 100644 --- a/docs/html/group__elliptic_ga5d9679ef9ad8f51745ca3ec29ba89c88.html +++ b/docs/html/group__elliptic_ga5d9679ef9ad8f51745ca3ec29ba89c88.html @@ -670,8 +670,6 @@

- + diff --git a/docs/html/group__elliptic_ga973c72150eb0895626950fe21e83390e.html b/docs/html/group__elliptic_ga973c72150eb0895626950fe21e83390e.html index fb5ded422f..83713b4ec4 100644 --- a/docs/html/group__elliptic_ga973c72150eb0895626950fe21e83390e.html +++ b/docs/html/group__elliptic_ga973c72150eb0895626950fe21e83390e.html @@ -669,8 +669,6 @@

- + diff --git a/docs/html/group__elliptic_gac988dfdbc128cb466584e60b61c1eeef.html b/docs/html/group__elliptic_gac988dfdbc128cb466584e60b61c1eeef.html index 9a3895ea30..c366af2820 100644 --- a/docs/html/group__elliptic_gac988dfdbc128cb466584e60b61c1eeef.html +++ b/docs/html/group__elliptic_gac988dfdbc128cb466584e60b61c1eeef.html @@ -658,8 +658,6 @@

- + diff --git a/docs/html/group__elliptic_gace14dc365b6b985985aabdddd0a213db.html b/docs/html/group__elliptic_gace14dc365b6b985985aabdddd0a213db.html index b2a3b47be2..646497cc64 100644 --- a/docs/html/group__elliptic_gace14dc365b6b985985aabdddd0a213db.html +++ b/docs/html/group__elliptic_gace14dc365b6b985985aabdddd0a213db.html @@ -672,8 +672,6 @@

- + diff --git a/docs/html/group__elliptic_gae014d130bf719deafe7b2879e5d8ac0e.html b/docs/html/group__elliptic_gae014d130bf719deafe7b2879e5d8ac0e.html index dbb17481a9..ebbb6d9da3 100644 --- a/docs/html/group__elliptic_gae014d130bf719deafe7b2879e5d8ac0e.html +++ b/docs/html/group__elliptic_gae014d130bf719deafe7b2879e5d8ac0e.html @@ -663,8 +663,6 @@

- + diff --git a/docs/html/group__elliptic_gaf90bbb98375d43dd1c8a3c6c77f66d28.html b/docs/html/group__elliptic_gaf90bbb98375d43dd1c8a3c6c77f66d28.html index 2d8a58822f..800fad20e5 100644 --- a/docs/html/group__elliptic_gaf90bbb98375d43dd1c8a3c6c77f66d28.html +++ b/docs/html/group__elliptic_gaf90bbb98375d43dd1c8a3c6c77f66d28.html @@ -663,8 +663,6 @@

- + diff --git a/docs/html/group__exponential.html b/docs/html/group__exponential.html index 9afbdd44f9..1f2bc713b6 100644 --- a/docs/html/group__exponential.html +++ b/docs/html/group__exponential.html @@ -215,8 +215,6 @@ - + diff --git a/docs/html/group__exponential_ga277a659430f603cbb2d03d29e909b22d.html b/docs/html/group__exponential_ga277a659430f603cbb2d03d29e909b22d.html index 618acbff86..45e33298ad 100644 --- a/docs/html/group__exponential_ga277a659430f603cbb2d03d29e909b22d.html +++ b/docs/html/group__exponential_ga277a659430f603cbb2d03d29e909b22d.html @@ -661,8 +661,6 @@

- + diff --git a/docs/html/group__exponential_ga5105272ae2219a74e27f57f0b687893f.html b/docs/html/group__exponential_ga5105272ae2219a74e27f57f0b687893f.html index e33569a433..0424cad68b 100644 --- a/docs/html/group__exponential_ga5105272ae2219a74e27f57f0b687893f.html +++ b/docs/html/group__exponential_ga5105272ae2219a74e27f57f0b687893f.html @@ -658,8 +658,6 @@

- + diff --git a/docs/html/group__exponential_ga52c9b96548ef6beeb8502c4d6af87745.html b/docs/html/group__exponential_ga52c9b96548ef6beeb8502c4d6af87745.html index dba327c8cb..36ed5aadd4 100644 --- a/docs/html/group__exponential_ga52c9b96548ef6beeb8502c4d6af87745.html +++ b/docs/html/group__exponential_ga52c9b96548ef6beeb8502c4d6af87745.html @@ -667,8 +667,6 @@

- + diff --git a/docs/html/group__exponential_ga56a5f857ff59ee64bb1ab21999eaae42.html b/docs/html/group__exponential_ga56a5f857ff59ee64bb1ab21999eaae42.html index 6c7c7db1fd..b5351052bc 100644 --- a/docs/html/group__exponential_ga56a5f857ff59ee64bb1ab21999eaae42.html +++ b/docs/html/group__exponential_ga56a5f857ff59ee64bb1ab21999eaae42.html @@ -665,8 +665,6 @@

- + diff --git a/docs/html/group__exponential_ga6c85541a3e60b50506e87d18c2e88b34.html b/docs/html/group__exponential_ga6c85541a3e60b50506e87d18c2e88b34.html index a34d4fb5d2..1d8edf1e8f 100644 --- a/docs/html/group__exponential_ga6c85541a3e60b50506e87d18c2e88b34.html +++ b/docs/html/group__exponential_ga6c85541a3e60b50506e87d18c2e88b34.html @@ -625,8 +625,6 @@

- + diff --git a/docs/html/group__exponential_ga7dc798b64cf565837240f4d135722cbe.html b/docs/html/group__exponential_ga7dc798b64cf565837240f4d135722cbe.html index a39d9a1b1a..5506ea961e 100644 --- a/docs/html/group__exponential_ga7dc798b64cf565837240f4d135722cbe.html +++ b/docs/html/group__exponential_ga7dc798b64cf565837240f4d135722cbe.html @@ -682,8 +682,6 @@

- + diff --git a/docs/html/group__exponential_ga90cff7b583b7e96518af4946dcd7378a.html b/docs/html/group__exponential_ga90cff7b583b7e96518af4946dcd7378a.html index 5eb0663894..e144290d18 100644 --- a/docs/html/group__exponential_ga90cff7b583b7e96518af4946dcd7378a.html +++ b/docs/html/group__exponential_ga90cff7b583b7e96518af4946dcd7378a.html @@ -664,8 +664,6 @@

- + diff --git a/docs/html/group__exponential_ga913f29b7780e1e90dd19d13ec8c971f9.html b/docs/html/group__exponential_ga913f29b7780e1e90dd19d13ec8c971f9.html index 2c21dc0402..273e04c4c4 100644 --- a/docs/html/group__exponential_ga913f29b7780e1e90dd19d13ec8c971f9.html +++ b/docs/html/group__exponential_ga913f29b7780e1e90dd19d13ec8c971f9.html @@ -663,8 +663,6 @@

- + diff --git a/docs/html/group__exponential_ga9556715e0b694c52d69058582bc47aa3.html b/docs/html/group__exponential_ga9556715e0b694c52d69058582bc47aa3.html index 4b1effc8e6..f065818694 100644 --- a/docs/html/group__exponential_ga9556715e0b694c52d69058582bc47aa3.html +++ b/docs/html/group__exponential_ga9556715e0b694c52d69058582bc47aa3.html @@ -655,8 +655,6 @@

- + diff --git a/docs/html/group__exponential_ga9e50f660c1ffa0aec9d549a822e5d2fb.html b/docs/html/group__exponential_ga9e50f660c1ffa0aec9d549a822e5d2fb.html index 18d20b7586..e352f520d8 100644 --- a/docs/html/group__exponential_ga9e50f660c1ffa0aec9d549a822e5d2fb.html +++ b/docs/html/group__exponential_ga9e50f660c1ffa0aec9d549a822e5d2fb.html @@ -687,8 +687,6 @@

- + diff --git a/docs/html/group__exponential_gaa0b5a64467474bf1d37bf7130958946a.html b/docs/html/group__exponential_gaa0b5a64467474bf1d37bf7130958946a.html index 1efb6326d9..f36f5c8396 100644 --- a/docs/html/group__exponential_gaa0b5a64467474bf1d37bf7130958946a.html +++ b/docs/html/group__exponential_gaa0b5a64467474bf1d37bf7130958946a.html @@ -670,8 +670,6 @@

- + diff --git a/docs/html/group__exponential_gaad00c9d24af2d29a5ab7656a3a975c51.html b/docs/html/group__exponential_gaad00c9d24af2d29a5ab7656a3a975c51.html index c97a7c1344..cb7ff3f157 100644 --- a/docs/html/group__exponential_gaad00c9d24af2d29a5ab7656a3a975c51.html +++ b/docs/html/group__exponential_gaad00c9d24af2d29a5ab7656a3a975c51.html @@ -689,8 +689,6 @@

- + diff --git a/docs/html/group__exponential_gab1d7c29149e2041dbf869bc56fad863f.html b/docs/html/group__exponential_gab1d7c29149e2041dbf869bc56fad863f.html index 82522fab0d..2e29cdc176 100644 --- a/docs/html/group__exponential_gab1d7c29149e2041dbf869bc56fad863f.html +++ b/docs/html/group__exponential_gab1d7c29149e2041dbf869bc56fad863f.html @@ -662,8 +662,6 @@

- + diff --git a/docs/html/group__exponential_gab3a3243853d722c3340cdcb02083265e.html b/docs/html/group__exponential_gab3a3243853d722c3340cdcb02083265e.html index e89da4a37d..842b540db5 100644 --- a/docs/html/group__exponential_gab3a3243853d722c3340cdcb02083265e.html +++ b/docs/html/group__exponential_gab3a3243853d722c3340cdcb02083265e.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__exponential_gacf37f58fc6f7208ae058241b6b542ced.html b/docs/html/group__exponential_gacf37f58fc6f7208ae058241b6b542ced.html index 9d7c5cd1ee..ed4aaf0077 100644 --- a/docs/html/group__exponential_gacf37f58fc6f7208ae058241b6b542ced.html +++ b/docs/html/group__exponential_gacf37f58fc6f7208ae058241b6b542ced.html @@ -662,8 +662,6 @@

- + diff --git a/docs/html/group__exponential_gad8e0e8ed5b7bdffd7247fbb181d55011.html b/docs/html/group__exponential_gad8e0e8ed5b7bdffd7247fbb181d55011.html index 726ba50f53..d312ef2e01 100644 --- a/docs/html/group__exponential_gad8e0e8ed5b7bdffd7247fbb181d55011.html +++ b/docs/html/group__exponential_gad8e0e8ed5b7bdffd7247fbb181d55011.html @@ -659,8 +659,6 @@

- + diff --git a/docs/html/group__exponential_gaf28f3373821c092b0910e29d8aa8138c.html b/docs/html/group__exponential_gaf28f3373821c092b0910e29d8aa8138c.html index 5c6ced0433..aaa22cce14 100644 --- a/docs/html/group__exponential_gaf28f3373821c092b0910e29d8aa8138c.html +++ b/docs/html/group__exponential_gaf28f3373821c092b0910e29d8aa8138c.html @@ -677,8 +677,6 @@

- + diff --git a/docs/html/group__exponential_gaf5caf2f837c183fa5924d05b64b24def.html b/docs/html/group__exponential_gaf5caf2f837c183fa5924d05b64b24def.html index c56d27d10f..d313eecb95 100644 --- a/docs/html/group__exponential_gaf5caf2f837c183fa5924d05b64b24def.html +++ b/docs/html/group__exponential_gaf5caf2f837c183fa5924d05b64b24def.html @@ -626,8 +626,6 @@

- + diff --git a/docs/html/group__functions.html b/docs/html/group__functions.html index 461838af03..d75e3a44fc 100644 --- a/docs/html/group__functions.html +++ b/docs/html/group__functions.html @@ -210,8 +210,6 @@ - + diff --git a/docs/html/group__hyperbolic.html b/docs/html/group__hyperbolic.html index 58892052df..6cc7fd3555 100644 --- a/docs/html/group__hyperbolic.html +++ b/docs/html/group__hyperbolic.html @@ -203,8 +203,6 @@ - + diff --git a/docs/html/group__hyperbolic_ga0dc9d45fbf29b358f7b5095dbed40256.html b/docs/html/group__hyperbolic_ga0dc9d45fbf29b358f7b5095dbed40256.html index 7730943521..1ae338f090 100644 --- a/docs/html/group__hyperbolic_ga0dc9d45fbf29b358f7b5095dbed40256.html +++ b/docs/html/group__hyperbolic_ga0dc9d45fbf29b358f7b5095dbed40256.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__hyperbolic_ga32818e7959c1a884302b9f05ba8b8797.html b/docs/html/group__hyperbolic_ga32818e7959c1a884302b9f05ba8b8797.html index 5508c6a5da..e4ba07b3d1 100644 --- a/docs/html/group__hyperbolic_ga32818e7959c1a884302b9f05ba8b8797.html +++ b/docs/html/group__hyperbolic_ga32818e7959c1a884302b9f05ba8b8797.html @@ -661,8 +661,6 @@

- + diff --git a/docs/html/group__hyperbolic_ga33b301b28ef48f95b3a6b50b53291c1c.html b/docs/html/group__hyperbolic_ga33b301b28ef48f95b3a6b50b53291c1c.html index 50bd6acddb..ee0266b42f 100644 --- a/docs/html/group__hyperbolic_ga33b301b28ef48f95b3a6b50b53291c1c.html +++ b/docs/html/group__hyperbolic_ga33b301b28ef48f95b3a6b50b53291c1c.html @@ -661,8 +661,6 @@

- + diff --git a/docs/html/group__hyperbolic_ga349e3de4ef3f6e76a1925faf2c24b3b0.html b/docs/html/group__hyperbolic_ga349e3de4ef3f6e76a1925faf2c24b3b0.html index b8886a5336..39c84bb572 100644 --- a/docs/html/group__hyperbolic_ga349e3de4ef3f6e76a1925faf2c24b3b0.html +++ b/docs/html/group__hyperbolic_ga349e3de4ef3f6e76a1925faf2c24b3b0.html @@ -660,8 +660,6 @@

- + diff --git a/docs/html/group__hyperbolic_ga4fe32d4bfda35b6d2196488cb036f185.html b/docs/html/group__hyperbolic_ga4fe32d4bfda35b6d2196488cb036f185.html index a86dfadf52..4f5168be2d 100644 --- a/docs/html/group__hyperbolic_ga4fe32d4bfda35b6d2196488cb036f185.html +++ b/docs/html/group__hyperbolic_ga4fe32d4bfda35b6d2196488cb036f185.html @@ -661,8 +661,6 @@

- + diff --git a/docs/html/group__hyperbolic_ga6dae92bc35a35cf866c19228b6d5e694.html b/docs/html/group__hyperbolic_ga6dae92bc35a35cf866c19228b6d5e694.html index dba30ce6e4..7b09e5e5ec 100644 --- a/docs/html/group__hyperbolic_ga6dae92bc35a35cf866c19228b6d5e694.html +++ b/docs/html/group__hyperbolic_ga6dae92bc35a35cf866c19228b6d5e694.html @@ -661,8 +661,6 @@

- + diff --git a/docs/html/group__hyperbolic_ga9f1d326d08e1125ddd0a032fa7a179af.html b/docs/html/group__hyperbolic_ga9f1d326d08e1125ddd0a032fa7a179af.html index 35be609eee..ac092aa16e 100644 --- a/docs/html/group__hyperbolic_ga9f1d326d08e1125ddd0a032fa7a179af.html +++ b/docs/html/group__hyperbolic_ga9f1d326d08e1125ddd0a032fa7a179af.html @@ -660,8 +660,6 @@

- + diff --git a/docs/html/group__hyperbolic_gaaa1e76a9092bfeb81d711073f975ba26.html b/docs/html/group__hyperbolic_gaaa1e76a9092bfeb81d711073f975ba26.html index a3e22787aa..1a267c44a4 100644 --- a/docs/html/group__hyperbolic_gaaa1e76a9092bfeb81d711073f975ba26.html +++ b/docs/html/group__hyperbolic_gaaa1e76a9092bfeb81d711073f975ba26.html @@ -660,8 +660,6 @@

- + diff --git a/docs/html/group__hyperbolic_gaacfc8bf8fd140b1283300e614c0382b4.html b/docs/html/group__hyperbolic_gaacfc8bf8fd140b1283300e614c0382b4.html index 460a66b2aa..250f9fc71e 100644 --- a/docs/html/group__hyperbolic_gaacfc8bf8fd140b1283300e614c0382b4.html +++ b/docs/html/group__hyperbolic_gaacfc8bf8fd140b1283300e614c0382b4.html @@ -662,8 +662,6 @@

- + diff --git a/docs/html/group__hyperbolic_gab2e9ac37145ddd832e76a2ed724194c9.html b/docs/html/group__hyperbolic_gab2e9ac37145ddd832e76a2ed724194c9.html index 93d5930955..2ea7d385ab 100644 --- a/docs/html/group__hyperbolic_gab2e9ac37145ddd832e76a2ed724194c9.html +++ b/docs/html/group__hyperbolic_gab2e9ac37145ddd832e76a2ed724194c9.html @@ -661,8 +661,6 @@

- + diff --git a/docs/html/group__hyperbolic_gab52648ab8990c126fd024ddf8badb536.html b/docs/html/group__hyperbolic_gab52648ab8990c126fd024ddf8badb536.html index 42330993d9..2cb81bdbe7 100644 --- a/docs/html/group__hyperbolic_gab52648ab8990c126fd024ddf8badb536.html +++ b/docs/html/group__hyperbolic_gab52648ab8990c126fd024ddf8badb536.html @@ -661,8 +661,6 @@

- + diff --git a/docs/html/group__hyperbolic_gad4b8c129553c90d5604003a1e6f711c5.html b/docs/html/group__hyperbolic_gad4b8c129553c90d5604003a1e6f711c5.html index bda62d78cc..87b8574789 100644 --- a/docs/html/group__hyperbolic_gad4b8c129553c90d5604003a1e6f711c5.html +++ b/docs/html/group__hyperbolic_gad4b8c129553c90d5604003a1e6f711c5.html @@ -661,8 +661,6 @@

- + diff --git a/docs/html/group__hyperbolic_gae4658d7c9b116c396866ffa7ff7b47aa.html b/docs/html/group__hyperbolic_gae4658d7c9b116c396866ffa7ff7b47aa.html index c62bbd1ce7..4c352dbcfb 100644 --- a/docs/html/group__hyperbolic_gae4658d7c9b116c396866ffa7ff7b47aa.html +++ b/docs/html/group__hyperbolic_gae4658d7c9b116c396866ffa7ff7b47aa.html @@ -661,8 +661,6 @@

- + diff --git a/docs/html/group__hyperbolic_gafdd0b4e5414191db4ce95026fdd4efad.html b/docs/html/group__hyperbolic_gafdd0b4e5414191db4ce95026fdd4efad.html index 2d54f682e1..af29630fa1 100644 --- a/docs/html/group__hyperbolic_gafdd0b4e5414191db4ce95026fdd4efad.html +++ b/docs/html/group__hyperbolic_gafdd0b4e5414191db4ce95026fdd4efad.html @@ -661,8 +661,6 @@

- + diff --git a/docs/html/group__ieee754.html b/docs/html/group__ieee754.html index 6f103c2c7b..55b13b89fa 100644 --- a/docs/html/group__ieee754.html +++ b/docs/html/group__ieee754.html @@ -203,8 +203,6 @@ - + diff --git a/docs/html/group__ieee754_ga0a4068143a6b59cc0167d6b0eda590c3.html b/docs/html/group__ieee754_ga0a4068143a6b59cc0167d6b0eda590c3.html index eab6f219bb..8b509c745e 100644 --- a/docs/html/group__ieee754_ga0a4068143a6b59cc0167d6b0eda590c3.html +++ b/docs/html/group__ieee754_ga0a4068143a6b59cc0167d6b0eda590c3.html @@ -671,8 +671,6 @@

- + diff --git a/docs/html/group__ieee754_ga300f96ea06042ecfd42f3e3e17787882.html b/docs/html/group__ieee754_ga300f96ea06042ecfd42f3e3e17787882.html index 8b3652c954..206bc12d84 100644 --- a/docs/html/group__ieee754_ga300f96ea06042ecfd42f3e3e17787882.html +++ b/docs/html/group__ieee754_ga300f96ea06042ecfd42f3e3e17787882.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__ieee754_ga3894112eaa757390614470b3c77b2ddb.html b/docs/html/group__ieee754_ga3894112eaa757390614470b3c77b2ddb.html index b524466931..3afc5330a9 100644 --- a/docs/html/group__ieee754_ga3894112eaa757390614470b3c77b2ddb.html +++ b/docs/html/group__ieee754_ga3894112eaa757390614470b3c77b2ddb.html @@ -663,8 +663,6 @@

- + diff --git a/docs/html/group__ieee754_ga3b2f3edbfac7f9e75a410245b728d96d.html b/docs/html/group__ieee754_ga3b2f3edbfac7f9e75a410245b728d96d.html index 63285739a7..572548141c 100644 --- a/docs/html/group__ieee754_ga3b2f3edbfac7f9e75a410245b728d96d.html +++ b/docs/html/group__ieee754_ga3b2f3edbfac7f9e75a410245b728d96d.html @@ -658,8 +658,6 @@

- + diff --git a/docs/html/group__ieee754_ga40ae299a91e28c9285b6521ca12c3fbf.html b/docs/html/group__ieee754_ga40ae299a91e28c9285b6521ca12c3fbf.html index 16c53465aa..bf18d3fb51 100644 --- a/docs/html/group__ieee754_ga40ae299a91e28c9285b6521ca12c3fbf.html +++ b/docs/html/group__ieee754_ga40ae299a91e28c9285b6521ca12c3fbf.html @@ -650,8 +650,6 @@

- + diff --git a/docs/html/group__ieee754_ga46f5764b631e4afe92f87ff3ea1e8524.html b/docs/html/group__ieee754_ga46f5764b631e4afe92f87ff3ea1e8524.html index 39906c0cf4..85e3717236 100644 --- a/docs/html/group__ieee754_ga46f5764b631e4afe92f87ff3ea1e8524.html +++ b/docs/html/group__ieee754_ga46f5764b631e4afe92f87ff3ea1e8524.html @@ -652,8 +652,6 @@

- + diff --git a/docs/html/group__ieee754_ga5ef9f1355859ff017142b92d4eb5516f.html b/docs/html/group__ieee754_ga5ef9f1355859ff017142b92d4eb5516f.html index 9e2a9f1ad6..9d057548bd 100644 --- a/docs/html/group__ieee754_ga5ef9f1355859ff017142b92d4eb5516f.html +++ b/docs/html/group__ieee754_ga5ef9f1355859ff017142b92d4eb5516f.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__ieee754_ga5fa01768959ec399cb0a910af345dd8b.html b/docs/html/group__ieee754_ga5fa01768959ec399cb0a910af345dd8b.html index 99f811a8eb..702f8658b4 100644 --- a/docs/html/group__ieee754_ga5fa01768959ec399cb0a910af345dd8b.html +++ b/docs/html/group__ieee754_ga5fa01768959ec399cb0a910af345dd8b.html @@ -668,8 +668,6 @@

- + diff --git a/docs/html/group__ieee754_ga720ef267847ac42c18eb45878ccf32b5.html b/docs/html/group__ieee754_ga720ef267847ac42c18eb45878ccf32b5.html index 05929c31a6..165a2fda3a 100644 --- a/docs/html/group__ieee754_ga720ef267847ac42c18eb45878ccf32b5.html +++ b/docs/html/group__ieee754_ga720ef267847ac42c18eb45878ccf32b5.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__ieee754_ga89ca09f64d523719b1710b1efd5cea63.html b/docs/html/group__ieee754_ga89ca09f64d523719b1710b1efd5cea63.html index 89771ac462..c01c1be8ef 100644 --- a/docs/html/group__ieee754_ga89ca09f64d523719b1710b1efd5cea63.html +++ b/docs/html/group__ieee754_ga89ca09f64d523719b1710b1efd5cea63.html @@ -644,8 +644,6 @@

- + diff --git a/docs/html/group__ieee754_ga9614c36358884274b162e473e78c1246.html b/docs/html/group__ieee754_ga9614c36358884274b162e473e78c1246.html index 0308e9ca90..88c012c63f 100644 --- a/docs/html/group__ieee754_ga9614c36358884274b162e473e78c1246.html +++ b/docs/html/group__ieee754_ga9614c36358884274b162e473e78c1246.html @@ -646,8 +646,6 @@

- + diff --git a/docs/html/group__ieee754_gacc0d377341a45797cc129a4940f24b60.html b/docs/html/group__ieee754_gacc0d377341a45797cc129a4940f24b60.html index ffb27ff4b7..90abca99a4 100644 --- a/docs/html/group__ieee754_gacc0d377341a45797cc129a4940f24b60.html +++ b/docs/html/group__ieee754_gacc0d377341a45797cc129a4940f24b60.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__ieee754_gad7abe741b69d3032a4c4bd5e66e5524e.html b/docs/html/group__ieee754_gad7abe741b69d3032a4c4bd5e66e5524e.html index f2637887b4..a7844078b5 100644 --- a/docs/html/group__ieee754_gad7abe741b69d3032a4c4bd5e66e5524e.html +++ b/docs/html/group__ieee754_gad7abe741b69d3032a4c4bd5e66e5524e.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__ieee754_gaf1ba6612bfd82759bf6150e2e353e7d3.html b/docs/html/group__ieee754_gaf1ba6612bfd82759bf6150e2e353e7d3.html index 2100e8a27b..29c3ca4321 100644 --- a/docs/html/group__ieee754_gaf1ba6612bfd82759bf6150e2e353e7d3.html +++ b/docs/html/group__ieee754_gaf1ba6612bfd82759bf6150e2e353e7d3.html @@ -644,8 +644,6 @@

- + diff --git a/docs/html/group__invtrigonometric.html b/docs/html/group__invtrigonometric.html index b4dfe04a7d..ce8a19e466 100644 --- a/docs/html/group__invtrigonometric.html +++ b/docs/html/group__invtrigonometric.html @@ -224,8 +224,6 @@ - + diff --git a/docs/html/group__invtrigonometric_ga2d341ed325943bd79fa090d9eba75d9c.html b/docs/html/group__invtrigonometric_ga2d341ed325943bd79fa090d9eba75d9c.html index 8f3450fbf2..a21efbe4e0 100644 --- a/docs/html/group__invtrigonometric_ga2d341ed325943bd79fa090d9eba75d9c.html +++ b/docs/html/group__invtrigonometric_ga2d341ed325943bd79fa090d9eba75d9c.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__invtrigonometric_ga36ea32adf0e59948246e62907f591d1c.html b/docs/html/group__invtrigonometric_ga36ea32adf0e59948246e62907f591d1c.html index 50cf0af3b5..0fc8feaefb 100644 --- a/docs/html/group__invtrigonometric_ga36ea32adf0e59948246e62907f591d1c.html +++ b/docs/html/group__invtrigonometric_ga36ea32adf0e59948246e62907f591d1c.html @@ -674,8 +674,6 @@

- + diff --git a/docs/html/group__invtrigonometric_ga46c6d32a2e7f8ae96c5af9053f093b59.html b/docs/html/group__invtrigonometric_ga46c6d32a2e7f8ae96c5af9053f093b59.html index 17268962cf..9fa83a7c29 100644 --- a/docs/html/group__invtrigonometric_ga46c6d32a2e7f8ae96c5af9053f093b59.html +++ b/docs/html/group__invtrigonometric_ga46c6d32a2e7f8ae96c5af9053f093b59.html @@ -650,8 +650,6 @@

- + diff --git a/docs/html/group__invtrigonometric_ga5b95c0a926215da5fb3f0af9714103cb.html b/docs/html/group__invtrigonometric_ga5b95c0a926215da5fb3f0af9714103cb.html index 9f3452b491..3dba166e91 100644 --- a/docs/html/group__invtrigonometric_ga5b95c0a926215da5fb3f0af9714103cb.html +++ b/docs/html/group__invtrigonometric_ga5b95c0a926215da5fb3f0af9714103cb.html @@ -652,8 +652,6 @@

- + diff --git a/docs/html/group__invtrigonometric_ga864565ce196adf9c2aba4d3d37dac033.html b/docs/html/group__invtrigonometric_ga864565ce196adf9c2aba4d3d37dac033.html index ad098d4863..7bbce93c2b 100644 --- a/docs/html/group__invtrigonometric_ga864565ce196adf9c2aba4d3d37dac033.html +++ b/docs/html/group__invtrigonometric_ga864565ce196adf9c2aba4d3d37dac033.html @@ -655,8 +655,6 @@

- + diff --git a/docs/html/group__invtrigonometric_ga8b18ae3c66963dd65a5301dafa426cd6.html b/docs/html/group__invtrigonometric_ga8b18ae3c66963dd65a5301dafa426cd6.html index 38a896ee99..e66cebf6ce 100644 --- a/docs/html/group__invtrigonometric_ga8b18ae3c66963dd65a5301dafa426cd6.html +++ b/docs/html/group__invtrigonometric_ga8b18ae3c66963dd65a5301dafa426cd6.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__invtrigonometric_gaa4476e86ad2d63ed1ee057fb3bc30354.html b/docs/html/group__invtrigonometric_gaa4476e86ad2d63ed1ee057fb3bc30354.html index c8b2367d70..dc241cbaa0 100644 --- a/docs/html/group__invtrigonometric_gaa4476e86ad2d63ed1ee057fb3bc30354.html +++ b/docs/html/group__invtrigonometric_gaa4476e86ad2d63ed1ee057fb3bc30354.html @@ -670,8 +670,6 @@

- + diff --git a/docs/html/group__invtrigonometric_gaa4962fd095ca6aa9191e290f27d7f16d.html b/docs/html/group__invtrigonometric_gaa4962fd095ca6aa9191e290f27d7f16d.html index 687124abdd..e94ca3e3cb 100644 --- a/docs/html/group__invtrigonometric_gaa4962fd095ca6aa9191e290f27d7f16d.html +++ b/docs/html/group__invtrigonometric_gaa4962fd095ca6aa9191e290f27d7f16d.html @@ -655,8 +655,6 @@

- + diff --git a/docs/html/group__invtrigonometric_gaad2bdaa39988370b7910d041af662efa.html b/docs/html/group__invtrigonometric_gaad2bdaa39988370b7910d041af662efa.html index c2a486228f..530f1ec1d1 100644 --- a/docs/html/group__invtrigonometric_gaad2bdaa39988370b7910d041af662efa.html +++ b/docs/html/group__invtrigonometric_gaad2bdaa39988370b7910d041af662efa.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__invtrigonometric_gab2552ad4688f72f40efa1374ec8ec86f.html b/docs/html/group__invtrigonometric_gab2552ad4688f72f40efa1374ec8ec86f.html index 15a14dd594..e75dc39206 100644 --- a/docs/html/group__invtrigonometric_gab2552ad4688f72f40efa1374ec8ec86f.html +++ b/docs/html/group__invtrigonometric_gab2552ad4688f72f40efa1374ec8ec86f.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__invtrigonometric_gab45103e451eacb913e21269c31dd78ac.html b/docs/html/group__invtrigonometric_gab45103e451eacb913e21269c31dd78ac.html index 99f0483ffa..34c336887b 100644 --- a/docs/html/group__invtrigonometric_gab45103e451eacb913e21269c31dd78ac.html +++ b/docs/html/group__invtrigonometric_gab45103e451eacb913e21269c31dd78ac.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__invtrigonometric_gac046f0bc4a97b845c5dc86dacec11727.html b/docs/html/group__invtrigonometric_gac046f0bc4a97b845c5dc86dacec11727.html index b7a307d6ff..32f20b3231 100644 --- a/docs/html/group__invtrigonometric_gac046f0bc4a97b845c5dc86dacec11727.html +++ b/docs/html/group__invtrigonometric_gac046f0bc4a97b845c5dc86dacec11727.html @@ -655,8 +655,6 @@

- + diff --git a/docs/html/group__invtrigonometric_gac0eea7b91e7d3786328d605b19a44d1d.html b/docs/html/group__invtrigonometric_gac0eea7b91e7d3786328d605b19a44d1d.html index 46d8676029..7a0256bc33 100644 --- a/docs/html/group__invtrigonometric_gac0eea7b91e7d3786328d605b19a44d1d.html +++ b/docs/html/group__invtrigonometric_gac0eea7b91e7d3786328d605b19a44d1d.html @@ -662,8 +662,6 @@

- + diff --git a/docs/html/group__invtrigonometric_gadbe6e2312c935fb0b9f54ec66e332b0d.html b/docs/html/group__invtrigonometric_gadbe6e2312c935fb0b9f54ec66e332b0d.html index 80e7e3b9d6..c08678a95d 100644 --- a/docs/html/group__invtrigonometric_gadbe6e2312c935fb0b9f54ec66e332b0d.html +++ b/docs/html/group__invtrigonometric_gadbe6e2312c935fb0b9f54ec66e332b0d.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__invtrigonometric_gae20e49e35daab1287b4f4efc9acac7a0.html b/docs/html/group__invtrigonometric_gae20e49e35daab1287b4f4efc9acac7a0.html index 0659610ea5..85b64f34bc 100644 --- a/docs/html/group__invtrigonometric_gae20e49e35daab1287b4f4efc9acac7a0.html +++ b/docs/html/group__invtrigonometric_gae20e49e35daab1287b4f4efc9acac7a0.html @@ -652,8 +652,6 @@

- + diff --git a/docs/html/group__invtrigonometric_gae23e11941a656b1ee90ad98e0bf2c4af.html b/docs/html/group__invtrigonometric_gae23e11941a656b1ee90ad98e0bf2c4af.html index a6202ffeee..817aaadba2 100644 --- a/docs/html/group__invtrigonometric_gae23e11941a656b1ee90ad98e0bf2c4af.html +++ b/docs/html/group__invtrigonometric_gae23e11941a656b1ee90ad98e0bf2c4af.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__invtrigonometric_gaea54ee9da2ff37652f5153774cda6dbc.html b/docs/html/group__invtrigonometric_gaea54ee9da2ff37652f5153774cda6dbc.html index 001d656393..b1b35577f2 100644 --- a/docs/html/group__invtrigonometric_gaea54ee9da2ff37652f5153774cda6dbc.html +++ b/docs/html/group__invtrigonometric_gaea54ee9da2ff37652f5153774cda6dbc.html @@ -670,8 +670,6 @@

- + diff --git a/docs/html/group__invtrigonometric_gaec81cb638c6fb481fb61a896fbffd015.html b/docs/html/group__invtrigonometric_gaec81cb638c6fb481fb61a896fbffd015.html index 10fa94d3df..9d643256b3 100644 --- a/docs/html/group__invtrigonometric_gaec81cb638c6fb481fb61a896fbffd015.html +++ b/docs/html/group__invtrigonometric_gaec81cb638c6fb481fb61a896fbffd015.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__invtrigonometric_gaee28d4da1b9c05b252828db73ee5d803.html b/docs/html/group__invtrigonometric_gaee28d4da1b9c05b252828db73ee5d803.html index defdb9bcb2..c1fcfdfaa5 100644 --- a/docs/html/group__invtrigonometric_gaee28d4da1b9c05b252828db73ee5d803.html +++ b/docs/html/group__invtrigonometric_gaee28d4da1b9c05b252828db73ee5d803.html @@ -655,8 +655,6 @@

- + diff --git a/docs/html/group__invtrigonometric_gaf0747610ab5565034b4f67e90537541d.html b/docs/html/group__invtrigonometric_gaf0747610ab5565034b4f67e90537541d.html index 59e53cf0df..83daed873c 100644 --- a/docs/html/group__invtrigonometric_gaf0747610ab5565034b4f67e90537541d.html +++ b/docs/html/group__invtrigonometric_gaf0747610ab5565034b4f67e90537541d.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__invtrigonometric_gaf26eace785637f18f7c14bb14b5b4964.html b/docs/html/group__invtrigonometric_gaf26eace785637f18f7c14bb14b5b4964.html index 9c21eb6e40..c020e8df23 100644 --- a/docs/html/group__invtrigonometric_gaf26eace785637f18f7c14bb14b5b4964.html +++ b/docs/html/group__invtrigonometric_gaf26eace785637f18f7c14bb14b5b4964.html @@ -655,8 +655,6 @@

- + diff --git a/docs/html/group__logical.html b/docs/html/group__logical.html index 0ed57521d9..4f7779d799 100644 --- a/docs/html/group__logical.html +++ b/docs/html/group__logical.html @@ -197,8 +197,6 @@ - + diff --git a/docs/html/group__logical_ga15fbbc6e9bb28066c3f3a13d2e0ce4b4.html b/docs/html/group__logical_ga15fbbc6e9bb28066c3f3a13d2e0ce4b4.html index 62043c3d10..e5e91c1a10 100644 --- a/docs/html/group__logical_ga15fbbc6e9bb28066c3f3a13d2e0ce4b4.html +++ b/docs/html/group__logical_ga15fbbc6e9bb28066c3f3a13d2e0ce4b4.html @@ -645,8 +645,6 @@

- + diff --git a/docs/html/group__logical_ga2b90210c1df2b4ba664a2c92c6482fac.html b/docs/html/group__logical_ga2b90210c1df2b4ba664a2c92c6482fac.html index 71f6513602..4ac2034ceb 100644 --- a/docs/html/group__logical_ga2b90210c1df2b4ba664a2c92c6482fac.html +++ b/docs/html/group__logical_ga2b90210c1df2b4ba664a2c92c6482fac.html @@ -645,8 +645,6 @@

- + diff --git a/docs/html/group__logical_ga363ef2755547b60b16b00bfb58ef21e9.html b/docs/html/group__logical_ga363ef2755547b60b16b00bfb58ef21e9.html index bce9a91672..d57e18a055 100644 --- a/docs/html/group__logical_ga363ef2755547b60b16b00bfb58ef21e9.html +++ b/docs/html/group__logical_ga363ef2755547b60b16b00bfb58ef21e9.html @@ -652,8 +652,6 @@

- + diff --git a/docs/html/group__logical_ga4eadf093443d36b1e0fea9462d64d452.html b/docs/html/group__logical_ga4eadf093443d36b1e0fea9462d64d452.html index 319fce50ae..5381151c4a 100644 --- a/docs/html/group__logical_ga4eadf093443d36b1e0fea9462d64d452.html +++ b/docs/html/group__logical_ga4eadf093443d36b1e0fea9462d64d452.html @@ -638,8 +638,6 @@

- + diff --git a/docs/html/group__logical_ga74b9090a23d420d6382270233e66f7ac.html b/docs/html/group__logical_ga74b9090a23d420d6382270233e66f7ac.html index c4a45bc369..c455f95ab4 100644 --- a/docs/html/group__logical_ga74b9090a23d420d6382270233e66f7ac.html +++ b/docs/html/group__logical_ga74b9090a23d420d6382270233e66f7ac.html @@ -688,8 +688,6 @@

- + diff --git a/docs/html/group__logical_ga7ba7ab421719275f96d76882a4b7097c.html b/docs/html/group__logical_ga7ba7ab421719275f96d76882a4b7097c.html index dcf2cb0294..c9c5932e49 100644 --- a/docs/html/group__logical_ga7ba7ab421719275f96d76882a4b7097c.html +++ b/docs/html/group__logical_ga7ba7ab421719275f96d76882a4b7097c.html @@ -645,8 +645,6 @@

- + diff --git a/docs/html/group__logical_ga87c6af7531a1c2adc94d0947357cc417.html b/docs/html/group__logical_ga87c6af7531a1c2adc94d0947357cc417.html index eab0924a92..f99a6043a4 100644 --- a/docs/html/group__logical_ga87c6af7531a1c2adc94d0947357cc417.html +++ b/docs/html/group__logical_ga87c6af7531a1c2adc94d0947357cc417.html @@ -645,8 +645,6 @@

- + diff --git a/docs/html/group__logical_ga9167cbfa40259bc04e22ee3d40e27c9a.html b/docs/html/group__logical_ga9167cbfa40259bc04e22ee3d40e27c9a.html index f0bfce1413..30a3d2a857 100644 --- a/docs/html/group__logical_ga9167cbfa40259bc04e22ee3d40e27c9a.html +++ b/docs/html/group__logical_ga9167cbfa40259bc04e22ee3d40e27c9a.html @@ -658,8 +658,6 @@

- + diff --git a/docs/html/group__logical_gaa37feb8e6153eb0ac5e256ba632b232e.html b/docs/html/group__logical_gaa37feb8e6153eb0ac5e256ba632b232e.html index f74697c3ca..94dee375cc 100644 --- a/docs/html/group__logical_gaa37feb8e6153eb0ac5e256ba632b232e.html +++ b/docs/html/group__logical_gaa37feb8e6153eb0ac5e256ba632b232e.html @@ -645,8 +645,6 @@

- + diff --git a/docs/html/group__logical_gab60c3fe8652d6a2e7b8538c37784c9df.html b/docs/html/group__logical_gab60c3fe8652d6a2e7b8538c37784c9df.html index 8146535485..f3d8785cdd 100644 --- a/docs/html/group__logical_gab60c3fe8652d6a2e7b8538c37784c9df.html +++ b/docs/html/group__logical_gab60c3fe8652d6a2e7b8538c37784c9df.html @@ -638,8 +638,6 @@

- + diff --git a/docs/html/group__logical_gaf5b68d06dfc2c5d7f19fd067c8c7aa18.html b/docs/html/group__logical_gaf5b68d06dfc2c5d7f19fd067c8c7aa18.html index be3ba329c6..1e7102f322 100644 --- a/docs/html/group__logical_gaf5b68d06dfc2c5d7f19fd067c8c7aa18.html +++ b/docs/html/group__logical_gaf5b68d06dfc2c5d7f19fd067c8c7aa18.html @@ -638,8 +638,6 @@

- + diff --git a/docs/html/group__logical_gaf682b1982dca12b59434101b59aa2a68.html b/docs/html/group__logical_gaf682b1982dca12b59434101b59aa2a68.html index 1abd2b66fc..c9dc924c4c 100644 --- a/docs/html/group__logical_gaf682b1982dca12b59434101b59aa2a68.html +++ b/docs/html/group__logical_gaf682b1982dca12b59434101b59aa2a68.html @@ -658,8 +658,6 @@

- + diff --git a/docs/html/group__memory.html b/docs/html/group__memory.html index f229369826..df50cd1095 100644 --- a/docs/html/group__memory.html +++ b/docs/html/group__memory.html @@ -239,8 +239,6 @@ - + diff --git a/docs/html/group__memory_ga069e9f110c0cb2416812ef8fc5a37555.html b/docs/html/group__memory_ga069e9f110c0cb2416812ef8fc5a37555.html index 275269a721..e540d3f05c 100644 --- a/docs/html/group__memory_ga069e9f110c0cb2416812ef8fc5a37555.html +++ b/docs/html/group__memory_ga069e9f110c0cb2416812ef8fc5a37555.html @@ -597,8 +597,6 @@

- + diff --git a/docs/html/group__memory_ga0c5c814e7f47fcfe1e38e2436afc7203.html b/docs/html/group__memory_ga0c5c814e7f47fcfe1e38e2436afc7203.html index 17be4bab24..e7fff81352 100644 --- a/docs/html/group__memory_ga0c5c814e7f47fcfe1e38e2436afc7203.html +++ b/docs/html/group__memory_ga0c5c814e7f47fcfe1e38e2436afc7203.html @@ -618,8 +618,6 @@

+ diff --git a/docs/html/group__memory_ga1104bd95e3b6b1a682c2fd9c290034d0.html b/docs/html/group__memory_ga1104bd95e3b6b1a682c2fd9c290034d0.html index 40cb08e954..d4cd9b115d 100644 --- a/docs/html/group__memory_ga1104bd95e3b6b1a682c2fd9c290034d0.html +++ b/docs/html/group__memory_ga1104bd95e3b6b1a682c2fd9c290034d0.html @@ -637,8 +637,6 @@

- + diff --git a/docs/html/group__memory_ga1b643b7f66cbab0cbbb3bf454dd82818.html b/docs/html/group__memory_ga1b643b7f66cbab0cbbb3bf454dd82818.html index 71e4728af6..bc4a351954 100644 --- a/docs/html/group__memory_ga1b643b7f66cbab0cbbb3bf454dd82818.html +++ b/docs/html/group__memory_ga1b643b7f66cbab0cbbb3bf454dd82818.html @@ -605,8 +605,6 @@

- + diff --git a/docs/html/group__memory_ga25228d751afbdd3a2c7d09aea5f2ae74.html b/docs/html/group__memory_ga25228d751afbdd3a2c7d09aea5f2ae74.html index fd1b777960..b050b15ce4 100644 --- a/docs/html/group__memory_ga25228d751afbdd3a2c7d09aea5f2ae74.html +++ b/docs/html/group__memory_ga25228d751afbdd3a2c7d09aea5f2ae74.html @@ -608,8 +608,6 @@

+ diff --git a/docs/html/group__memory_ga3914bc9a9604e1c20021fdb28557141d.html b/docs/html/group__memory_ga3914bc9a9604e1c20021fdb28557141d.html index f9092515d0..5b0d378225 100644 --- a/docs/html/group__memory_ga3914bc9a9604e1c20021fdb28557141d.html +++ b/docs/html/group__memory_ga3914bc9a9604e1c20021fdb28557141d.html @@ -603,8 +603,6 @@

- + diff --git a/docs/html/group__memory_ga3c06e236e6195d1a36a43e0fcc7c5eca.html b/docs/html/group__memory_ga3c06e236e6195d1a36a43e0fcc7c5eca.html index 800915efe7..4422b91c2e 100644 --- a/docs/html/group__memory_ga3c06e236e6195d1a36a43e0fcc7c5eca.html +++ b/docs/html/group__memory_ga3c06e236e6195d1a36a43e0fcc7c5eca.html @@ -613,8 +613,6 @@

+ diff --git a/docs/html/group__memory_ga545d28f7a8a147f33980c2fdd00a3eec.html b/docs/html/group__memory_ga545d28f7a8a147f33980c2fdd00a3eec.html index a973225fe1..1194283f04 100644 --- a/docs/html/group__memory_ga545d28f7a8a147f33980c2fdd00a3eec.html +++ b/docs/html/group__memory_ga545d28f7a8a147f33980c2fdd00a3eec.html @@ -618,8 +618,6 @@

+ diff --git a/docs/html/group__memory_ga664bc5b316e0dd3be42aa4c2fd818047.html b/docs/html/group__memory_ga664bc5b316e0dd3be42aa4c2fd818047.html index f513c9d2cd..4e133477b9 100644 --- a/docs/html/group__memory_ga664bc5b316e0dd3be42aa4c2fd818047.html +++ b/docs/html/group__memory_ga664bc5b316e0dd3be42aa4c2fd818047.html @@ -597,8 +597,6 @@

- + diff --git a/docs/html/group__memory_ga92b6c322f7422825155c2a590be84f09.html b/docs/html/group__memory_ga92b6c322f7422825155c2a590be84f09.html index a1d7de8326..2eca0a4b46 100644 --- a/docs/html/group__memory_ga92b6c322f7422825155c2a590be84f09.html +++ b/docs/html/group__memory_ga92b6c322f7422825155c2a590be84f09.html @@ -624,8 +624,6 @@

- + diff --git a/docs/html/group__memory_gab1add731db6f65a080c9ec8b4a125858.html b/docs/html/group__memory_gab1add731db6f65a080c9ec8b4a125858.html index 03c474e04c..746a16d78f 100644 --- a/docs/html/group__memory_gab1add731db6f65a080c9ec8b4a125858.html +++ b/docs/html/group__memory_gab1add731db6f65a080c9ec8b4a125858.html @@ -608,8 +608,6 @@

+ diff --git a/docs/html/group__memory_gac4423607571a261fa6db058e09195c93.html b/docs/html/group__memory_gac4423607571a261fa6db058e09195c93.html index a2b9003317..98ef982c52 100644 --- a/docs/html/group__memory_gac4423607571a261fa6db058e09195c93.html +++ b/docs/html/group__memory_gac4423607571a261fa6db058e09195c93.html @@ -618,8 +618,6 @@

+ diff --git a/docs/html/group__memory_gad05ab928f3e9aa972a7e7146f76cce13.html b/docs/html/group__memory_gad05ab928f3e9aa972a7e7146f76cce13.html index bd8a1579f0..f66cc0af90 100644 --- a/docs/html/group__memory_gad05ab928f3e9aa972a7e7146f76cce13.html +++ b/docs/html/group__memory_gad05ab928f3e9aa972a7e7146f76cce13.html @@ -608,8 +608,6 @@

+ diff --git a/docs/html/group__memory_gae685b8647a1587dd880773310538c3c3.html b/docs/html/group__memory_gae685b8647a1587dd880773310538c3c3.html index d4731a137f..2d5ba31d9d 100644 --- a/docs/html/group__memory_gae685b8647a1587dd880773310538c3c3.html +++ b/docs/html/group__memory_gae685b8647a1587dd880773310538c3c3.html @@ -618,8 +618,6 @@

+ diff --git a/docs/html/group__operators.html b/docs/html/group__operators.html index 906dc97381..1c5321bd97 100644 --- a/docs/html/group__operators.html +++ b/docs/html/group__operators.html @@ -197,8 +197,6 @@ - + diff --git a/docs/html/group__operators_ga06eee505775e24c81fa5f5b22382251f.html b/docs/html/group__operators_ga06eee505775e24c81fa5f5b22382251f.html index 8f9f9d9694..fba8d86c1d 100644 --- a/docs/html/group__operators_ga06eee505775e24c81fa5f5b22382251f.html +++ b/docs/html/group__operators_ga06eee505775e24c81fa5f5b22382251f.html @@ -664,8 +664,6 @@

- + diff --git a/docs/html/group__operators_ga0909b456d35f4111012b71e9bba92ede.html b/docs/html/group__operators_ga0909b456d35f4111012b71e9bba92ede.html index 3fb7884147..a2d695a58e 100644 --- a/docs/html/group__operators_ga0909b456d35f4111012b71e9bba92ede.html +++ b/docs/html/group__operators_ga0909b456d35f4111012b71e9bba92ede.html @@ -659,8 +659,6 @@

- + diff --git a/docs/html/group__operators_ga205ca694d591b328c1d3830bd0b4caec.html b/docs/html/group__operators_ga205ca694d591b328c1d3830bd0b4caec.html index 7f8e0da770..e45b680423 100644 --- a/docs/html/group__operators_ga205ca694d591b328c1d3830bd0b4caec.html +++ b/docs/html/group__operators_ga205ca694d591b328c1d3830bd0b4caec.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__operators_ga8b7bbe9ef3171d65271795ff14c98cc9.html b/docs/html/group__operators_ga8b7bbe9ef3171d65271795ff14c98cc9.html index 5e28384612..b0ec6a4f8d 100644 --- a/docs/html/group__operators_ga8b7bbe9ef3171d65271795ff14c98cc9.html +++ b/docs/html/group__operators_ga8b7bbe9ef3171d65271795ff14c98cc9.html @@ -663,8 +663,6 @@

- + diff --git a/docs/html/group__operators_ga9622c49784c564f93798074ac6e6fe1f.html b/docs/html/group__operators_ga9622c49784c564f93798074ac6e6fe1f.html index f73e901dff..e96841b0fd 100644 --- a/docs/html/group__operators_ga9622c49784c564f93798074ac6e6fe1f.html +++ b/docs/html/group__operators_ga9622c49784c564f93798074ac6e6fe1f.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__operators_ga9765ff0c68fdbe8295fc72526f8e3202.html b/docs/html/group__operators_ga9765ff0c68fdbe8295fc72526f8e3202.html index 7593073ca7..1de51593b7 100644 --- a/docs/html/group__operators_ga9765ff0c68fdbe8295fc72526f8e3202.html +++ b/docs/html/group__operators_ga9765ff0c68fdbe8295fc72526f8e3202.html @@ -650,8 +650,6 @@

- + diff --git a/docs/html/group__operators_gab2208a00c219fcd2f9387d1fefd61d9f.html b/docs/html/group__operators_gab2208a00c219fcd2f9387d1fefd61d9f.html index 76e07d9b4e..1e21896e7e 100644 --- a/docs/html/group__operators_gab2208a00c219fcd2f9387d1fefd61d9f.html +++ b/docs/html/group__operators_gab2208a00c219fcd2f9387d1fefd61d9f.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__operators_gad742f5ce084044535470a38bca2d1cc5.html b/docs/html/group__operators_gad742f5ce084044535470a38bca2d1cc5.html index 98cf9951c3..ccda0a96f9 100644 --- a/docs/html/group__operators_gad742f5ce084044535470a38bca2d1cc5.html +++ b/docs/html/group__operators_gad742f5ce084044535470a38bca2d1cc5.html @@ -652,8 +652,6 @@

- + diff --git a/docs/html/group__operators_gae0ef9200ab790a71835ff39ff61061a5.html b/docs/html/group__operators_gae0ef9200ab790a71835ff39ff61061a5.html index 16f5793516..0ffb968a1f 100644 --- a/docs/html/group__operators_gae0ef9200ab790a71835ff39ff61061a5.html +++ b/docs/html/group__operators_gae0ef9200ab790a71835ff39ff61061a5.html @@ -675,8 +675,6 @@

- + diff --git a/docs/html/group__operators_gae32a7f0a9465fe52d38216d9f5bb6657.html b/docs/html/group__operators_gae32a7f0a9465fe52d38216d9f5bb6657.html index c22e15ec39..34fc47750d 100644 --- a/docs/html/group__operators_gae32a7f0a9465fe52d38216d9f5bb6657.html +++ b/docs/html/group__operators_gae32a7f0a9465fe52d38216d9f5bb6657.html @@ -674,8 +674,6 @@

- + diff --git a/docs/html/group__operators_gae5098d24d083fd3e2f9d54135c8a84d8.html b/docs/html/group__operators_gae5098d24d083fd3e2f9d54135c8a84d8.html index dcdfda89e7..dd33d9c789 100644 --- a/docs/html/group__operators_gae5098d24d083fd3e2f9d54135c8a84d8.html +++ b/docs/html/group__operators_gae5098d24d083fd3e2f9d54135c8a84d8.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__operators_gaeb0fe3ed9cad2906b5e7ab7a6a0d7ea8.html b/docs/html/group__operators_gaeb0fe3ed9cad2906b5e7ab7a6a0d7ea8.html index 6ec0d7c663..2e8bf854ab 100644 --- a/docs/html/group__operators_gaeb0fe3ed9cad2906b5e7ab7a6a0d7ea8.html +++ b/docs/html/group__operators_gaeb0fe3ed9cad2906b5e7ab7a6a0d7ea8.html @@ -666,8 +666,6 @@

- + diff --git a/docs/html/group__polynomial.html b/docs/html/group__polynomial.html index a8bb0503fa..bd389e138f 100644 --- a/docs/html/group__polynomial.html +++ b/docs/html/group__polynomial.html @@ -179,8 +179,6 @@ - + diff --git a/docs/html/group__polynomial_ga354e9d0edf47f3f2742a9d5c29c9706b.html b/docs/html/group__polynomial_ga354e9d0edf47f3f2742a9d5c29c9706b.html index 176601b9a9..0290554a19 100644 --- a/docs/html/group__polynomial_ga354e9d0edf47f3f2742a9d5c29c9706b.html +++ b/docs/html/group__polynomial_ga354e9d0edf47f3f2742a9d5c29c9706b.html @@ -672,8 +672,6 @@

- + diff --git a/docs/html/group__polynomial_ga7bb3ce7bbd71384fadab1bcdd1905a25.html b/docs/html/group__polynomial_ga7bb3ce7bbd71384fadab1bcdd1905a25.html index 35a9bcc4da..921fbb5d91 100644 --- a/docs/html/group__polynomial_ga7bb3ce7bbd71384fadab1bcdd1905a25.html +++ b/docs/html/group__polynomial_ga7bb3ce7bbd71384fadab1bcdd1905a25.html @@ -661,8 +661,6 @@

- + diff --git a/docs/html/group__polynomial_ga90f1fb37df377d7fd9f95282ec3c70cb.html b/docs/html/group__polynomial_ga90f1fb37df377d7fd9f95282ec3c70cb.html index 716cd88a76..e4c3a24597 100644 --- a/docs/html/group__polynomial_ga90f1fb37df377d7fd9f95282ec3c70cb.html +++ b/docs/html/group__polynomial_ga90f1fb37df377d7fd9f95282ec3c70cb.html @@ -697,8 +697,6 @@

- + diff --git a/docs/html/group__polynomial_gaa467a68961dec631016333670bfda00f.html b/docs/html/group__polynomial_gaa467a68961dec631016333670bfda00f.html index b9e3c5d299..ce53dbb1ab 100644 --- a/docs/html/group__polynomial_gaa467a68961dec631016333670bfda00f.html +++ b/docs/html/group__polynomial_gaa467a68961dec631016333670bfda00f.html @@ -675,8 +675,6 @@

- + diff --git a/docs/html/group__polynomial_gab7e6a80c12091ba2b3db86eed90fb15e.html b/docs/html/group__polynomial_gab7e6a80c12091ba2b3db86eed90fb15e.html index f4f1540f40..9af55ba598 100644 --- a/docs/html/group__polynomial_gab7e6a80c12091ba2b3db86eed90fb15e.html +++ b/docs/html/group__polynomial_gab7e6a80c12091ba2b3db86eed90fb15e.html @@ -671,8 +671,6 @@

- + diff --git a/docs/html/group__polynomial_gaee731c76b893d8394075aaa0e5a16cf5.html b/docs/html/group__polynomial_gaee731c76b893d8394075aaa0e5a16cf5.html index c4acac7c93..a276d692ba 100644 --- a/docs/html/group__polynomial_gaee731c76b893d8394075aaa0e5a16cf5.html +++ b/docs/html/group__polynomial_gaee731c76b893d8394075aaa0e5a16cf5.html @@ -673,8 +673,6 @@

- + diff --git a/docs/html/group__predicates.html b/docs/html/group__predicates.html index c334a25020..f315288ce8 100644 --- a/docs/html/group__predicates.html +++ b/docs/html/group__predicates.html @@ -225,8 +225,6 @@ - + diff --git a/docs/html/group__predicates_ga1a048a713642bb0aa9c32d2492e0a14d.html b/docs/html/group__predicates_ga1a048a713642bb0aa9c32d2492e0a14d.html index 022077b0ca..094ab68194 100644 --- a/docs/html/group__predicates_ga1a048a713642bb0aa9c32d2492e0a14d.html +++ b/docs/html/group__predicates_ga1a048a713642bb0aa9c32d2492e0a14d.html @@ -667,8 +667,6 @@

- + diff --git a/docs/html/group__predicates_ga2225cc46f46e4f1d12681e8c949e1413.html b/docs/html/group__predicates_ga2225cc46f46e4f1d12681e8c949e1413.html index 6cd18c21f4..a7d94bc680 100644 --- a/docs/html/group__predicates_ga2225cc46f46e4f1d12681e8c949e1413.html +++ b/docs/html/group__predicates_ga2225cc46f46e4f1d12681e8c949e1413.html @@ -665,8 +665,6 @@

- + diff --git a/docs/html/group__predicates_ga362321d34c6537526509b337c67febe1.html b/docs/html/group__predicates_ga362321d34c6537526509b337c67febe1.html index 369cbe143f..a572e6879a 100644 --- a/docs/html/group__predicates_ga362321d34c6537526509b337c67febe1.html +++ b/docs/html/group__predicates_ga362321d34c6537526509b337c67febe1.html @@ -665,8 +665,6 @@

- + diff --git a/docs/html/group__predicates_ga38314db2a1da99c8bdec146b4ed56c9b.html b/docs/html/group__predicates_ga38314db2a1da99c8bdec146b4ed56c9b.html index 6025b0d146..82a7b52bce 100644 --- a/docs/html/group__predicates_ga38314db2a1da99c8bdec146b4ed56c9b.html +++ b/docs/html/group__predicates_ga38314db2a1da99c8bdec146b4ed56c9b.html @@ -645,8 +645,6 @@

- + diff --git a/docs/html/group__predicates_ga48a2d616acbfb726c6e0e476ecbed23e.html b/docs/html/group__predicates_ga48a2d616acbfb726c6e0e476ecbed23e.html index d591ab4590..da0bc946a9 100644 --- a/docs/html/group__predicates_ga48a2d616acbfb726c6e0e476ecbed23e.html +++ b/docs/html/group__predicates_ga48a2d616acbfb726c6e0e476ecbed23e.html @@ -655,8 +655,6 @@

- + diff --git a/docs/html/group__predicates_ga4cae3be0b087d2f772d987e3b1cff4d1.html b/docs/html/group__predicates_ga4cae3be0b087d2f772d987e3b1cff4d1.html index 372af64d72..da6db95d9e 100644 --- a/docs/html/group__predicates_ga4cae3be0b087d2f772d987e3b1cff4d1.html +++ b/docs/html/group__predicates_ga4cae3be0b087d2f772d987e3b1cff4d1.html @@ -645,8 +645,6 @@

- + diff --git a/docs/html/group__predicates_ga629dd840e2cfda148550657259dcb18c.html b/docs/html/group__predicates_ga629dd840e2cfda148550657259dcb18c.html index a13b369594..2df47f5cfc 100644 --- a/docs/html/group__predicates_ga629dd840e2cfda148550657259dcb18c.html +++ b/docs/html/group__predicates_ga629dd840e2cfda148550657259dcb18c.html @@ -662,8 +662,6 @@

- + diff --git a/docs/html/group__predicates_ga6bc0915a16d2acf675f8fc76f2781cc1.html b/docs/html/group__predicates_ga6bc0915a16d2acf675f8fc76f2781cc1.html index b6ef8fae50..dad986d0a8 100644 --- a/docs/html/group__predicates_ga6bc0915a16d2acf675f8fc76f2781cc1.html +++ b/docs/html/group__predicates_ga6bc0915a16d2acf675f8fc76f2781cc1.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__predicates_ga6e7a64c2a6bf2fc626451e81cc749c2a.html b/docs/html/group__predicates_ga6e7a64c2a6bf2fc626451e81cc749c2a.html index 14c6834891..9a9031cd25 100644 --- a/docs/html/group__predicates_ga6e7a64c2a6bf2fc626451e81cc749c2a.html +++ b/docs/html/group__predicates_ga6e7a64c2a6bf2fc626451e81cc749c2a.html @@ -669,8 +669,6 @@

- + diff --git a/docs/html/group__predicates_ga78ec194ea55cce9241f3fcfae74de8ce.html b/docs/html/group__predicates_ga78ec194ea55cce9241f3fcfae74de8ce.html index d8fa13847d..34aa402a69 100644 --- a/docs/html/group__predicates_ga78ec194ea55cce9241f3fcfae74de8ce.html +++ b/docs/html/group__predicates_ga78ec194ea55cce9241f3fcfae74de8ce.html @@ -665,8 +665,6 @@

- + diff --git a/docs/html/group__predicates_ga7ba2adf258c1260146322c1148845c15.html b/docs/html/group__predicates_ga7ba2adf258c1260146322c1148845c15.html index df34e827d9..7f844f4a4e 100644 --- a/docs/html/group__predicates_ga7ba2adf258c1260146322c1148845c15.html +++ b/docs/html/group__predicates_ga7ba2adf258c1260146322c1148845c15.html @@ -653,8 +653,6 @@

- + diff --git a/docs/html/group__predicates_ga8769c9b7cb829f6cb787848e5cd35e05.html b/docs/html/group__predicates_ga8769c9b7cb829f6cb787848e5cd35e05.html index 1d69563957..ddf638bb9f 100644 --- a/docs/html/group__predicates_ga8769c9b7cb829f6cb787848e5cd35e05.html +++ b/docs/html/group__predicates_ga8769c9b7cb829f6cb787848e5cd35e05.html @@ -664,8 +664,6 @@

- + diff --git a/docs/html/group__predicates_ga916b353f1b02f20cfda5c1f0e30481a2.html b/docs/html/group__predicates_ga916b353f1b02f20cfda5c1f0e30481a2.html index 532779a50b..cb1dcd636a 100644 --- a/docs/html/group__predicates_ga916b353f1b02f20cfda5c1f0e30481a2.html +++ b/docs/html/group__predicates_ga916b353f1b02f20cfda5c1f0e30481a2.html @@ -648,8 +648,6 @@

- + diff --git a/docs/html/group__predicates_gab4ac6581bc12221d6bca09ed24835060.html b/docs/html/group__predicates_gab4ac6581bc12221d6bca09ed24835060.html index a381dac34f..9c1375e4e0 100644 --- a/docs/html/group__predicates_gab4ac6581bc12221d6bca09ed24835060.html +++ b/docs/html/group__predicates_gab4ac6581bc12221d6bca09ed24835060.html @@ -663,8 +663,6 @@

- + diff --git a/docs/html/group__predicates_gac7357b852948396d38469bc6fa05a066.html b/docs/html/group__predicates_gac7357b852948396d38469bc6fa05a066.html index b1e725c252..e6558be975 100644 --- a/docs/html/group__predicates_gac7357b852948396d38469bc6fa05a066.html +++ b/docs/html/group__predicates_gac7357b852948396d38469bc6fa05a066.html @@ -647,8 +647,6 @@

- + diff --git a/docs/html/group__predicates_gad8c0f5b1fcc6893e05d6460f7846006e.html b/docs/html/group__predicates_gad8c0f5b1fcc6893e05d6460f7846006e.html index 6ac42af3ef..76a5cdf82a 100644 --- a/docs/html/group__predicates_gad8c0f5b1fcc6893e05d6460f7846006e.html +++ b/docs/html/group__predicates_gad8c0f5b1fcc6893e05d6460f7846006e.html @@ -668,8 +668,6 @@

- + diff --git a/docs/html/group__predicates_gadb59eac8d4aed0fa759b6feadcefc406.html b/docs/html/group__predicates_gadb59eac8d4aed0fa759b6feadcefc406.html index 89c35b2e51..9d24a1cf80 100644 --- a/docs/html/group__predicates_gadb59eac8d4aed0fa759b6feadcefc406.html +++ b/docs/html/group__predicates_gadb59eac8d4aed0fa759b6feadcefc406.html @@ -662,8 +662,6 @@

- + diff --git a/docs/html/group__predicates_gae42468308e898fb7528cad77e70f0784.html b/docs/html/group__predicates_gae42468308e898fb7528cad77e70f0784.html index 1b76f0709a..57bc75057d 100644 --- a/docs/html/group__predicates_gae42468308e898fb7528cad77e70f0784.html +++ b/docs/html/group__predicates_gae42468308e898fb7528cad77e70f0784.html @@ -662,8 +662,6 @@

- + diff --git a/docs/html/group__predicates_gae4625c98cb401e459e64f3ef3574c56c.html b/docs/html/group__predicates_gae4625c98cb401e459e64f3ef3574c56c.html index 829a5ee9e4..a6790ef6bd 100644 --- a/docs/html/group__predicates_gae4625c98cb401e459e64f3ef3574c56c.html +++ b/docs/html/group__predicates_gae4625c98cb401e459e64f3ef3574c56c.html @@ -669,8 +669,6 @@

- + diff --git a/docs/html/group__predicates_gae7f301f7acb3b0f0830cba0153484c3d.html b/docs/html/group__predicates_gae7f301f7acb3b0f0830cba0153484c3d.html index 686793729c..dfffd32efe 100644 --- a/docs/html/group__predicates_gae7f301f7acb3b0f0830cba0153484c3d.html +++ b/docs/html/group__predicates_gae7f301f7acb3b0f0830cba0153484c3d.html @@ -661,8 +661,6 @@

- + diff --git a/docs/html/group__predicates_gaf47a88cced054b2d5bc4b4f4ed8debd1.html b/docs/html/group__predicates_gaf47a88cced054b2d5bc4b4f4ed8debd1.html index c76d7e7858..1b6afe25d6 100644 --- a/docs/html/group__predicates_gaf47a88cced054b2d5bc4b4f4ed8debd1.html +++ b/docs/html/group__predicates_gaf47a88cced054b2d5bc4b4f4ed8debd1.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__proba.html b/docs/html/group__proba.html index b3fd09cc58..d1e3ebeace 100644 --- a/docs/html/group__proba.html +++ b/docs/html/group__proba.html @@ -154,8 +154,6 @@ - + diff --git a/docs/html/group__reduction.html b/docs/html/group__reduction.html index 011480ea34..1c2413facd 100644 --- a/docs/html/group__reduction.html +++ b/docs/html/group__reduction.html @@ -181,8 +181,6 @@ - + diff --git a/docs/html/group__reduction_ga137e79b9fcabc8ebe46e75b300beaf03.html b/docs/html/group__reduction_ga137e79b9fcabc8ebe46e75b300beaf03.html index c97f8d406a..89e7f41aeb 100644 --- a/docs/html/group__reduction_ga137e79b9fcabc8ebe46e75b300beaf03.html +++ b/docs/html/group__reduction_ga137e79b9fcabc8ebe46e75b300beaf03.html @@ -659,8 +659,6 @@

- + diff --git a/docs/html/group__reduction_ga66505398697cefc9ea7b11b0ee2c7def.html b/docs/html/group__reduction_ga66505398697cefc9ea7b11b0ee2c7def.html index 402b55517e..6a67a79140 100644 --- a/docs/html/group__reduction_ga66505398697cefc9ea7b11b0ee2c7def.html +++ b/docs/html/group__reduction_ga66505398697cefc9ea7b11b0ee2c7def.html @@ -652,8 +652,6 @@

- + diff --git a/docs/html/group__reduction_ga6bac192090779b76bc7ffe5425fcabc8.html b/docs/html/group__reduction_ga6bac192090779b76bc7ffe5425fcabc8.html index 8416384f58..c3c7f2773c 100644 --- a/docs/html/group__reduction_ga6bac192090779b76bc7ffe5425fcabc8.html +++ b/docs/html/group__reduction_ga6bac192090779b76bc7ffe5425fcabc8.html @@ -652,8 +652,6 @@

- + diff --git a/docs/html/group__reduction_ga7b42b9a36a5956e9416e5a68386f76f4.html b/docs/html/group__reduction_ga7b42b9a36a5956e9416e5a68386f76f4.html index 918a3cc932..e007f6e5af 100644 --- a/docs/html/group__reduction_ga7b42b9a36a5956e9416e5a68386f76f4.html +++ b/docs/html/group__reduction_ga7b42b9a36a5956e9416e5a68386f76f4.html @@ -645,8 +645,6 @@

- + diff --git a/docs/html/group__reduction_ga8470a6fd7f9d7393c92ec63ca8ef050e.html b/docs/html/group__reduction_ga8470a6fd7f9d7393c92ec63ca8ef050e.html index d09b5f7066..e71792af40 100644 --- a/docs/html/group__reduction_ga8470a6fd7f9d7393c92ec63ca8ef050e.html +++ b/docs/html/group__reduction_ga8470a6fd7f9d7393c92ec63ca8ef050e.html @@ -645,8 +645,6 @@

- + diff --git a/docs/html/group__reduction_gaa1db4fb3b560614916f4a5c33bedd5f1.html b/docs/html/group__reduction_gaa1db4fb3b560614916f4a5c33bedd5f1.html index ac67dd38a6..be5f1336ae 100644 --- a/docs/html/group__reduction_gaa1db4fb3b560614916f4a5c33bedd5f1.html +++ b/docs/html/group__reduction_gaa1db4fb3b560614916f4a5c33bedd5f1.html @@ -638,8 +638,6 @@

- + diff --git a/docs/html/group__reduction_gaba39938f8cf3fdaaf2380b88b3f646cf.html b/docs/html/group__reduction_gaba39938f8cf3fdaaf2380b88b3f646cf.html index c9a58c6f48..eea53a4748 100644 --- a/docs/html/group__reduction_gaba39938f8cf3fdaaf2380b88b3f646cf.html +++ b/docs/html/group__reduction_gaba39938f8cf3fdaaf2380b88b3f646cf.html @@ -652,8 +652,6 @@

- + diff --git a/docs/html/group__rounding.html b/docs/html/group__rounding.html index ec2dd377fa..7ede183934 100644 --- a/docs/html/group__rounding.html +++ b/docs/html/group__rounding.html @@ -179,8 +179,6 @@ - + diff --git a/docs/html/group__rounding_ga1fd0ebf298c8ca222374b621cf059750.html b/docs/html/group__rounding_ga1fd0ebf298c8ca222374b621cf059750.html index 53540eb911..86a4d5aae0 100644 --- a/docs/html/group__rounding_ga1fd0ebf298c8ca222374b621cf059750.html +++ b/docs/html/group__rounding_ga1fd0ebf298c8ca222374b621cf059750.html @@ -657,8 +657,6 @@

- + diff --git a/docs/html/group__rounding_ga3fe2cd9f450620121afe84a493f45aa7.html b/docs/html/group__rounding_ga3fe2cd9f450620121afe84a493f45aa7.html index f5dd6cdd68..086fd09764 100644 --- a/docs/html/group__rounding_ga3fe2cd9f450620121afe84a493f45aa7.html +++ b/docs/html/group__rounding_ga3fe2cd9f450620121afe84a493f45aa7.html @@ -647,8 +647,6 @@

- + diff --git a/docs/html/group__rounding_ga9f22991052abdd78ebc5e87e31631540.html b/docs/html/group__rounding_ga9f22991052abdd78ebc5e87e31631540.html index d8d9b6ddb5..af0372e459 100644 --- a/docs/html/group__rounding_ga9f22991052abdd78ebc5e87e31631540.html +++ b/docs/html/group__rounding_ga9f22991052abdd78ebc5e87e31631540.html @@ -657,8 +657,6 @@

- + diff --git a/docs/html/group__rounding_gae7cb49618932a9d2bcb50758aedc4ab3.html b/docs/html/group__rounding_gae7cb49618932a9d2bcb50758aedc4ab3.html index 68236c5428..7e3eede8e5 100644 --- a/docs/html/group__rounding_gae7cb49618932a9d2bcb50758aedc4ab3.html +++ b/docs/html/group__rounding_gae7cb49618932a9d2bcb50758aedc4ab3.html @@ -659,8 +659,6 @@

- + diff --git a/docs/html/group__rounding_gaf23afad64ceaef8914f279dc10f03faf.html b/docs/html/group__rounding_gaf23afad64ceaef8914f279dc10f03faf.html index 9ba3d0675f..66f72e8152 100644 --- a/docs/html/group__rounding_gaf23afad64ceaef8914f279dc10f03faf.html +++ b/docs/html/group__rounding_gaf23afad64ceaef8914f279dc10f03faf.html @@ -675,8 +675,6 @@

- + diff --git a/docs/html/group__rounding_gafde17ae255fef25fc9015dabc599c701.html b/docs/html/group__rounding_gafde17ae255fef25fc9015dabc599c701.html index c8298656f2..52d4cf3eba 100644 --- a/docs/html/group__rounding_gafde17ae255fef25fc9015dabc599c701.html +++ b/docs/html/group__rounding_gafde17ae255fef25fc9015dabc599c701.html @@ -660,8 +660,6 @@

- + diff --git a/docs/html/group__scan.html b/docs/html/group__scan.html index 2aa49d3212..30fb673ee4 100644 --- a/docs/html/group__scan.html +++ b/docs/html/group__scan.html @@ -163,8 +163,6 @@ - + diff --git a/docs/html/group__scan_ga999433dcb57f95f8d149d92e68c071f0.html b/docs/html/group__scan_ga999433dcb57f95f8d149d92e68c071f0.html index 3d8f7e9551..5b566facc5 100644 --- a/docs/html/group__scan_ga999433dcb57f95f8d149d92e68c071f0.html +++ b/docs/html/group__scan_ga999433dcb57f95f8d149d92e68c071f0.html @@ -611,8 +611,6 @@

- + diff --git a/docs/html/group__shuffling.html b/docs/html/group__shuffling.html index 0fcf62c970..7fe5ddb799 100644 --- a/docs/html/group__shuffling.html +++ b/docs/html/group__shuffling.html @@ -163,8 +163,6 @@ - + diff --git a/docs/html/group__shuffling_gaa8fb67b18a0c3046d9281ed21953444d.html b/docs/html/group__shuffling_gaa8fb67b18a0c3046d9281ed21953444d.html index 1cc085eb87..087977081d 100644 --- a/docs/html/group__shuffling_gaa8fb67b18a0c3046d9281ed21953444d.html +++ b/docs/html/group__shuffling_gaa8fb67b18a0c3046d9281ed21953444d.html @@ -634,8 +634,6 @@

- + diff --git a/docs/html/group__simd.html b/docs/html/group__simd.html index f4ba59f8f6..b2877d27c2 100644 --- a/docs/html/group__simd.html +++ b/docs/html/group__simd.html @@ -172,8 +172,6 @@ - + diff --git a/docs/html/group__simd__types.html b/docs/html/group__simd__types.html index 1b79f30539..5c4ae0c3be 100644 --- a/docs/html/group__simd__types.html +++ b/docs/html/group__simd__types.html @@ -198,8 +198,6 @@ - + diff --git a/docs/html/group__special.html b/docs/html/group__special.html index e52ca94855..a91e422666 100644 --- a/docs/html/group__special.html +++ b/docs/html/group__special.html @@ -218,8 +218,6 @@ - + diff --git a/docs/html/group__special_ga170dd94fa3261f88e1cbede2d868e16f.html b/docs/html/group__special_ga170dd94fa3261f88e1cbede2d868e16f.html index 4d1d6cfe4e..a79ed11035 100644 --- a/docs/html/group__special_ga170dd94fa3261f88e1cbede2d868e16f.html +++ b/docs/html/group__special_ga170dd94fa3261f88e1cbede2d868e16f.html @@ -659,8 +659,6 @@

- + diff --git a/docs/html/group__special_ga1edb346d12d2e1bd27c63712d0e06a5d.html b/docs/html/group__special_ga1edb346d12d2e1bd27c63712d0e06a5d.html index 5151accf39..57590616eb 100644 --- a/docs/html/group__special_ga1edb346d12d2e1bd27c63712d0e06a5d.html +++ b/docs/html/group__special_ga1edb346d12d2e1bd27c63712d0e06a5d.html @@ -659,8 +659,6 @@

- + diff --git a/docs/html/group__special_ga28cfdcc15a0eb0150019bbc1e6652ceb.html b/docs/html/group__special_ga28cfdcc15a0eb0150019bbc1e6652ceb.html index ba2c553569..eb4e970fc1 100644 --- a/docs/html/group__special_ga28cfdcc15a0eb0150019bbc1e6652ceb.html +++ b/docs/html/group__special_ga28cfdcc15a0eb0150019bbc1e6652ceb.html @@ -655,8 +655,6 @@

- + diff --git a/docs/html/group__special_ga389ba76da33441489ce62a08b142f782.html b/docs/html/group__special_ga389ba76da33441489ce62a08b142f782.html index 838c1a2160..40b788419f 100644 --- a/docs/html/group__special_ga389ba76da33441489ce62a08b142f782.html +++ b/docs/html/group__special_ga389ba76da33441489ce62a08b142f782.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__special_ga42d5ac21f0704af15f1a621f8b10f086.html b/docs/html/group__special_ga42d5ac21f0704af15f1a621f8b10f086.html index e65d7895dc..6ba3fb219c 100644 --- a/docs/html/group__special_ga42d5ac21f0704af15f1a621f8b10f086.html +++ b/docs/html/group__special_ga42d5ac21f0704af15f1a621f8b10f086.html @@ -660,8 +660,6 @@

- + diff --git a/docs/html/group__special_ga61d15ea4565d12bf9dbbe92491ea064a.html b/docs/html/group__special_ga61d15ea4565d12bf9dbbe92491ea064a.html index e4df255ba1..21b8b5c1e8 100644 --- a/docs/html/group__special_ga61d15ea4565d12bf9dbbe92491ea064a.html +++ b/docs/html/group__special_ga61d15ea4565d12bf9dbbe92491ea064a.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__special_ga6bfb7aac40dbbabe2a4ca4f1aa8df71f.html b/docs/html/group__special_ga6bfb7aac40dbbabe2a4ca4f1aa8df71f.html index 4831fda391..779bedd5bc 100644 --- a/docs/html/group__special_ga6bfb7aac40dbbabe2a4ca4f1aa8df71f.html +++ b/docs/html/group__special_ga6bfb7aac40dbbabe2a4ca4f1aa8df71f.html @@ -660,8 +660,6 @@

- + diff --git a/docs/html/group__special_ga8cdf8b6984c37e9311b0b34bceb92a73.html b/docs/html/group__special_ga8cdf8b6984c37e9311b0b34bceb92a73.html index 58d7374cf3..b4363424d4 100644 --- a/docs/html/group__special_ga8cdf8b6984c37e9311b0b34bceb92a73.html +++ b/docs/html/group__special_ga8cdf8b6984c37e9311b0b34bceb92a73.html @@ -659,8 +659,6 @@

- + diff --git a/docs/html/group__special_ga8e65b8bc50b054bdbd94fa277898dde3.html b/docs/html/group__special_ga8e65b8bc50b054bdbd94fa277898dde3.html index 88e791c0bf..aa32c6d580 100644 --- a/docs/html/group__special_ga8e65b8bc50b054bdbd94fa277898dde3.html +++ b/docs/html/group__special_ga8e65b8bc50b054bdbd94fa277898dde3.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__special_ga97bb8b22f82c5b5e61e063d18fe7883f.html b/docs/html/group__special_ga97bb8b22f82c5b5e61e063d18fe7883f.html index 53fe8b6eb5..25c1a7b428 100644 --- a/docs/html/group__special_ga97bb8b22f82c5b5e61e063d18fe7883f.html +++ b/docs/html/group__special_ga97bb8b22f82c5b5e61e063d18fe7883f.html @@ -655,8 +655,6 @@

- + diff --git a/docs/html/group__special_ga9a67ba4913e40836c0c90b1853faa9b5.html b/docs/html/group__special_ga9a67ba4913e40836c0c90b1853faa9b5.html index a6a677ff72..d59c607c97 100644 --- a/docs/html/group__special_ga9a67ba4913e40836c0c90b1853faa9b5.html +++ b/docs/html/group__special_ga9a67ba4913e40836c0c90b1853faa9b5.html @@ -660,8 +660,6 @@

- + diff --git a/docs/html/group__special_ga9eae818e09cb161b0209418f0b1166f0.html b/docs/html/group__special_ga9eae818e09cb161b0209418f0b1166f0.html index 8b4654ce20..7c061d1684 100644 --- a/docs/html/group__special_ga9eae818e09cb161b0209418f0b1166f0.html +++ b/docs/html/group__special_ga9eae818e09cb161b0209418f0b1166f0.html @@ -656,8 +656,6 @@

- + diff --git a/docs/html/group__special_gaa1a8a239d3a2f132dbcedd15c848fafb.html b/docs/html/group__special_gaa1a8a239d3a2f132dbcedd15c848fafb.html index f6489d3fa2..afc6d2809b 100644 --- a/docs/html/group__special_gaa1a8a239d3a2f132dbcedd15c848fafb.html +++ b/docs/html/group__special_gaa1a8a239d3a2f132dbcedd15c848fafb.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__special_gaa289441c55c386f94ed03b0091e8884a.html b/docs/html/group__special_gaa289441c55c386f94ed03b0091e8884a.html index a6fd161871..8130f54440 100644 --- a/docs/html/group__special_gaa289441c55c386f94ed03b0091e8884a.html +++ b/docs/html/group__special_gaa289441c55c386f94ed03b0091e8884a.html @@ -655,8 +655,6 @@

- + diff --git a/docs/html/group__special_gab6f03be6923b910c56c4b49af92e5ad5.html b/docs/html/group__special_gab6f03be6923b910c56c4b49af92e5ad5.html index 05e55e1c2b..fe5d6e5236 100644 --- a/docs/html/group__special_gab6f03be6923b910c56c4b49af92e5ad5.html +++ b/docs/html/group__special_gab6f03be6923b910c56c4b49af92e5ad5.html @@ -662,8 +662,6 @@

- + diff --git a/docs/html/group__special_gadacbd0d20c7b6a3f2a0cbd0c4e14ae78.html b/docs/html/group__special_gadacbd0d20c7b6a3f2a0cbd0c4e14ae78.html index 4a1bf04c8e..994051d16e 100644 --- a/docs/html/group__special_gadacbd0d20c7b6a3f2a0cbd0c4e14ae78.html +++ b/docs/html/group__special_gadacbd0d20c7b6a3f2a0cbd0c4e14ae78.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__special_gae09a3d5ef50adfebd1d42611611cae5a.html b/docs/html/group__special_gae09a3d5ef50adfebd1d42611611cae5a.html index 995634f801..0360b4e07d 100644 --- a/docs/html/group__special_gae09a3d5ef50adfebd1d42611611cae5a.html +++ b/docs/html/group__special_gae09a3d5ef50adfebd1d42611611cae5a.html @@ -651,8 +651,6 @@

- + diff --git a/docs/html/group__special_gae3e83c43d4d111542f98b45ff2205134.html b/docs/html/group__special_gae3e83c43d4d111542f98b45ff2205134.html index b10f01f710..fb97b76514 100644 --- a/docs/html/group__special_gae3e83c43d4d111542f98b45ff2205134.html +++ b/docs/html/group__special_gae3e83c43d4d111542f98b45ff2205134.html @@ -663,8 +663,6 @@

- + diff --git a/docs/html/group__special_gaf5fcadaf8004e085bda70f80d2a649fc.html b/docs/html/group__special_gaf5fcadaf8004e085bda70f80d2a649fc.html index 5f0438ed14..b69e5b8ec4 100644 --- a/docs/html/group__special_gaf5fcadaf8004e085bda70f80d2a649fc.html +++ b/docs/html/group__special_gaf5fcadaf8004e085bda70f80d2a649fc.html @@ -652,8 +652,6 @@

- + diff --git a/docs/html/group__struct.html b/docs/html/group__struct.html index 4743d6d8af..7d9c067a2d 100644 --- a/docs/html/group__struct.html +++ b/docs/html/group__struct.html @@ -177,8 +177,6 @@ - + diff --git a/docs/html/group__swar.html b/docs/html/group__swar.html index 08318b009b..046661c93b 100644 --- a/docs/html/group__swar.html +++ b/docs/html/group__swar.html @@ -167,8 +167,6 @@ - + diff --git a/docs/html/group__swar_ga6b5426b411f619a1b836eeda12cdc9c0.html b/docs/html/group__swar_ga6b5426b411f619a1b836eeda12cdc9c0.html index be555dbafc..c407da1ac1 100644 --- a/docs/html/group__swar_ga6b5426b411f619a1b836eeda12cdc9c0.html +++ b/docs/html/group__swar_ga6b5426b411f619a1b836eeda12cdc9c0.html @@ -652,8 +652,6 @@

- + diff --git a/docs/html/group__swar_gabbe6fd280ceac3d05e38debc3f042be9.html b/docs/html/group__swar_gabbe6fd280ceac3d05e38debc3f042be9.html index 3cf64af733..07f26eda04 100644 --- a/docs/html/group__swar_gabbe6fd280ceac3d05e38debc3f042be9.html +++ b/docs/html/group__swar_gabbe6fd280ceac3d05e38debc3f042be9.html @@ -637,8 +637,6 @@

- + diff --git a/docs/html/group__traits.html b/docs/html/group__traits.html index 3bed242d36..b0d1bf1964 100644 --- a/docs/html/group__traits.html +++ b/docs/html/group__traits.html @@ -183,8 +183,6 @@ - + diff --git a/docs/html/group__trigonometric.html b/docs/html/group__trigonometric.html index 3c79218a90..9a5c58e6a3 100644 --- a/docs/html/group__trigonometric.html +++ b/docs/html/group__trigonometric.html @@ -254,8 +254,6 @@ - + diff --git a/docs/html/group__trigonometric_ga03482f35c4921d89499b1034eee99be0.html b/docs/html/group__trigonometric_ga03482f35c4921d89499b1034eee99be0.html index af8a7c8064..9e3379743a 100644 --- a/docs/html/group__trigonometric_ga03482f35c4921d89499b1034eee99be0.html +++ b/docs/html/group__trigonometric_ga03482f35c4921d89499b1034eee99be0.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__trigonometric_ga18a94fd518b423cd10fbc07e5ac67d26.html b/docs/html/group__trigonometric_ga18a94fd518b423cd10fbc07e5ac67d26.html index f597d29596..526a9745b7 100644 --- a/docs/html/group__trigonometric_ga18a94fd518b423cd10fbc07e5ac67d26.html +++ b/docs/html/group__trigonometric_ga18a94fd518b423cd10fbc07e5ac67d26.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__trigonometric_ga1c0c27c3a93a40a2fa91c42b02040e62.html b/docs/html/group__trigonometric_ga1c0c27c3a93a40a2fa91c42b02040e62.html index bc9fa9b86d..3a93c708b1 100644 --- a/docs/html/group__trigonometric_ga1c0c27c3a93a40a2fa91c42b02040e62.html +++ b/docs/html/group__trigonometric_ga1c0c27c3a93a40a2fa91c42b02040e62.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__trigonometric_ga216a80d7f91be23dc0d74e26eb057000.html b/docs/html/group__trigonometric_ga216a80d7f91be23dc0d74e26eb057000.html index eca832f207..622be4b5b3 100644 --- a/docs/html/group__trigonometric_ga216a80d7f91be23dc0d74e26eb057000.html +++ b/docs/html/group__trigonometric_ga216a80d7f91be23dc0d74e26eb057000.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__trigonometric_ga39e50b4c59911e463be1a11fc958fb86.html b/docs/html/group__trigonometric_ga39e50b4c59911e463be1a11fc958fb86.html index 201a9568dc..0b2686f3d9 100644 --- a/docs/html/group__trigonometric_ga39e50b4c59911e463be1a11fc958fb86.html +++ b/docs/html/group__trigonometric_ga39e50b4c59911e463be1a11fc958fb86.html @@ -655,8 +655,6 @@

- + diff --git a/docs/html/group__trigonometric_ga3d661f2dc8e530f4a0f5397d24c2eb69.html b/docs/html/group__trigonometric_ga3d661f2dc8e530f4a0f5397d24c2eb69.html index 092b7d23b0..84773a4778 100644 --- a/docs/html/group__trigonometric_ga3d661f2dc8e530f4a0f5397d24c2eb69.html +++ b/docs/html/group__trigonometric_ga3d661f2dc8e530f4a0f5397d24c2eb69.html @@ -603,8 +603,6 @@

- + diff --git a/docs/html/group__trigonometric_ga507c21955358dcd61c84f41e65d977c4.html b/docs/html/group__trigonometric_ga507c21955358dcd61c84f41e65d977c4.html index 65e0fdb2a5..d5a5af9863 100644 --- a/docs/html/group__trigonometric_ga507c21955358dcd61c84f41e65d977c4.html +++ b/docs/html/group__trigonometric_ga507c21955358dcd61c84f41e65d977c4.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__trigonometric_ga664582204f1e5e323b88bf429706c77f.html b/docs/html/group__trigonometric_ga664582204f1e5e323b88bf429706c77f.html index 502fa2a99f..6d371f8c8d 100644 --- a/docs/html/group__trigonometric_ga664582204f1e5e323b88bf429706c77f.html +++ b/docs/html/group__trigonometric_ga664582204f1e5e323b88bf429706c77f.html @@ -655,8 +655,6 @@

- + diff --git a/docs/html/group__trigonometric_ga7b983b4dbe3eb83c860c87536a02152e.html b/docs/html/group__trigonometric_ga7b983b4dbe3eb83c860c87536a02152e.html index 7c09af8c31..a073e3eee7 100644 --- a/docs/html/group__trigonometric_ga7b983b4dbe3eb83c860c87536a02152e.html +++ b/docs/html/group__trigonometric_ga7b983b4dbe3eb83c860c87536a02152e.html @@ -603,8 +603,6 @@

- + diff --git a/docs/html/group__trigonometric_ga7c08108f1c56d9df1141637c01c0d194.html b/docs/html/group__trigonometric_ga7c08108f1c56d9df1141637c01c0d194.html index 740bbfbb58..2f181c507a 100644 --- a/docs/html/group__trigonometric_ga7c08108f1c56d9df1141637c01c0d194.html +++ b/docs/html/group__trigonometric_ga7c08108f1c56d9df1141637c01c0d194.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__trigonometric_ga84bdaf88941577d9b23999ae965b631b.html b/docs/html/group__trigonometric_ga84bdaf88941577d9b23999ae965b631b.html index 51915f0da2..c1675cc1c9 100644 --- a/docs/html/group__trigonometric_ga84bdaf88941577d9b23999ae965b631b.html +++ b/docs/html/group__trigonometric_ga84bdaf88941577d9b23999ae965b631b.html @@ -648,8 +648,6 @@

- + diff --git a/docs/html/group__trigonometric_ga84c8a10368a87019fd81eb234c3f09da.html b/docs/html/group__trigonometric_ga84c8a10368a87019fd81eb234c3f09da.html index 00cd05450c..80431340ea 100644 --- a/docs/html/group__trigonometric_ga84c8a10368a87019fd81eb234c3f09da.html +++ b/docs/html/group__trigonometric_ga84c8a10368a87019fd81eb234c3f09da.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__trigonometric_ga9016964468b90f782aa01ba4be5e44ed.html b/docs/html/group__trigonometric_ga9016964468b90f782aa01ba4be5e44ed.html index 7a95d8bad4..9a3ce4a869 100644 --- a/docs/html/group__trigonometric_ga9016964468b90f782aa01ba4be5e44ed.html +++ b/docs/html/group__trigonometric_ga9016964468b90f782aa01ba4be5e44ed.html @@ -655,8 +655,6 @@

- + diff --git a/docs/html/group__trigonometric_ga91c450585092c45e088080706f4fe3df.html b/docs/html/group__trigonometric_ga91c450585092c45e088080706f4fe3df.html index d377e6eb96..40362cf8cf 100644 --- a/docs/html/group__trigonometric_ga91c450585092c45e088080706f4fe3df.html +++ b/docs/html/group__trigonometric_ga91c450585092c45e088080706f4fe3df.html @@ -647,8 +647,6 @@

- + diff --git a/docs/html/group__trigonometric_ga9bf96bc0229b376992320778389a1c83.html b/docs/html/group__trigonometric_ga9bf96bc0229b376992320778389a1c83.html index 3a75e1d7e5..f6d02f5358 100644 --- a/docs/html/group__trigonometric_ga9bf96bc0229b376992320778389a1c83.html +++ b/docs/html/group__trigonometric_ga9bf96bc0229b376992320778389a1c83.html @@ -603,8 +603,6 @@

- + diff --git a/docs/html/group__trigonometric_ga9f71b1e51347872f0a3b2ca92ac9cf9a.html b/docs/html/group__trigonometric_ga9f71b1e51347872f0a3b2ca92ac9cf9a.html index 6d44925c54..a6f1c0be3d 100644 --- a/docs/html/group__trigonometric_ga9f71b1e51347872f0a3b2ca92ac9cf9a.html +++ b/docs/html/group__trigonometric_ga9f71b1e51347872f0a3b2ca92ac9cf9a.html @@ -652,8 +652,6 @@

- + diff --git a/docs/html/group__trigonometric_ga9f7c4b010d79f473531a7d83902b4d02.html b/docs/html/group__trigonometric_ga9f7c4b010d79f473531a7d83902b4d02.html index 7339b856d0..6dc9320054 100644 --- a/docs/html/group__trigonometric_ga9f7c4b010d79f473531a7d83902b4d02.html +++ b/docs/html/group__trigonometric_ga9f7c4b010d79f473531a7d83902b4d02.html @@ -650,8 +650,6 @@

- + diff --git a/docs/html/group__trigonometric_gaaf9af2bcd5b6d700b06e36458ca7c169.html b/docs/html/group__trigonometric_gaaf9af2bcd5b6d700b06e36458ca7c169.html index 910401612c..2a29fb047f 100644 --- a/docs/html/group__trigonometric_gaaf9af2bcd5b6d700b06e36458ca7c169.html +++ b/docs/html/group__trigonometric_gaaf9af2bcd5b6d700b06e36458ca7c169.html @@ -603,8 +603,6 @@

- + diff --git a/docs/html/group__trigonometric_gab8d411aa6820539627b8475e86395d45.html b/docs/html/group__trigonometric_gab8d411aa6820539627b8475e86395d45.html index 6b69d254b0..d59cf6e71f 100644 --- a/docs/html/group__trigonometric_gab8d411aa6820539627b8475e86395d45.html +++ b/docs/html/group__trigonometric_gab8d411aa6820539627b8475e86395d45.html @@ -645,8 +645,6 @@

- + diff --git a/docs/html/group__trigonometric_gac6415d1434e29c79594e7ef0ce5e2b65.html b/docs/html/group__trigonometric_gac6415d1434e29c79594e7ef0ce5e2b65.html index 6d83e19ab4..38c2dea033 100644 --- a/docs/html/group__trigonometric_gac6415d1434e29c79594e7ef0ce5e2b65.html +++ b/docs/html/group__trigonometric_gac6415d1434e29c79594e7ef0ce5e2b65.html @@ -651,8 +651,6 @@

- + diff --git a/docs/html/group__trigonometric_gad0a09342c6bb010028e1686a0b1f599c.html b/docs/html/group__trigonometric_gad0a09342c6bb010028e1686a0b1f599c.html index 0d8cca7cfd..fbd36ccc0e 100644 --- a/docs/html/group__trigonometric_gad0a09342c6bb010028e1686a0b1f599c.html +++ b/docs/html/group__trigonometric_gad0a09342c6bb010028e1686a0b1f599c.html @@ -655,8 +655,6 @@

- + diff --git a/docs/html/group__trigonometric_gade4a273af7fb50439ae8974d4e5e8222.html b/docs/html/group__trigonometric_gade4a273af7fb50439ae8974d4e5e8222.html index 93d9e13383..cfd3e8da7b 100644 --- a/docs/html/group__trigonometric_gade4a273af7fb50439ae8974d4e5e8222.html +++ b/docs/html/group__trigonometric_gade4a273af7fb50439ae8974d4e5e8222.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__trigonometric_gae413e8b133a104f344513b9500b7708b.html b/docs/html/group__trigonometric_gae413e8b133a104f344513b9500b7708b.html index ec9c4bd679..6c5466650d 100644 --- a/docs/html/group__trigonometric_gae413e8b133a104f344513b9500b7708b.html +++ b/docs/html/group__trigonometric_gae413e8b133a104f344513b9500b7708b.html @@ -654,8 +654,6 @@

- + diff --git a/docs/html/group__trigonometric_gaf171d35de1087cbe903e3c5748cf19f3.html b/docs/html/group__trigonometric_gaf171d35de1087cbe903e3c5748cf19f3.html index 1e73440c3d..e2a39f8d75 100644 --- a/docs/html/group__trigonometric_gaf171d35de1087cbe903e3c5748cf19f3.html +++ b/docs/html/group__trigonometric_gaf171d35de1087cbe903e3c5748cf19f3.html @@ -655,8 +655,6 @@

- + diff --git a/docs/html/group__trigonometric_gaf3716c407dc2f76f32b48455c1f6189f.html b/docs/html/group__trigonometric_gaf3716c407dc2f76f32b48455c1f6189f.html index 0cb3bc7c12..cfb0044eb7 100644 --- a/docs/html/group__trigonometric_gaf3716c407dc2f76f32b48455c1f6189f.html +++ b/docs/html/group__trigonometric_gaf3716c407dc2f76f32b48455c1f6189f.html @@ -637,8 +637,6 @@

- + diff --git a/docs/html/group__trigonometric_gaf92ef4ab7d8bd5a527db4d94bcebbdf7.html b/docs/html/group__trigonometric_gaf92ef4ab7d8bd5a527db4d94bcebbdf7.html index 3b49cb0b2b..5c9125c3d2 100644 --- a/docs/html/group__trigonometric_gaf92ef4ab7d8bd5a527db4d94bcebbdf7.html +++ b/docs/html/group__trigonometric_gaf92ef4ab7d8bd5a527db4d94bcebbdf7.html @@ -655,8 +655,6 @@

- + diff --git a/docs/html/index.html b/docs/html/index.html index 42d887a019..15d6d067ad 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -154,8 +154,6 @@

- + diff --git a/docs/html/install.html b/docs/html/install.html index 4113b7dfdf..824c93d459 100644 --- a/docs/html/install.html +++ b/docs/html/install.html @@ -306,8 +306,6 @@

- + diff --git a/docs/html/licence.html b/docs/html/licence.html index 98d0606656..385219ad0d 100644 --- a/docs/html/licence.html +++ b/docs/html/licence.html @@ -168,8 +168,6 @@ - + diff --git a/docs/html/modules.html b/docs/html/modules.html index fabf8bad74..ccf1ca1034 100644 --- a/docs/html/modules.html +++ b/docs/html/modules.html @@ -188,8 +188,6 @@ - + diff --git a/docs/html/namespaceeve.html b/docs/html/namespaceeve.html index 038a90e3ef..daa16610e4 100644 --- a/docs/html/namespaceeve.html +++ b/docs/html/namespaceeve.html @@ -1537,8 +1537,6 @@ - + diff --git a/docs/html/namespaceeve_1_1algo.html b/docs/html/namespaceeve_1_1algo.html index 740212d960..db64d51376 100644 --- a/docs/html/namespaceeve_1_1algo.html +++ b/docs/html/namespaceeve_1_1algo.html @@ -156,8 +156,6 @@ - + diff --git a/docs/html/namespacemembers.html b/docs/html/namespacemembers.html index 3ca7616db3..cfd96140e8 100644 --- a/docs/html/namespacemembers.html +++ b/docs/html/namespacemembers.html @@ -225,8 +225,6 @@

- a -

    - + diff --git a/docs/html/namespacemembers_b.html b/docs/html/namespacemembers_b.html index c523be238f..a4ff4c0bc4 100644 --- a/docs/html/namespacemembers_b.html +++ b/docs/html/namespacemembers_b.html @@ -211,8 +211,6 @@

    - b -

      - + diff --git a/docs/html/namespacemembers_c.html b/docs/html/namespacemembers_c.html index ebe21ab049..77c331ddb8 100644 --- a/docs/html/namespacemembers_c.html +++ b/docs/html/namespacemembers_c.html @@ -208,8 +208,6 @@

      - c -

        - + diff --git a/docs/html/namespacemembers_d.html b/docs/html/namespacemembers_d.html index 5b95567a0e..be1522b921 100644 --- a/docs/html/namespacemembers_d.html +++ b/docs/html/namespacemembers_d.html @@ -198,8 +198,6 @@

        - d -

          - + diff --git a/docs/html/namespacemembers_e.html b/docs/html/namespacemembers_e.html index 554d3f8ce0..6e80cca570 100644 --- a/docs/html/namespacemembers_e.html +++ b/docs/html/namespacemembers_e.html @@ -207,8 +207,6 @@

          - e -

            - + diff --git a/docs/html/namespacemembers_enum.html b/docs/html/namespacemembers_enum.html index b3baa1dea0..b084fad058 100644 --- a/docs/html/namespacemembers_enum.html +++ b/docs/html/namespacemembers_enum.html @@ -159,8 +159,6 @@ - + diff --git a/docs/html/namespacemembers_f.html b/docs/html/namespacemembers_f.html index 14cc75bdd3..f582f53d1f 100644 --- a/docs/html/namespacemembers_f.html +++ b/docs/html/namespacemembers_f.html @@ -208,8 +208,6 @@

            - f -

              - + diff --git a/docs/html/namespacemembers_func.html b/docs/html/namespacemembers_func.html index 4256063d76..848891993c 100644 --- a/docs/html/namespacemembers_func.html +++ b/docs/html/namespacemembers_func.html @@ -161,8 +161,6 @@ - + diff --git a/docs/html/namespacemembers_g.html b/docs/html/namespacemembers_g.html index 5b27d8d8cf..390acdb876 100644 --- a/docs/html/namespacemembers_g.html +++ b/docs/html/namespacemembers_g.html @@ -191,8 +191,6 @@

              - g -

                - + diff --git a/docs/html/namespacemembers_h.html b/docs/html/namespacemembers_h.html index 48eed259b9..87b1e84688 100644 --- a/docs/html/namespacemembers_h.html +++ b/docs/html/namespacemembers_h.html @@ -191,8 +191,6 @@

                - h -

                  - + diff --git a/docs/html/namespacemembers_i.html b/docs/html/namespacemembers_i.html index bad9bb5f8c..fe64f63c02 100644 --- a/docs/html/namespacemembers_i.html +++ b/docs/html/namespacemembers_i.html @@ -244,8 +244,6 @@

                  - i -

                    - + diff --git a/docs/html/namespacemembers_l.html b/docs/html/namespacemembers_l.html index fd2a85c7e9..c4770119ef 100644 --- a/docs/html/namespacemembers_l.html +++ b/docs/html/namespacemembers_l.html @@ -213,8 +213,6 @@

                    - l -

                      - + diff --git a/docs/html/namespacemembers_m.html b/docs/html/namespacemembers_m.html index a906243d4c..c4f6bce65d 100644 --- a/docs/html/namespacemembers_m.html +++ b/docs/html/namespacemembers_m.html @@ -218,8 +218,6 @@

                      - m -

                        - + diff --git a/docs/html/namespacemembers_n.html b/docs/html/namespacemembers_n.html index 1bc7cffc18..5533fc9a06 100644 --- a/docs/html/namespacemembers_n.html +++ b/docs/html/namespacemembers_n.html @@ -203,8 +203,6 @@

                        - n -

                          - + diff --git a/docs/html/namespacemembers_o.html b/docs/html/namespacemembers_o.html index 0e17361b0e..2c2c06afe0 100644 --- a/docs/html/namespacemembers_o.html +++ b/docs/html/namespacemembers_o.html @@ -190,8 +190,6 @@

                          - o -

                            - + diff --git a/docs/html/namespacemembers_p.html b/docs/html/namespacemembers_p.html index 501b2d6021..b7b7cff1f7 100644 --- a/docs/html/namespacemembers_p.html +++ b/docs/html/namespacemembers_p.html @@ -200,8 +200,6 @@

                            - p -

                              - + diff --git a/docs/html/namespacemembers_q.html b/docs/html/namespacemembers_q.html index 71c19e724b..c3db630c0a 100644 --- a/docs/html/namespacemembers_q.html +++ b/docs/html/namespacemembers_q.html @@ -187,8 +187,6 @@

                              - q -

                                - + diff --git a/docs/html/namespacemembers_r.html b/docs/html/namespacemembers_r.html index 35f8d0fc3b..8bb7bc73ab 100644 --- a/docs/html/namespacemembers_r.html +++ b/docs/html/namespacemembers_r.html @@ -200,8 +200,6 @@

                                - r -

                                  - + diff --git a/docs/html/namespacemembers_s.html b/docs/html/namespacemembers_s.html index a39d674f51..d39a125f4c 100644 --- a/docs/html/namespacemembers_s.html +++ b/docs/html/namespacemembers_s.html @@ -226,8 +226,6 @@

                                  - s -

                                    - + diff --git a/docs/html/namespacemembers_t.html b/docs/html/namespacemembers_t.html index 50020ece7a..2ee7fc9b9d 100644 --- a/docs/html/namespacemembers_t.html +++ b/docs/html/namespacemembers_t.html @@ -199,8 +199,6 @@

                                    - t -

                                      - + diff --git a/docs/html/namespacemembers_u.html b/docs/html/namespacemembers_u.html index 71531f6995..651aa393da 100644 --- a/docs/html/namespacemembers_u.html +++ b/docs/html/namespacemembers_u.html @@ -194,8 +194,6 @@

                                      - u -

                                        - + diff --git a/docs/html/namespacemembers_v.html b/docs/html/namespacemembers_v.html index 441e0dc85b..1ea3e6da86 100644 --- a/docs/html/namespacemembers_v.html +++ b/docs/html/namespacemembers_v.html @@ -187,8 +187,6 @@

                                        - v -

                                          - + diff --git a/docs/html/namespacemembers_vars.html b/docs/html/namespacemembers_vars.html index 5bad6b31d0..935d4213a9 100644 --- a/docs/html/namespacemembers_vars.html +++ b/docs/html/namespacemembers_vars.html @@ -223,8 +223,6 @@

                                          - a -

                                            - + diff --git a/docs/html/namespacemembers_vars_b.html b/docs/html/namespacemembers_vars_b.html index 356ad08c6e..2c300931c4 100644 --- a/docs/html/namespacemembers_vars_b.html +++ b/docs/html/namespacemembers_vars_b.html @@ -211,8 +211,6 @@

                                            - b -

                                              - + diff --git a/docs/html/namespacemembers_vars_c.html b/docs/html/namespacemembers_vars_c.html index e68d582a65..635a5a0c6f 100644 --- a/docs/html/namespacemembers_vars_c.html +++ b/docs/html/namespacemembers_vars_c.html @@ -208,8 +208,6 @@

                                              - c -

                                                - + diff --git a/docs/html/namespacemembers_vars_d.html b/docs/html/namespacemembers_vars_d.html index d27b5a65d5..191bcd8fff 100644 --- a/docs/html/namespacemembers_vars_d.html +++ b/docs/html/namespacemembers_vars_d.html @@ -198,8 +198,6 @@

                                                - d -

                                                  - + diff --git a/docs/html/namespacemembers_vars_e.html b/docs/html/namespacemembers_vars_e.html index 6071a764d4..7f0ad0444b 100644 --- a/docs/html/namespacemembers_vars_e.html +++ b/docs/html/namespacemembers_vars_e.html @@ -207,8 +207,6 @@

                                                  - e -

                                                    - + diff --git a/docs/html/namespacemembers_vars_f.html b/docs/html/namespacemembers_vars_f.html index 6adb5df654..848ef0a4b1 100644 --- a/docs/html/namespacemembers_vars_f.html +++ b/docs/html/namespacemembers_vars_f.html @@ -208,8 +208,6 @@

                                                    - f -

                                                      - + diff --git a/docs/html/namespacemembers_vars_g.html b/docs/html/namespacemembers_vars_g.html index 70675e0ff1..4a0e677bd6 100644 --- a/docs/html/namespacemembers_vars_g.html +++ b/docs/html/namespacemembers_vars_g.html @@ -191,8 +191,6 @@

                                                      - g -

                                                        - + diff --git a/docs/html/namespacemembers_vars_h.html b/docs/html/namespacemembers_vars_h.html index 029c6ab5e4..187f6e239f 100644 --- a/docs/html/namespacemembers_vars_h.html +++ b/docs/html/namespacemembers_vars_h.html @@ -191,8 +191,6 @@

                                                        - h -

                                                          - + diff --git a/docs/html/namespacemembers_vars_i.html b/docs/html/namespacemembers_vars_i.html index 8ef554066d..ea27765153 100644 --- a/docs/html/namespacemembers_vars_i.html +++ b/docs/html/namespacemembers_vars_i.html @@ -243,8 +243,6 @@

                                                          - i -

                                                            - + diff --git a/docs/html/namespacemembers_vars_l.html b/docs/html/namespacemembers_vars_l.html index 10d86b2003..7298f6f5b0 100644 --- a/docs/html/namespacemembers_vars_l.html +++ b/docs/html/namespacemembers_vars_l.html @@ -213,8 +213,6 @@

                                                            - l -

                                                              - + diff --git a/docs/html/namespacemembers_vars_m.html b/docs/html/namespacemembers_vars_m.html index b110c5655a..88ac5ed04e 100644 --- a/docs/html/namespacemembers_vars_m.html +++ b/docs/html/namespacemembers_vars_m.html @@ -218,8 +218,6 @@

                                                              - m -

                                                                - + diff --git a/docs/html/namespacemembers_vars_n.html b/docs/html/namespacemembers_vars_n.html index 3d8ac9a5f6..c336031bae 100644 --- a/docs/html/namespacemembers_vars_n.html +++ b/docs/html/namespacemembers_vars_n.html @@ -203,8 +203,6 @@

                                                                - n -

                                                                  - + diff --git a/docs/html/namespacemembers_vars_o.html b/docs/html/namespacemembers_vars_o.html index d60c76eecb..58314a9f9d 100644 --- a/docs/html/namespacemembers_vars_o.html +++ b/docs/html/namespacemembers_vars_o.html @@ -189,8 +189,6 @@

                                                                  - o -

                                                                    - + diff --git a/docs/html/namespacemembers_vars_p.html b/docs/html/namespacemembers_vars_p.html index cd61fc187f..9439eff6c3 100644 --- a/docs/html/namespacemembers_vars_p.html +++ b/docs/html/namespacemembers_vars_p.html @@ -200,8 +200,6 @@

                                                                    - p -

                                                                      - + diff --git a/docs/html/namespacemembers_vars_q.html b/docs/html/namespacemembers_vars_q.html index 6bcb585d99..1c23d82049 100644 --- a/docs/html/namespacemembers_vars_q.html +++ b/docs/html/namespacemembers_vars_q.html @@ -187,8 +187,6 @@

                                                                      - q -

                                                                        - + diff --git a/docs/html/namespacemembers_vars_r.html b/docs/html/namespacemembers_vars_r.html index b78d6392fe..4245a796ad 100644 --- a/docs/html/namespacemembers_vars_r.html +++ b/docs/html/namespacemembers_vars_r.html @@ -200,8 +200,6 @@

                                                                        - r -

                                                                          - + diff --git a/docs/html/namespacemembers_vars_s.html b/docs/html/namespacemembers_vars_s.html index a3de6da29c..fbaba3fbc2 100644 --- a/docs/html/namespacemembers_vars_s.html +++ b/docs/html/namespacemembers_vars_s.html @@ -225,8 +225,6 @@

                                                                          - s -

                                                                            - + diff --git a/docs/html/namespacemembers_vars_t.html b/docs/html/namespacemembers_vars_t.html index 5a3f0258b7..93c39a85a1 100644 --- a/docs/html/namespacemembers_vars_t.html +++ b/docs/html/namespacemembers_vars_t.html @@ -199,8 +199,6 @@

                                                                            - t -

                                                                              - + diff --git a/docs/html/namespacemembers_vars_u.html b/docs/html/namespacemembers_vars_u.html index 4de7409fae..4786ae31fe 100644 --- a/docs/html/namespacemembers_vars_u.html +++ b/docs/html/namespacemembers_vars_u.html @@ -193,8 +193,6 @@

                                                                              - u -

                                                                                - + diff --git a/docs/html/namespacemembers_vars_v.html b/docs/html/namespacemembers_vars_v.html index d7753f4f78..04c899265e 100644 --- a/docs/html/namespacemembers_vars_v.html +++ b/docs/html/namespacemembers_vars_v.html @@ -187,8 +187,6 @@

                                                                                - v -

                                                                                  - + diff --git a/docs/html/namespacemembers_vars_w.html b/docs/html/namespacemembers_vars_w.html index f89fa43b44..da01b60ad6 100644 --- a/docs/html/namespacemembers_vars_w.html +++ b/docs/html/namespacemembers_vars_w.html @@ -186,8 +186,6 @@

                                                                                  - w -

                                                                                    - + diff --git a/docs/html/namespacemembers_vars_z.html b/docs/html/namespacemembers_vars_z.html index 71e84ec332..14a395d95e 100644 --- a/docs/html/namespacemembers_vars_z.html +++ b/docs/html/namespacemembers_vars_z.html @@ -187,8 +187,6 @@

                                                                                    - z -

                                                                                      - + diff --git a/docs/html/namespacemembers_w.html b/docs/html/namespacemembers_w.html index d611313c80..112b10e855 100644 --- a/docs/html/namespacemembers_w.html +++ b/docs/html/namespacemembers_w.html @@ -186,8 +186,6 @@

                                                                                      - w -

                                                                                        - + diff --git a/docs/html/namespacemembers_z.html b/docs/html/namespacemembers_z.html index 2bf3b65db4..a94e7e2571 100644 --- a/docs/html/namespacemembers_z.html +++ b/docs/html/namespacemembers_z.html @@ -187,8 +187,6 @@

                                                                                        - z -

                                                                                          - + diff --git a/docs/html/namespaces.html b/docs/html/namespaces.html index 7404cd2288..1f426bdcf1 100644 --- a/docs/html/namespaces.html +++ b/docs/html/namespaces.html @@ -247,8 +247,6 @@ - + diff --git a/docs/html/pages.html b/docs/html/pages.html index fb6b99b00b..921d90147c 100644 --- a/docs/html/pages.html +++ b/docs/html/pages.html @@ -151,7 +151,10 @@  Property of EVE types  Licence  Rationale - Change Log + EVE Development + Development Environment + Building and Testing + Change Log @@ -162,8 +165,6 @@ - + diff --git a/docs/html/rationale.html b/docs/html/rationale.html index 12ba9c0606..6bee3fcdeb 100644 --- a/docs/html/rationale.html +++ b/docs/html/rationale.html @@ -198,8 +198,6 @@

                                                                                          - + diff --git a/docs/html/search/all_1.js b/docs/html/search/all_1.js index c1729180ef..1749f06122 100644 --- a/docs/html/search/all_1.js +++ b/docs/html/search/all_1.js @@ -27,8 +27,9 @@ var searchData= ['bitincrement_24',['bitincrement',['../group__constant_ga2a7b9727dd6e38b4230d14630abc3adb.html#ga2a7b9727dd6e38b4230d14630abc3adb',1,'eve']]], ['bitmap_25',['bitmap',['../structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4.html#a53088b65fa4bba929183f9c4d5792dea',1,'eve::logical< wide< Type, Cardinal > >']]], ['bitofsign_26',['bitofsign',['../group__ieee754_ga9614c36358884274b162e473e78c1246.html#ga9614c36358884274b162e473e78c1246',1,'eve']]], - ['bits_27',['Bits',['../group__bits.html',1,'']]], - ['bits_28',['bits',['../structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4.html#a7c2d0acc8ffcbfcc373fa2f6b849a06f',1,'eve::logical< wide< Type, Cardinal > >']]], + ['bits_27',['bits',['../structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4.html#a7c2d0acc8ffcbfcc373fa2f6b849a06f',1,'eve::logical< wide< Type, Cardinal > >']]], + ['bits_28',['Bits',['../group__bits.html',1,'']]], ['bits_5ftype_29',['bits_type',['../structeve_1_1logical.html#a6c3a677f7954119681e55c6e342188bc',1,'eve::logical::bits_type()'],['../structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4.html#adb0e98ce3f9d38e138e3055cada7d4e3',1,'eve::logical< wide< Type, Cardinal > >::bits_type()']]], - ['broadcast_30',['broadcast',['../group__shuffling_gaa8fb67b18a0c3046d9281ed21953444d.html#gaa8fb67b18a0c3046d9281ed21953444d',1,'eve']]] + ['broadcast_30',['broadcast',['../group__shuffling_gaa8fb67b18a0c3046d9281ed21953444d.html#gaa8fb67b18a0c3046d9281ed21953444d',1,'eve']]], + ['building_20and_20testing_31',['Building and Testing',['../dev_cmake.html',1,'eve-dev']]] ]; diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js index ef354d1bac..ccb581c1f3 100644 --- a/docs/html/search/all_3.js +++ b/docs/html/search/all_3.js @@ -5,14 +5,15 @@ var searchData= ['dec_2',['dec',['../group__operators_ga0909b456d35f4111012b71e9bba92ede.html#ga0909b456d35f4111012b71e9bba92ede',1,'eve']]], ['decorators_3',['Decorators',['../group__decorator.html',1,'']]], ['definitely_4',['definitely',['../group__decorator_ga8677881ff2d27fba6adedaeb8f84151b.html#ga8677881ff2d27fba6adedaeb8f84151b',1,'eve']]], - ['diff_5',['diff',['../group__decorator_ga5bbd9036e48f8aac4216a0869806e1df.html#ga5bbd9036e48f8aac4216a0869806e1df',1,'eve']]], - ['diff_5f1st_6',['diff_1st',['../group__decorator_ga77bcbd0260750a88b913fd304baed476.html#ga77bcbd0260750a88b913fd304baed476',1,'eve']]], - ['diff_5f2nd_7',['diff_2nd',['../group__decorator_ga0f1f689a82eba82d3e7b36b97b8c15e6.html#ga0f1f689a82eba82d3e7b36b97b8c15e6',1,'eve']]], - ['diff_5f3rd_8',['diff_3rd',['../group__decorator_gaa4398b2ef5de81cacafc812406adf5d0.html#gaa4398b2ef5de81cacafc812406adf5d0',1,'eve']]], - ['diff_5fnth_9',['diff_nth',['../group__decorator_gaaae38dadc2c9ec57e7431dd23a01350d.html#gaaae38dadc2c9ec57e7431dd23a01350d',1,'eve']]], - ['digamma_10',['digamma',['../group__special_ga9eae818e09cb161b0209418f0b1166f0.html#ga9eae818e09cb161b0209418f0b1166f0',1,'eve']]], - ['dist_11',['dist',['../group__arithmetic_gaeff40f4fe2a2e24a0b2337002530c452.html#gaeff40f4fe2a2e24a0b2337002530c452',1,'eve']]], - ['div_12',['div',['../group__operators_gae0ef9200ab790a71835ff39ff61061a5.html#gae0ef9200ab790a71835ff39ff61061a5',1,'eve']]], - ['double_5ffactorial_13',['double_factorial',['../group__combinatorial_gaf3d9978112857cdad70a9e8e77dbaf58.html#gaf3d9978112857cdad70a9e8e77dbaf58',1,'eve']]], - ['downward_14',['downward',['../group__decorator_gaa9bc64a3f84f5fdc046854ead9bdf7f6.html#gaa9bc64a3f84f5fdc046854ead9bdf7f6',1,'eve']]] + ['development_20environment_5',['Development Environment',['../dev_environment.html',1,'eve-dev']]], + ['diff_6',['diff',['../group__decorator_ga5bbd9036e48f8aac4216a0869806e1df.html#ga5bbd9036e48f8aac4216a0869806e1df',1,'eve']]], + ['diff_5f1st_7',['diff_1st',['../group__decorator_ga77bcbd0260750a88b913fd304baed476.html#ga77bcbd0260750a88b913fd304baed476',1,'eve']]], + ['diff_5f2nd_8',['diff_2nd',['../group__decorator_ga0f1f689a82eba82d3e7b36b97b8c15e6.html#ga0f1f689a82eba82d3e7b36b97b8c15e6',1,'eve']]], + ['diff_5f3rd_9',['diff_3rd',['../group__decorator_gaa4398b2ef5de81cacafc812406adf5d0.html#gaa4398b2ef5de81cacafc812406adf5d0',1,'eve']]], + ['diff_5fnth_10',['diff_nth',['../group__decorator_gaaae38dadc2c9ec57e7431dd23a01350d.html#gaaae38dadc2c9ec57e7431dd23a01350d',1,'eve']]], + ['digamma_11',['digamma',['../group__special_ga9eae818e09cb161b0209418f0b1166f0.html#ga9eae818e09cb161b0209418f0b1166f0',1,'eve']]], + ['dist_12',['dist',['../group__arithmetic_gaeff40f4fe2a2e24a0b2337002530c452.html#gaeff40f4fe2a2e24a0b2337002530c452',1,'eve']]], + ['div_13',['div',['../group__operators_gae0ef9200ab790a71835ff39ff61061a5.html#gae0ef9200ab790a71835ff39ff61061a5',1,'eve']]], + ['double_5ffactorial_14',['double_factorial',['../group__combinatorial_gaf3d9978112857cdad70a9e8e77dbaf58.html#gaf3d9978112857cdad70a9e8e77dbaf58',1,'eve']]], + ['downward_15',['downward',['../group__decorator_gaa9bc64a3f84f5fdc046854ead9bdf7f6.html#gaa9bc64a3f84f5fdc046854ead9bdf7f6',1,'eve']]] ]; diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js index c06602be6e..a57c8af930 100644 --- a/docs/html/search/all_4.js +++ b/docs/html/search/all_4.js @@ -19,37 +19,38 @@ var searchData= ['erfc_5finv_16',['erfc_inv',['../group__special_ga8e65b8bc50b054bdbd94fa277898dde3.html#ga8e65b8bc50b054bdbd94fa277898dde3',1,'eve']]], ['erfcx_17',['erfcx',['../group__special_ga42d5ac21f0704af15f1a621f8b10f086.html#ga42d5ac21f0704af15f1a621f8b10f086',1,'eve']]], ['eve_18',['eve',['../namespaceeve.html',1,'']]], - ['exp_19',['exp',['../group__exponential_ga56a5f857ff59ee64bb1ab21999eaae42.html#ga56a5f857ff59ee64bb1ab21999eaae42',1,'eve']]], - ['exp10_20',['exp10',['../group__exponential_ga90cff7b583b7e96518af4946dcd7378a.html#ga90cff7b583b7e96518af4946dcd7378a',1,'eve']]], - ['exp2_21',['exp2',['../group__exponential_gaad00c9d24af2d29a5ab7656a3a975c51.html#gaad00c9d24af2d29a5ab7656a3a975c51',1,'eve']]], - ['exp_5fint_22',['exp_int',['../group__special_gae3e83c43d4d111542f98b45ff2205134.html#gae3e83c43d4d111542f98b45ff2205134',1,'eve']]], - ['expm1_23',['expm1',['../group__exponential_ga52c9b96548ef6beeb8502c4d6af87745.html#ga52c9b96548ef6beeb8502c4d6af87745',1,'eve']]], - ['exponent_24',['exponent',['../group__ieee754_ga720ef267847ac42c18eb45878ccf32b5.html#ga720ef267847ac42c18eb45878ccf32b5',1,'eve']]], - ['exponential_25',['Exponential',['../group__exponential.html',1,'']]], - ['exponentmask_26',['exponentmask',['../group__constant_ga9c49e96e0543e6b6719260adde8cca87.html#ga9c49e96e0543e6b6719260adde8cca87',1,'eve']]], - ['expx2_27',['expx2',['../group__exponential_gad8e0e8ed5b7bdffd7247fbb181d55011.html#gad8e0e8ed5b7bdffd7247fbb181d55011',1,'eve']]], - ['floating_5freal_5fscalar_5fvalue_28',['floating_real_scalar_value',['../concepteve_1_1floating__real__scalar__value.html',1,'eve']]], - ['floating_5freal_5fvalue_29',['floating_real_value',['../concepteve_1_1floating__real__value.html',1,'eve']]], - ['floating_5fscalar_5fvalue_30',['floating_scalar_value',['../concepteve_1_1floating__scalar__value.html',1,'eve']]], - ['floating_5fvalue_31',['floating_value',['../concepteve_1_1floating__value.html',1,'eve']]], - ['generator_32',['generator',['../concepteve_1_1generator.html',1,'eve']]], - ['integral_5freal_5fscalar_5fvalue_33',['integral_real_scalar_value',['../concepteve_1_1integral__real__scalar__value.html',1,'eve']]], - ['integral_5freal_5fvalue_34',['integral_real_value',['../concepteve_1_1integral__real__value.html',1,'eve']]], - ['integral_5fscalar_5fvalue_35',['integral_scalar_value',['../concepteve_1_1integral__scalar__value.html',1,'eve']]], - ['integral_5fsimd_5fvalue_36',['integral_simd_value',['../concepteve_1_1integral__simd__value.html',1,'eve']]], - ['integral_5fvalue_37',['integral_value',['../concepteve_1_1integral__value.html',1,'eve']]], - ['like_38',['like',['../concepteve_1_1like.html',1,'eve']]], - ['logical_5fscalar_5fvalue_39',['logical_scalar_value',['../concepteve_1_1logical__scalar__value.html',1,'eve']]], - ['logical_5fvalue_40',['logical_value',['../concepteve_1_1logical__value.html',1,'eve']]], - ['real_5fscalar_5fvalue_41',['real_scalar_value',['../concepteve_1_1real__scalar__value.html',1,'eve']]], - ['real_5fvalue_42',['real_value',['../concepteve_1_1real__value.html',1,'eve']]], - ['scalar_5fvalue_43',['scalar_value',['../concepteve_1_1scalar__value.html',1,'eve']]], - ['signed_5fintegral_5fscalar_5fvalue_44',['signed_integral_scalar_value',['../concepteve_1_1signed__integral__scalar__value.html',1,'eve']]], - ['signed_5fintegral_5fvalue_45',['signed_integral_value',['../concepteve_1_1signed__integral__value.html',1,'eve']]], - ['signed_5fscalar_5fvalue_46',['signed_scalar_value',['../concepteve_1_1signed__scalar__value.html',1,'eve']]], - ['signed_5fvalue_47',['signed_value',['../concepteve_1_1signed__value.html',1,'eve']]], - ['simd_5fvalue_48',['simd_value',['../concepteve_1_1simd__value.html',1,'eve']]], - ['unsigned_5fscalar_5fvalue_49',['unsigned_scalar_value',['../concepteve_1_1unsigned__scalar__value.html',1,'eve']]], - ['unsigned_5fvalue_50',['unsigned_value',['../concepteve_1_1unsigned__value.html',1,'eve']]], - ['value_51',['value',['../concepteve_1_1value.html',1,'eve']]] + ['eve_20development_19',['EVE Development',['../eve-dev.html',1,'']]], + ['exp_20',['exp',['../group__exponential_ga56a5f857ff59ee64bb1ab21999eaae42.html#ga56a5f857ff59ee64bb1ab21999eaae42',1,'eve']]], + ['exp10_21',['exp10',['../group__exponential_ga90cff7b583b7e96518af4946dcd7378a.html#ga90cff7b583b7e96518af4946dcd7378a',1,'eve']]], + ['exp2_22',['exp2',['../group__exponential_gaad00c9d24af2d29a5ab7656a3a975c51.html#gaad00c9d24af2d29a5ab7656a3a975c51',1,'eve']]], + ['exp_5fint_23',['exp_int',['../group__special_gae3e83c43d4d111542f98b45ff2205134.html#gae3e83c43d4d111542f98b45ff2205134',1,'eve']]], + ['expm1_24',['expm1',['../group__exponential_ga52c9b96548ef6beeb8502c4d6af87745.html#ga52c9b96548ef6beeb8502c4d6af87745',1,'eve']]], + ['exponent_25',['exponent',['../group__ieee754_ga720ef267847ac42c18eb45878ccf32b5.html#ga720ef267847ac42c18eb45878ccf32b5',1,'eve']]], + ['exponential_26',['Exponential',['../group__exponential.html',1,'']]], + ['exponentmask_27',['exponentmask',['../group__constant_ga9c49e96e0543e6b6719260adde8cca87.html#ga9c49e96e0543e6b6719260adde8cca87',1,'eve']]], + ['expx2_28',['expx2',['../group__exponential_gad8e0e8ed5b7bdffd7247fbb181d55011.html#gad8e0e8ed5b7bdffd7247fbb181d55011',1,'eve']]], + ['floating_5freal_5fscalar_5fvalue_29',['floating_real_scalar_value',['../concepteve_1_1floating__real__scalar__value.html',1,'eve']]], + ['floating_5freal_5fvalue_30',['floating_real_value',['../concepteve_1_1floating__real__value.html',1,'eve']]], + ['floating_5fscalar_5fvalue_31',['floating_scalar_value',['../concepteve_1_1floating__scalar__value.html',1,'eve']]], + ['floating_5fvalue_32',['floating_value',['../concepteve_1_1floating__value.html',1,'eve']]], + ['generator_33',['generator',['../concepteve_1_1generator.html',1,'eve']]], + ['integral_5freal_5fscalar_5fvalue_34',['integral_real_scalar_value',['../concepteve_1_1integral__real__scalar__value.html',1,'eve']]], + ['integral_5freal_5fvalue_35',['integral_real_value',['../concepteve_1_1integral__real__value.html',1,'eve']]], + ['integral_5fscalar_5fvalue_36',['integral_scalar_value',['../concepteve_1_1integral__scalar__value.html',1,'eve']]], + ['integral_5fsimd_5fvalue_37',['integral_simd_value',['../concepteve_1_1integral__simd__value.html',1,'eve']]], + ['integral_5fvalue_38',['integral_value',['../concepteve_1_1integral__value.html',1,'eve']]], + ['like_39',['like',['../concepteve_1_1like.html',1,'eve']]], + ['logical_5fscalar_5fvalue_40',['logical_scalar_value',['../concepteve_1_1logical__scalar__value.html',1,'eve']]], + ['logical_5fvalue_41',['logical_value',['../concepteve_1_1logical__value.html',1,'eve']]], + ['real_5fscalar_5fvalue_42',['real_scalar_value',['../concepteve_1_1real__scalar__value.html',1,'eve']]], + ['real_5fvalue_43',['real_value',['../concepteve_1_1real__value.html',1,'eve']]], + ['scalar_5fvalue_44',['scalar_value',['../concepteve_1_1scalar__value.html',1,'eve']]], + ['signed_5fintegral_5fscalar_5fvalue_45',['signed_integral_scalar_value',['../concepteve_1_1signed__integral__scalar__value.html',1,'eve']]], + ['signed_5fintegral_5fvalue_46',['signed_integral_value',['../concepteve_1_1signed__integral__value.html',1,'eve']]], + ['signed_5fscalar_5fvalue_47',['signed_scalar_value',['../concepteve_1_1signed__scalar__value.html',1,'eve']]], + ['signed_5fvalue_48',['signed_value',['../concepteve_1_1signed__value.html',1,'eve']]], + ['simd_5fvalue_49',['simd_value',['../concepteve_1_1simd__value.html',1,'eve']]], + ['unsigned_5fscalar_5fvalue_50',['unsigned_scalar_value',['../concepteve_1_1unsigned__scalar__value.html',1,'eve']]], + ['unsigned_5fvalue_51',['unsigned_value',['../concepteve_1_1unsigned__value.html',1,'eve']]], + ['value_52',['value',['../concepteve_1_1value.html',1,'eve']]] ]; diff --git a/docs/html/search/pages_0.js b/docs/html/search/pages_0.js index f6e0a8872c..164421b999 100644 --- a/docs/html/search/pages_0.js +++ b/docs/html/search/pages_0.js @@ -1,5 +1,4 @@ var searchData= [ - ['change_20log_0',['Change Log',['../changelog.html',1,'']]], - ['conditional_20operations_1',['Conditional operations',['../tutorial_if_else.html',1,'tutorials']]] + ['building_20and_20testing_0',['Building and Testing',['../dev_cmake.html',1,'eve-dev']]] ]; diff --git a/docs/html/search/pages_1.js b/docs/html/search/pages_1.js index 97e7117dba..f6e0a8872c 100644 --- a/docs/html/search/pages_1.js +++ b/docs/html/search/pages_1.js @@ -1,4 +1,5 @@ var searchData= [ - ['glossary_0',['Glossary',['../glossary.html',1,'']]] + ['change_20log_0',['Change Log',['../changelog.html',1,'']]], + ['conditional_20operations_1',['Conditional operations',['../tutorial_if_else.html',1,'tutorials']]] ]; diff --git a/docs/html/search/pages_2.js b/docs/html/search/pages_2.js index 242f84f5a6..05c9e28ef5 100644 --- a/docs/html/search/pages_2.js +++ b/docs/html/search/pages_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['installation_20_26_20quick_20start_0',['Installation & Quick Start',['../install.html',1,'']]] + ['development_20environment_0',['Development Environment',['../dev_environment.html',1,'eve-dev']]] ]; diff --git a/docs/html/search/pages_3.js b/docs/html/search/pages_3.js index 88a8656201..071afefdb1 100644 --- a/docs/html/search/pages_3.js +++ b/docs/html/search/pages_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['licence_0',['Licence',['../licence.html',1,'']]] + ['eve_20development_0',['EVE Development',['../eve-dev.html',1,'']]] ]; diff --git a/docs/html/search/pages_4.js b/docs/html/search/pages_4.js index 8d91c39f8b..97e7117dba 100644 --- a/docs/html/search/pages_4.js +++ b/docs/html/search/pages_4.js @@ -1,4 +1,4 @@ var searchData= [ - ['property_20of_20eve_20types_0',['Property of EVE types',['../glossary_properties.html',1,'glossary']]] + ['glossary_0',['Glossary',['../glossary.html',1,'']]] ]; diff --git a/docs/html/search/pages_5.js b/docs/html/search/pages_5.js index 0784e124ad..242f84f5a6 100644 --- a/docs/html/search/pages_5.js +++ b/docs/html/search/pages_5.js @@ -1,4 +1,4 @@ var searchData= [ - ['rationale_0',['Rationale',['../rationale.html',1,'']]] + ['installation_20_26_20quick_20start_0',['Installation & Quick Start',['../install.html',1,'']]] ]; diff --git a/docs/html/search/pages_6.js b/docs/html/search/pages_6.js index d86301e5bc..88a8656201 100644 --- a/docs/html/search/pages_6.js +++ b/docs/html/search/pages_6.js @@ -1,4 +1,4 @@ var searchData= [ - ['semantic_20of_20eve_20functions_0',['Semantic of EVE functions',['../glossary_semantic.html',1,'glossary']]] + ['licence_0',['Licence',['../licence.html',1,'']]] ]; diff --git a/docs/html/search/pages_7.js b/docs/html/search/pages_7.js index 9fbbb7045a..8d91c39f8b 100644 --- a/docs/html/search/pages_7.js +++ b/docs/html/search/pages_7.js @@ -1,5 +1,4 @@ var searchData= [ - ['the_20expressive_20vector_20engine_0',['The Expressive Vector Engine',['../index.html',1,'']]], - ['tutorials_1',['Tutorials',['../tutorials.html',1,'']]] + ['property_20of_20eve_20types_0',['Property of EVE types',['../glossary_properties.html',1,'glossary']]] ]; diff --git a/docs/html/search/pages_8.html b/docs/html/search/pages_8.html new file mode 100644 index 0000000000..a6a559cc60 --- /dev/null +++ b/docs/html/search/pages_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
                                                                                          +
                                                                                          Loading...
                                                                                          +
                                                                                          + +
                                                                                          Searching...
                                                                                          +
                                                                                          No Matches
                                                                                          + +
                                                                                          + + diff --git a/docs/html/search/pages_8.js b/docs/html/search/pages_8.js new file mode 100644 index 0000000000..0784e124ad --- /dev/null +++ b/docs/html/search/pages_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rationale_0',['Rationale',['../rationale.html',1,'']]] +]; diff --git a/docs/html/search/pages_9.html b/docs/html/search/pages_9.html new file mode 100644 index 0000000000..1913887e78 --- /dev/null +++ b/docs/html/search/pages_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
                                                                                          +
                                                                                          Loading...
                                                                                          +
                                                                                          + +
                                                                                          Searching...
                                                                                          +
                                                                                          No Matches
                                                                                          + +
                                                                                          + + diff --git a/docs/html/search/pages_9.js b/docs/html/search/pages_9.js new file mode 100644 index 0000000000..d86301e5bc --- /dev/null +++ b/docs/html/search/pages_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['semantic_20of_20eve_20functions_0',['Semantic of EVE functions',['../glossary_semantic.html',1,'glossary']]] +]; diff --git a/docs/html/search/pages_a.html b/docs/html/search/pages_a.html new file mode 100644 index 0000000000..f7cffee7f9 --- /dev/null +++ b/docs/html/search/pages_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
                                                                                          +
                                                                                          Loading...
                                                                                          +
                                                                                          + +
                                                                                          Searching...
                                                                                          +
                                                                                          No Matches
                                                                                          + +
                                                                                          + + diff --git a/docs/html/search/pages_a.js b/docs/html/search/pages_a.js new file mode 100644 index 0000000000..9fbbb7045a --- /dev/null +++ b/docs/html/search/pages_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['the_20expressive_20vector_20engine_0',['The Expressive Vector Engine',['../index.html',1,'']]], + ['tutorials_1',['Tutorials',['../tutorials.html',1,'']]] +]; diff --git a/docs/html/search/searchdata.js b/docs/html/search/searchdata.js index 0b91c8413a..531fd62907 100644 --- a/docs/html/search/searchdata.js +++ b/docs/html/search/searchdata.js @@ -9,7 +9,7 @@ var indexSectionsWithContent = 6: "ou", 7: "os", 8: "abcdefhilmoprst", - 9: "cgilprst", + 9: "bcdegilprst", 10: "e" }; diff --git a/docs/html/structeve_1_1abi.html b/docs/html/structeve_1_1abi.html index b9a8d358df..b97dc525b1 100644 --- a/docs/html/structeve_1_1abi.html +++ b/docs/html/structeve_1_1abi.html @@ -174,8 +174,6 @@

                                                                                          - + diff --git a/docs/html/structeve_1_1aligned__allocator-members.html b/docs/html/structeve_1_1aligned__allocator-members.html index 1fd1c98be4..db5c46e1ce 100644 --- a/docs/html/structeve_1_1aligned__allocator-members.html +++ b/docs/html/structeve_1_1aligned__allocator-members.html @@ -157,8 +157,6 @@ - + diff --git a/docs/html/structeve_1_1aligned__allocator.html b/docs/html/structeve_1_1aligned__allocator.html index 496fc89559..70a6d738f7 100644 --- a/docs/html/structeve_1_1aligned__allocator.html +++ b/docs/html/structeve_1_1aligned__allocator.html @@ -225,8 +225,6 @@ - + diff --git a/docs/html/structeve_1_1aligned__allocator_1_1rebind-members.html b/docs/html/structeve_1_1aligned__allocator_1_1rebind-members.html index c9588eeda0..589ecd2e74 100644 --- a/docs/html/structeve_1_1aligned__allocator_1_1rebind-members.html +++ b/docs/html/structeve_1_1aligned__allocator_1_1rebind-members.html @@ -148,8 +148,6 @@ - + diff --git a/docs/html/structeve_1_1aligned__allocator_1_1rebind.html b/docs/html/structeve_1_1aligned__allocator_1_1rebind.html index d931912ad0..e8c2a327be 100644 --- a/docs/html/structeve_1_1aligned__allocator_1_1rebind.html +++ b/docs/html/structeve_1_1aligned__allocator_1_1rebind.html @@ -155,8 +155,6 @@ - + diff --git a/docs/html/structeve_1_1aligned__ptr-members.html b/docs/html/structeve_1_1aligned__ptr-members.html index 0348d1ca13..89743318e1 100644 --- a/docs/html/structeve_1_1aligned__ptr-members.html +++ b/docs/html/structeve_1_1aligned__ptr-members.html @@ -179,8 +179,6 @@ - + diff --git a/docs/html/structeve_1_1aligned__ptr.html b/docs/html/structeve_1_1aligned__ptr.html index 799585db0b..90f968b43b 100644 --- a/docs/html/structeve_1_1aligned__ptr.html +++ b/docs/html/structeve_1_1aligned__ptr.html @@ -309,8 +309,6 @@ - + diff --git a/docs/html/structeve_1_1aligned__ptr_a28fd884a05e3b74a5252025c69239e7f.html b/docs/html/structeve_1_1aligned__ptr_a28fd884a05e3b74a5252025c69239e7f.html index 39aa0b690b..760a42bbee 100644 --- a/docs/html/structeve_1_1aligned__ptr_a28fd884a05e3b74a5252025c69239e7f.html +++ b/docs/html/structeve_1_1aligned__ptr_a28fd884a05e3b74a5252025c69239e7f.html @@ -234,8 +234,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1aligned__ptr_a52d5ad94329c310ad8cb583b4e3f19f1.html b/docs/html/structeve_1_1aligned__ptr_a52d5ad94329c310ad8cb583b4e3f19f1.html index 33534a8133..b42c339b4b 100644 --- a/docs/html/structeve_1_1aligned__ptr_a52d5ad94329c310ad8cb583b4e3f19f1.html +++ b/docs/html/structeve_1_1aligned__ptr_a52d5ad94329c310ad8cb583b4e3f19f1.html @@ -233,8 +233,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1aligned__ptr_a5376a9155a39e6d311e361ef365c222f.html b/docs/html/structeve_1_1aligned__ptr_a5376a9155a39e6d311e361ef365c222f.html index 371a9de6e0..5952853256 100644 --- a/docs/html/structeve_1_1aligned__ptr_a5376a9155a39e6d311e361ef365c222f.html +++ b/docs/html/structeve_1_1aligned__ptr_a5376a9155a39e6d311e361ef365c222f.html @@ -214,8 +214,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1aligned__ptr_a911aab2fb14b05dcc4625f412282dbe1.html b/docs/html/structeve_1_1aligned__ptr_a911aab2fb14b05dcc4625f412282dbe1.html index ddabc35abc..4cdcd77ce0 100644 --- a/docs/html/structeve_1_1aligned__ptr_a911aab2fb14b05dcc4625f412282dbe1.html +++ b/docs/html/structeve_1_1aligned__ptr_a911aab2fb14b05dcc4625f412282dbe1.html @@ -223,8 +223,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1aligned__ptr_ac2f686e634604536ddbdcfce629887f3.html b/docs/html/structeve_1_1aligned__ptr_ac2f686e634604536ddbdcfce629887f3.html index 0edd05b03a..a24b8e2514 100644 --- a/docs/html/structeve_1_1aligned__ptr_ac2f686e634604536ddbdcfce629887f3.html +++ b/docs/html/structeve_1_1aligned__ptr_ac2f686e634604536ddbdcfce629887f3.html @@ -222,8 +222,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1as-members.html b/docs/html/structeve_1_1as-members.html index 0b79a786de..5f3944f650 100644 --- a/docs/html/structeve_1_1as-members.html +++ b/docs/html/structeve_1_1as-members.html @@ -150,8 +150,6 @@ - + diff --git a/docs/html/structeve_1_1as.html b/docs/html/structeve_1_1as.html index 1172814a25..abbddca049 100644 --- a/docs/html/structeve_1_1as.html +++ b/docs/html/structeve_1_1as.html @@ -171,8 +171,6 @@ - + diff --git a/docs/html/structeve_1_1as__pattern-members.html b/docs/html/structeve_1_1as__pattern-members.html index 3d074d503e..b1d5c47476 100644 --- a/docs/html/structeve_1_1as__pattern-members.html +++ b/docs/html/structeve_1_1as__pattern-members.html @@ -148,8 +148,6 @@ - + diff --git a/docs/html/structeve_1_1as__pattern.html b/docs/html/structeve_1_1as__pattern.html index 807b7ca078..b09b4b27a3 100644 --- a/docs/html/structeve_1_1as__pattern.html +++ b/docs/html/structeve_1_1as__pattern.html @@ -154,8 +154,6 @@ - + diff --git a/docs/html/structeve_1_1cardinal-members.html b/docs/html/structeve_1_1cardinal-members.html index 98ad94c742..70f4b0d00d 100644 --- a/docs/html/structeve_1_1cardinal-members.html +++ b/docs/html/structeve_1_1cardinal-members.html @@ -148,8 +148,6 @@ - + diff --git a/docs/html/structeve_1_1cardinal.html b/docs/html/structeve_1_1cardinal.html index f3f3ce9f19..147058ca94 100644 --- a/docs/html/structeve_1_1cardinal.html +++ b/docs/html/structeve_1_1cardinal.html @@ -182,8 +182,6 @@

                                                                                          Helper types

                                                                                          - + diff --git a/docs/html/structeve_1_1common__compatible.html b/docs/html/structeve_1_1common__compatible.html index 0ca67480f7..29e9bf7d2a 100644 --- a/docs/html/structeve_1_1common__compatible.html +++ b/docs/html/structeve_1_1common__compatible.html @@ -198,8 +198,6 @@

                                                                                          - + diff --git a/docs/html/structeve_1_1common__type.html b/docs/html/structeve_1_1common__type.html index 3e4c46f48a..d39d5669ab 100644 --- a/docs/html/structeve_1_1common__type.html +++ b/docs/html/structeve_1_1common__type.html @@ -159,8 +159,6 @@ - + diff --git a/docs/html/structeve_1_1detail_1_1wide__cardinal-members.html b/docs/html/structeve_1_1detail_1_1wide__cardinal-members.html index 44d56946e0..4999c3359f 100644 --- a/docs/html/structeve_1_1detail_1_1wide__cardinal-members.html +++ b/docs/html/structeve_1_1detail_1_1wide__cardinal-members.html @@ -153,8 +153,6 @@ - + diff --git a/docs/html/structeve_1_1detail_1_1wide__cardinal.html b/docs/html/structeve_1_1detail_1_1wide__cardinal.html index 534c8e86aa..a6517671ae 100644 --- a/docs/html/structeve_1_1detail_1_1wide__cardinal.html +++ b/docs/html/structeve_1_1detail_1_1wide__cardinal.html @@ -186,8 +186,6 @@ - + diff --git a/docs/html/structeve_1_1detail_1_1wide__storage-members.html b/docs/html/structeve_1_1detail_1_1wide__storage-members.html index 430109bca0..2f051e9029 100644 --- a/docs/html/structeve_1_1detail_1_1wide__storage-members.html +++ b/docs/html/structeve_1_1detail_1_1wide__storage-members.html @@ -155,8 +155,6 @@ - + diff --git a/docs/html/structeve_1_1detail_1_1wide__storage.html b/docs/html/structeve_1_1detail_1_1wide__storage.html index 307fe1d169..7fe610b33b 100644 --- a/docs/html/structeve_1_1detail_1_1wide__storage.html +++ b/docs/html/structeve_1_1detail_1_1wide__storage.html @@ -190,8 +190,6 @@ - + diff --git a/docs/html/structeve_1_1element__type-members.html b/docs/html/structeve_1_1element__type-members.html index 9aa8324f3a..d6fafc83b0 100644 --- a/docs/html/structeve_1_1element__type-members.html +++ b/docs/html/structeve_1_1element__type-members.html @@ -148,8 +148,6 @@ - + diff --git a/docs/html/structeve_1_1element__type.html b/docs/html/structeve_1_1element__type.html index c551bedd2a..2b2cfc2313 100644 --- a/docs/html/structeve_1_1element__type.html +++ b/docs/html/structeve_1_1element__type.html @@ -176,8 +176,6 @@

                                                                                          - + diff --git a/docs/html/structeve_1_1fixed-members.html b/docs/html/structeve_1_1fixed-members.html index bbd3309f1e..db65fa3d68 100644 --- a/docs/html/structeve_1_1fixed-members.html +++ b/docs/html/structeve_1_1fixed-members.html @@ -148,8 +148,6 @@ - + diff --git a/docs/html/structeve_1_1fixed.html b/docs/html/structeve_1_1fixed.html index 09841e05f3..4107860b2e 100644 --- a/docs/html/structeve_1_1fixed.html +++ b/docs/html/structeve_1_1fixed.html @@ -175,8 +175,6 @@

                                                                                          Member type

                                                                                          - + diff --git a/docs/html/structeve_1_1logical-members.html b/docs/html/structeve_1_1logical-members.html index 74de8bf765..03d43c0246 100644 --- a/docs/html/structeve_1_1logical-members.html +++ b/docs/html/structeve_1_1logical-members.html @@ -158,8 +158,6 @@ - + diff --git a/docs/html/structeve_1_1logical.html b/docs/html/structeve_1_1logical.html index c6b752a3e3..3bb752ef58 100644 --- a/docs/html/structeve_1_1logical.html +++ b/docs/html/structeve_1_1logical.html @@ -209,8 +209,6 @@ - + diff --git a/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4-members.html b/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4-members.html index e544a232c9..70d31f55c8 100644 --- a/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4-members.html +++ b/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4-members.html @@ -209,8 +209,6 @@ - + diff --git a/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4.html b/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4.html index 90421951ff..81ab644034 100644 --- a/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4.html +++ b/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4.html @@ -445,8 +445,6 @@ - + diff --git a/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a71e274784f66b6d8f845129e580ae02a.html b/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a71e274784f66b6d8f845129e580ae02a.html index a6792992cb..14fc1a6d78 100644 --- a/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a71e274784f66b6d8f845129e580ae02a.html +++ b/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a71e274784f66b6d8f845129e580ae02a.html @@ -265,8 +265,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a76f1ddeec815e55b6d52d0842953f8d9.html b/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a76f1ddeec815e55b6d52d0842953f8d9.html index d3ae33f611..c7ea053e63 100644 --- a/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a76f1ddeec815e55b6d52d0842953f8d9.html +++ b/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a76f1ddeec815e55b6d52d0842953f8d9.html @@ -246,8 +246,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a84ea3b085a785e085cbb9a9ffba1c4a4.html b/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a84ea3b085a785e085cbb9a9ffba1c4a4.html index 9eddfb704d..ce7ac907d6 100644 --- a/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a84ea3b085a785e085cbb9a9ffba1c4a4.html +++ b/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a84ea3b085a785e085cbb9a9ffba1c4a4.html @@ -261,8 +261,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a8bd0437f26de008df000dc33588253ac.html b/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a8bd0437f26de008df000dc33588253ac.html index 70e5a5e960..7cfa614ec8 100644 --- a/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a8bd0437f26de008df000dc33588253ac.html +++ b/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a8bd0437f26de008df000dc33588253ac.html @@ -249,8 +249,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a9c1b736b8def0af8a8f928e7cf016356.html b/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a9c1b736b8def0af8a8f928e7cf016356.html index 787ad48a29..e5d1ef10e8 100644 --- a/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a9c1b736b8def0af8a8f928e7cf016356.html +++ b/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_a9c1b736b8def0af8a8f928e7cf016356.html @@ -247,8 +247,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_aa9cd862159f14c1959ab479dc243a310.html b/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_aa9cd862159f14c1959ab479dc243a310.html index b0664e8af9..a40779ff85 100644 --- a/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_aa9cd862159f14c1959ab479dc243a310.html +++ b/docs/html/structeve_1_1logical_3_01wide_3_01Type_00_01Cardinal_01_4_01_4_aa9cd862159f14c1959ab479dc243a310.html @@ -252,8 +252,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1pattern__t-members.html b/docs/html/structeve_1_1pattern__t-members.html index 6a0e132e7d..ddd9b19613 100644 --- a/docs/html/structeve_1_1pattern__t-members.html +++ b/docs/html/structeve_1_1pattern__t-members.html @@ -164,8 +164,6 @@ - + diff --git a/docs/html/structeve_1_1pattern__t.html b/docs/html/structeve_1_1pattern__t.html index c82729bc91..d228ed3eaf 100644 --- a/docs/html/structeve_1_1pattern__t.html +++ b/docs/html/structeve_1_1pattern__t.html @@ -243,8 +243,6 @@ - + diff --git a/docs/html/structeve_1_1pattern__t_aba2457c37b6001a44f3c682466fd4e36.html b/docs/html/structeve_1_1pattern__t_aba2457c37b6001a44f3c682466fd4e36.html index 9fdd2ef0ba..7dde0272ea 100644 --- a/docs/html/structeve_1_1pattern__t_aba2457c37b6001a44f3c682466fd4e36.html +++ b/docs/html/structeve_1_1pattern__t_aba2457c37b6001a44f3c682466fd4e36.html @@ -209,8 +209,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1pattern__t_ad209f6cc99dbfc1a50994908c70159d5.html b/docs/html/structeve_1_1pattern__t_ad209f6cc99dbfc1a50994908c70159d5.html index 1bc828b0a8..a5d4ee1e0b 100644 --- a/docs/html/structeve_1_1pattern__t_ad209f6cc99dbfc1a50994908c70159d5.html +++ b/docs/html/structeve_1_1pattern__t_ad209f6cc99dbfc1a50994908c70159d5.html @@ -199,8 +199,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1scalar__cardinal-members.html b/docs/html/structeve_1_1scalar__cardinal-members.html index d7d6f198e6..2a5ffb72ea 100644 --- a/docs/html/structeve_1_1scalar__cardinal-members.html +++ b/docs/html/structeve_1_1scalar__cardinal-members.html @@ -148,8 +148,6 @@ - + diff --git a/docs/html/structeve_1_1scalar__cardinal.html b/docs/html/structeve_1_1scalar__cardinal.html index b061ac3675..6d5b70ed48 100644 --- a/docs/html/structeve_1_1scalar__cardinal.html +++ b/docs/html/structeve_1_1scalar__cardinal.html @@ -157,8 +157,6 @@ - + diff --git a/docs/html/structeve_1_1supports__ordering.html b/docs/html/structeve_1_1supports__ordering.html index ce1364a1c2..83a43e643e 100644 --- a/docs/html/structeve_1_1supports__ordering.html +++ b/docs/html/structeve_1_1supports__ordering.html @@ -167,8 +167,6 @@

                                                                                          - + diff --git a/docs/html/structeve_1_1wide-members.html b/docs/html/structeve_1_1wide-members.html index 129bab6655..0c3388cdd8 100644 --- a/docs/html/structeve_1_1wide-members.html +++ b/docs/html/structeve_1_1wide-members.html @@ -254,8 +254,6 @@ - + diff --git a/docs/html/structeve_1_1wide.html b/docs/html/structeve_1_1wide.html index 416b5ebdee..360da628b9 100644 --- a/docs/html/structeve_1_1wide.html +++ b/docs/html/structeve_1_1wide.html @@ -654,8 +654,6 @@ - + diff --git a/docs/html/structeve_1_1wide_a007581d779fcbfc70bfcee970ee95451.html b/docs/html/structeve_1_1wide_a007581d779fcbfc70bfcee970ee95451.html index d0c1247535..6860c568ff 100644 --- a/docs/html/structeve_1_1wide_a007581d779fcbfc70bfcee970ee95451.html +++ b/docs/html/structeve_1_1wide_a007581d779fcbfc70bfcee970ee95451.html @@ -305,8 +305,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1wide_a3ada8e47ac9e93111361ac5ca1c18db9.html b/docs/html/structeve_1_1wide_a3ada8e47ac9e93111361ac5ca1c18db9.html index 135047c7bf..6961b3b014 100644 --- a/docs/html/structeve_1_1wide_a3ada8e47ac9e93111361ac5ca1c18db9.html +++ b/docs/html/structeve_1_1wide_a3ada8e47ac9e93111361ac5ca1c18db9.html @@ -308,8 +308,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1wide_a446e0b79466b770ebdbf1c1ffc7f13c1.html b/docs/html/structeve_1_1wide_a446e0b79466b770ebdbf1c1ffc7f13c1.html index 89ac53096e..e458129ae5 100644 --- a/docs/html/structeve_1_1wide_a446e0b79466b770ebdbf1c1ffc7f13c1.html +++ b/docs/html/structeve_1_1wide_a446e0b79466b770ebdbf1c1ffc7f13c1.html @@ -310,8 +310,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1wide_a50afd01697dd502f6a3d1180a6ddc6f4.html b/docs/html/structeve_1_1wide_a50afd01697dd502f6a3d1180a6ddc6f4.html index f8d2fcf3a1..b74a6158b1 100644 --- a/docs/html/structeve_1_1wide_a50afd01697dd502f6a3d1180a6ddc6f4.html +++ b/docs/html/structeve_1_1wide_a50afd01697dd502f6a3d1180a6ddc6f4.html @@ -308,8 +308,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1wide_ac11f89ce0f2f2f532d6196f161f80494.html b/docs/html/structeve_1_1wide_ac11f89ce0f2f2f532d6196f161f80494.html index f0ab0d493a..723134d8c2 100644 --- a/docs/html/structeve_1_1wide_ac11f89ce0f2f2f532d6196f161f80494.html +++ b/docs/html/structeve_1_1wide_ac11f89ce0f2f2f532d6196f161f80494.html @@ -309,8 +309,6 @@

                                                                                          + diff --git a/docs/html/structeve_1_1wide_ac93011212ddf6a39c16f4f011462bdb3.html b/docs/html/structeve_1_1wide_ac93011212ddf6a39c16f4f011462bdb3.html index 341379f9a8..529faf98f0 100644 --- a/docs/html/structeve_1_1wide_ac93011212ddf6a39c16f4f011462bdb3.html +++ b/docs/html/structeve_1_1wide_ac93011212ddf6a39c16f4f011462bdb3.html @@ -297,8 +297,6 @@

                                                                                          + diff --git a/docs/html/structstruct__support_3_01Self_00_1_1_1_1_1_1Fields_01_4.html b/docs/html/structstruct__support_3_01Self_00_1_1_1_1_1_1Fields_01_4.html index 50ad9a0b99..cbbf1322cc 100644 --- a/docs/html/structstruct__support_3_01Self_00_1_1_1_1_1_1Fields_01_4.html +++ b/docs/html/structstruct__support_3_01Self_00_1_1_1_1_1_1Fields_01_4.html @@ -149,8 +149,6 @@ - + diff --git a/docs/html/tutorial_if_else.html b/docs/html/tutorial_if_else.html index b50ee101f7..abd085f940 100644 --- a/docs/html/tutorial_if_else.html +++ b/docs/html/tutorial_if_else.html @@ -398,8 +398,6 @@

                                                                                          - + diff --git a/docs/html/tutorials.html b/docs/html/tutorials.html index d949a84226..45bfedf207 100644 --- a/docs/html/tutorials.html +++ b/docs/html/tutorials.html @@ -154,8 +154,6 @@ - + diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 1d4ef4e4c6..8a96479ca9 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -3,11 +3,19 @@ ## Copyright : EVE Contributors & Maintainers ## SPDX-License-Identifier: MIT ##================================================================================================== +make_unit( "examples" start_here.cpp ) + make_unit( "examples" algorithms/using_existing/memcmp__two_range_algorithms_interface_specifics.cpp ) make_unit( "examples" algorithms/using_existing/inclusive_scan_zip__using_zip_with_algorithms.cpp ) +make_unit( "examples" algorithms/using_existing/case_insensitive_equals.cpp ) + +find_package(Threads REQUIRED) +make_unit( "examples" algorithms/using_existing/inclusive_scan_par_unseq__using_eve_to_build_both_vectorized_and_parallel_algos.cpp ) +target_link_libraries(examples.algorithms.using_existing.inclusive_scan_par_unseq__using_eve_to_build_both_vectorized_and_parallel_algos.exe PRIVATE Threads::Threads) make_unit( "examples" algorithms/writing_new/collect_indexes__complicated_real_example.cpp ) make_unit( "examples" algorithms/writing_new/strlen__showing_basic_conepts.cpp ) make_unit( "examples" oop/complex_numbers__declaring_an_object_type.cpp ) +make_unit( "examples" oop/data_driven_physics.cpp ) diff --git a/examples/algorithms/using_existing/case_insensitive_equals.cpp b/examples/algorithms/using_existing/case_insensitive_equals.cpp new file mode 100644 index 0000000000..d0efa9e542 --- /dev/null +++ b/examples/algorithms/using_existing/case_insensitive_equals.cpp @@ -0,0 +1,64 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== + + +#include +#include + +#include +#include + +namespace ascii +{ + struct + { + // This accepts both std::uint8_t and eve::wide + EVE_FORCEINLINE auto operator()(eve::like auto c) const + { + // if C - 'a' is less than 26, then C is uppercased, otherwide it's lowercased + // 'a' < c < 'z' is equivalent to (c - 'a') < 26 because of the underflow + return eve::sub[c - 'a' <= 26](c, ('a' - 'A')); + } + + } inline constexpr our_to_upper; + + bool iequals(std::string_view a, std::string_view b) + { + // If they're not the same size, why bother converting them both to uppercase and then check? + // btw, it will just crash if the sizes are not equal. You cannot run algo::equal on different sizes. + if( a.size() != b.size() ) + return false; + + // converting them to uint8_t; because our to upper algorithm relies on unsigned integers. + auto *f1 = reinterpret_cast(a.begin()); + auto *l1 = reinterpret_cast(a.end()); + auto *f2 = reinterpret_cast(b.begin()); + + return eve::algo::equal(eve::algo::as_range(f1, l1), + f2, + [](eve::wide a, eve::wide b) + { + // convert both to uppercase and then check if they're equal + return our_to_upper(a) == our_to_upper(b); + }); + } + +} + + +// ----------------------- + +#include "test.hpp" + +TTS_CASE("IEquals, basics") +{ + TTS_EQUAL(ascii::iequals("123 One Two aZ", "123 oNe TWo Az"), true); + TTS_EQUAL(ascii::iequals("103 One Two aZ", "123 oNe TWo Az"), false); + TTS_EQUAL(ascii::iequals("not the same size as", "123 oNe TWo Az"), false); + TTS_EQUAL(ascii::iequals("Short", "SHorT"), true); +}; diff --git a/examples/algorithms/using_existing/inclusive_scan_par_unseq__using_eve_to_build_both_vectorized_and_parallel_algos.cpp b/examples/algorithms/using_existing/inclusive_scan_par_unseq__using_eve_to_build_both_vectorized_and_parallel_algos.cpp new file mode 100644 index 0000000000..26a0c04cf4 --- /dev/null +++ b/examples/algorithms/using_existing/inclusive_scan_par_unseq__using_eve_to_build_both_vectorized_and_parallel_algos.cpp @@ -0,0 +1,329 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== + +// In this example we are going to have a look at the problem from +// this https://stackoverflow.com/q/10587598/5021064 +// +// The solution by @Zbozon was the basis of our inclusive_scan implementation. +// +// eve itself does not deal with threading however it's a good building block. + +// The main idea: +// * split the computation into chunks +// * scan each chunk in parallel +// * each thread writes the overall sum into a vector +// * scan a vector of sums on one thread +// * each thread applies a previous sum to each part + +// NOTE: please don't do threading like we do, it's very very bad. +// Ideally you want some reasonable tasking system. +// Maybe: https://stlab.cc/ ? + +// NOTE: supporting SOA here is possible but it makes the solution +// much more complicated. + +#include +#include + +#include + +#include +#include + +// ------------------------- +// typedefs + +// The example was about floats +using T = float; + +// We are going to use alignment of at least 64 bytes so that +// threads don't touch each other's cache lines. + +using cache_line_n = eve::fixed<64 / sizeof(T)>; +using aptr = eve::aligned_ptr; + +using uptr_range = eve::algo::as_range; +using aptr_range = eve::algo::as_range; + +// ------------------------- +// inclusive_scan/add_to_each +// +// Wrappers around eve algorithms, that will likely not be inlined. +// +// +// TODO: think, maybe we should return the sum from `eve::algo::inclusive_scan` +// since we don't return the output iterator anyways? +struct +{ + // boundary version + float operator()(uptr_range r, T init) const + { + if (r.begin() == r.end()) return init; + eve::algo::inclusive_scan_inplace(r, init); + return *(r.end() - 1); + } + + // middle version + float operator()(aptr_range r) const + { + if (r.begin() == r.end()) return 0.0f; + eve::algo::inclusive_scan_inplace(r, 0.0f); + return *(r.end().get() - 1); + } + +} inline constexpr inclusive_scan; + +struct +{ + void operator()(uptr_range r, T v) const + { + eve::algo::transform_inplace(r, [v](auto x) { return x + v; }); + } + + void operator()(aptr_range r, T v) const + { + eve::algo::transform_inplace(r, [v](auto x) { return x + v; }); + } +} inline constexpr add_to_each; + + +// ----------------------------------- +// subranges_split +// +// First and last chunks will be not well aligned, while the middle chunks +// are aligned from both sides. +// +// NOTE: this `split` is fairly difficult to test properly, +// no guarntees that it's bug free. + +struct subranges_split_t +{ + uptr_range first; + std::vector middle; + uptr_range last; + + subranges_split_t(): + first(nullptr, nullptr), + middle(), + last(nullptr, nullptr) + {} +}; + +subranges_split_t subranges_split(uptr_range r, + std::ptrdiff_t subrange_count, + std::ptrdiff_t rough_min_size) { + T* f = r.begin(); + T* l = r.end(); + + subranges_split_t res; + + if( l - f <= rough_min_size ) + { + res.first = {f, l}; + return res; + } + + // Select chunk size: + // either based on subrange count or rough min size but always divisible by cacheline + // We round up. + std::ptrdiff_t chunk_size = std::max((l - f) / subrange_count, rough_min_size); + chunk_size += cache_line_n{}() - chunk_size % cache_line_n{}(); + + aptr f1 = eve::previous_aligned_address(f + chunk_size, cache_line_n{}); + res.first = {f, f1.get()}; + + while (l - f1 > chunk_size) { + aptr f2 = f1 + chunk_size; + res.middle.emplace_back(f1, f2); + f1 = f2; + } + + res.last = {f1.get(), l}; + + return res; +} + +// -------------------------------- +// par unseq scan +// +// NOTE: std::async/std::future are placeholders for your tasking system. + +// 16 pages per thread, completly out of the blue. +constexpr std::ptrdiff_t job_size = 4096 * 16 / sizeof(T); + +namespace _inclusive_scan_par_unseq +{ + // Run inclusive scan in each part. + // Returns the sums of each part in a vector. + // Alternatively, we could not allocate the sums vector + // but then we couldn't run a vectorized scan on them. + // + // Also some logic would be more difficult. + std::vector scan_step(subranges_split_t const& subranges, T init) + { + std::vector> async_work; + + // First and middle chunk schedule on different threads. + // `std::async` is not great and is used as a stand in for a real tasking system used. + async_work.push_back(std::async(inclusive_scan, subranges.first, init)); + + for (auto m : subranges.middle) { + async_work.push_back(std::async(inclusive_scan, m)); + } + + // Compute last chunk on the main thread. + // Alternatively this could've been also scheduled asyncronously, + // and the caller could continue straight away. + inclusive_scan(subranges.last, T(0)); + + std::vector res (subranges.middle.size() + 1); + + // when all. Due to using std::future is blocking. Ideally - should be async. + std::transform(async_work.begin(), async_work.end(), res.begin(), + [](auto& f) { return f.get(); }); + + return res; + } + + void add_previous_sum_step(subranges_split_t const& subranges, std::vector const& sums) + { + std::vector> async_work; + + for (std::size_t i = 0; i != subranges.middle.size(); ++i) { + async_work.push_back(std::async(add_to_each, subranges.middle[i], sums[i])); + } + + // add to last chunk on the main thread + add_to_each(subranges.last, sums.back()); + + // when all, should be asyncrunous in a normal tasking system. + for (auto& f : async_work) f.get(); + } +} + +void inclusive_scan_par_unseq(uptr_range r, T init) +{ + // First we split into subranges that we are going to process in parallel + auto subranges = subranges_split(r, (std::ptrdiff_t)std::thread::hardware_concurrency(), job_size); + + // Scan each subrange + std::vector sums = _inclusive_scan_par_unseq::scan_step(subranges, init); + + // scan sums + inclusive_scan(uptr_range{sums.data(), sums.data() + sums.size()}, 0.0); + + // add a previous sum to each chunk + _inclusive_scan_par_unseq::add_previous_sum_step(subranges, sums); +} + +// ----------------------- + +#include "test.hpp" + +#include + +TTS_CASE("subranges_split") { + using a_v = std::vector>; + + using idx_pair = kumi::tuple; + + auto split_to_ints = [](subranges_split_t split) { + T* base = split.first.begin(); + + std::vector res; + + auto push_range = [&](auto r) mutable { + if (r.begin() == r.end()) return; + + res.push_back(idx_pair{r.begin() - base, r.end() - base}); + }; + + push_range(split.first); + + for (auto r : split.middle) push_range(r); + + push_range(split.last); + + return res; + }; + + auto test = [&](auto&& r, int group_count, int group_size, std::vector expected) + { + auto split = subranges_split( + eve::algo::as_range(r.data(), r.data() + r.size()), + group_count, group_size); + TTS_EQUAL(expected, split_to_ints(split)); + }; + + // empty + { + a_v v; + test(v, 1, 1, {}); + } + + // align middle + { + a_v v (100u, 0); + + test(v, 2, 45, + { {0, 64}, {64, 100} } + ); + } + + // two chunks middle + { + a_v v (200u, 0); + + test(v, 4, 50, + { {0, 64}, {64, 128}, {128, 192}, {192, 200} } + ); + } + // too small of a range + { + std::vector v(1000u, 0); + + test(v, 3, 10'000, + { {0, 1000} } + ); + } + + // giant range + { + std::size_t size = job_size * 16; + std::vector v (size, T(15)); + subranges_split(uptr_range(v.data(), v.data() + size), + (std::ptrdiff_t)std::thread::hardware_concurrency(), job_size); + } + +}; + +TTS_CASE("inclusive_scan") +{ + std::vector v; + TTS_EQUAL(inclusive_scan(eve::algo::as_range(v.data(), v.data() + v.size()), T{3}), + T{3}); +}; + +#if !defined(EVE_HW_POWERPC) // calling std::async crashes in our quemu run. +TTS_CASE("inclusive_scan_par_unseq") +{ + { + std::vector v; + inclusive_scan_par_unseq(uptr_range(v.data(), v.data() + v.size()), T(0)); + } + + { + std::size_t size = job_size * 16; + std::vector v (size, T(15)); + std::vector expected(size, T(0)); + eve::algo::inclusive_scan_to(v, expected, T(5)); + inclusive_scan_par_unseq(uptr_range(v.data(), v.data() + v.size()), T(5)); + TTS_EQUAL(expected, v); + } +}; +#endif diff --git a/examples/algorithms/using_existing/inclusive_scan_zip__using_zip_with_algorithms.cpp b/examples/algorithms/using_existing/inclusive_scan_zip__using_zip_with_algorithms.cpp index 698f88937e..25c82122e6 100644 --- a/examples/algorithms/using_existing/inclusive_scan_zip__using_zip_with_algorithms.cpp +++ b/examples/algorithms/using_existing/inclusive_scan_zip__using_zip_with_algorithms.cpp @@ -20,7 +20,7 @@ // showcases zip. #include -#include +#include #include @@ -29,7 +29,7 @@ using cmplx_tuple = kumi::tuple; void inclusive_scan_complex(std::vector& re, std::vector& im, cmplx_tuple init) { // Construct a view to both vectors as one range. - eve::algo::zip_range zipped = eve::algo::zip(re, im); + eve::views::zip_range zipped = eve::views::zip(re, im); // The value type for zip is a wide @@ -79,4 +79,4 @@ TTS_CASE("inclusive_scan_complex") TTS_EQUAL(actual_re, expected_re); TTS_EQUAL(actual_im, expected_im); -} +}; diff --git a/examples/algorithms/using_existing/memcmp__two_range_algorithms_interface_specifics.cpp b/examples/algorithms/using_existing/memcmp__two_range_algorithms_interface_specifics.cpp index 69f6964d83..ea66f8d0da 100644 --- a/examples/algorithms/using_existing/memcmp__two_range_algorithms_interface_specifics.cpp +++ b/examples/algorithms/using_existing/memcmp__two_range_algorithms_interface_specifics.cpp @@ -14,7 +14,7 @@ #include #include -#include +#include int memcmp_( void const* lhs, void const* rhs, std::size_t count ) // @@ -41,8 +41,8 @@ int memcmp_( void const* lhs, void const* rhs, std::size_t count ) // It can also accept both arguments zipped together, like we use here. // In this case it's a matter of taste, but sometimes you want to have access // to `zip`, because of it's options like `zip[eve::algo::common_type]`. - eve::algo::zip_range r1_r2 = eve::algo::zip(r1, f2); - eve::algo::zip_iterator found = eve::algo::mismatch(r1_r2); + eve::views::zip_range r1_r2 = eve::views::zip(r1, f2); + eve::views::zip_iterator found = eve::algo::mismatch(r1_r2); // Same as with `std` end iterator means nothing is found - no mismatch. if (found == r1_r2.end()) return 0; @@ -96,4 +96,4 @@ TTS_CASE("against std::memcmp") a[237] = 243; test(a, b); } -} +}; diff --git a/examples/algorithms/writing_new/collect_indexes__complicated_real_example.cpp b/examples/algorithms/writing_new/collect_indexes__complicated_real_example.cpp index 97e6d4a909..7915bdceb0 100644 --- a/examples/algorithms/writing_new/collect_indexes__complicated_real_example.cpp +++ b/examples/algorithms/writing_new/collect_indexes__complicated_real_example.cpp @@ -59,68 +59,58 @@ void collect_indexes(R&& r, P p, std::vector& res) // somewheere in valid memory, even if we ignore everything. if (r.begin() == r.end()) return; - using T = eve::algo::value_type_t>; - - // As a step we should use the minimum cardinal between what T and IdxType. - // (at least by default). - // Otherwise either the compressing of the output or applying the predicate will be weird. - constexpr std::ptrdiff_t step = std::min(eve::expected_cardinal_v, - eve::expected_cardinal_v); - - // ^ Computation of the step is why the requirements on the predicate are difficult. - // It has to be `invocable>` but we didn't have the step - // before this point. - // This converts the input to eve's understanding of a range: // unwraps vector::iterator to pointers, things like that. + // This is also where all of our dealing with traits happen, + // passing `consider_types` will make sure that we choose the cardinal (width) + // appropriate for both range type and index type. auto processed = eve::algo::preprocess_range( - eve::algo::traits{eve::algo::force_cardinal}, - std::forward(r) + eve::algo::traits{eve::algo::consider_types}, std::forward(r) ); // Here we would normally use `for_each_iteration` but it's good to understand what's // happening inside. - auto f = processed.begin(); - auto l = processed.end(); - auto precise_l = f + (l - f) / step * step; + auto f = processed.begin(); + auto l = processed.end(); + using I = decltype(f); + using N = eve::algo::iterator_cardinal_t; + // ^ Because this is the first place where we get the cardinal, + // we couldn't specify the requirement on the predicate - // We are going to overallocate the output so that we can don't have to store partial - // registers - res.resize(l - f + step); + auto precise_l = f + ((l - f) / N{}()) * N{}(); - IdxType* out = res.data(); // where will we write the data + // We are going to overallocate the output so that we can don't + // have to store partial registers. + res.resize(l - f + N{}()); + IdxType* out = res.data(); // In a normal loop this would be i from for (i = 0; i != ...) // The lambda constructor will fill in (0, 1, 2, ...); - eve::wide> wide_i{[](int i, int) { return i; }}; + eve::wide wide_i{[](int i, int) { return i; }}; while (f != precise_l) { - auto test = p(eve::load(f)); // apply the predicate - auto idx_test = - eve::convert(test, eve::as>{}); // At the moment we need to convert - // the logical types. We plan on fixing this. + auto test = p(eve::load(f)); // apply the predicate // Compress store is the working horse of `remove`. It get's values, mask and where to store. // Writes all of the elements, for which mask is true. // Returns a pointer to after the last stored. // `unsafe` refers to the fact that it's allowed to store up to the whole register, // as long as the first elements are fine. - out = eve::unsafe(eve::compress_store)(wide_i, idx_test, out); + out = eve::unsafe(eve::compress_store)(wide_i, test, out); - wide_i += step; // ++i - f += step; // ++f + wide_i += N{}(); // ++i + f += N{}(); // ++f } // Deal with tail if (f != l) { - auto ignore = eve::keep_first(l - f); // elements after l should not be touched - auto test = p(eve::load[ignore](f)); // This will safely load the partial register. - // The last elements that correspond to after l will be garbage. - auto idx_test = eve::convert(test, eve::as>{}); + auto ignore = eve::keep_first(l - f); // elements after l should not be touched + auto test = p(eve::load[ignore](f)); // This will safely load the partial register. + // The last elements that correspond to after l will be garbage. // We have overallocated the output, but we still need to mask out garbage elements - idx_test = idx_test && ignore.mask(eve::as(idx_test)); - out = eve::unsafe(eve::compress_store)(wide_i, idx_test, out); + test = test && ignore.mask(eve::as(test)); + out = eve::unsafe(eve::compress_store)(wide_i, test, out); } // Clean up the vector @@ -144,7 +134,7 @@ TTS_CASE("collect_indexes, elements equal to 2") std::vector actual; collect_indexes(input, [](auto x) { return x == 2; }, actual); TTS_EQUAL(expected, actual); -} +}; TTS_CASE("collect_indexes for objects") { @@ -157,7 +147,7 @@ TTS_CASE("collect_indexes for objects") collect_indexes(objects, [](auto x) { return get<0>(x) > 0; }, idxs); TTS_EQUAL(idxs, expected); -} +}; TTS_CASE("collect_indexes clears the result") { @@ -166,7 +156,7 @@ TTS_CASE("collect_indexes clears the result") std::vector actual(65u); collect_indexes(input, [](auto x) { return x == 2; }, actual); TTS_EQUAL(expected, actual); -} +}; // --------------- // push data through test diff --git a/examples/algorithms/writing_new/strlen__showing_basic_conepts.cpp b/examples/algorithms/writing_new/strlen__showing_basic_conepts.cpp index aa03ef6747..67317017ad 100644 --- a/examples/algorithms/writing_new/strlen__showing_basic_conepts.cpp +++ b/examples/algorithms/writing_new/strlen__showing_basic_conepts.cpp @@ -102,7 +102,7 @@ TTS_CASE( "Check strlen, basic") TTS_EQUAL(strlen_("abc"), 3u); TTS_EQUAL(strlen_(""), 0u); TTS_EQUAL(strlen_("0000"), 4u); -} +}; TTS_CASE( "Check strlen_ example exchaustive" ) { @@ -137,4 +137,4 @@ TTS_CASE( "Check strlen_ example exchaustive" ) --l; ++f; } -} +}; diff --git a/examples/display.hpp b/examples/display.hpp new file mode 100644 index 0000000000..197fd984e8 --- /dev/null +++ b/examples/display.hpp @@ -0,0 +1,46 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== +#pragma once +#include +#include +#include + +struct display +{ + display(int w, int h) : pixels(h, std::vector(w, ' ')) {} + + void put(char v, int c, int l) + { + pixels[l][c] = v; + } + + void line(int l, char s, char e) + { + auto w = pixels[0].size(); + put(e,0,l); + for(std::size_t i=1;i> pixels; + std::ostringstream headers; +}; diff --git a/examples/oop/complex_numbers__declaring_an_object_type.cpp b/examples/oop/complex_numbers__declaring_an_object_type.cpp index de07e58efe..ea1130b17a 100644 --- a/examples/oop/complex_numbers__declaring_an_object_type.cpp +++ b/examples/oop/complex_numbers__declaring_an_object_type.cpp @@ -24,13 +24,16 @@ #include #include -#include +#include #include #include #include #include +#include +#include + #include @@ -108,8 +111,7 @@ struct cmplx : eve::struct_support EVE_FORCEINLINE friend auto tagged_dispatch( eve::tag::abs_, eve::like auto self) { - // NOTE: We think this can be done more efficiently, but this is an example. - return eve::sqrt(re(self) * re(self) + im(self) * im(self)); + return eve::hypot(re(self), im(self)); } }; @@ -127,8 +129,8 @@ void inclusive_scan_complex(eve::algo::soa_vector& v, cmplx init) // It is slighlty less efficient than using `soa_vector` but maybe you have the parts from somewhere else. void inclusive_scan_complex_components(std::vector& re_parts, std::vector& im_parts, cmplx init) { - auto rng = eve::algo::convert( - eve::algo::zip(re_parts, im_parts), // zips as a range of `kumi::tuple` + auto rng = eve::views::convert( + eve::views::zip(re_parts, im_parts), // zips as a range of `kumi::tuple` eve::as{} // convert to a range of `cmplx` ); eve::algo::inclusive_scan_inplace(rng, init); @@ -185,7 +187,7 @@ TTS_CASE("wide works") eve::wide actual = eve::abs(x); TTS_RELATIVE_EQUAL(expected, actual, 0.00001); } -} +}; TTS_CASE("scalar works") { @@ -225,7 +227,7 @@ TTS_CASE("scalar works") float actual = eve::abs(x); TTS_RELATIVE_EQUAL(expected, actual, 0.00001); } -} +}; TTS_CASE("printing") { @@ -235,7 +237,7 @@ TTS_CASE("printing") }; s << x; TTS_EQUAL(s.str(), "((0 + -0i), (1 + -1i), (2 + -2i), (3 + -3i))"); -} +}; TTS_CASE("soa_vector scan") { @@ -251,7 +253,7 @@ TTS_CASE("soa_vector scan") cmplx{6.0, 0.6}, }; TTS_EQUAL(expected, actual); -} +}; TTS_CASE("components scan") { @@ -265,4 +267,4 @@ TTS_CASE("components scan") TTS_EQUAL(actual_re, expected_re); TTS_EQUAL(actual_im, expected_im); -} +}; diff --git a/examples/oop/data_driven_physics.cpp b/examples/oop/data_driven_physics.cpp new file mode 100644 index 0000000000..cb81b24d8f --- /dev/null +++ b/examples/oop/data_driven_physics.cpp @@ -0,0 +1,145 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== + +// In this example we will have a look at how many utilities from eve +// come together in writing a non-trivial data oriented computation +// +// We have a set of balls at some altitude z in a gravity field G. +// At altitude 0, lays a floor on which each balls will bounce with some restitution coefficient +// The following code run a discrete simulation of this experiment using SoA vector and algorihms + +#include +#include +#include +#include +#include +#include + +#include +#include "display.hpp" +#include "test.hpp" + +// Ball entity ------------------------------------------------------------------------------------- +struct ball : eve::struct_support < ball + , float, float, float, std::int32_t + > +{ + EVE_FORCEINLINE friend decltype(auto) position(eve::like auto &&self) + { + return get<0>(std::forward(self)); + } + + EVE_FORCEINLINE friend decltype(auto) speed(eve::like auto &&self) + { + return get<1>(std::forward(self)); + } + + EVE_FORCEINLINE friend decltype(auto) elasticity(eve::like auto &&self) + { + return get<2>(std::forward(self)); + } + + EVE_FORCEINLINE friend decltype(auto) count(eve::like auto &&self) + { + return get<3>(std::forward(self)); + } +}; + +// Simulation step --------------------------------- +struct update +{ + auto operator()(eve::like auto const& b) const noexcept + { + auto falling = b; + auto bounced = b; + + // Compute the case of the ball not bouncing + // Update position + position(falling) += speed(falling)*dt; + + // Update velocity with gravity + speed(falling) -= g*dt; + + // Compute the bounced ball case + speed(bounced) *= -elasticity(bounced); + ++count(bounced); + + // Select the proper one based on position + return eve::if_else( position(falling) <= 1e-4, bounced, falling); + } + + float dt,g; + int max_bounce; +}; + +// Simulation function ------------------------- +void run_simulation( float gravity , int time, int max_bounce + , eve::algo::soa_vector& balls + ) +{ + // Update callable + update behavior{1.f/time, gravity,max_bounce}; + eve::algo::transform_inplace[eve::algo::unroll<2>](balls, behavior); + + // Remove ball that bounced + balls.erase ( eve::algo::remove_if(balls + , [max_bounce](auto const& b) + { + return count(b) >= max_bounce; + } + ) + , balls.end() + ); +} + +// Test driver --------------------------------- +TTS_CASE("Run a ball simulation") +{ + eve::algo::soa_vector balls; + + // Some options from the command line --------------------------------- + auto gravity = ::tts::arguments.value("--gravity" , 9.81f); + auto time = ::tts::arguments.value("--time_step" , 100 ); + auto max_elast = ::tts::arguments.value("--elasticity", 0.9f ); + auto resolution = ::tts::arguments.value("--resolution", 1 ); + auto max_bounce = ::tts::arguments.value("--bounce" , 20 ); + auto nb_balls = ::tts::arguments.value("--size" , 200 ); + auto render_size = 16 * resolution; + + // Generates the balls --------------------------------- + for(int i=0;i(resolution*position(balls.get(i)))) + ); + } + + if(::tts::verbose_status) std::cout << screen.render(); + } + + TTS_PASS("Simulation completed"); +}; diff --git a/examples/start_here.cpp b/examples/start_here.cpp new file mode 100644 index 0000000000..71c315c26c --- /dev/null +++ b/examples/start_here.cpp @@ -0,0 +1,218 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== + +// +// This is a set of very basic examples with almost no comments to get +// you a feel for the library. +// +// You can find many details in other files. +// + +// -------------------------- +// Find a negative number + +#include +#include + +int const* find_negative_number(int const* f, int const* l) +{ + return eve::algo::find_if(eve::algo::as_range(f, l), [](auto x) { return x < 0; }); +} + +// ------------------------- +// coordinates conversion + +#include +#include +#include + +#include +#include +#include +#include + +#include + +// See oop on how to have them more meaningful names +using cartesian = kumi::tuple; +using polar = kumi::tuple; + +struct +{ + EVE_FORCEINLINE auto operator()(eve::like auto c) const + { + auto [x, y] = c; + auto r = eve::hypot(x, y); + auto phi = eve::atan2(y, x); + + return eve::zip(r, phi); + } +} inline constexpr convert_cartesian_to_polar; + +struct +{ + EVE_FORCEINLINE auto operator()(eve::like auto p) const + { + auto [r, angle_f] = p; + auto angle_d = eve::convert(angle_f, eve::as{}); + + // full_circle covers -pi tp pi range + auto [sin, cos] = eve::full_circle(eve::sincos)(angle_d); + + return eve::zip(r * cos, r * sin); + } +} inline constexpr convert_polar_to_cartesian; + +void polar_to_cartesian( + eve::algo::soa_vector const & pol, + eve::algo::soa_vector & cart +) +{ + eve::algo::transform_to[eve::algo::unroll<1>](pol, cart, convert_polar_to_cartesian); +} + +void cartesian_to_polar( + eve::algo::soa_vector const & cart, + eve::algo::soa_vector & pol +) +{ + eve::algo::transform_to[eve::algo::unroll<1>](cart, pol, convert_cartesian_to_polar); +} + +// Same function but if you use std::vectors. +// This is a bit less efficient + +void polar_to_cartesian_vectors( + std::vector const & radius, + std::vector const & angle, + std::vector & x, + std::vector & y +) +{ + eve::algo::transform_to[eve::algo::unroll<1>][eve::algo::no_aligning] + ( + eve::views::zip(radius, angle), + eve::views::zip(x, y), + convert_polar_to_cartesian + ); +} + +// ------------------------- +// remove numbers outside of treshold + +#include +#include + +void erase_remove_numbers_outisde_of_treshold( + std::vector& v, int low, int up) +{ + v.erase( + eve::algo::remove_if(v, [&](auto x) { return x < low || x > up; }), + v.end() + ); +} + +// -------------------------------------------- + +#include "test.hpp" + +#include +#include + +#include + +TTS_CASE("find_negative_number") +{ + std::vector v {1, 2, -1, 4}; + int const *found = find_negative_number(v.data(), v.data() + v.size()); + TTS_EQUAL((found - v.data()), 2); +}; + +TTS_CASE("polar/cartesian") +{ + float pi = eve::pi(eve::as {}); + + eve::algo::soa_vector pol { + polar {1, 0}, + polar {2, 0}, + polar {1, pi}, + polar {1, -pi/2}, + polar {5, eve::atan2(3.0f, 4.0f)}}; + + eve::algo::soa_vector cart { + cartesian {1, 0}, + cartesian {2, 0}, + cartesian {-1, 0}, + cartesian {0, -1}, + cartesian {4, 3} + }; + + eve::algo::soa_vector actual_cart(cart.size()); + polar_to_cartesian(pol, actual_cart); + + for (std::size_t i = 0; i < cart.size(); ++i) + { + auto [ex, ey] = cart.get(i); + auto [ax, ay] = actual_cart.get(i); + TTS_RELATIVE_EQUAL(ex, ax, 0.00001); + TTS_RELATIVE_EQUAL(ey, ay, 0.00001); + } + + eve::algo::soa_vector actual_pol(pol.size()); + cartesian_to_polar(cart, actual_pol); + + for (std::size_t i = 0; i < cart.size(); ++i) + { + auto [er, ephi] = pol.get(i); + auto [ar, aphi] = actual_pol.get(i); + TTS_RELATIVE_EQUAL(er, ar, 0.00001); + TTS_RELATIVE_EQUAL(ephi, aphi, 0.00001); + } + + // almost -pi + { + cartesian cart{-0.999, -0.1}; + + auto pol = convert_cartesian_to_polar(cart); + TTS_GREATER(get<0>(pol), 0.999); + TTS_LESS (get<1>(pol), -3 * pi / 4); + TTS_GREATER(get<1>(pol), -pi); + } +}; + +TTS_CASE("polar_to_cartesian, vectors") +{ + float pi = eve::pi(eve::as {}); + + std::vector radius {1, 2, 1, 5}; + std::vector angle {0, 0, pi, eve::atan2(3.0f, 4.0f)}; + + std::vector expected_x = {1, 2, -1, 4}; + std::vector expected_y = {0, 0, 0, 3}; + + std::vector actual_x(4u); + std::vector actual_y(4u); + + polar_to_cartesian_vectors(radius, angle, actual_x, actual_y); + + for (std::size_t i = 0; i < expected_x.size(); ++i) + { + TTS_RELATIVE_EQUAL(expected_x[i], actual_x[i], 0.00001); + TTS_RELATIVE_EQUAL(expected_y[i], actual_y[i], 0.00001); + } +}; + +TTS_CASE("remove_numbers_outisde_of_treshold") +{ + std::vector in {-1, 5, 2, -3, 10, 1, -18}; + std::vector expected{5, 2, 1}; + + erase_remove_numbers_outisde_of_treshold(in, 0, 9); + + TTS_EQUAL(expected, in); +}; diff --git a/include/eve/algo/README.txt b/include/eve/algo/README.txt index fadc0519b8..44dc732b02 100644 --- a/include/eve/algo/README.txt +++ b/include/eve/algo/README.txt @@ -18,6 +18,10 @@ Main eve supports it's callables for scalars. We don't do that for algorithms. T * reduce * inclusive_scan_inplace/inclusive_scan_to +* copy + +* transform_inplace/transform_to + * remove/remove_if # Helpers @@ -44,8 +48,8 @@ The basic concept for writing algorithms against. The minimum requirements are: * `eve::load` or `eve::store` are defined (returned types are not restricted). -* `I::cardinal` is defined and is eve::fixed. -* `I += n` // `n` is `std::ptrdiff_t` is divisible by `I::cardinal{}()` +* `iterator_cardinal` is defined and returns `eve::fixed`. +* `I += n` // `n` is `std::ptrdiff_t` is divisible by `iterator_cardinal_v` * `I - I` - returns the distance between two iterators (in elements). * I is totally ordered * `I.unaligned()` - returns an `unaligned_iterator` pointing to the same place. @@ -67,7 +71,7 @@ I and partially_aligned_t are the same. The main model is `aligned_ptr_iterator`, `zip_iterator` -Loading/Storign is more efficient than doing the same from `unaligned`. We can only step in `I::cardinal{}()` divisible steps. +Loading/Storing is more efficient than doing the same from `unaligned`. We can only step in `iterator_cardinal_v` divisible steps. ### unaligned_iterator(concept) @@ -107,6 +111,7 @@ algorithm traits * `force_cardinal` * `no_aligning` * `unroll` +* `consider_types` zip traits * `common_with_types` diff --git a/include/eve/algo/common_forceinline_lambdas.hpp b/include/eve/algo/common_forceinline_lambdas.hpp index c978be16f0..a32d48d700 100644 --- a/include/eve/algo/common_forceinline_lambdas.hpp +++ b/include/eve/algo/common_forceinline_lambdas.hpp @@ -81,37 +81,22 @@ namespace eve::algo } }; - struct inplace_load_store + struct do_nothing { - template - EVE_FORCEINLINE static auto load(Ignore ignore, I i) - { - return eve::load[ignore](i); - } + EVE_FORCEINLINE auto operator()(auto x) const { return x; } + }; - template using read_value_type = algo::value_type_t; + struct inplace_load_store + { + EVE_FORCEINLINE static auto load_it(auto i) { return i; } - template - EVE_FORCEINLINE static auto store(Ignore ignore, V v, I i) - { - eve::store[ignore](v, i); - } + EVE_FORCEINLINE static auto store_it(auto i) { return i; } }; struct to_load_store { - template - EVE_FORCEINLINE static auto load(Ignore ignore, I i) - { - return eve::load[ignore](get<0>(i)); - } + EVE_FORCEINLINE static auto load_it(auto i) { return get<0>(i); } - template using read_value_type = algo::value_type_t>; - - template - EVE_FORCEINLINE static auto store(Ignore ignore, V v, I i) - { - eve::store[ignore](v, get<1>(i)); - } + EVE_FORCEINLINE static auto store_it(auto i) { return get<1>(i); } }; } diff --git a/include/eve/algo/concepts.hpp b/include/eve/algo/concepts.hpp index 930f233ec2..d5d7bdeafc 100644 --- a/include/eve/algo/concepts.hpp +++ b/include/eve/algo/concepts.hpp @@ -8,6 +8,8 @@ #pragma once #include +#include #include +#include #include #include diff --git a/include/eve/algo/concepts/detail.hpp b/include/eve/algo/concepts/detail.hpp index 273ae1dafb..337fef49c5 100644 --- a/include/eve/algo/concepts/detail.hpp +++ b/include/eve/algo/concepts/detail.hpp @@ -11,6 +11,8 @@ #include #include +#include + namespace eve::algo::detail { template class Templ> @@ -32,4 +34,25 @@ namespace eve::algo::detail concept supports_spaceship = requires (T x, U y) { { std::declval() <=> std::declval() }; }; + + template + struct is_fixed : std::false_type {}; + + template + struct is_fixed> : std::true_type {}; + + template + concept is_fixed_v = is_fixed::value; + + template + concept iterator_operations = + std::regular> && + std::totally_ordered> && + requires(std::remove_cvref_t f, std::remove_cvref_t l, std::ptrdiff_t n) { + { l - f } -> std::convertible_to; + { f += n } -> std::same_as&>; + { f + n } -> std::same_as>; + { n + f } -> std::same_as>; + { unalign(f) }; + }; } diff --git a/include/eve/algo/concepts/eve_iterator.hpp b/include/eve/algo/concepts/eve_iterator.hpp index 40be2d08db..d3a5f1b350 100644 --- a/include/eve/algo/concepts/eve_iterator.hpp +++ b/include/eve/algo/concepts/eve_iterator.hpp @@ -15,22 +15,11 @@ #include #include +#include #include namespace eve::algo { - namespace detail - { - template - struct is_fixed : std::false_type {}; - - template - struct is_fixed> : std::true_type {}; - - template - concept is_fixed_v = is_fixed::value; - } - template using partially_aligned_t = decltype(std::declval().previous_partially_aligned()); @@ -51,15 +40,14 @@ namespace eve::algo template concept iterator = - detail::is_fixed_v && - std::regular && - std::totally_ordered && - std::totally_ordered_with> && + requires(I) { + { std::remove_cvref_t::iterator_cardinal() } -> detail::is_fixed_v; + typename std::remove_cvref_t::value_type; + } && std::totally_ordered_with> && - requires(I i, std::ptrdiff_t n) { - typename I::value_type; - { i += n } -> std::same_as; - { i - i } -> std::same_as; + std::totally_ordered_with, unaligned_t>> && + detail::iterator_operations && + requires(I i) { { i.unaligned() } -> detail::unaligned_check; { i.previous_partially_aligned() } -> detail::partially_aligned_check; }; diff --git a/include/eve/algo/concepts/iterator_cardinal.hpp b/include/eve/algo/concepts/iterator_cardinal.hpp new file mode 100644 index 0000000000..257b59af29 --- /dev/null +++ b/include/eve/algo/concepts/iterator_cardinal.hpp @@ -0,0 +1,77 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== +#pragma once + +#include + +#include + +namespace eve::algo +{ + //================================================================================================ + //! @addtogroup eve.algo.concepts + //! @{ + //! @struct iterator_cardinal + //! @brief Returns a cardinal for an `eve::algo::iterator` + //! + //! **Required header:** `#include ` + //! + //! For a given `eve::algo::iterator` returns a `cardinal`. + //! In order to provide this, the `iterator` has to define a static method: `iterator_cardinal() -> fixed` + //! + //! This is often used as a helper to define iterators and because of how C++ works, it's useful to default + //! to `expected_cardinal` + //! + //! @code{.cpp} + //! // I - eve::algo::iterator + //! + //! iterator_cardinal::type + //! iterator_cardinal_t + //! iterator_cardinal_v; + //! @endcode + //! @} + + template + struct iterator_cardinal + { + using type = fixed>>; + }; + + template + requires requires { I::iterator_cardinal(); } + struct iterator_cardinal + { + using type = decltype(I::iterator_cardinal()); + }; + + template + using iterator_cardinal_t = typename iterator_cardinal::type; + + template + constexpr std::ptrdiff_t iterator_cardinal_v = iterator_cardinal_t{}(); + + + //================================================================================================ + //! @addtogroup eve.algo.concepts + //! @{ + //! @struct wide_value_type + //! @brief for an instance of `eve::algo::iterator` a shortcut: wide, iterator_cardinal_t> + //! + //! **Required header:** `#include ` + //! @} + //================================================================================================ + + template + struct wide_value_type + { + using type = eve::wide, iterator_cardinal_t>; + }; + + template + using wide_value_type_t = typename wide_value_type::type; +} diff --git a/include/eve/algo/concepts/relaxed.hpp b/include/eve/algo/concepts/relaxed.hpp index 415d5b5e47..6d41bf89a7 100644 --- a/include/eve/algo/concepts/relaxed.hpp +++ b/include/eve/algo/concepts/relaxed.hpp @@ -9,15 +9,77 @@ #include #include +#include + +#include namespace eve::algo { + //================================================================================================ + //! @addtogroup eve.algo.concepts + //! @{ + //! @struct relaxed_iterator + //! @brief anything that can be reasonably converted to an `iterator`: + //! std::contigious_iterator, eve::algo::iterator, aligned_ptr. + //! Defined as being totally_ordered, having +/- like an iterator + //! And `preprocess_range(eve::algo::traits{}, I, I)` should work. + //! `eve::algo::unalign(I)` should be OK. + //! + //! +/- with std::ptrdiff_t don't have to work for arbitrary N, + //! behaviour along the lines of `eve::aligned_ptr` is sufficient. + //! + //! result of `eve::algo::unalign(I)` should return an iterator that can + //! represent any position. + //! + //! **Required header:** `#include ` + //! @} + //================================================================================================ + template concept relaxed_iterator = + detail::iterator_operations && std::invocable; + //================================================================================================ + //! @addtogroup eve.algo.concepts + //! @{ + //! @struct relaxed_sentinel_for + //! @brief Two relaxed iterators form a valid relaxed range pair. + //! `preprocess_range` has to be defined for the pair. + //! Example: int const* is a `relaxed_sentinel_for` `aligned_ptr`. + //! + //! **Required header:** `#include ` + //! @} + //================================================================================================ + + template + concept relaxed_sentinel_for = + relaxed_iterator && + relaxed_iterator && + std::totally_ordered_with && + std::invocable && + requires (I f, S l) { + { l - f } -> std::same_as; + }; + + //================================================================================================ + //! @addtogroup eve.algo.concepts + //! @{ + //! @struct relaxed_range + //! @brief Any class that has `begin/end` and `end` is a `relaxed_sentinel_for` begin. + //! User can customize `preprocess_range` for a `relaxed_range` in case there is more + //! information to get from there then would be from just `begin`/`end`. + //! + //! Example: `soa_vector::begin` is `unaligned` but the `preprocess_range` returns `aligned`. + //! + //! **Required header:** `#include ` + //! @} + //================================================================================================ + template concept relaxed_range = detail::has_begin_end && + relaxed_sentinel_for().end()), + decltype(std::declval().begin())> && std::invocable; } diff --git a/include/eve/algo/concepts/types_to_consider.hpp b/include/eve/algo/concepts/types_to_consider.hpp new file mode 100644 index 0000000000..f1163147b1 --- /dev/null +++ b/include/eve/algo/concepts/types_to_consider.hpp @@ -0,0 +1,31 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== +#pragma once + +#include + +#include + +namespace eve::algo +{ + template + struct types_to_consider_for + { + using type = kumi::tuple>; + }; + + template + requires requires(RorI) { typename RorI::types_to_consider; } + struct types_to_consider_for + { + using type = typename RorI::types_to_consider; + }; + + template + using types_to_consider_for_t = typename types_to_consider_for::type; +} diff --git a/include/eve/algo/concepts/value_type.hpp b/include/eve/algo/concepts/value_type.hpp index da848fcceb..323d8225b1 100644 --- a/include/eve/algo/concepts/value_type.hpp +++ b/include/eve/algo/concepts/value_type.hpp @@ -9,12 +9,25 @@ #include +#include #include +#include #include namespace eve::algo { + //================================================================================================ + //! @addtogroup eve.algo.concepts + //! @{ + //! @struct value_type + //! @brief for an instance of `eve::algo::relaxed_iterator`, `eve::algo::relaxed_range` + //! compute the value_type. + //! + //! **Required header:** `#include ` + //! @} + //================================================================================================ + namespace detail { template @@ -22,7 +35,7 @@ namespace eve::algo { if constexpr ( has_begin_end ) return value_type_impl().begin())>(); else if constexpr ( std::contiguous_iterator ) return std::type_identity::value_type>{}; - else return std::type_identity::value_type>{}; + else return std::type_identity{}; } } diff --git a/include/eve/algo/concepts/zip_to_range.hpp b/include/eve/algo/concepts/zip_to_range.hpp index b5b0852d9b..29f2b04790 100644 --- a/include/eve/algo/concepts/zip_to_range.hpp +++ b/include/eve/algo/concepts/zip_to_range.hpp @@ -10,7 +10,7 @@ #include #include -#include +#include #include @@ -18,11 +18,11 @@ namespace eve::algo { template concept zip_to_range = requires (Components&& ... components) { - { zip(std::forward(components)...) } -> relaxed_range; + { views::zip(std::forward(components)...) } -> relaxed_range; }; template - concept zipped_range = detail::instance_of, zip_range>; + concept zipped_range = detail::instance_of, views::zip_range>; template concept zipped_range_pair = zipped_range && (std::tuple_size_v> == 2); diff --git a/include/eve/algo/container/detail/soa_storage.hpp b/include/eve/algo/container/detail/soa_storage.hpp index cf5eff23a7..86a21fe92b 100644 --- a/include/eve/algo/container/detail/soa_storage.hpp +++ b/include/eve/algo/container/detail/soa_storage.hpp @@ -7,8 +7,8 @@ //================================================================================================== #pragma once -#include -#include +#include +#include #include #include @@ -37,7 +37,7 @@ namespace eve::algo::detail EVE_FORCEINLINE static auto data_aligned_impl(Self& self) { auto ptrs = kumi::map([](auto& m) { return as_aligned_pointer(m.data()); }, self); - return kumi::apply(eve::algo::zip, ptrs); + return kumi::apply(eve::algo::views::zip, ptrs); } public: diff --git a/include/eve/algo/container/soa_vector.hpp b/include/eve/algo/container/soa_vector.hpp index 7792c74428..a8d359e51a 100644 --- a/include/eve/algo/container/soa_vector.hpp +++ b/include/eve/algo/container/soa_vector.hpp @@ -8,8 +8,8 @@ #pragma once #include -#include -#include +#include +#include #include #include @@ -50,7 +50,7 @@ namespace eve::algo //! @{ //============================================================================================== //! @brief pointer and iterator types. - //! pointer* - are eve::algo::zip_iterator over fields (no conversion to type, just flat fields) + //! pointer* - are eve::algo::views::zip_iterator over fields (no conversion to type, just flat fields) //! iterator* - are a pointer, converter to the Type. //! They all safisfy eve::algo::relaxed_iterator but not std::iterator @@ -59,10 +59,10 @@ namespace eve::algo using pointer_aligned = decltype(storage_type{}.data_aligned()); using const_pointer_aligned = decltype(std::declval().data_aligned()); - using iterator = decltype(eve::algo::convert(pointer{} , as{})); - using const_iterator = decltype(eve::algo::convert(const_pointer{} , as{})); - using iterator_aligned = decltype(eve::algo::convert(pointer_aligned{} , as{})); - using const_iterator_aligned = decltype(eve::algo::convert(const_pointer_aligned{}, as{})); + using iterator = decltype(views::convert(pointer{} , as{})); + using const_iterator = decltype(views::convert(const_pointer{} , as{})); + using iterator_aligned = decltype(views::convert(pointer_aligned{} , as{})); + using const_iterator_aligned = decltype(views::convert(const_pointer_aligned{}, as{})); //============================================================================================== //! @} @@ -228,7 +228,7 @@ namespace eve::algo //! @param v Value to write EVE_FORCEINLINE void set(std::size_t i, value_type const& v) { - return eve::write(begin() + i, kumi::flatten_all(v)); + return eve::write(begin() + i, v); } //============================================================================================== @@ -240,19 +240,19 @@ namespace eve::algo //! @{ //============================================================================================== //! Returns an aligned iterator to the beginning - EVE_FORCEINLINE auto begin_aligned() -> iterator_aligned { return eve::algo::convert(data_aligned(), eve::as{}); } + EVE_FORCEINLINE auto begin_aligned() -> iterator_aligned { return views::convert(data_aligned(), eve::as{}); } //! Returns an aligned iterator to the beginning - EVE_FORCEINLINE auto begin_aligned() const -> const_iterator_aligned { return eve::algo::convert(data_aligned(), eve::as{}); } + EVE_FORCEINLINE auto begin_aligned() const -> const_iterator_aligned { return views::convert(data_aligned(), eve::as{}); } //! Returns a constant aligned iterator to the beginning EVE_FORCEINLINE auto cbegin_aligned() const -> const_iterator_aligned { return begin_aligned(); } //! Returns an iterator to the beginning - EVE_FORCEINLINE auto begin() -> iterator { return eve::algo::convert(data(), eve::as{}); } + EVE_FORCEINLINE auto begin() -> iterator { return views::convert(data(), eve::as{}); } //! Returns an iterator to the beginning - EVE_FORCEINLINE auto begin() const -> const_iterator { return eve::algo::convert(data(), eve::as{}); } + EVE_FORCEINLINE auto begin() const -> const_iterator { return views::convert(data(), eve::as{}); } //! Returns a constant iterator to the beginning EVE_FORCEINLINE auto cbegin() const -> const_iterator { return begin(); } diff --git a/include/eve/algo/convert.hpp b/include/eve/algo/convert.hpp deleted file mode 100644 index f97ccd88ec..0000000000 --- a/include/eve/algo/convert.hpp +++ /dev/null @@ -1,81 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#pragma once - -#include - -#include -#include -#include -#include - -namespace eve::algo -{ - template - struct converting_iterator; - - template - struct converting_range; - - template - EVE_FORCEINLINE auto convert_::no_tagged_dispatch(Wrapped&& wrapped, eve::as tgt) const - { - if constexpr (relaxed_range) - { - auto rng = range_ref(std::forward(wrapped)); - using Rng = decltype(rng); - - if constexpr (std::same_as, T> ) return rng; - else if constexpr (detail::instance_of) return convert(rng.base, tgt); - else return converting_range{rng}; - } - else - { - using I = std::remove_cvref_t; - if constexpr (std::same_as, T> ) return wrapped; - else if constexpr (detail::instance_of) return convert(wrapped.base, tgt); - else return converting_iterator{wrapped}; - } - } - - template - // we don't allow to sfinae on convert because it's difficult - EVE_FORCEINLINE auto convert_::operator()(Wrapped&& wrapped, as tgt) const - { - if constexpr (eve::detail::tag_dispatchable(wrapped)), as>) - { - return tagged_dispatch(*this, std::forward(wrapped), tgt); - } - else return no_tagged_dispatch( std::forward(wrapped), tgt); - } - - template - struct converting_range - { - R base; - - using is_non_owning = void; - - EVE_FORCEINLINE auto begin() const { return convert(base.begin(), eve::as{}); } - EVE_FORCEINLINE auto end() const { return convert(base.end(), eve::as{}); } - - template - EVE_FORCEINLINE friend auto tagged_dispatch(preprocess_range_, Traits tr, converting_range self) - { - auto tr_with_cardinal = default_to(tr, traits {force_cardinal_as}); - auto processed = preprocess_range(tr_with_cardinal, self.base); - - auto ret_tr = - drop_key_if>(force_cardinal_key, processed.traits()); - - return preprocess_range_result { - ret_tr, convert(processed.begin(), as{}), convert(processed.end(), as{}) - }; - } - }; -} diff --git a/include/eve/algo/copy.hpp b/include/eve/algo/copy.hpp new file mode 100644 index 0000000000..2e362f6674 --- /dev/null +++ b/include/eve/algo/copy.hpp @@ -0,0 +1,54 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== +#pragma once + +#include +#include +#include +#include + +namespace eve::algo +{ + //================================================================================================ + //! @addtogroup eve.algo + //! @{ + //! @var copy + //! + //! @brief version of std::copy + //! * Accepts two things zipping together to range of pair. + //! * Also can accept a `zipped_range_pair`. + //! * returns void. + //! * default unrolling is 4. + //! * will align by default. + //! * for copying to the same scalar type consider using `std::memmove` instead. + //! * will do conversions if necessary. + //! + //! **Required header:** `#include ` + //! + //! @} + //================================================================================================ + + template + struct copy_ : TraitsSupport + { + template + EVE_FORCEINLINE void operator()(R r) const + { + return transform_to[TraitsSupport::get_traits()](r, do_nothing{}); + } + + template + requires zip_to_range + EVE_FORCEINLINE void operator()(R1&& r1, R2&& r2) const + { + operator()(views::zip(std::forward(r1), std::forward(r2))); + } + }; + + inline constexpr auto copy = function_with_traits[default_simple_algo_traits]; +} diff --git a/include/eve/algo/detail/convert.hpp b/include/eve/algo/detail/convert.hpp deleted file mode 100644 index 9a7cf1ee67..0000000000 --- a/include/eve/algo/detail/convert.hpp +++ /dev/null @@ -1,30 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#pragma once - -#include - -namespace eve::algo -{ - template - struct converting_iterator; - - struct convert_ { - template - auto no_tagged_dispatch(Wrapped&& wrapped, eve::as tgt) const; - - template - auto operator()(Wrapped&& wrapped, eve::as tgt) const; - } inline constexpr convert; - - namespace detail - { - template - auto convert_zipped(Self self, eve::as tgt); - } -} diff --git a/include/eve/algo/detail/converting_iterator.hpp b/include/eve/algo/detail/converting_iterator.hpp deleted file mode 100644 index ca8a5904b3..0000000000 --- a/include/eve/algo/detail/converting_iterator.hpp +++ /dev/null @@ -1,179 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#pragma once - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -namespace eve::algo -{ - template - struct converting_iterator; - - namespace detail - { - template - struct converting_iterator_common : operations_with_distance - { - I base; - using value_type = T; - - converting_iterator_common() = default; - - EVE_FORCEINLINE explicit converting_iterator_common(I base) : base(base) {} - - EVE_FORCEINLINE auto unaligned() const - { - return convert(unalign(base), as{}); - } - - EVE_FORCEINLINE operator converting_iterator, T>() const - requires (!std::same_as>) - { - return unaligned(); - } - - EVE_FORCEINLINE friend auto tagged_dispatch(eve::tag::read_, converting_iterator self) - { - return eve::convert(eve::read(self.base), eve::as{}); - } - - EVE_FORCEINLINE friend void tagged_dispatch(eve::tag::write_, converting_iterator self, T v) - { - eve::write(self.base, eve::convert(v, eve::as>{})); - } - - EVE_FORCEINLINE friend bool operator==(converting_iterator const & x, converting_iterator const & y) - { - return x.base == y.base; - } - - EVE_FORCEINLINE friend bool operator==(converting_iterator const & x, converting_iterator, T> const & y) - requires (!std::same_as>) - { - return x.base == y.base; - } - - EVE_FORCEINLINE friend auto operator<=>(converting_iterator const & x, converting_iterator const & y) - { - return spaceship_helper(x.base, y.base); - } - - EVE_FORCEINLINE friend auto operator<=>(converting_iterator const & x, converting_iterator, T> const & y) - requires (!std::same_as>) - { - return spaceship_helper(x.base, y.base); - } - - EVE_FORCEINLINE friend auto& operator+=(converting_iterator& x, std::ptrdiff_t n) - { - x.base += n; - return x; - } - - EVE_FORCEINLINE friend std::ptrdiff_t operator-(converting_iterator const& x, converting_iterator const& y) - { - return x.base - y.base; - } - - EVE_FORCEINLINE friend std::ptrdiff_t operator-(converting_iterator const& x, converting_iterator, T> const& y) - requires (!std::same_as>) - { - return x.base - y.base; - } - }; - } - - template - struct converting_iterator : detail::converting_iterator_common - { - using _base_t = detail::converting_iterator_common; - using _base_t::_base_t; - - template - EVE_FORCEINLINE friend auto tagged_dispatch(preprocess_range_, Traits tr, - converting_iterator self, converting_iterator other) - { - return preprocess_range(tr, convert(as_range(self.base, other.base), as{})); - } - - template - EVE_FORCEINLINE friend auto tagged_dispatch(preprocess_range_, Traits tr, - converting_iterator self, - converting_iterator, T> other) - requires (!std::same_as>) - { - return preprocess_range(tr, convert(as_range(self.base, other.base), as{})); - } - }; - - template - struct converting_iterator : detail::converting_iterator_common - { - using _base_t = detail::converting_iterator_common; - - using cardinal = typename I::cardinal; - using wide_value_type = eve::wide; - - using _base_t::_base_t; - - converting_iterator, T> unaligned() const { return *this; } - EVE_FORCEINLINE auto previous_partially_aligned() const - { - return converting_iterator, T>{this->base.previous_partially_aligned()}; - } - - template - EVE_FORCEINLINE auto cardinal_cast(_Cardinal N) const - { - auto new_base = this->base.cardinal_cast(N); - return converting_iterator{new_base}; - } - - template< relative_conditional_expr C, decorator S, typename Pack> - EVE_FORCEINLINE friend auto tagged_dispatch ( eve::tag::load_, C const& c, S const& s - , eve::as const& tgt, converting_iterator self - ) - { - auto c1 = map_alternative( - c, - [](auto alt) { return eve::convert(alt, eve::as{}); } - ); - - return eve::convert(eve::load(c1, s, tgt, self.base), eve::as{}); - } - - template - EVE_FORCEINLINE friend void tagged_dispatch( - eve::tag::store_, C c, wide_value_type v, converting_iterator self ) - { - auto c1 = map_alternative( - c, - [](auto alt) { return eve::convert(alt, eve::as{}); } - ); - - eve::store[c1](eve::convert(v, eve::as{}), self.base); - } - - EVE_FORCEINLINE friend void tagged_dispatch( eve::tag::store_, wide_value_type v, converting_iterator self ) - { - eve::store(eve::convert(v, eve::as{}), self.base); - } - }; -} diff --git a/include/eve/algo/equal.hpp b/include/eve/algo/equal.hpp index 2277f89f76..3d2ec54c70 100644 --- a/include/eve/algo/equal.hpp +++ b/include/eve/algo/equal.hpp @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include @@ -39,14 +39,14 @@ namespace eve::algo requires zip_to_range EVE_FORCEINLINE bool operator()(R1&& r1, R2&& r2, P p) const { - return operator()(zip(std::forward(r1), std::forward(r2)), p); + return operator()(views::zip(std::forward(r1), std::forward(r2)), p); } template requires zip_to_range EVE_FORCEINLINE auto operator()(R1&& r1, R2&& r2) const { - return operator()(zip(std::forward(r1), std::forward(r2))); + return operator()(views::zip(std::forward(r1), std::forward(r2))); } }; diff --git a/include/eve/algo/find.hpp b/include/eve/algo/find.hpp index 773493e4ab..d379510da9 100644 --- a/include/eve/algo/find.hpp +++ b/include/eve/algo/find.hpp @@ -67,10 +67,8 @@ namespace eve::algo // TODO: this might not be ideal, see: #764 std::optional match; - std::size_t pos = find_branchless(tests, - detail::find_branchless_lambda{&match}); - constexpr std::ptrdiff_t lanes = typename I::cardinal{}(); - found = arr[0].unaligned() + (pos * lanes) + *match; + std::size_t pos = find_branchless(tests, detail::find_branchless_lambda{&match}); + found = arr[0].unaligned() + (pos * iterator_cardinal_v) + *match; return true; } diff --git a/include/eve/algo/for_each.hpp b/include/eve/algo/for_each.hpp new file mode 100644 index 0000000000..ad4e44c0e3 --- /dev/null +++ b/include/eve/algo/for_each.hpp @@ -0,0 +1,73 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== +#pragma once + +#include +#include +#include +#include +#include + +namespace eve::algo +{ + //================================================================================================ + //! @addtogroup eve.algo + //! @{ + //! @var for_each + //! @brief a basic for_each algorithm. + //! * The operation is called with `iterator` and `ignore`. + //! * Result of the operation is ignored. + //! * Operation is passed by value. + //! * There is no default traits. + //! * We do not return anything. + //! * The unrolling just calls the single step. + //! * Will align by default. + //! + //! If you you have a more advanced unrolling, consider using the `for_each_iteration`. + //! + //! **Required header:** `#include ` + //! @} + //================================================================================================ + + template + struct for_each_ : TraitsSupport + { + template + struct delegate + { + Op op; + + explicit delegate(Op op) : op(op) {} + + EVE_FORCEINLINE bool step(auto it, eve::relative_conditional_expr auto ignore, auto /*idx*/) + { + op(it, ignore); + return false; + } + + template + EVE_FORCEINLINE bool unrolled_step(std::array arr) + { + array_map(arr, call_single_step(this)); + return false; + } + }; + + template + EVE_FORCEINLINE void operator()(Rng&& rng, Op op) const + { + auto processed = preprocess_range(TraitsSupport::get_traits(), std::forward(rng)); + if( processed.begin() == processed.end() ) return; + + delegate d{op}; + algo::for_each_iteration(processed.traits(), processed.begin(), processed.end())(d); + } + }; + + inline constexpr auto for_each = function_with_traits; +} diff --git a/include/eve/algo/for_each_iteration.hpp b/include/eve/algo/for_each_iteration.hpp index d2dca6b34a..ffb319fb89 100644 --- a/include/eve/algo/for_each_iteration.hpp +++ b/include/eve/algo/for_each_iteration.hpp @@ -26,19 +26,17 @@ namespace eve::algo EVE_FORCEINLINE bool main_loop(Traits, I &f, S l, Delegate &delegate) const requires(get_unrolling() == 1) { - static constexpr std::ptrdiff_t step = typename I::cardinal {}(); - while( f != l ) { if( delegate.step(f, eve::ignore_none, eve::index<0>) ) return true; - f += step; + f += iterator_cardinal_v; } return false; } - template + template struct small_steps_lambda { bool& should_break; @@ -52,7 +50,7 @@ namespace eve::algo if (f == l) return true; should_break = delegate.step(f, eve::ignore_none, eve::index); - f += step; + f += iterator_cardinal_v; return should_break; } }; @@ -61,7 +59,6 @@ namespace eve::algo EVE_FORCEINLINE bool main_loop(Traits, I &f, S l, Delegate &delegate) const requires(get_unrolling() > 1) { - static constexpr std::ptrdiff_t step = typename I::cardinal {}(); static constexpr std::ptrdiff_t unrolling = get_unrolling(); // In order to optimise for smaller ranges we not only finish but start with @@ -74,19 +71,19 @@ namespace eve::algo bool should_break = false; if( eve::detail::for_until_<0, 1, unrolling>( - small_steps_lambda {should_break, f, l, delegate}) ) + small_steps_lambda {should_break, f, l, delegate}) ) { return should_break; } - std::ptrdiff_t big_steps_count = (l - f) / (step * unrolling); + std::ptrdiff_t big_steps_count = (l - f) / (iterator_cardinal_v * unrolling); while( big_steps_count ) { std::array arr; eve::detail::for_<0, 1, unrolling>([&](auto idx) mutable { arr[idx()] = f; - f += step; + f += iterator_cardinal_v; }); if( delegate.unrolled_step(arr) ) return true; @@ -107,12 +104,10 @@ namespace eve::algo for_each_iteration_precise_f_l(Traits traits, I f, S l) : traits(traits), base(f), f(f), l(l) { - [[maybe_unused]] static constexpr std::ptrdiff_t step = - typename I::cardinal {}(); - EVE_ASSERT(((l - f) % step == 0), + EVE_ASSERT(((l - f) % iterator_cardinal_v == 0), " len of the range is no divisible by cardinal " << "when `divisible by cardinal is passed`: " << - "l - f: " << (l - f) << " step: " << step); + "l - f: " << (l - f) << " iterator_cardinal_v: " << iterator_cardinal_v); } template @@ -136,9 +131,8 @@ namespace eve::algo template EVE_FORCEINLINE void operator()(Delegate& delegate) { - static constexpr std::ptrdiff_t step = typename I::cardinal{}(); - I precise_l = f + ((l - f) / step * step); + I precise_l = f + (((l - f) / iterator_cardinal_v) * iterator_cardinal_v); if (main_loop(traits, f, precise_l, delegate)) return; @@ -163,8 +157,6 @@ namespace eve::algo template EVE_FORCEINLINE void operator()(Delegate &delegate) { - static constexpr std::ptrdiff_t step = typename I::cardinal {}(); - auto aligned_f = base; auto aligned_l = (f + (l - f)).previous_partially_aligned(); @@ -176,7 +168,7 @@ namespace eve::algo if( delegate.step(aligned_f, ignore_first, eve::index<0>) ) return; ignore_first = eve::ignore_first {0}; - aligned_f += step; + aligned_f += iterator_cardinal_v; if( main_loop(traits, aligned_f, aligned_l, delegate) ) return; @@ -185,7 +177,7 @@ namespace eve::algo return; } - eve::ignore_last ignore_last {aligned_l + step - l}; + eve::ignore_last ignore_last {aligned_l + iterator_cardinal_v - l}; delegate.step(aligned_l, ignore_first && ignore_last, eve::index<0>); } }; diff --git a/include/eve/algo/inclusive_scan.hpp b/include/eve/algo/inclusive_scan.hpp index 0584412b73..78945c877a 100644 --- a/include/eve/algo/inclusive_scan.hpp +++ b/include/eve/algo/inclusive_scan.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -38,11 +39,15 @@ namespace eve::algo EVE_FORCEINLINE bool step(auto it, eve::relative_conditional_expr auto ignore, auto /*idx*/) { - auto xs = LoadStore::load(ignore.else_(eve::as_value(zero, as {})), it); - xs = eve::scan(xs, op, zero); - xs = op(xs, running_sum); + auto load_it = LoadStore::load_it(it); + auto store_it = LoadStore::store_it(it); + + auto xs = eve::load[ignore.else_(eve::as_value(zero, as {}))](load_it); + xs = eve::scan(xs, op, zero); + xs = op(xs, running_sum); running_sum = Wide(xs.back()); - LoadStore::store(ignore, xs, it); + + eve::store[ignore](xs, store_it); return false; } @@ -61,8 +66,7 @@ namespace eve::algo if( processed.begin() == processed.end() ) return; using I = decltype(processed.begin()); - using T = typename LoadStore::template read_value_type; - using wide_t = eve::wide; + using wide_t = eve::wide>; wide_t wide_init = eve::as_value(init, eve::as {}); @@ -81,7 +85,7 @@ namespace eve::algo EVE_FORCEINLINE void operator()(Rng&& rng, std::pair op_zero, U init) const { detail::inclusive_scan_common{}( - TraitsSupport::get_traits(), std::forward(rng), op_zero, init); + TraitsSupport::get_traits(), views::convert(std::forward(rng), eve::as{}), op_zero, init); } template @@ -100,7 +104,7 @@ namespace eve::algo EVE_FORCEINLINE void operator()(R r, std::pair op_zero, U init) const { detail::inclusive_scan_common{}( - TraitsSupport::get_traits(), r[common_type], op_zero, init); + TraitsSupport::get_traits(), r[force_type], op_zero, init); } template @@ -113,14 +117,14 @@ namespace eve::algo requires zip_to_range EVE_FORCEINLINE auto operator()(R1&& r1, R2&& r2, std::pair op_zero, U init) const { - operator()(zip(std::forward(r1), std::forward(r2)), op_zero, init); + operator()(views::zip(std::forward(r1), std::forward(r2)), op_zero, init); } template requires zip_to_range EVE_FORCEINLINE auto operator()(R1&& r1, R2&& r2, U init) const { - return operator()(zip(std::forward(r1), std::forward(r2)), init); + return operator()(views::zip(std::forward(r1), std::forward(r2)), init); } }; diff --git a/include/eve/algo/iterator_helpers.hpp b/include/eve/algo/iterator_helpers.hpp index 4a579c632d..30315296a2 100644 --- a/include/eve/algo/iterator_helpers.hpp +++ b/include/eve/algo/iterator_helpers.hpp @@ -19,6 +19,7 @@ namespace eve::algo { friend auto& operator-=(std::derived_from auto& x, std::ptrdiff_t n) { x += -n; return x; } friend auto operator+ (std::derived_from auto x, std::ptrdiff_t n) { x += n; return x; } + friend auto operator+ (std::ptrdiff_t n, std::derived_from auto x) { return x + n; } friend auto operator- (std::derived_from auto x, std::ptrdiff_t n) { x -= n; return x; } friend auto& operator++(std::derived_from auto& x) { x += 1; return x; } diff --git a/include/eve/algo/mismatch.hpp b/include/eve/algo/mismatch.hpp index 5337aa324a..6a15419fcc 100644 --- a/include/eve/algo/mismatch.hpp +++ b/include/eve/algo/mismatch.hpp @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include @@ -40,14 +40,14 @@ namespace eve::algo requires zip_to_range EVE_FORCEINLINE auto operator()(R1&& r1, R2&& r2, P p) const { - return operator()(zip(std::forward(r1), std::forward(r2)), p); + return operator()(views::zip(std::forward(r1), std::forward(r2)), p); } template requires zip_to_range EVE_FORCEINLINE auto operator()(R1&& r1, R2&& r2) const { - return operator()(zip(std::forward(r1), std::forward(r2))); + return operator()(views::zip(std::forward(r1), std::forward(r2))); } }; diff --git a/include/eve/algo/preprocess_range.hpp b/include/eve/algo/preprocess_range.hpp index 1c10bcb74a..7f1d91cb0a 100644 --- a/include/eve/algo/preprocess_range.hpp +++ b/include/eve/algo/preprocess_range.hpp @@ -9,8 +9,8 @@ #include +#include #include -#include #include #include @@ -38,9 +38,9 @@ namespace eve::algo template EVE_FORCEINLINE auto fix_up_cardinal(Traits, I i) { - if constexpr( typename I::cardinal {}() != iteration_cardinal_t> {}() ) + if constexpr( iterator_cardinal_v != iteration_cardinal_t {}() ) { - using N = iteration_cardinal_t>; + using N = iteration_cardinal_t; auto i_ = i.cardinal_cast(N {}); return i_; } diff --git a/include/eve/algo/ptr_iterator.hpp b/include/eve/algo/ptr_iterator.hpp index 8836896eda..5c58a08631 100644 --- a/include/eve/algo/ptr_iterator.hpp +++ b/include/eve/algo/ptr_iterator.hpp @@ -21,9 +21,8 @@ namespace eve::algo template struct unaligned_ptr_iterator : operations_with_distance { - using cardinal = Cardinal; using value_type = std::remove_const_t; - using wide_value_type = eve::wide; + using wv_type = eve::wide; unaligned_ptr_iterator() = default; explicit unaligned_ptr_iterator(T* ptr) : ptr(ptr) {} @@ -32,9 +31,11 @@ namespace eve::algo auto previous_partially_aligned() const { - return aligned_ptr_iterator{eve::previous_aligned_address(ptr, cardinal{})}; + return aligned_ptr_iterator{eve::previous_aligned_address(ptr, Cardinal{})}; } + static Cardinal iterator_cardinal() { return {}; } + template auto cardinal_cast(_Cardinal) const { return unaligned_ptr_iterator{ptr}; } @@ -56,21 +57,23 @@ namespace eve::algo template EVE_FORCEINLINE friend void tagged_dispatch( - eve::tag::store_, C cond, wide_value_type v, unaligned_ptr_iterator self ) + eve::tag::store_, C cond, wv_type v, unaligned_ptr_iterator self ) requires (!std::is_const_v) { eve::store[cond](v, self.ptr); } - EVE_FORCEINLINE friend void tagged_dispatch( eve::tag::store_, wide_value_type v, unaligned_ptr_iterator self ) + EVE_FORCEINLINE friend void tagged_dispatch( eve::tag::store_, wv_type v, unaligned_ptr_iterator self ) requires ( !std::is_const_v ) { eve::store(v, self.ptr); } - template + template requires ( !std::is_const_v ) - EVE_FORCEINLINE friend auto tagged_dispatch( eve::tag::compress_store_, C c, Decorator d, wide_value_type v, logical m, unaligned_ptr_iterator self) + EVE_FORCEINLINE friend auto tagged_dispatch( + eve::tag::compress_store_, C c, Decorator d, wv_type v, + logical> m, unaligned_ptr_iterator self) { return unaligned_ptr_iterator{eve::compress_store(c, d, v, m, self.ptr)}; } @@ -81,10 +84,9 @@ namespace eve::algo template struct aligned_ptr_iterator : operations_with_distance { - using cardinal = Cardinal; using value_type = std::remove_const_t; using aligned_ptr_type = eve::aligned_ptr; - using wide_value_type = eve::wide; + using wv_type = eve::wide; aligned_ptr_iterator() = default; explicit aligned_ptr_iterator(aligned_ptr_type ptr) : ptr{ptr} {} @@ -99,6 +101,8 @@ namespace eve::algo auto unaligned() const { return unaligned_ptr_iterator{ptr.get()}; } auto previous_partially_aligned() const { return *this; } + static Cardinal iterator_cardinal() { return {}; } + template auto cardinal_cast(_Cardinal c) const { @@ -166,21 +170,23 @@ namespace eve::algo template EVE_FORCEINLINE friend void tagged_dispatch( - eve::tag::store_, C cond, wide_value_type v, aligned_ptr_iterator self ) + eve::tag::store_, C cond, wv_type v, aligned_ptr_iterator self ) requires ( !std::is_const_v ) { return eve::store[cond](v, self.ptr); } - EVE_FORCEINLINE friend void tagged_dispatch( eve::tag::store_, wide_value_type v, aligned_ptr_iterator self ) + EVE_FORCEINLINE friend void tagged_dispatch( eve::tag::store_, wv_type v, aligned_ptr_iterator self ) requires ( !std::is_const_v ) { return eve::store(v, self.ptr); } - template + template requires ( !std::is_const_v ) - EVE_FORCEINLINE friend auto tagged_dispatch( eve::tag::compress_store_, C c, Decorator d, wide_value_type v, logical m, aligned_ptr_iterator self) + EVE_FORCEINLINE friend auto tagged_dispatch( + eve::tag::compress_store_, C c, Decorator d, wv_type v, + logical> m, aligned_ptr_iterator self) { return unaligned_ptr_iterator{eve::compress_store(c, d, v, m, self.ptr)}; } diff --git a/include/eve/algo/range_ref.hpp b/include/eve/algo/range_ref.hpp index 9223741bf1..4e2f5af2a8 100644 --- a/include/eve/algo/range_ref.hpp +++ b/include/eve/algo/range_ref.hpp @@ -11,6 +11,18 @@ namespace eve::algo { + //================================================================================================ + //! @addtogroup eve.algo + //! @{ + //! @struct range_ref_wrapper + //! @brief a non_owning_range wrapper around owning range. + //! Should be created via `range_ref` + //! + //! **Required header:** `#include ` + //! + //! @} + //================================================================================================ + template struct range_ref_wrapper { @@ -34,11 +46,36 @@ namespace eve::algo } }; + //================================================================================================ + //! @addtogroup eve.algo.concepts + //! @{ + //! @var non_owning_range + //! @brief a non_owning range is a relaxed_range that does not own it's elements and + //! can be copied without it's contents being affected + //! TODO: FIX-#1017: how is this related to `std::borrowed_range`? + //! + //! Can be enabled via: defining 'is_non_owning' internal typedef. + //! + //! **Required header:** `#include ` + //! + //! @} + //================================================================================================ + template concept non_owning_range = relaxed_range && requires { typename T::is_non_owning; }; + //================================================================================================ + //! @addtogroup eve.algo + //! @{ + //! @var range_ref + //! @brief for a `non_owning_range` returns it, otherwise returns a `range_ref_wrapper`. + //! + //! **Required header:** `#include ` + //! @} + //================================================================================================ + struct range_ref_ { EVE_FORCEINLINE auto operator()(non_owning_range auto r) const { return r; } diff --git a/include/eve/algo/reduce.hpp b/include/eve/algo/reduce.hpp index 5433cba8ae..0003aea6fd 100644 --- a/include/eve/algo/reduce.hpp +++ b/include/eve/algo/reduce.hpp @@ -10,12 +10,12 @@ #include #include #include +#include #include #include #include #include -#include #include #include @@ -66,24 +66,21 @@ namespace eve::algo template EVE_FORCEINLINE U operator()(Rng&& rng, std::pair op_zero, U init) const { - // FIX-#938: this should not be a common type actually, should just be U. - using T = common_type_t>, U>; - - auto cvt_rng = eve::algo::convert(std::forward(rng), as{}); + auto cvt_rng = views::convert(std::forward(rng), as{}); auto processed = preprocess_range(TraitsSupport::get_traits(), cvt_rng); using I = decltype(processed.begin()); if (processed.begin() == processed.end()) return init; - using wide_t = typename I::wide_value_type; + using wide_t = wide_value_type_t; wide_t init_as_wide = eve::as_value(op_zero.second, as{}); init_as_wide.set(0, init); delegate d{op_zero.first, op_zero.second, init_as_wide}; algo::for_each_iteration(processed.traits(), processed.begin(), processed.end())(d); - return eve::convert(d.finish(), eve::as{}); + return d.finish(); } template diff --git a/include/eve/algo/traits.hpp b/include/eve/algo/traits.hpp index 1b8f86ef07..5b6718fe2f 100644 --- a/include/eve/algo/traits.hpp +++ b/include/eve/algo/traits.hpp @@ -8,6 +8,7 @@ #pragma once #include +#include #include @@ -53,6 +54,10 @@ namespace eve::algo template inline constexpr auto force_cardinal = (force_cardinal_key = eve::fixed{}); template inline constexpr auto force_cardinal_as = force_cardinal>; + struct consider_types_key_t {}; + inline constexpr auto consider_types_key = ::rbr::keyword( consider_types_key_t{} ); + template auto consider_types = ( consider_types_key = kumi::tuple{} ); + struct force_type_key_t {}; inline constexpr auto force_type_key = ::rbr::keyword( force_type_key_t{} ); template auto force_type = (force_type_key = std::type_identity{}); @@ -79,16 +84,37 @@ namespace eve::algo return rbr::get_type_t>{}(); } - template + template + using extra_types_to_consider = rbr::get_type_t>; + + template + using get_types_to_consider_for = + kumi::result::cat_t, types_to_consider_for_t>; + + template using iteration_cardinal_t = rbr::get_type_t>; + expected_cardinal_t> + >; inline constexpr auto default_to = [](traits const& user, traits const& defaults) { - using settings_t = decltype(rbr::merge(user, defaults)); - return traits{rbr::merge(user, defaults)}; + if constexpr ( User::contains(consider_types_key) && + Default::contains(consider_types_key) ) + { + auto consider_all_types = kumi::result::cat_t, + rbr::get_type_t>{}; + auto settings = rbr::merge(rbr::merge(rbr::settings(consider_types_key = consider_all_types), + user), + defaults); + return traits{settings}; + } + else + { + using settings_t = decltype(rbr::merge(user, defaults)); + return traits{rbr::merge(user, defaults)}; + } }; template diff --git a/include/eve/algo/transform.hpp b/include/eve/algo/transform.hpp new file mode 100644 index 0000000000..23bf449557 --- /dev/null +++ b/include/eve/algo/transform.hpp @@ -0,0 +1,112 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== +#pragma once + +#include +#include +#include +#include +#include +#include + +namespace eve::algo +{ + namespace detail + { + template + struct transform_delegate + { + Op op; + + explicit transform_delegate(Op op) : op(op) {} + + EVE_FORCEINLINE void operator()(auto it, eve::relative_conditional_expr auto ignore) + { + auto load_it = LoadStore::load_it(it); + auto store_it = LoadStore::store_it(it); + + auto xs = eve::load[ignore](load_it); + auto processed = op(xs); + + using out_t = eve::element_type_t; + auto cvt_and_store_it = views::convert(store_it, as{}); + + eve::store[ignore](op(xs), cvt_and_store_it); + } + }; + } + + //================================================================================================ + //! @addtogroup eve.algo + //! @{ + //! @var transform_inplace + //! + //! @brief same as; + //! @code{.cpp} + //! eve::algo::tranform_to(eve::views::zip(r, r), op) + //! @endcode + //! but slightly more efficient + //! + //! **Required header:** `#include ` + //! + //! @} + //================================================================================================ + + template + struct transform_inplace_ : TraitsSupport + { + template + EVE_FORCEINLINE void operator()(Rng&& rng, Op op) const + { + detail::transform_delegate d{op}; + for_each[TraitsSupport::get_traits()](std::forward(rng), d); + } + }; + + inline constexpr auto transform_inplace = function_with_traits[default_simple_algo_traits]; + + //================================================================================================ + //! @addtogroup eve.algo + //! @{ + //! @var transform_to + //! + //! @brief version of std::transform + //! * Accepts two things zipping together to range of pair. + //! * Also can accept a `zipped_range_pair`. + //! * returns void. + //! * default unrolling is 4. + //! * will align by default. + //! * the output type of the operation, is not considered in cardinal computation. + //! (otherwise we'd have to require the predicate to be a template). + //! * if the operation output type differs from the output range type, converts. + //! + //! **Required header:** `#include ` + //! + //! @} + //================================================================================================ + + template + struct transform_to_ : TraitsSupport + { + template + EVE_FORCEINLINE void operator()(R r, Op op) const + { + detail::transform_delegate d{op}; + for_each[TraitsSupport::get_traits()](r, d); + } + + template + requires zip_to_range + EVE_FORCEINLINE void operator()(R1&& r1, R2&& r2, Op op) const + { + operator()(views::zip(std::forward(r1), std::forward(r2)), op); + } + }; + + inline constexpr auto transform_to = function_with_traits[default_simple_algo_traits]; +} diff --git a/include/eve/algo/views/convert.hpp b/include/eve/algo/views/convert.hpp new file mode 100644 index 0000000000..6ad4bdb00f --- /dev/null +++ b/include/eve/algo/views/convert.hpp @@ -0,0 +1,289 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== +#pragma once + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +namespace eve::algo::views +{ + //================================================================================================ + //! @addtogroup eve.algo.views + //! @{ + //! @struct converting_iterator + //! @brief An adapter over a `relaxed_iterator` that converts it's values to T. + //! Should be created via `convert`. + //! + //! **Required header:** `#include ` + //! + //! Has a shorthand `eve::views::convert` in ``. + //! @} + //================================================================================================ + + + template + struct converting_iterator; + + //================================================================================================ + //! @addtogroup eve.algo.views + //! @{ + //! @struct converting_range + //! @brief An adapter over a `relaxed_range` that converts it's values to T. + //! Should be created via `convert`. + //! + //! **Required header:** `#include ` + //! + //! Has a shorthand `eve::views::converting_range` in ``. + //! @} + //================================================================================================ + + template + struct converting_range; + + //================================================================================================ + //! @addtogroup eve.algo.views + //! @{ + //! @var convert + //! @brief Takes an iterator or a range and returns an adapter that has a provided value type. + //! + //! @code{.cpp} eve::algo::views::convert(it_or_r, eve::as{}); @endcode + //! + //! Behaviour for a specific iterator/range can be customized via tagged dispatch: + //! + //! @code{.cpp} + //! template + //! EVE_FORCEINLINE friend auto tagged_dispatch(eve::algo::views::convert_, my_rng self, eve::as tgt); + //! @endcode + //! + //! **Required header:** `#include ` + //! + //! Has a shorthand `eve::views::converting_range` in ``. + //! @} + //================================================================================================ + + + struct convert_ { + template + auto no_tagged_dispatch(Wrapped &&wrapped, eve::as tgt) const + { + if constexpr( relaxed_range ) + { + auto rng = range_ref(std::forward(wrapped)); + using Rng = decltype(rng); + + if constexpr( std::same_as, T> ) return rng; + else if constexpr( detail::instance_of ) return (*this)(rng.base, tgt); + else return converting_range {rng}; + } + else + { + using I = std::remove_cvref_t; + if constexpr( std::same_as, T> ) return wrapped; + else if constexpr( detail::instance_of ) return (*this)(wrapped.base, tgt); + else return converting_iterator {wrapped}; + } + } + + template + auto operator()(Wrapped&& wrapped, eve::as tgt) const + { + if constexpr (eve::detail::tag_dispatchable(wrapped)), as>) + { + return tagged_dispatch(*this, std::forward(wrapped), tgt); + } + else return no_tagged_dispatch( std::forward(wrapped), tgt); + } + } inline constexpr convert; + + template + struct converting_range + { + R base; + + using is_non_owning = void; + + using types_to_consider = kumi::result::cat_t< + kumi::tuple, types_to_consider_for_t>; + + EVE_FORCEINLINE auto begin() const { return convert(base.begin(), eve::as{}); } + EVE_FORCEINLINE auto end() const { return convert(base.end(), eve::as{}); } + + template + EVE_FORCEINLINE friend auto tagged_dispatch(preprocess_range_, Traits tr, converting_range self) + { + auto tr_with_cardinal = default_to(tr, traits {consider_types}); + auto processed = preprocess_range(tr_with_cardinal, self.base); + + auto ret_tr = drop_key(consider_types_key, processed.traits()); + + return preprocess_range_result { + ret_tr, convert(processed.begin(), as{}), convert(processed.end(), as{}) + }; + } + }; + + template + struct converting_iterator : operations_with_distance + { + I base; + using value_type = T; + using types_to_consider = kumi::result::cat_t, types_to_consider_for_t>; + using unaligned_me = converting_iterator, T>; + + converting_iterator() = default; + + EVE_FORCEINLINE explicit converting_iterator(I base) : base(base) {} + + EVE_FORCEINLINE auto unaligned() const { return convert(unalign(base), as{}); } + + operator unaligned_me() const { return unaligned(); } + + EVE_FORCEINLINE friend auto tagged_dispatch(eve::tag::read_, converting_iterator self) + { + return eve::convert(eve::read(self.base), eve::as{}); + } + + EVE_FORCEINLINE friend void tagged_dispatch(eve::tag::write_, converting_iterator self, T v) + { + eve::write(self.base, eve::convert(v, eve::as>{})); + } + + template I1> + EVE_FORCEINLINE bool operator==(converting_iterator y) const + { + return base == y.base; + } + + template I1> + EVE_FORCEINLINE auto operator<=>(converting_iterator y) const + { + return spaceship_helper(base, y.base); + } + + EVE_FORCEINLINE auto& operator+=(std::ptrdiff_t n) + { + base += n; + return *this; + } + + EVE_FORCEINLINE friend std::ptrdiff_t operator-(converting_iterator const & x, converting_iterator const & y) + { + return x.base - y.base; + } + + EVE_FORCEINLINE friend std::ptrdiff_t operator-(converting_iterator const & x, unaligned_me const & y) + requires (!std::same_as>) + { + return x.base - y.base; + } + + // not eve::iterator + + template + EVE_FORCEINLINE + friend auto tagged_dispatch(preprocess_range_, Traits tr, + converting_iterator f, converting_iterator l) + requires (!iterator) + { + return preprocess_range(tr, convert(as_range(f.base, l.base), as{})); + } + + template + EVE_FORCEINLINE + friend auto tagged_dispatch(preprocess_range_, Traits tr, + converting_iterator f, unaligned_me l) + requires (!iterator) && (!std::same_as>) + { + return preprocess_range(tr, convert(as_range(f.base, l.base), as{})); + } + + // eve::iterator ------------- + EVE_FORCEINLINE auto previous_partially_aligned() const + requires iterator + { + return convert(base.previous_partially_aligned(), eve::as{}); + } + + static auto iterator_cardinal() requires iterator + { return I::iterator_cardinal(); } + + template + EVE_FORCEINLINE auto cardinal_cast(_Cardinal N) const + requires iterator + { + return convert(base.cardinal_cast(N), eve::as{}); + } + + template + requires iterator + EVE_FORCEINLINE friend auto tagged_dispatch(eve::tag::load_, + C c, + S s, + eve::as>, + converting_iterator self) + { + auto c1 = map_alternative( + c, + [](auto alt) { return eve::convert(alt, eve::as>{}); } + ); + + return eve::convert ( eve::load(c1, s, eve::as>{}, self.base) + , eve::as{} + ); + } + + template + EVE_FORCEINLINE friend void tagged_dispatch(eve::tag::store_, + C c, + wide_value_type_t v, + converting_iterator self) + requires iterator + { + auto c1 = map_alternative( + c, + [](auto alt) { return eve::convert(alt, eve::as>{}); } + ); + + eve::store[c1](eve::convert(v, eve::as>{}), self.base); + } + + EVE_FORCEINLINE friend void tagged_dispatch(eve::tag::store_, + wide_value_type_t v, + converting_iterator self) + requires iterator + { + eve::store(eve::convert(v, eve::as>{}), self.base); + } + + template + EVE_FORCEINLINE friend auto + tagged_dispatch(eve::tag::compress_store_, + C c, + Decorator d, + wide_value_type_t v, + eve::logical>> m, + converting_iterator self) + requires iterator + { + // No alternative support in compress_store + auto raw_res = d(eve::compress_store[c])(eve::convert(v, eve::as>{}), m, self.base); + return unaligned_t{raw_res}; + } + }; +} diff --git a/include/eve/algo/detail/preprocess_zip_range.hpp b/include/eve/algo/views/detail/preprocess_zip_range.hpp similarity index 73% rename from include/eve/algo/detail/preprocess_zip_range.hpp rename to include/eve/algo/views/detail/preprocess_zip_range.hpp index 4589c3446a..0d00a7835d 100644 --- a/include/eve/algo/detail/preprocess_zip_range.hpp +++ b/include/eve/algo/views/detail/preprocess_zip_range.hpp @@ -10,7 +10,7 @@ #include #include -namespace eve::algo +namespace eve::algo::views { template struct zip_iterator; @@ -19,18 +19,16 @@ namespace eve::algo { template EVE_FORCEINLINE auto preprocess_zip_range(Traits tr, kumi::tuple rngs) { - auto tr_internal = [&]{ - using N = iteration_cardinal_t...>>; - auto force_cardinal = algo::traits{algo::force_cardinal}; - - return default_to(tr, force_cardinal); - }(); + // So far decided not to return types to consider in resulting traits. + // Maybe we should. + eve::algo::traits types_to_consider{ consider_types_key = kumi::result::cat_t ...>{} }; + auto tr_internal = default_to(tr, types_to_consider); auto components = kumi::map([&](auto rng) { return preprocess_range(tr_internal, rng); }, rngs); auto tr2 = kumi::fold_right( default_to, - kumi::map([](auto r) { return drop_key(force_cardinal_key, r.traits()); }, components), + kumi::map([](auto r) { return drop_key(consider_types_key, r.traits()); }, components), tr); auto f = zip_iterator(kumi::map([](auto r) { return r.begin(); }, components)); diff --git a/include/eve/algo/zip.hpp b/include/eve/algo/views/zip.hpp similarity index 67% rename from include/eve/algo/zip.hpp rename to include/eve/algo/views/zip.hpp index 0cd8a31906..0069affcd9 100644 --- a/include/eve/algo/zip.hpp +++ b/include/eve/algo/views/zip.hpp @@ -8,23 +8,73 @@ #pragma once #include -#include #include +#include +#include #include +#include #include -#include +#include #include -#include +#include #include -namespace eve::algo +namespace eve::algo::views { + //================================================================================================ + //! @addtogroup eve.algo.views + //! @{ + //! @struct zip_range + //! @brief A `relaxed_range` on top of multiple `relaxed_range`. + //! All individual components have to have the same size. + //! Should probably never be created directly, instead use `zip`. + //! + //! You can rezip the components with new traits by using `operator[]`: + //! zip_range[common_type] will convert all components to a common type + //! between them, for example. + //! + //! **Required header:** `#include ` + //! + //! Has a shorthand `eve::views::zip_range` in ``. + //! @} + //================================================================================================ + template struct zip_range; + namespace detail + { + template + auto convert_zipped(Self self, eve::as tgt); + } + + //================================================================================================ + //! @addtogroup eve.algo.views + //! @{ + //! @var zip + //! @brief Given relaxed_iterors and relaxed ranges, zips them together + //! (creates a single object). + //! If at least one component is a `relaxed_range` - result + //! is a `zip_range`, otherwise it's `zip_iterator`. + //! All range compinents have to have the same length. + //! NOTE: uses `range_ref` inside, so never owns/copies any elements. + //! + //! Supports `zip[eve::algo::force_type]`, + //! `zip[eve::algo::common_type], + //! `zip[common_with_types]` traits. + //! `force_type` will convert every component to the type . + //! `common_type` and `common_with_types` will compute the common type (maybe including extra provided), + //! and convert to that. + //! + //! **Required header:** `#include ` + //! + //! Has a shorthand `eve::views::zip` in ``. + //! @} + //================================================================================================ + template // this is zip traits, not algo traits. struct zip_ : TraitsSupport @@ -105,7 +155,7 @@ namespace eve::algo { auto to = type_to_convert_to(std::forward(components)...); using T = typename decltype(to)::type; - return zip(algo::convert(std::forward(components), eve::as{})...); + return zip(views::convert(std::forward(components), eve::as{})...); } else if constexpr( (relaxed_iterator && ...) ) { @@ -122,6 +172,7 @@ namespace eve::algo struct zip_range : kumi::tuple { using is_non_owning = void; + using types_to_consider = kumi::result::cat_t...>; EVE_FORCEINLINE zip_range(kumi::tuple ranges): kumi::tuple(ranges) @@ -168,19 +219,19 @@ namespace eve::algo namespace std { template - struct tuple_size> : + struct tuple_size> : std::tuple_size> { }; template - struct tuple_element> : + struct tuple_element> : std::tuple_element> { }; } -namespace eve::algo::detail +namespace eve::algo::views::detail { template EVE_FORCEINLINE auto convert_zipped(Self self, eve::as tgt) diff --git a/include/eve/algo/zip_iterator.hpp b/include/eve/algo/views/zip_iterator.hpp similarity index 66% rename from include/eve/algo/zip_iterator.hpp rename to include/eve/algo/views/zip_iterator.hpp index de87b3d32c..9a4c7c009a 100644 --- a/include/eve/algo/zip_iterator.hpp +++ b/include/eve/algo/views/zip_iterator.hpp @@ -8,11 +8,14 @@ #pragma once #include +#include +#include #include #include -#include +#include +#include #include #include @@ -20,8 +23,23 @@ #include -namespace eve::algo +namespace eve::algo::views { + //================================================================================================ + //! @addtogroup eve.algo.views + //! @{ + //! @struct zip_iterator + //! @brief A `relaxed_iterator` on top of multiple `relaxed_iterator`. + //! If all of the components are `iterator` they have to have the same cardinal + //! and the `zip_iterator` will model `iterator`. + //! Should probably never be created directly, use `zip`. + //! + //! **Required header:** `#include ` + //! + //! Has a shorthand `eve::views::zip_iterator` in ``. + //! @} + //================================================================================================ + template struct zip_iterator; @@ -36,6 +54,9 @@ namespace eve::algo { static constexpr bool value = (std::equality_comparable_with && ...); }; + + template + auto convert_zipped(Self self, eve::as tgt); } template @@ -57,8 +78,9 @@ namespace eve::algo template struct zip_iterator_common : operations_with_distance { - using value_type = kumi::tuple::value_type...>; - using tuple_type = kumi::tuple; + using value_type = kumi::tuple::value_type...>; + using tuple_type = kumi::tuple; + using types_to_consider = kumi::result::cat_t...>; // tuple opt in using is_product_type = void; @@ -84,42 +106,42 @@ namespace eve::algo kumi::for_each(eve::write, self.storage, v); } - operator zip_iterator...>() const + EVE_FORCEINLINE operator zip_iterator...>() const { return zip_iterator...> { kumi::map([](auto x) { return unalign(x); }, *this)}; } - auto unaligned() const { return zip_iterator...>(*this); } + EVE_FORCEINLINE auto unaligned() const { return zip_iterator...>(*this); } template Self, compatible_zip_iterators Other> - friend bool operator==(Self const &x, Other const &y) + EVE_FORCEINLINE friend bool operator==(Self const &x, Other const &y) { return get<0>(x) == get<0>(y); } template Self, compatible_zip_iterators Other> - friend auto operator<=>(Self const& x, Other const &y) + EVE_FORCEINLINE friend auto operator<=>(Self const& x, Other const &y) { return spaceship_helper(get<0>(x), get<0>(y)); } template Self> - friend Self &operator+=(Self &x, std::ptrdiff_t n) + EVE_FORCEINLINE friend Self &operator+=(Self &x, std::ptrdiff_t n) { kumi::for_each([&](auto &m) { m += n; }, x); return x; } template Self, compatible_zip_iterators Other> - friend std::ptrdiff_t operator-(Self const& x, Other const& y) + EVE_FORCEINLINE friend std::ptrdiff_t operator-(Self const& x, Other const& y) { return get<0>(x) - get<0>(y); } template Self, std::equality_comparable_with> S> - friend auto tagged_dispatch(preprocess_range_, Traits traits, Self self, S l) + EVE_FORCEINLINE friend auto tagged_dispatch(preprocess_range_, Traits traits, Self self, S l) { std::ptrdiff_t distance = l - get<0>(self); @@ -153,7 +175,7 @@ namespace eve::algo using base::base; template> Other> - friend auto tagged_dispatch(preprocess_range_, Traits traits, zip_iterator self, Other other) + EVE_FORCEINLINE friend auto tagged_dispatch(preprocess_range_, Traits traits, zip_iterator self, Other other) { auto ranges = kumi::map([](auto f_, auto l_) { return as_range(f_, l_); @@ -167,14 +189,12 @@ namespace eve::algo struct zip_iterator : detail::zip_iterator_common { using base = detail::zip_iterator_common; - using cardinal = typename I::cardinal; - using wide_value_type = eve::wide; - static_assert((std::same_as && ...)); + static_assert((std::same_as, iterator_cardinal_t> && ...)); using base::base; - auto previous_partially_aligned() const + EVE_FORCEINLINE auto previous_partially_aligned() const { // FIX-#809: always aligned support if constexpr ((partially_aligned_iterator || ... || partially_aligned_iterator )) return *this; @@ -197,8 +217,10 @@ namespace eve::algo } } + static iterator_cardinal_t iterator_cardinal() { return{}; } + template - auto cardinal_cast(_Cardinal N) const + EVE_FORCEINLINE auto cardinal_cast(_Cardinal N) const { return zip_iterator { kumi::map([&](auto x) { return x.cardinal_cast(N); }, *this) @@ -206,7 +228,7 @@ namespace eve::algo } template< relative_conditional_expr C, decorator S> - friend auto tagged_dispatch ( eve::tag::load_, C const& c, S const& s + EVE_FORCEINLINE friend auto tagged_dispatch ( eve::tag::load_, C const& c, S const& s , auto const& pack, zip_iterator self ) { @@ -214,16 +236,26 @@ namespace eve::algo } template - friend void tagged_dispatch( - eve::tag::store_, C cond, wide_value_type v, zip_iterator self ) + EVE_FORCEINLINE friend void tagged_dispatch( + eve::tag::store_, C cond, wide_value_type_t v, zip_iterator self ) { eve::store[cond](v, self.storage); } - friend void tagged_dispatch( eve::tag::store_, wide_value_type v, zip_iterator self ) + EVE_FORCEINLINE friend void tagged_dispatch( eve::tag::store_, wide_value_type_t v, zip_iterator self ) { eve::store(v, self.storage); } + + template + EVE_FORCEINLINE friend auto tagged_dispatch( eve::tag::compress_store_, + C c, Decorator d, wide_value_type_t v, + eve::logical>> m, + zip_iterator self) + { + auto raw_res = d(eve::compress_store[c])(v, m, self.storage); + return unaligned_t{raw_res}; + } }; template @@ -236,20 +268,20 @@ namespace eve::algo // tuple opt in namespace std { - template + template struct tuple_element : tuple_element { }; - template + template struct tuple_size : std::tuple_size { }; // I'm so not sure I'm doing this right template< typename ...Is, typename ZipI2, template class TQual, template class UQual > - requires eve::algo::compatible_zip_iterators, ZipI2> - struct basic_common_reference, ZipI2, TQual, UQual> + requires eve::algo::views::compatible_zip_iterators, ZipI2> + struct basic_common_reference, ZipI2, TQual, UQual> { using type = eve::algo::unaligned_t; }; diff --git a/include/eve/arch/arm/tags.hpp b/include/eve/arch/arm/tags.hpp index 23fa5172f4..56cef34e5b 100644 --- a/include/eve/arch/arm/tags.hpp +++ b/include/eve/arch/arm/tags.hpp @@ -28,6 +28,9 @@ namespace eve template static constexpr std::size_t expected_cardinal = bytes / sizeof(Type); + + template + static constexpr std::size_t fundamental_cardinal = 8 / sizeof(Type); }; struct arm_64_ : arm_abi_<64,true> {}; diff --git a/include/eve/arch/cpu/tags.hpp b/include/eve/arch/cpu/tags.hpp index 7527b62309..d56295daf9 100644 --- a/include/eve/arch/cpu/tags.hpp +++ b/include/eve/arch/cpu/tags.hpp @@ -90,6 +90,9 @@ namespace eve template static constexpr std::size_t expected_cardinal = bytes / sizeof(Type); + + template + static constexpr std::size_t fundamental_cardinal = bytes / sizeof(Type); }; template diff --git a/include/eve/arch/cpu/wide.hpp b/include/eve/arch/cpu/wide.hpp index 477445e8a2..541add60e4 100644 --- a/include/eve/arch/cpu/wide.hpp +++ b/include/eve/arch/cpu/wide.hpp @@ -171,7 +171,10 @@ namespace eve template explicit EVE_FORCEINLINE wide( S0 v0, Ss... vs) noexcept #if !defined(EVE_DOXYGEN_INVOKED) - requires kumi::sized_product_type + requires kumi::sized_product_type + && ( std::same_as,Cardinal> && ... + && std::same_as,Cardinal> + ) #endif : storage_base(kumi::make_tuple(v0,vs...)) {} @@ -1106,6 +1109,7 @@ namespace eve { return kumi::get(w.storage()); } + #if !defined(EVE_DOXYGEN_INVOKED) } } #else diff --git a/include/eve/arch/expected_cardinal.hpp b/include/eve/arch/expected_cardinal.hpp index 49aa48e892..56e2626201 100644 --- a/include/eve/arch/expected_cardinal.hpp +++ b/include/eve/arch/expected_cardinal.hpp @@ -18,6 +18,49 @@ namespace eve { + //================================================================================================ + //! @addtogroup arch + //! @{ + //! @struct expected_cardinal + //! @brief Computes the expected cardinal of a given type + //! + //! **Required header:** `#include ` + //! + //! eve::expected_cardinal computed the cardinal of the register able to store + //! values of type `Type` for a given SIMD `ABI` as a native register type. + //! + //! @tparam Type Type of value to assess + //! @tparam ABI SIMD ABI to use as reference. Must models eve::regular_abi. + //! + //! #### Member types + //! + //! |Name | Definition | + //! |:------|:-----------------------------------------| + //! |`type` | The type of cardinal computed for `Type` | + //! + //!
                                                                                          + //! #### Helper types + //! + //! @code{.cpp} + //! template + //! using expected_cardinal_t = typename expected_cardinal::type; + //! @endcode + //! + //!
                                                                                          + //! #### Helper variable template + //! + //! @code{.cpp} + //! template + //! inline constexpr auto expected_cardinal_v = expected_cardinal_t::value; + //! @endcode + //! + //! @code{.cpp} + //! // Cardinal template inline variable to use with functions like eve::load + //! template + //! inline constexpr expected_cardinal const expected = {}; + //! @endcode + //! @} + //================================================================================================ template struct expected_cardinal : fixed> @@ -32,7 +75,7 @@ namespace eve constexpr inline auto expected_cardinal_v = expected_cardinal::value; //================================================================================================ - // produtc_type special case + // product_type special case //================================================================================================ namespace detail { diff --git a/include/eve/arch/fundamental_cardinal.hpp b/include/eve/arch/fundamental_cardinal.hpp new file mode 100644 index 0000000000..1e54c1a751 --- /dev/null +++ b/include/eve/arch/fundamental_cardinal.hpp @@ -0,0 +1,99 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace eve +{ + //================================================================================================ + //! @addtogroup arch + //! @{ + //! @struct fundamental_cardinal + //! @brief Computes the fundamental cardinal of a given type + //! + //! **Required header:** `#include ` + //! + //! eve::fundamental_cardinal computed the cardinal of the smallest register able to store + //! values of type `Type` for a given SIMD `ABI` with no uninitialized lanes. + //! + //! @tparam Type Type of value to assess + //! @tparam ABI SIMD ABI to use as reference. Must models eve::regular_abi. + //! + //! #### Member types + //! + //! |Name | Definition | + //! |:------|:-----------------------------------------| + //! |`type` | The type of cardinal computed for `Type` | + //! + //!
                                                                                          + //! #### Helper types + //! + //! @code{.cpp} + //! template + //! using fundamental_cardinal_t = typename fundamental_cardinal::type; + //! @endcode + //! + //!
                                                                                          + //! #### Helper variable template + //! + //! @code{.cpp} + //! template + //! inline constexpr auto fundamental_cardinal_v = fundamental_cardinal_t::value; + //! @endcode + //! + //! @code{.cpp} + //! // Cardinal template inline variable to use with functions like eve::load + //! template + //! inline constexpr fundamental_cardinal const fundamental = {}; + //! @endcode + //! @} + //================================================================================================ + template + struct fundamental_cardinal + : fixed> + { + using type = fixed>; + }; + + template + using fundamental_cardinal_t = typename fundamental_cardinal::type; + + template + constexpr inline auto fundamental_cardinal_v = fundamental_cardinal::value; + + //================================================================================================ + // product_type special case + //================================================================================================ + namespace detail + { + template struct min_fundamental; + + template + struct min_fundamental,ABI> + { + static constexpr std::ptrdiff_t value = std::min({fundamental_cardinal::value...}); + }; + } + + template + struct fundamental_cardinal : fixed,ABI>::value> + { + using type = fixed,ABI>::value>; + }; + + template + inline constexpr fundamental_cardinal const fundamental = {}; +} diff --git a/include/eve/arch/ppc/tags.hpp b/include/eve/arch/ppc/tags.hpp index 8a1a77d8de..76c794867e 100644 --- a/include/eve/arch/ppc/tags.hpp +++ b/include/eve/arch/ppc/tags.hpp @@ -28,6 +28,9 @@ namespace eve template static constexpr std::size_t expected_cardinal = bytes / sizeof(Type); + + template + static constexpr std::size_t fundamental_cardinal = 16 / sizeof(Type); }; //================================================================================================ diff --git a/include/eve/arch/x86/tags.hpp b/include/eve/arch/x86/tags.hpp index b78130cc77..c873fc83a8 100644 --- a/include/eve/arch/x86/tags.hpp +++ b/include/eve/arch/x86/tags.hpp @@ -19,8 +19,8 @@ namespace eve //================================================================================================ template struct x86_abi_ { - static constexpr std::size_t bits = Size; - static constexpr std::size_t bytes = Size/8; + static constexpr std::size_t bits = Size; + static constexpr std::size_t bytes = Size/8; static constexpr bool is_wide_logical = Logical; template @@ -28,6 +28,9 @@ namespace eve template static constexpr std::size_t expected_cardinal = bytes / sizeof(Type); + + template + static constexpr std::size_t fundamental_cardinal = 16 / sizeof(Type); }; # if defined(SPY_SIMD_IS_X86_AVX512) diff --git a/include/eve/conditional.hpp b/include/eve/conditional.hpp index aef80f611c..9c11c95b42 100644 --- a/include/eve/conditional.hpp +++ b/include/eve/conditional.hpp @@ -25,6 +25,24 @@ namespace eve namespace detail { template struct top_bits; + + template + EVE_FORCEINLINE as_logical_t to_non_wide_logical(C cond, eve::as const&) + { + using type = as_logical_t; + + auto value = detail::top_bits(cond).storage; + + if constexpr(has_aggregated_abi_v) + { + using sub_t = typename type::template rescale::split_type>; + return type( sub_t(value[0].storage), sub_t(value[1].storage)); + } + else + { + return type{value}; + } + } } //================================================================================================ @@ -180,7 +198,7 @@ namespace eve if constexpr( !abi_t::is_wide_logical ) { - return detail::top_bits(*this).storage; + return detail::to_non_wide_logical(*this, as()); } else { @@ -288,7 +306,7 @@ namespace eve using type = as_logical_t; if constexpr( !abi_t::is_wide_logical ) { - return detail::top_bits(*this).storage; + return detail::to_non_wide_logical(*this, as()); } else { @@ -402,7 +420,7 @@ namespace eve if constexpr( !abi_t::is_wide_logical ) { - return detail::top_bits(*this).storage; + return detail::to_non_wide_logical(*this, as()); } else { diff --git a/include/eve/detail/function/compress_store_impl.hpp b/include/eve/detail/function/compress_store_impl.hpp index d2d92c19d7..005d0dd2e2 100644 --- a/include/eve/detail/function/compress_store_impl.hpp +++ b/include/eve/detail/function/compress_store_impl.hpp @@ -37,3 +37,7 @@ namespace eve #if defined(EVE_INCLUDE_X86_HEADER) # include #endif + +#if defined(EVE_INCLUDE_ARM_HEADER) +# include +#endif diff --git a/include/eve/detail/function/compress_store_swizzle_mask_num.hpp b/include/eve/detail/function/compress_store_swizzle_mask_num.hpp index 0273f2b18a..751bf7e563 100644 --- a/include/eve/detail/function/compress_store_swizzle_mask_num.hpp +++ b/include/eve/detail/function/compress_store_swizzle_mask_num.hpp @@ -25,17 +25,21 @@ // 4 elements // ================ // For 4 elements we do a complete shuffle of the first 3 elements -// 4 elements version also accepts ignore (none of the others do). -// the last one is always written. -// We also return a bool if the last element is set. -// (compiler will optimize that computation away, -// if the caller just calls popcount and not use it). +// 4 elements version also accepts ignore (none of the others do), +// because we can do use it efficiently on x86. +// +// The last one element is always written. +// +// The second returned value is: +// for a regular one - number of elements selected +// for a partial one - a bool if the last element is set. // // Example: // mask: [ false, true, false, false] // shuffle we want: [ 1, 3, _, _] // the number of the shuffle is 0100 -> 2 // is last set: false +// count : 1 // // 8 elements. // ================== @@ -61,14 +65,18 @@ namespace eve { EVE_REGISTER_CALLABLE(compress_store_swizzle_mask_num_); + EVE_REGISTER_CALLABLE(compress_store_swizzle_mask_num_partial_); EVE_DECLARE_CALLABLE(compress_store_swizzle_mask_num_, compress_store_swizzle_mask_num); + EVE_DECLARE_CALLABLE(compress_store_swizzle_mask_num_partial_, compress_store_swizzle_mask_num_partial); namespace detail { EVE_ALIAS_CALLABLE(compress_store_swizzle_mask_num_, compress_store_swizzle_mask_num); + EVE_ALIAS_CALLABLE(compress_store_swizzle_mask_num_partial_, compress_store_swizzle_mask_num_partial); } - EVE_CALLABLE_API(compress_store_swizzle_mask_num_, compress_store_swizzle_mask_num) + EVE_CALLABLE_API(compress_store_swizzle_mask_num_, compress_store_swizzle_mask_num); + EVE_CALLABLE_API(compress_store_swizzle_mask_num_partial_, compress_store_swizzle_mask_num_partial); } #include diff --git a/include/eve/detail/function/simd/arm/neon/compress_store_impl.hpp b/include/eve/detail/function/simd/arm/neon/compress_store_impl.hpp new file mode 100644 index 0000000000..a0d4679c88 --- /dev/null +++ b/include/eve/detail/function/simd/arm/neon/compress_store_impl.hpp @@ -0,0 +1,94 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== +#pragma once + +#include + +#include +#include + +namespace eve::detail +{ + // See comments in compress_store_num and x86 impl + + template + EVE_FORCEINLINE eve::wide + byte_shuffle(eve::wide what, eve::wide pattern) + { + if constexpr ( N() <= 8 ) return vtbl1_u8 (what, pattern); + else if constexpr ( eve::current_api == eve::asimd ) return vqtbl1q_u8(what, pattern); + else + { + uint8x8x2_t lh = {{ vget_low_u8(what), vget_high_u8(what) }}; + return vcombine_u8( + vtbl2_u8(lh, vget_low_u8(pattern)), vtbl2_u8(lh, vget_high_u8(pattern)) + ); + } + } + + template > Ptr> + EVE_FORCEINLINE + T* compress_store_impl_(EVE_SUPPORTS(neon128_), + wide v, + logical> mask, + Ptr ptr) + requires arm_abi> && ( N() == 4 ) + { + using u_t = eve::as_integer_t; + using bytes = typename wide::template rebind>; + + auto [num, count] = compress_store_swizzle_mask_num[ignore_none](mask); + + // load pattern + u_t const* pattern_p = pattern_4_elements_bytes_v[num].data(); + auto * bytes_p = (std::uint8_t const*) (pattern_p); + auto bytes_ap = eve::as_aligned(bytes_p, eve::fixed{}); + bytes pattern{bytes_ap}; + + bytes bytes_v = bit_cast(v, eve::as{}); + bytes_v = byte_shuffle(bytes_v, pattern); + v = bit_cast(bytes_v, as(v)); + + store(v, ptr); + return as_raw_pointer(ptr) + count; + } + + template > Ptr> + EVE_FORCEINLINE + T* compress_store_impl_(EVE_SUPPORTS(neon128_), + wide v, + logical> mask, + Ptr ptr) + requires arm_abi> && ( N() == 8 ) && (sizeof(T) == 2) + { + using u_t = eve::as_integer_t; + using bytes = typename wide::template rebind>; + + // Reduce variations: in each pair from 4 to 3. 10 and 01 become the same. + // Two last elements don't matter. + auto to_left = eve::slide_left(v, eve::index<1>); + v = eve::if_else[mask]( v, to_left ); + + // Find pattern + auto [num, count] = compress_store_swizzle_mask_num(mask); + + u_t const* pattern_p = pattern_8_elements_bytes_v[num].data(); + auto * bytes_p = (std::uint8_t const*) (pattern_p); + auto bytes_ap = eve::as_aligned(bytes_p, eve::fixed{}); + bytes pattern{bytes_ap}; + + // Shuffle + bytes bytes_v = bit_cast(v, eve::as{}); + bytes_v = byte_shuffle(bytes_v, pattern); + v = bit_cast(bytes_v, as(v)); + + // store + store(v, ptr); + return as_raw_pointer(ptr) + count; + } +} diff --git a/include/eve/detail/function/simd/arm/neon/compress_store_swizzle_mask_num.hpp b/include/eve/detail/function/simd/arm/neon/compress_store_swizzle_mask_num.hpp index 19f14aa85f..f35d4f02bc 100644 --- a/include/eve/detail/function/simd/arm/neon/compress_store_swizzle_mask_num.hpp +++ b/include/eve/detail/function/simd/arm/neon/compress_store_swizzle_mask_num.hpp @@ -90,10 +90,10 @@ namespace eve::detail template EVE_FORCEINLINE std::pair - compress_store_swizzle_mask_num_(EVE_SUPPORTS(neon128_), C c, logical>> mask) + compress_store_swizzle_mask_num_partial_(EVE_SUPPORTS(neon128_), C c, logical>> mask) { if constexpr ( C::is_complete && !C::is_inverted ) return {0, false}; - else if constexpr ( !C::is_complete ) return compress_store_swizzle_mask_num(ignore_none, mask && c.mask(as(mask))); + else if constexpr ( !C::is_complete ) return compress_store_swizzle_mask_num_partial(ignore_none, mask && c.mask(as(mask))); else { using l_t = logical>>; @@ -109,6 +109,28 @@ namespace eve::detail } } + template + EVE_FORCEINLINE std::pair + compress_store_swizzle_mask_num_(EVE_SUPPORTS(neon128_), C c, logical>> mask) + { + if constexpr ( C::is_complete && !C::is_inverted ) return {0, 0}; + else if constexpr ( !C::is_complete ) return compress_store_swizzle_mask_num(ignore_none, mask && c.mask(as(mask))); + else + { + using l_t = logical>>; + using bits_type = typename l_t::bits_type; + + bits_type bits = mask.bits(); + // last element doesn't participate in the mask + bits_type elements_bit{0x11, 0x12, 0x14, 0x10}; + bits &= elements_bit; + int desc = sum4(bits); + int num = desc & 0xf; + int popcount = desc >> 4; + return {num, popcount}; + } + } + template EVE_FORCEINLINE std::pair compress_store_swizzle_mask_num_(EVE_SUPPORTS(neon128_), logical>> mask) diff --git a/include/eve/detail/function/simd/arm/neon/sum.hpp b/include/eve/detail/function/simd/arm/neon/sum.hpp new file mode 100644 index 0000000000..c091bcc937 --- /dev/null +++ b/include/eve/detail/function/simd/arm/neon/sum.hpp @@ -0,0 +1,120 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== +#pragma once + +#include +#include + +namespace eve::detail +{ + template + EVE_FORCEINLINE wide arm_cleanup(wide v) noexcept + { + // Clean up potential garbage + using ec_t = expected_cardinal_t; + if constexpr(N::value < ec_t::value) + { + v = bit_cast( slide_right ( bit_cast(v,as>()) + , index + ) + , as(v) + ); + } + + return v; + } + + template + EVE_FORCEINLINE wide arm_sum_impl(wide v) noexcept + { + constexpr auto c = categorize>(); + + if constexpr( c== category::float32x2 ) return vpadd_f32(v,v); + else if constexpr( c== category::uint32x2 ) return vpadd_u32(v,v); + else if constexpr( c== category::int32x2 ) return vpadd_s32(v,v); + else if constexpr( c== category::uint16x4 ) return vpadd_u16(v,v); + else if constexpr( c== category::int16x4 ) return vpadd_s16(v,v); + else if constexpr( c== category::uint8x8 ) return vpadd_u8(v,v); + else if constexpr( c== category::int8x8 ) return vpadd_s8(v,v); + } + + template + EVE_FORCEINLINE wide sum_( EVE_SUPPORTS(neon128_), splat_type const&, wide v) noexcept + requires arm_abi> + { + if constexpr(N::value == 1) return v; + else if constexpr(current_api >= asimd) + { + return wide(sum(v)); + } + else + { + if constexpr( std::same_as, arm_64_> ) + { + v = arm_cleanup(v); + if constexpr(sizeof(T) <= 4) v = arm_sum_impl(v); + if constexpr(sizeof(T) <= 2) v = arm_sum_impl(v); + if constexpr(sizeof(T) <= 1) v = arm_sum_impl(v); + return v; + } + else + { + if constexpr(sizeof(T) == 8) return wide{v.get(0)+v.get(1)}; + else + { + auto [l, h] = v.slice(); + l = splat(sum)(l+h); + return wide{l, l}; + } + } + } + } + + template + EVE_FORCEINLINE T sum_( EVE_SUPPORTS(neon128_), wide v) noexcept + requires arm_abi> + { + if constexpr(N::value == 1) return v.get(0); + else + { + if constexpr(current_api >= asimd) + { + v = arm_cleanup(v); + constexpr auto c = categorize>(); + + if constexpr( c== category::float64x2 ) return vaddvq_f64(v); + else if constexpr( c== category::float32x2 ) return vaddv_f32(v); + else if constexpr( c== category::float32x4 ) return vaddvq_f32(v); + else if constexpr( c== category::uint64x2 ) return vaddvq_u64(v); + else if constexpr( c== category::int64x2 ) return vaddvq_s64(v); + else if constexpr( c== category::uint32x2 ) return vaddv_u32(v); + else if constexpr( c== category::uint32x4 ) return vaddvq_u32(v); + else if constexpr( c== category::int32x2 ) return vaddv_s32(v); + else if constexpr( c== category::int32x4 ) return vaddvq_s32(v); + else if constexpr( c== category::uint16x4 ) return vaddv_u16(v); + else if constexpr( c== category::uint16x8 ) return vaddvq_u16(v); + else if constexpr( c== category::int16x4 ) return vaddv_s16(v); + else if constexpr( c== category::int16x8 ) return vaddvq_s16(v); + else if constexpr( c== category::uint8x8 ) return vaddv_u8(v); + else if constexpr( c== category::uint8x16 ) return vaddvq_u8(v); + else if constexpr( c== category::int8x8 ) return vaddv_s8(v); + else if constexpr( c== category::int8x16 ) return vaddvq_s8(v); + } + else + { + if constexpr( std::same_as, arm_64_> ) return splat(sum)(v).get(0); + else if constexpr(sizeof(T) == 8) return v.get(0)+v.get(1); + else + { + auto [l,h] = v.slice(); + return splat(eve::detail::sum)(l+h).get(0); + } + } + } + } +} diff --git a/include/eve/detail/function/simd/common/bitmask.hpp b/include/eve/detail/function/simd/common/bitmask.hpp index efee09c45f..47d1ab6bdb 100644 --- a/include/eve/detail/function/simd/common/bitmask.hpp +++ b/include/eve/detail/function/simd/common/bitmask.hpp @@ -20,7 +20,16 @@ namespace eve::detail EVE_FORCEINLINE auto to_bits( cpu_ const&, Wide const& p ) noexcept { using type = typename Wide::bits_type; - return bit_cast(p, as{}); + + if constexpr ( has_aggregated_abi_v ) + { + auto [l, h] = p.slice(); + return type{l.bits(), h.bits()}; + } + else + { + return bit_cast(p, as{}); + } } //================================================================================================ diff --git a/include/eve/detail/function/simd/common/compress_store_impl.hpp b/include/eve/detail/function/simd/common/compress_store_impl.hpp index 6a08bbd540..108cc55f26 100644 --- a/include/eve/detail/function/simd/common/compress_store_impl.hpp +++ b/include/eve/detail/function/simd/common/compress_store_impl.hpp @@ -18,6 +18,94 @@ namespace eve::detail { + // permutation masks ------------------ + + template + EVE_FORCEINLINE constexpr auto pattern_4_elements(std::array idxs) + { + using row = std::array; + + return std::array { + row{ idxs[3], 0, 0, 0 }, // 000 + row{ idxs[0], idxs[3], 0, 0 }, // 001 + row{ idxs[1], idxs[3], 0, 0 }, // 010 + row{ idxs[0], idxs[1], idxs[3], 0 }, // 011 + row{ idxs[2], idxs[3], 0, 0 }, // 100 + row{ idxs[0], idxs[2], idxs[3], 0 }, // 101 + row{ idxs[1], idxs[2], idxs[3], 0 }, // 110 + row{ idxs[0], idxs[1], idxs[2], idxs[3] }, // 111 + }; + } + + // See compress_store_num for explanation + template + EVE_FORCEINLINE constexpr auto pattern_8_elements(std::array idxs) + { + using row = std::array; + + std::array res = {}; + + for (unsigned i = 0; i != 27; ++i) + { + unsigned number_of_9s = 0, number_of_3s = 0, number_of_1s = 0; + unsigned base_3_value = i; + + if (base_3_value >= 9) ++number_of_9s, base_3_value -= 9; + if (base_3_value >= 9) ++number_of_9s, base_3_value -= 9; + if (base_3_value >= 3) ++number_of_3s, base_3_value -= 3; + if (base_3_value >= 3) ++number_of_3s, base_3_value -= 3; + if (base_3_value >= 1) ++number_of_1s, base_3_value -= 1; + if (base_3_value >= 1) ++number_of_1s, base_3_value -= 1; + + auto* it = res[i].begin(); + if (number_of_1s) *it++ = idxs[0], --number_of_1s; + if (number_of_1s) *it++ = idxs[1], --number_of_1s; + if (number_of_3s) *it++ = idxs[2], --number_of_3s; + if (number_of_3s) *it++ = idxs[3], --number_of_3s; + if (number_of_9s) *it++ = idxs[4], --number_of_9s; + if (number_of_9s) *it++ = idxs[5], --number_of_9s; + *it++ = idxs[6]; + *it++ = idxs[7]; + } + + return res; + } + + template + constexpr auto idxs_bytes = [] { + std::array res = {}; + + for (unsigned i = 0; i != 8; ++i) + { + unsigned byte_idx = i * sizeof(T); + + if constexpr ( sizeof(T) == 4 ) + { + res[i] = (byte_idx + 3) << 24 | (byte_idx + 2) << 16 | (byte_idx + 1) << 8 | byte_idx; + } + else if constexpr ( sizeof(T) == 2 ) + { + res[i] = (byte_idx + 1) << 8 | byte_idx; + } + else if constexpr ( sizeof(T) == 1 ) + { + res[i] = byte_idx; + } + } + + return res; + }(); + + template + constexpr auto pattern_4_elements_bytes_v alignas(sizeof(T) * 4) = + pattern_4_elements(idxs_bytes); + + template + constexpr auto pattern_8_elements_bytes_v alignas(sizeof(T) * 8) = + pattern_8_elements(idxs_bytes); + + // generic impl ------------------ + template> Ptr> EVE_FORCEINLINE T* compress_store_impl_aggregated(wide v, @@ -69,9 +157,9 @@ namespace eve::detail logical> mask, Ptr ptr) noexcept { - if ( C::is_complete && !C::is_inverted ) return as_raw_pointer(ptr); - else if ( C::is_complete ) return compress_store_impl(v, mask, ptr); - else if ( !has_emulated_abi_v> ) + if constexpr ( C::is_complete && !C::is_inverted ) return as_raw_pointer(ptr); + else if constexpr ( C::is_complete ) return compress_store_impl(v, mask, ptr); + else if constexpr ( !has_emulated_abi_v> ) { mask = mask && c.mask(as(mask)); return compress_store_impl(v, mask, ptr); diff --git a/include/eve/detail/function/simd/common/compress_store_swizzle_mask_num.hpp b/include/eve/detail/function/simd/common/compress_store_swizzle_mask_num.hpp index c55405a0b4..3f2df83c9e 100644 --- a/include/eve/detail/function/simd/common/compress_store_swizzle_mask_num.hpp +++ b/include/eve/detail/function/simd/common/compress_store_swizzle_mask_num.hpp @@ -18,6 +18,26 @@ namespace eve::detail { template EVE_FORCEINLINE std::pair + compress_store_swizzle_mask_num_partial_(EVE_SUPPORTS(cpu_), C c, logical>> mask) + { + using w_t = wide>; + using l_t = logical>; + + // can only be for 64 bit numbers on 128 bit register + if constexpr (has_aggregated_abi_v) + { + return compress_store_swizzle_mask_num_partial(c, convert(mask, as>{})); + } + else + { + static_assert(top_bits::bits_per_element == 1); + int mmask = top_bits{mask, c}.as_int(); + return {(mmask & 7), (mmask & 8)}; + } + } + + template + EVE_FORCEINLINE std::pair compress_store_swizzle_mask_num_(EVE_SUPPORTS(cpu_), C c, logical>> mask) { using w_t = wide>; @@ -32,7 +52,7 @@ namespace eve::detail { static_assert(top_bits::bits_per_element == 1); int mmask = top_bits{mask, c}.as_int(); - return {(mmask & 7), (mmask & 8)}; + return {(mmask & 7), std::popcount(static_cast(mmask))}; } } diff --git a/include/eve/detail/function/simd/common/friends.hpp b/include/eve/detail/function/simd/common/friends.hpp index 60db9a4ef0..e2ad839b00 100644 --- a/include/eve/detail/function/simd/common/friends.hpp +++ b/include/eve/detail/function/simd/common/friends.hpp @@ -70,8 +70,10 @@ namespace eve::detail EVE_FORCEINLINE auto self_logand(cpu_ const&, logical> v, logical> w) noexcept { using abi_t = typename logical>::abi_type; + using abi_u = typename logical>::abi_type; - if constexpr ( std::same_as && sizeof(T) == sizeof(U) ) + // Both arguments are aggregated, we can safely slice + if constexpr( is_aggregated_v && is_aggregated_v ) { auto [vl, vh] = v.slice(); auto [wl, wh] = w.slice(); @@ -82,17 +84,40 @@ namespace eve::detail else if constexpr ( !abi_t::is_wide_logical ) { using storage_t = typename logical>::storage_type; - using m_t = typename storage_t::type; - m_t that = v.storage().value & w.storage().value; - return logical>(storage_t{that}); - } - else if constexpr ( !std::same_as && sizeof(T) == sizeof(U) ) - { - return bit_cast ( v.bits() & w.bits(), as(v) ); + using m_t = std::conditional_t< is_aggregated_v + , typename logical>::storage_type + , storage_t + >; + using u_t = typename m_t::type; + storage_t that; + + // We need to know wich side is not aggregated to safely bit_cast its contents + if constexpr( is_aggregated_v ) + { + u_t them = bit_cast(v.storage(),as()) & w.storage().value; + that = bit_cast(them,as()); + } + else if constexpr( is_aggregated_v ) + { + that.value = v.storage().value & bit_cast(w.storage(),as()); + } + else + { + that.value = v.storage().value & w.storage().value; + } + + return logical>(that); } else { - return map([](E e,auto f){ return as_logical_t(e && f); }, v, w); + if constexpr( !is_aggregated_v && !is_aggregated_v && (sizeof(T) == sizeof(U)) ) + { + return bit_cast ( v.bits() & w.bits(), as(v) ); + } + else + { + return map([](E e,auto f){ return as_logical_t(e && f); }, v, w); + } } } @@ -101,8 +126,10 @@ namespace eve::detail EVE_FORCEINLINE auto self_logor(cpu_ const&, logical> v, logical> w) noexcept { using abi_t = typename logical>::abi_type; + using abi_u = typename logical>::abi_type; - if constexpr ( std::same_as && sizeof(T) == sizeof(U) ) + // Both arguments are aggregated, we can safely slice + if constexpr( is_aggregated_v && is_aggregated_v ) { auto [vl, vh] = v.slice(); auto [wl, wh] = w.slice(); @@ -113,17 +140,40 @@ namespace eve::detail else if constexpr ( !abi_t::is_wide_logical ) { using storage_t = typename logical>::storage_type; - using m_t = typename storage_t::type; - m_t that = v.storage().value | w.storage().value; - return logical>(storage_t{that}); - } - else if constexpr ( !std::same_as && sizeof(T) == sizeof(U) ) - { - return bit_cast ( v.bits() | w.bits(), as(v) ); + using m_t = std::conditional_t< is_aggregated_v + , typename logical>::storage_type + , storage_t + >; + using u_t = typename m_t::type; + storage_t that; + + // We need to know wich side is not aggregated to safely bit_cast its contents + if constexpr( is_aggregated_v ) + { + u_t them = bit_cast(v.storage(),as()) | w.storage().value; + that = bit_cast(them,as()); + } + else if constexpr( is_aggregated_v ) + { + that.value = v.storage().value | bit_cast(w.storage(),as()); + } + else + { + that.value = v.storage().value | w.storage().value; + } + + return logical>(that); } else { - return map([](E e,auto f){ return as_logical_t(e || f); }, v, w); + if constexpr( !is_aggregated_v && !is_aggregated_v && (sizeof(T) == sizeof(U))) + { + return bit_cast ( v.bits() | w.bits(), as(v) ); + } + else + { + return map([](E e,auto f){ return as_logical_t(e || f); }, v, w); + } } } diff --git a/include/eve/detail/function/simd/common/make.hpp b/include/eve/detail/function/simd/common/make.hpp index d6550025b9..a6596473f3 100644 --- a/include/eve/detail/function/simd/common/make.hpp +++ b/include/eve/detail/function/simd/common/make.hpp @@ -73,16 +73,15 @@ namespace eve::detail template EVE_FORCEINLINE Pack make_aggregated(V0 v0, Vs... vs) noexcept { - using t_t = typename Pack::value_type; - Pack that; + using sub_t = typename Pack::template rescale; - that.set(0, static_cast(v0)); - [&]( std::index_sequence ) - { - (that.set(N+1, static_cast(vs)),...); - }(std::make_index_sequence{}); + // Package all values then split in 2 sides + auto values = kumi::make_tuple(v0,vs...); + auto [ls,hs] = values.split(kumi::index); - return that; + // Rebuild sub-type with both parts of the pack of values + auto constexpr build = [](auto... e) { return sub_t{e...}; }; + return Pack{ kumi::apply(build,ls), kumi::apply(build,hs) }; } template EVE_FORCEINLINE Pack make_aggregated( V v) noexcept diff --git a/include/eve/detail/function/simd/common/slide_left.hpp b/include/eve/detail/function/simd/common/slide_left.hpp index ed97a1013b..6a1192112e 100644 --- a/include/eve/detail/function/simd/common/slide_left.hpp +++ b/include/eve/detail/function/simd/common/slide_left.hpp @@ -8,6 +8,7 @@ #pragma once #include +#include #include namespace eve::detail @@ -26,12 +27,26 @@ namespace eve::detail { if constexpr(Shift == 0) return v; else if constexpr(Shift == Wide::size()) return Wide{0}; - else if constexpr( has_aggregated_abi_v && Shift >= Wide::size()/2) + else if constexpr( has_aggregated_abi_v ) { - // We slide so much the upper part is full of zero - // and the lower part is a slide of the former higher part - auto h = v.slice(upper_); - return Wide{ slide_left(h, index), decltype(h){0} }; + if constexpr(Shift >= Wide::size()/2) + { + // We slide so much the upper part is full of zero + // and the lower part is a slide of the former higher part + auto h = v.slice(upper_); + return Wide{ slide_left(h, index), decltype(h){0} }; + } + else + { + auto[l,h] = v.slice(); + auto lh = slide_right(h,index_t{}); + l = slide_left(l,index_t{}); + h = slide_left(h,index_t{}); + + if constexpr( logical_value ) l = l || lh; + else l = l | lh; + return Wide{l,h}; + } } else if constexpr( is_bundle_v ) { @@ -39,14 +54,14 @@ namespace eve::detail } else { - return basic_swizzle(v, slide_left_pattern); + if constexpr( logical_value && Wide::abi_type::is_wide_logical) + { + return bit_cast(slide_left(v.bits(),index), as{}); + } + else + { + return basic_swizzle(v, slide_left_pattern); + } } } - - template - EVE_FORCEINLINE auto slide_left_(EVE_SUPPORTS(cpu_), logical v, index_t s) noexcept - requires(Shift <= Wide::size() ) - { - return bit_cast(slide_left(v.bits(),s), as>{}); - } } diff --git a/include/eve/detail/function/simd/common/slide_right.hpp b/include/eve/detail/function/simd/common/slide_right.hpp index be77c012cc..653656cb16 100644 --- a/include/eve/detail/function/simd/common/slide_right.hpp +++ b/include/eve/detail/function/simd/common/slide_right.hpp @@ -33,12 +33,26 @@ namespace eve::detail { if constexpr(Shift == 0) return v; else if constexpr(Shift == Wide::size()) return Wide{0}; - else if constexpr( has_aggregated_abi_v && Shift >= Wide::size()/2) + else if constexpr( has_aggregated_abi_v) { - // We slide so much the lower part is full of zero - // and the upper part is a slide of the former higher part - auto l = v.slice(lower_); - return Wide{ decltype(l){0}, slide_right(l, index) }; + if constexpr(Shift >= Wide::size()/2) + { + // We slide so much the lower part is full of zero + // and the upper part is a slide of the former higher part + auto l = v.slice(lower_); + return Wide{ decltype(l){0}, slide_right(l, index) }; + } + else + { + auto[l,h] = v.slice(); + auto lh = slide_left(l,index_t{}); + h = slide_right(h,index_t{}); + l = slide_right(l,index_t{}); + + if constexpr( logical_value ) h = h || lh; + else h = h | lh; + return Wide{l,h}; + } } else if constexpr( is_bundle_v ) { @@ -46,7 +60,14 @@ namespace eve::detail } else { - return basic_swizzle(v, slide_right_pattern); + if constexpr( logical_value && Wide::abi_type::is_wide_logical) + { + return bit_cast(slide_right(v.bits(),index), as{}); + } + else + { + return basic_swizzle(v, slide_right_pattern); + } } } @@ -85,28 +106,18 @@ namespace eve::detail } else { - Wide res{ [&](int i, int size) { - if (i < Shift) return x.get(size - Shift + i); - else return y.get(i - Shift); - }}; - return res; + if constexpr( logical_value && Wide::abi_type::is_wide_logical) + { + return bit_cast(slide_right(x.bits(), y.bits(), index), as{}); + } + else + { + Wide res{ [&](int i, int size) { + if (i < Shift) return x.get(size - Shift + i); + else return y.get(i - Shift); + }}; + return res; + } } } - - template - EVE_FORCEINLINE auto slide_right_(EVE_SUPPORTS(cpu_), logical v, index_t s) noexcept - requires(Shift <= Wide::size() ) - { - return bit_cast(slide_right(v.bits(),s), as>{}); - } - - template - EVE_FORCEINLINE auto slide_right_(EVE_SUPPORTS(cpu_) - , logical x - , logical y - , index_t s) noexcept - requires(Shift <= Wide::size() ) - { - return bit_cast(slide_right(x.bits(), y.bits(), s), as>{}); - } } diff --git a/include/eve/detail/function/simd/common/subscript.hpp b/include/eve/detail/function/simd/common/subscript.hpp index 26815544ae..f3290490d7 100644 --- a/include/eve/detail/function/simd/common/subscript.hpp +++ b/include/eve/detail/function/simd/common/subscript.hpp @@ -64,6 +64,8 @@ namespace eve::detail template EVE_FORCEINLINE auto extract(Wide const& p, std::size_t i) noexcept { + using abi_t = typename Wide::abi_type; + if constexpr( has_bundle_abi_v ) { return kumi::apply( [=](auto const&... m) @@ -73,6 +75,12 @@ namespace eve::detail , p.storage() ); } + else if constexpr( has_aggregated_abi_v && !abi_t::is_wide_logical ) + { + constexpr auto sz = Wide::size()/2; + if(i ) { - auto ptr = reinterpret_cast*>(&p.storage().segments[0]); - ptr[i] = v; + using abi_t = typename Wide::abi_type; + + if constexpr( abi_t::is_wide_logical ) + { + auto ptr = reinterpret_cast*>(&p.storage().segments[0]); + ptr[i] = v; + } + else + { + constexpr auto sz = Wide::size() / 2; + auto[l,h] = p.slice(); + + if(i ) { diff --git a/include/eve/detail/function/simd/common/sum.hpp b/include/eve/detail/function/simd/common/sum.hpp new file mode 100644 index 0000000000..f5f4b3ecf3 --- /dev/null +++ b/include/eve/detail/function/simd/common/sum.hpp @@ -0,0 +1,78 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace eve::detail +{ + template + EVE_FORCEINLINE auto sum_ ( EVE_SUPPORTS(cpu_) + , splat_type const&, wide const &v + ) noexcept + { + if constexpr( N::value == 1 ) return v; + else if constexpr( is_emulated_v> ) return wide( eve::detail::sum(v) ); + else if constexpr( is_aggregated_v>) + { + auto[l,h] = v.slice(); + auto r = splat(sum)( l + h ); + return eve::combine(r,r); + } + else return butterfly_reduction(v, eve::add); + } + + template + EVE_FORCEINLINE auto sum_(EVE_SUPPORTS(cpu_), T const &v) noexcept + { + return v; + } + + template + EVE_FORCEINLINE auto sum_(EVE_SUPPORTS(cpu_), wide const &v) noexcept + { + if constexpr( N::value == 1 ) return v.get(0); + else if constexpr( is_emulated_v> ) + { + return [&](std::index_sequence) + { + T r = 0; + ((r += v.get(I)),...); + return r; + }(std::make_index_sequence{}); + } + else if constexpr( is_aggregated_v> ) + { + auto[l,h] = v.slice(); + return sum( l+h ); + } + else return butterfly_reduction(v, eve::add).get(0); + } + + // ----------------------------------------------------------------------------------------------- + // Masked case + template + EVE_FORCEINLINE auto sum_(EVE_SUPPORTS(cpu_), C const &cond, U const &t) noexcept + { + return sum(if_else(cond, t, eve::zero)); + } + + template + EVE_FORCEINLINE auto sum_(EVE_SUPPORTS(cpu_), C const &cond + , splat_type const&, U const &t) noexcept + { + return splat(sum)(if_else(cond, t, eve::zero)); + } +} diff --git a/include/eve/detail/function/simd/x86/compress_store_impl.hpp b/include/eve/detail/function/simd/x86/compress_store_impl.hpp index f75d474a10..9a2ced4c89 100644 --- a/include/eve/detail/function/simd/x86/compress_store_impl.hpp +++ b/include/eve/detail/function/simd/x86/compress_store_impl.hpp @@ -14,6 +14,74 @@ #include #include +// sse2/sse3 --------------------------------------------------------- +// switch based implementation + +namespace eve::detail +{ + + template + EVE_FORCEINLINE + auto compress_store_impl_switch_4(C c, + wide> v, + logical>> mask + ) + { + auto [num, last_set] = compress_store_swizzle_mask_num_partial[c](mask); + int count; + + switch (num) { + case 0b000: { count = 0; v = v[pattern<3, 0, 0, 0>]; break; } + case 0b001: { count = 1; v = v[pattern<0, 3, 0, 0>]; break; } + case 0b010: { count = 1; v = v[pattern<1, 3, 0, 0>]; break; } + case 0b011: { count = 2; v = v[pattern<0, 1, 3, 0>]; break; } + case 0b100: { count = 1; v = v[pattern<2, 3, 0, 0>]; break; } + case 0b101: { count = 2; v = v[pattern<0, 2, 3, 0>]; break; } + case 0b110: { count = 2; v = v[pattern<1, 2, 3, 0>]; break; } + case 0b111: { count = 3; break; } + #if defined(SPY_COMPILER_IS_CLANG) or defined(SPY_COMPILER_IS_GCC) + default: __builtin_unreachable(); + #endif + } + count += last_set ? 1 : 0; + + return std::pair{v, count}; + } + + template> Ptr> + EVE_FORCEINLINE + T* compress_store_impl_(EVE_SUPPORTS(sse2_), + C c, + wide v, + logical> mask, + Ptr ptr) noexcept + requires x86_abi> && ( N() == 4 ) && (current_api < ssse3) + { + int count; + if constexpr ( sizeof(T) == 1 ) + { + // We have to convert to shorts here. Does not optimise well without. + auto shorts = convert(v, eve::as{}); + auto [shuffled, count_] = compress_store_impl_switch_4(c, shorts, mask); + v = eve::convert(shuffled, eve::as{}); + count = count_; + } + else + { + auto [shuffled, count_] = compress_store_impl_switch_4(c, v, mask); + v = shuffled; + count = count_; + } + + store(v, ptr); + return as_raw_pointer(ptr) + count; + } + +} + +// ssse3 -> avx2 (no bmi) --------------------------------------------------------- +// mask based (@aqrit from StackOverflow's idea) + /* NOTE: We have 3 implementations: 4 elements, 8 elements and 16 elements. @@ -35,49 +103,7 @@ namespace eve::detail } template - EVE_FORCEINLINE constexpr auto pattern_4_elements(std::array idxs) - { - using row = std::array; - - return std::array { - row{ idxs[3], 0, 0, 0 }, // 000 - row{ idxs[0], idxs[3], 0, 0 }, // 001 - row{ idxs[1], idxs[3], 0, 0 }, // 010 - row{ idxs[0], idxs[1], idxs[3], 0 }, // 011 - row{ idxs[2], idxs[3], 0, 0 }, // 100 - row{ idxs[0], idxs[2], idxs[3], 0 }, // 101 - row{ idxs[1], idxs[2], idxs[3], 0 }, // 110 - row{ idxs[0], idxs[1], idxs[2], idxs[3] }, // 111 - }; - } - - template - constexpr auto idxs_bytes = [] { - std::array res = {}; - - for (unsigned i = 0; i != 8; ++i) - { - unsigned byte_idx = i * sizeof(T); - - if constexpr ( sizeof(T) == 4 ) - { - res[i] = (byte_idx + 3) << 24 | (byte_idx + 2) << 16 | (byte_idx + 1) << 8 | byte_idx; - } - else if constexpr ( sizeof(T) == 2 ) - { - res[i] = (byte_idx + 1) << 8 | byte_idx; - } - else if constexpr ( sizeof(T) == 1 ) - { - res[i] = byte_idx; - } - } - - return res; - }(); - - template - constexpr auto idx_dwords = [] { + constexpr auto idxs_dwords = [] { std::array res = {}; for (unsigned i = 0; i != 8; i += 1) @@ -106,6 +132,18 @@ namespace eve::detail return patterns; } + template + constexpr auto pattern_4_elements_bytes_with_popcounts_v alignas(sizeof(T) * 4) = + add_popcounts(pattern_4_elements_bytes_v); + + template + constexpr auto pattern_4_elements_dwords_v alignas(sizeof(T) * 4) = + pattern_4_elements(idxs_dwords); + + template + constexpr auto pattern_8_elements_dwords_v alignas(sizeof(T) * 8) = + pattern_8_elements(idxs_dwords); + template EVE_FORCEINLINE wide permvar8(wide v, __m256i pattern) requires (current_api >= avx2) @@ -139,16 +177,15 @@ namespace eve::detail } else if constexpr ( N() == 4 && sizeof(T) == 8 ) { - alignas(sizeof(T) * N()) auto patterns = pattern_4_elements(idx_dwords); - - auto [num, _] = compress_store_swizzle_mask_num[c](mask); - aligned_ptr> pattern_ptr{patterns[num].data()}; + auto [num, count] = compress_store_swizzle_mask_num[c](mask); + std::uint64_t const* raw_pattern_ptr = pattern_4_elements_dwords_v[num].data(); + aligned_ptr> pattern_ptr{raw_pattern_ptr}; wide> pattern{ptr_cast(pattern_ptr)}; wide shuffled = permvar8(v, pattern); store(shuffled, ptr); - return as_raw_pointer(ptr) + eve::count_true[c](mask); + return as_raw_pointer(ptr) + count; } else if constexpr ( std::floating_point ) { @@ -165,17 +202,16 @@ namespace eve::detail using bytes_fixed = eve::fixed; using bytes_t = typename wide::template rebind; - alignas(sizeof(T) * 4) const auto patterns = add_popcounts(pattern_4_elements(idxs_bytes)); - - auto [num, is_last_set] = compress_store_swizzle_mask_num[c](mask); + auto [num, is_last_set] = compress_store_swizzle_mask_num_partial[c](mask); using a_p = aligned_ptr; - bytes_t pattern(ptr_cast( a_p(patterns[num].data()) )); + u_t const* raw_pattern_ptr = pattern_4_elements_bytes_with_popcounts_v[num].data(); + bytes_t pattern(ptr_cast( a_p(raw_pattern_ptr) )); wide shuffled = _mm_shuffle_epi8(v, pattern); store(shuffled, ptr); - int popcount = get_popcount(pattern.get(0)) + is_last_set; + int popcount = get_popcount(pattern.get(0)) + (is_last_set ? 1 : 0); return as_raw_pointer(ptr) + popcount; } } @@ -195,40 +231,6 @@ namespace eve::detail else return compress_store_impl[eve::ignore_none](v, mask, ptr); } - // See base_3_mask for explanation - template - EVE_FORCEINLINE constexpr auto pattern_8_elements(std::array idxs) - { - using row = std::array; - - std::array res = {}; - - for (unsigned i = 0; i != 27; ++i) - { - unsigned number_of_9s = 0, number_of_3s = 0, number_of_1s = 0; - unsigned base_3_value = i; - - if (base_3_value >= 9) ++number_of_9s, base_3_value -= 9; - if (base_3_value >= 9) ++number_of_9s, base_3_value -= 9; - if (base_3_value >= 3) ++number_of_3s, base_3_value -= 3; - if (base_3_value >= 3) ++number_of_3s, base_3_value -= 3; - if (base_3_value >= 1) ++number_of_1s, base_3_value -= 1; - if (base_3_value >= 1) ++number_of_1s, base_3_value -= 1; - - auto* it = res[i].begin(); - if (number_of_1s) *it++ = idxs[0], --number_of_1s; - if (number_of_1s) *it++ = idxs[1], --number_of_1s; - if (number_of_3s) *it++ = idxs[2], --number_of_3s; - if (number_of_3s) *it++ = idxs[3], --number_of_3s; - if (number_of_9s) *it++ = idxs[4], --number_of_9s; - if (number_of_9s) *it++ = idxs[5], --number_of_9s; - *it++ = idxs[6]; - *it++ = idxs[7]; - } - - return res; - } - template> Ptr> EVE_FORCEINLINE T* compress_store_impl_(EVE_SUPPORTS(ssse3_), @@ -257,15 +259,14 @@ namespace eve::detail using u_t = eve::as_integer_t; - alignas(sizeof(T) * N()) const auto patterns = [] { - if constexpr ( sizeof(T) == 4 ) return pattern_8_elements(idx_dwords); - else return pattern_8_elements(idxs_bytes); - }(); - auto [pattern_idx, popcount] = compress_store_swizzle_mask_num(mask); - auto pattern_ptr = eve::as_aligned(patterns[pattern_idx].data(), N()); - wide pattern {pattern_ptr}; + const auto* raw_pattern_ptr = [](int idx) { + if constexpr ( sizeof(T) == 4 ) return pattern_8_elements_dwords_v[idx].data(); + else return pattern_8_elements_bytes_v [idx].data(); + }(pattern_idx); + + wide pattern {eve::as_aligned(raw_pattern_ptr, N())}; wide shuffled = [&] { if constexpr ( sizeof(T) == 4 ) return permvar8(v, pattern); @@ -309,13 +310,12 @@ namespace eve::detail } }(); - alignas(16) const auto patterns = pattern_8_elements(idxs_bytes); using pattern8 = typename wide::template rebind>; auto [lo_idx, lo_count, hi_idx, hi_count] = compress_store_swizzle_mask_num(mask); - auto lo_shuffle_ptr = eve::as_aligned(patterns[lo_idx].data(), eve::lane<8>); - auto hi_shuffle_ptr = eve::as_aligned(patterns[hi_idx].data(), eve::lane<8>); + auto lo_shuffle_ptr = eve::as_aligned(pattern_8_elements_bytes_v[lo_idx].data(), eve::lane<8>); + auto hi_shuffle_ptr = eve::as_aligned(pattern_8_elements_bytes_v[hi_idx].data(), eve::lane<8>); pattern8 lo_shuffle{lo_shuffle_ptr}; pattern8 hi_shuffle{hi_shuffle_ptr}; @@ -337,10 +337,8 @@ namespace eve::detail auto [lo_idx, lo_count, hi_idx, hi_count] = compress_store_swizzle_mask_num(mask); - const auto patterns = pattern_8_elements(idxs_bytes); - - pattern8 lo_shuffle{patterns[lo_idx].data()}; - pattern8 hi_shuffle{patterns[hi_idx].data()}; + pattern8 lo_shuffle{pattern_8_elements_bytes_v[lo_idx].data()}; + pattern8 hi_shuffle{pattern_8_elements_bytes_v[hi_idx].data()}; hi_shuffle |= pattern8{0x08}; // adjust higher idxs +8 T* res = as_raw_pointer(ptr); diff --git a/include/eve/detail/function/simd/x86/compress_store_swizzle_mask_num.hpp b/include/eve/detail/function/simd/x86/compress_store_swizzle_mask_num.hpp index bcc0220234..02e54f136e 100644 --- a/include/eve/detail/function/simd/x86/compress_store_swizzle_mask_num.hpp +++ b/include/eve/detail/function/simd/x86/compress_store_swizzle_mask_num.hpp @@ -13,6 +13,16 @@ namespace eve::detail { template EVE_FORCEINLINE std::pair + compress_store_swizzle_mask_num_partial_(EVE_SUPPORTS(sse2_), C c, logical>> mask) + requires (current_api < avx512) && (sizeof(T) == 2) + { + static_assert(top_bits>>>::bits_per_element == 2); + auto to_bytes = eve::convert(mask, eve::as>{}); + return compress_store_swizzle_mask_num_partial(c, to_bytes); + } + + template + EVE_FORCEINLINE std::pair compress_store_swizzle_mask_num_(EVE_SUPPORTS(sse2_), C c, logical>> mask) requires (current_api < avx512) && (sizeof(T) == 2) { diff --git a/include/eve/detail/function/simd/x86/friends.hpp b/include/eve/detail/function/simd/x86/friends.hpp index fa5365079c..2504bedace 100644 --- a/include/eve/detail/function/simd/x86/friends.hpp +++ b/include/eve/detail/function/simd/x86/friends.hpp @@ -22,7 +22,7 @@ namespace eve::detail EVE_FORCEINLINE auto self_logand( sse2_ const& , logical> v, logical> w ) noexcept - requires x86_abi> + requires( x86_abi> && x86_abi> ) { if constexpr( !use_is_wide_logical>::value ) { @@ -42,7 +42,7 @@ namespace eve::detail EVE_FORCEINLINE auto self_logor ( sse2_ const& , logical> v, logical> w ) noexcept - requires x86_abi> + requires( x86_abi> && x86_abi> ) { if constexpr( !use_is_wide_logical>::value ) { diff --git a/include/eve/detail/function/simd/x86/slide_left.hpp b/include/eve/detail/function/simd/x86/slide_left.hpp index f62e1234fa..7699390d00 100644 --- a/include/eve/detail/function/simd/x86/slide_left.hpp +++ b/include/eve/detail/function/simd/x86/slide_left.hpp @@ -132,7 +132,7 @@ namespace eve::detail template EVE_FORCEINLINE logical slide_left_(EVE_SUPPORTS(avx512_), logical v, index_t) noexcept - requires(Shift <= Wide::size() ) + requires(Shift <= Wide::size() ) && native_simd_for_abi { if constexpr(Shift == 0) return v; else if constexpr(Shift == Wide::size()) return logical{false}; diff --git a/include/eve/detail/function/simd/x86/slide_right.hpp b/include/eve/detail/function/simd/x86/slide_right.hpp index 9150bd153c..1439fd4624 100644 --- a/include/eve/detail/function/simd/x86/slide_right.hpp +++ b/include/eve/detail/function/simd/x86/slide_right.hpp @@ -12,9 +12,9 @@ namespace eve::detail { template - EVE_FORCEINLINE wide slide_right_ ( EVE_SUPPORTS(sse2_) - , wide v, index_t - ) noexcept + EVE_FORCEINLINE wide slide_right_( EVE_SUPPORTS(sse2_) + , wide v, index_t + ) noexcept requires(Shift <= N::value) && x86_abi> { if constexpr(Shift == 0) return v; @@ -270,7 +270,7 @@ namespace eve::detail template EVE_FORCEINLINE logical slide_right_(EVE_SUPPORTS(avx512_), logical v, index_t) noexcept - requires(Shift <= Wide::size() ) + requires(Shift <= Wide::size()) && native_simd_for_abi { if constexpr(Shift == 0) return v; else if constexpr(Shift == Wide::size()) return logical{false}; @@ -288,7 +288,7 @@ namespace eve::detail template EVE_FORCEINLINE logical slide_right_(EVE_SUPPORTS(avx512_), logical x, logical y, index_t) noexcept - requires(Shift <= Wide::size() ) + requires(Shift <= Wide::size()) && native_simd_for_abi { if constexpr ( Shift == 0 ) return y; else if constexpr ( Shift == Wide::size() ) return x; diff --git a/include/eve/detail/function/simd/x86/sum.hpp b/include/eve/detail/function/simd/x86/sum.hpp new file mode 100644 index 0000000000..5c0b2d9342 --- /dev/null +++ b/include/eve/detail/function/simd/x86/sum.hpp @@ -0,0 +1,112 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== +#pragma once + +#include +#include + +namespace eve::detail +{ + template + EVE_FORCEINLINE T sum_( EVE_SUPPORTS(sse2_), wide v) noexcept + requires x86_abi> + { + constexpr auto c = categorize>(); + + // We don't use AVX512 compound intrinsic _mm512_reduce_* as it generates worse code than us + // https://stackoverflow.com/questions/60108658/fastest-method-to-calculate-sum-of-all-packed-32-bit-integers-using-avx512-or-av + + if constexpr( N::value == 1 ) + { + return v.get(0); + } + // SSEx ------------------------------------------------------------------------------------ + // Most of those implementations derives from: + // https://stackoverflow.com/questions/6996764/fastest-way-to-do-horizontal-sse-vector-sum-or-other-reduction + else if constexpr( c == category::float64x2 ) + { + // Limit pressure on the shuffle port by using store port + double tmp; + _mm_storeh_pd(&tmp, v); + return _mm_cvtsd_f64(v)+tmp; + } + else if constexpr( c == category::float32x4 ) + { + // Clean up garbage if needed + if constexpr(N::value == 2) v = bit_cast( slide_right ( bit_cast(v,as>>()) + , index<2> + ) + , as(v) + ); + + if constexpr( current_api >= sse3 ) + { + // movehdup is faster than shuffle in SSE3 + __m128 bf = _mm_movehdup_ps(v); + __m128 sums = _mm_add_ps(v, bf); + return _mm_cvtss_f32(_mm_add_ss(sums, _mm_movehl_ps(bf, sums))); + } + else + { + // Save a movaps and 2-3 uops by using movehl instead of second shuffle + __m128 shuf = _mm_shuffle_ps(v, v, _MM_SHUFFLE(2, 3, 0, 1)); + __m128 sums = _mm_add_ps(v, shuf); + return _mm_cvtss_f32(_mm_add_ss(sums, _mm_movehl_ps(shuf, sums))); + } + } + else if constexpr( c == category::int32x4 || c == category::uint32x4 ) + { + // Clean up garbage if needed + if constexpr(N::value == 2) v = bit_cast( slide_right ( bit_cast(v,as>>()) + , index<2> + ) + , as(v) + ); + + constexpr auto shuf = _MM_SHUFFLE(1, 0, 3, 2); + __m128i sum64; + + if constexpr(current_api >= avx) sum64 = _mm_add_epi32(v, _mm_unpackhi_epi64(v,v)); + else sum64 = _mm_add_epi32(v, _mm_shuffle_epi32(v,shuf)); + + __m128i sum32 = _mm_add_epi32(sum64, _mm_shufflelo_epi16(sum64, shuf)); + return _mm_cvtsi128_si32(sum32); + } + else if constexpr( c == category::uint8x16 || c == category::int8x16 ) + { + // Clean up garbage if needed + if constexpr(N::value < 16) + { + v = bit_cast( slide_right ( bit_cast(v,as>>()) + , index<16-N::value> + ) + , as(v) + ); + } + + // https://stackoverflow.com/questions/36998538/fastest-way-to-horizontally-sum-sse-unsigned-byte-vector + __m128i vsum = _mm_sad_epu8(v, _mm_setzero_si128()); + auto r = _mm_cvtsi128_si32(vsum); + + r += _mm_extract_epi16(vsum, 4); + return r; + } + // AVX/AVX2 ----------------------------------------------------------------------------------- + else if constexpr( current_api >= avx ) + { + // Always better or similar than other approach + auto[l,h] = v.slice(); + return sum(l+h); + } + // else other types use common cases + else + { + return sum_(EVE_RETARGET(cpu_), v); + } + } +} diff --git a/include/eve/detail/function/sum.hpp b/include/eve/detail/function/sum.hpp new file mode 100644 index 0000000000..d9d758e670 --- /dev/null +++ b/include/eve/detail/function/sum.hpp @@ -0,0 +1,34 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== +#pragma once + +#include +#include + +namespace eve +{ + EVE_REGISTER_CALLABLE(sum_) + EVE_DECLARE_CALLABLE(sum_, sum) + + namespace detail + { + EVE_ALIAS_CALLABLE(sum_, sum); + } + + EVE_CALLABLE_API(sum_, sum) +} + +#include + +#if defined(EVE_INCLUDE_X86_HEADER) +# include +#endif + +#if defined(EVE_INCLUDE_ARM_HEADER) +# include +#endif diff --git a/include/eve/detail/kumi.hpp b/include/eve/detail/kumi.hpp index ceb9551f1c..a332b40d7f 100644 --- a/include/eve/detail/kumi.hpp +++ b/include/eve/detail/kumi.hpp @@ -799,12 +799,12 @@ namespace kumi namespace result { - template struct cat + template struct cat { - using type = decltype( kumi::cat( std::declval(), std::declval()... ) ); + using type = decltype( kumi::cat( std::declval()... ) ); }; - template using cat_t = typename cat::type; + template using cat_t = typename cat::type; } //================================================================================================ diff --git a/include/eve/eve.hpp b/include/eve/eve.hpp index 461c130fd8..852142fbaa 100644 --- a/include/eve/eve.hpp +++ b/include/eve/eve.hpp @@ -26,6 +26,12 @@ //! @godbolt{quick-start/constant.cpp} //================================================================================================== +//================================================================================================== +//! @defgroup arch Architecture related Types and Helpers +//! @brief This module defines the types and helpers functions to properly handle +//! architecture specific components +//================================================================================================== + //================================================================================================== //! @defgroup simd SIMD Types and Helpers //! @brief This module defines the types and helpers functions to properly handle SIMD registers diff --git a/include/eve/function/cos.hpp b/include/eve/function/cos.hpp index 1084be5a53..729303425f 100644 --- a/include/eve/function/cos.hpp +++ b/include/eve/function/cos.hpp @@ -50,7 +50,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium and eve::big decorators. + //! * eve::quarter_circle, eve::half_circle, eve::full_circle //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/cosd.hpp b/include/eve/function/cosd.hpp index b3d3d5cd0d..350757364e 100644 --- a/include/eve/function/cosd.hpp +++ b/include/eve/function/cosd.hpp @@ -50,7 +50,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium, eve::big + //! * eve::quarter_circle, eve::half_circle, eve::full_circle, //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/cospi.hpp b/include/eve/function/cospi.hpp index fd5140860c..0330ee96cf 100644 --- a/include/eve/function/cospi.hpp +++ b/include/eve/function/cospi.hpp @@ -51,7 +51,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium, eve::big + //! * eve::quarter_circle, eve::half_circle, eve::full_circle, //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/cot.hpp b/include/eve/function/cot.hpp index 5703b11d70..c41c78fefe 100644 --- a/include/eve/function/cot.hpp +++ b/include/eve/function/cot.hpp @@ -50,7 +50,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium, eve::big + //! * eve::quarter_circle, eve::half_circle, eve::full_circle, //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/cotd.hpp b/include/eve/function/cotd.hpp index 9d35ffef75..50aff6c04b 100644 --- a/include/eve/function/cotd.hpp +++ b/include/eve/function/cotd.hpp @@ -50,7 +50,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium, eve::big + //! * eve::quarter_circle, eve::half_circle, eve::full_circle, //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/cotpi.hpp b/include/eve/function/cotpi.hpp index cbe2c6fb3f..52f0360885 100644 --- a/include/eve/function/cotpi.hpp +++ b/include/eve/function/cotpi.hpp @@ -51,7 +51,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium, eve::big + //! * eve::quarter_circle, eve::half_circle, eve::full_circle, //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/csc.hpp b/include/eve/function/csc.hpp index a41eba36c4..4e8ff66b3c 100644 --- a/include/eve/function/csc.hpp +++ b/include/eve/function/csc.hpp @@ -50,7 +50,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium, eve::big + //! * eve::quarter_circle, eve::half_circle, eve::full_circle, //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/cscpi.hpp b/include/eve/function/cscpi.hpp index 15f63d85a0..d7770e6fd2 100644 --- a/include/eve/function/cscpi.hpp +++ b/include/eve/function/cscpi.hpp @@ -51,7 +51,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium, eve::big + //! * eve::quarter_circle, eve::half_circle, eve::full_circle, //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/reduce.hpp b/include/eve/function/reduce.hpp index a202600eb7..3e294e4e8d 100644 --- a/include/eve/function/reduce.hpp +++ b/include/eve/function/reduce.hpp @@ -30,6 +30,7 @@ namespace eve //! --- //! //! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + //! template auto operator()( T v ) const noexcept; //! template auto operator()( T v, F binary_op ) const noexcept; //! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //! @@ -38,6 +39,7 @@ namespace eve //! `v`: [SIMD value](@ref eve::simd_value) to reduce. //! //! `binary_op`: Binary callable object that perform a binary, associative and commutative operation. + //! If unspecified, the sum of all element of `v`is performed. //! //! **Return value** //! diff --git a/include/eve/function/sec.hpp b/include/eve/function/sec.hpp index 7c4e1de7ff..53d6a4d947 100644 --- a/include/eve/function/sec.hpp +++ b/include/eve/function/sec.hpp @@ -50,7 +50,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium, eve::big + //! * eve::quarter_circle, eve::half_circle, eve::full_circle, //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/secpi.hpp b/include/eve/function/secpi.hpp index 442ea80500..b850256803 100644 --- a/include/eve/function/secpi.hpp +++ b/include/eve/function/secpi.hpp @@ -51,7 +51,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium, eve::big + //! * eve::quarter_circle, eve::half_circle, eve::full_circle, //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/sin.hpp b/include/eve/function/sin.hpp index fc1da75a6b..cf7fa4aad3 100644 --- a/include/eve/function/sin.hpp +++ b/include/eve/function/sin.hpp @@ -50,7 +50,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium, eve::big + //! * eve::quarter_circle, eve::half_circle, eve::full_circle, //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/sincos.hpp b/include/eve/function/sincos.hpp index 8ef4bd3255..809a2c3be4 100644 --- a/include/eve/function/sincos.hpp +++ b/include/eve/function/sincos.hpp @@ -44,7 +44,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium, eve::big + //! * eve::quarter_circle, eve::half_circle, eve::full_circle, //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/sind.hpp b/include/eve/function/sind.hpp index 1104ce53f3..73f3b77099 100644 --- a/include/eve/function/sind.hpp +++ b/include/eve/function/sind.hpp @@ -50,7 +50,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium, eve::big + //! * eve::quarter_circle, eve::half_circle, eve::full_circle, //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/sindcosd.hpp b/include/eve/function/sindcosd.hpp index 815da4fdc8..1e61de7437 100644 --- a/include/eve/function/sindcosd.hpp +++ b/include/eve/function/sindcosd.hpp @@ -44,7 +44,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium, eve::big + //! * eve::quarter_circle, eve::half_circle, eve::full_circle, //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/sinpi.hpp b/include/eve/function/sinpi.hpp index 69b00cf8b1..617e460514 100644 --- a/include/eve/function/sinpi.hpp +++ b/include/eve/function/sinpi.hpp @@ -51,7 +51,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium, eve::big + //! * eve::quarter_circle, eve::half_circle, eve::full_circle, //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/sinpicospi.hpp b/include/eve/function/sinpicospi.hpp index 29a6c11676..a39cd412b6 100644 --- a/include/eve/function/sinpicospi.hpp +++ b/include/eve/function/sinpicospi.hpp @@ -44,7 +44,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium, eve::big + //! * eve::quarter_circle, eve::half_circle, eve::full_circle, //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/tan.hpp b/include/eve/function/tan.hpp index 24d08dd25b..daa7d8c8aa 100644 --- a/include/eve/function/tan.hpp +++ b/include/eve/function/tan.hpp @@ -50,7 +50,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium, eve::big + //! * eve::quarter_circle, eve::half_circle, eve::full_circle, //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/tanpi.hpp b/include/eve/function/tanpi.hpp index 50f5a80b57..635209c7aa 100644 --- a/include/eve/function/tanpi.hpp +++ b/include/eve/function/tanpi.hpp @@ -51,7 +51,7 @@ namespace eve //! //! #### Supported decorators //! - //! * eve::restricted, eve::small, eve::medium, eve::big + //! * eve::quarter_circle, eve::half_circle, eve::full_circle, //! //! provide a balance between speed and range limitation. //! diff --git a/include/eve/function/trigo_tags.hpp b/include/eve/function/trigo_tags.hpp index cd1abf41f7..57b32a7d9c 100644 --- a/include/eve/function/trigo_tags.hpp +++ b/include/eve/function/trigo_tags.hpp @@ -11,10 +11,15 @@ namespace eve { + // range limitation decorators objects for direct trigonometric functions + struct full_circle_ + { + template static constexpr auto combine( D const& ) noexcept =delete; + }; //================================================================================================ //! @addtogroup trigonometric //! @{ - //! @var restricted + //! @var quarter_circle //! //! @brief Higher-order @callable imbuing a limited range semantic onto other @callable{s}. //! @@ -32,24 +37,11 @@ namespace eve //! in \f$[-\pi/4, +\pi/4]\f$ only and Nan outside. (respectively \f$[-45, +45]\f$ if //! the input in in degrees, \f$[-0.25, +0.25]\f$ if the input in in \f$\pi\f$ multiples) //! - //! restricted is currently supported only by direct trigonometric object functions + //! quarter_circle is currently supported only by direct trigonometric object functions //! This decorator leads to the fastest algorithm at full precision. - //! - //! Beside the call with no decorator, direct trigonometric object functions have - //! three other decorator flavours eve::small, eve::medium, eve::big - //! - //! Without any decorator the call to a direct trigonometric object function - //! tests the input value to choose among the decorated ones the best fit. - //! Of course, with SIMD parameter the fit is the interval containing all the vector elements. - //! - //! The rationale to provide these flavours is that the more costly part of the computation of a - //! trigonometric function from the radian angle is the reduction of the angle to an angle - //! in \f$[-\pi/4, +\pi/4]\f$ and a quadrant value in\f$[0, 3]\f$. - //! //! @} //================================================================================================ - // rnge limitation decorator objects for direct trigonometric functions - struct restricted_ + struct quarter_circle_ { template static constexpr auto combine( D const& ) noexcept =delete; }; @@ -57,7 +49,7 @@ namespace eve //================================================================================================ //! @addtogroup trigonometric //! @{ - //! @var small + //! @var half_circle //! //! @brief Higher-order @callable imbuing a limited range standard semantic onto other @callable{s}. //! @@ -75,113 +67,72 @@ namespace eve //! (respectively \f$[-90, +90]\f$ if //! the input in in degrees, \f$[-0.5, +0.5]\f$ if the input in in \f$\pi\f$ multiples) //! - //! small is currently supported only by direct trigonometric object functions - //! - //! Beside the call with no decorator, direct trigonometric object functions have - //! three other decorator flavours eve::restricted, eve::medium, eve::big - //! - //! Without any decorator the call to a direct trigonometric object function - //! tests the input value to choose among the decorated ones the best fit. - //! Of course, with SIMD parameter the fit is the interval containing all the vector elements. - //! - //! The rationale to provide these flavours is that the more costly part of the computation of a - //! trigonometric function from the radian angle is the reduction of the angle to an angle - //! in \f$[-\pi/4, +\pi/4]\f$ and a quadrant value in\f$[0, 3]\f$. - //! //! @} //================================================================================================ - struct small_ + struct half_circle_ { template static constexpr auto combine( D const& ) noexcept =delete; }; - //================================================================================================ - //! @addtogroup trigonometric - //! @{ - //! @var medium - //! - //! @brief Higher-order @callable imbuing a limited range semantic onto other @callable{s}. - //! - //! #### Members Functions - //! - //! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} - //! auto operator()(eve::callable auto const& f ) const noexcept; - //! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - //! @param f - //! An instance of eve::callable - //! - //! @return - //! A @callable performing the same kind of operation, - //! but gives the correct result for \f$|x| < 536870912.0f\f$ (float) or \f$ |x| < 2.0e14 \f$ (double) - //! (\f$x\f$ in radian) and degrades gently for greater values. - //! (the bounds are to be converted if the input is in degrees or - //! \f$\pi\f$ multiples) - //! - //! medium is currently supported only by direct trigonometric object functions - //! - //! Beside the call with no decorator, direct trigonometric object functions have - //! three other decorator flavours eve::restricted, eve::small, eve::big - //! - //! Without any decorator the call to a direct trigonometric object function - //! tests the input value to choose among the decorated ones the best fit. - //! Of course, with SIMD parameter the fit is the interval containing all the vector elements. - //! - //! The rationale to provide these flavours is that the more costly part of the computation of a - //! trigonometric function from the radian angle is the reduction of the angle to an angle - //! in \f$[-\pi/4, +\pi/4]\f$ and a quadrant value in\f$[0, 3]\f$. - //! - //! @} - //================================================================================================ - struct medium_ + namespace detail { - template static constexpr auto combine( D const& ) noexcept =delete; - }; + // medium and big decorators are internal so in detail + //================================================================================================ + //! @brief Higher-order @callable imbuing a limited range semantic onto other @callable{s}. + //! + //! #### Members Functions + //! + //! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + //! auto operator()(eve::callable auto const& f ) const noexcept; + //! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //! @param f + //! An instance of eve::callable + //! + //! @return + //! A @callable performing the same kind of operation, + //! but gives the correct result for \f$|x| < 1.76858e+15f\f$ (float) or \f$ |x| < 2.0e14 \f$ (double) + //! (\f$x\f$ in radian) and degrades gently for greater values. + //! (the bounds are to be converted if the input is \f$\pi\f$ multiples, and in degrees the call is currently equivalent to big) + //! medium use a relaxed reduction scheme + //! + //! @} + //================================================================================================ + struct medium_ + { + template static constexpr auto combine( D const& ) noexcept =delete; + }; - //================================================================================================ - //! @addtogroup trigonometric - //! @{ - //! @var big - //! - //! @brief Higher-order @callable imbuing a direct computation semantic onto other @callable{s}. - //! - //! #### Members Functions - //! - //! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} - //! auto operator()(eve::callable auto const& f ) const noexcept; - //! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - //! @param f - //! An instance of eve::callable - //! - //! @return - //! A @callable performing the same kind of operation, - //! but gives the correct result in the whole range, always using the full reduction algorithm. - //! - //! big is currently supported only by direct trigonometric object functions - //! - //! Beside the call with no decorator, direct trigonometric object functions have - //! three other decorator flavours eve::restricted, eve::small, eve::medium - //! - //! Without any decorator the call to a direct trigonometric object function - //! tests the input value to choose among the decorated ones the best fit. - //! Of course, with SIMD parameter the fit is the interval containing all the vector elements. - //! - //! The rationale to provide these flavours is that the more costly part of the computation of a - //! trigonometric function from the radian angle is the reduction of the angle to an angle - //! in \f$[-\pi/4, +\pi/4]\f$ and a quadrant value in\f$[0, 3]\f$. - //! - //! @} - struct big_ - { - template static constexpr auto combine( D const& ) noexcept =delete; - }; + //================================================================================================ + //! @brief Higher-order @callable imbuing a direct computation semantic onto other @callable{s}. + //! + //! #### Members Functions + //! + //! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + //! auto operator()(eve::callable auto const& f ) const noexcept; + //! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //! @param f + //! An instance of eve::callable + //! + //! @return + //! A @callable performing the same kind of operation, + //! but gives the correct result in the whole range, always using the full reduction algorithm. + //! + //! @} + struct big_ + { + template static constexpr auto combine( D const& ) noexcept =delete; + }; - using restricted_type = decorated; - using small_type = decorated; - using medium_type = decorated; - using big_type = decorated; + using medium_type = decorated; + using big_type = decorated; + inline constexpr medium_type const medium = {}; + inline constexpr big_type const big = {}; + } + using full_circle_type = decorated; + using quarter_circle_type = decorated; + using half_circle_type = decorated; - inline constexpr restricted_type const restricted = {}; - inline constexpr small_type const small = {}; - inline constexpr medium_type const medium = {}; - inline constexpr big_type const big = {}; + inline constexpr full_circle_type const full_circle = {}; + inline constexpr quarter_circle_type const quarter_circle = {}; + inline constexpr half_circle_type const half_circle = {}; } diff --git a/include/eve/function/trigonometric.hpp b/include/eve/function/trigonometric.hpp index 4784df2249..5aa559b1a0 100644 --- a/include/eve/function/trigonometric.hpp +++ b/include/eve/function/trigonometric.hpp @@ -14,14 +14,13 @@ //! //! These functions provide scalar and SIMD version of trigonometric functions. //! -//! Moreover all trigonometric direct functions (except sinc and sinpic) provide 4 decorators flavours : +//! Moreover all trigonometric direct functions (except sinc and sinpic) provide 3 decorators flavours : //! //! The possible decorators are: //! -//! * restricted: the fastest but gives the correct result in \f$[-\pi/4, +\pi/4]\f$ only and Nan outside. -//! * small: gives the correct result for \f$[-\pi/2, +\pi/2]\f$ only and Nan outside. -//! * medium: gives the correct result for \f$|x| < 536870912.0f\f$ (float) or \f$ |x| < 2.0e14 \f$ (double) -//! * big: gives the correct result in the whole range. +//! * quarter_circle: the fastest but gives the correct result in \f$[-\pi/4, +\pi/4]\f$ only and Nan outside. +//! * half_circle: gives the correct result for \f$[-\pi/2, +\pi/2]\f$ only and Nan outside. +//! * full_circle: gives the correct result for \f$[-\pi, +\pi]\f$ only and Nan outside. //! //! Without any decorator the call tests the input value to choose among the decorated ones the best fit. //! Of course, with SIMD parameter the fit is the interval containing all the vector elements. @@ -32,9 +31,9 @@ //! a few hundreds of \f$\pi\f$ decimals: //! //! - if \f$x \in [-\pi/4, +\pi/4]\f$ there is no reduction to perform. -//! - if \f$x \in [-\pi, +\pi]\f$ the work is not a lot heavier. -//! - if \f$x\f$ in the medium range a simplified scheme can be used. -//! - for the whole range a quite heavy algorithm is to be used. +//! - if \f$x \in [-\pi/2, +\pi/2]\f$ or \f$[-\pi, +\pi]\f$ the work is not a lot heavier. +//! - for the whole range a quite heavy algorithm is to be used. However, internally an aleviated algorithm is +//! used if the inputs are all less than 1.76858e+15f for floats and 2.0e14 for doubles. //! //! **Convenience header:** @code{.cpp} #include @endcode //! diff --git a/include/eve/function/zip.hpp b/include/eve/function/zip.hpp new file mode 100644 index 0000000000..5308d3c602 --- /dev/null +++ b/include/eve/function/zip.hpp @@ -0,0 +1,96 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== +#pragma once + +#include +#include + +namespace eve +{ + //================================================================================================ + //! @addtogroup simd + //! @{ + //! @var zip + //! + //! @brief Callable object constructing a SoA value + //! + //! **Required header:** `#include ` + //! + //! #### Members Functions + //! + //! | Member | Effect | + //! |:-------------|:----------------------------------------------------------------| + //! | `operator()` | Construct a eve::wide of a given eve::product_type from values | + //! For scalar types returns a kumi::tuple or a product type + //! + //! --- + //! + //! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + //! template + //! auto operator()(Ws... ws) const noexcept; + //! + //! template + //! auto operator()(as t, Ws... ws) const noexcept; + //! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //! + //! @param + //! t: Type to construct. By default, it's equal to `kumi::tuple<``eve::element_type`::type>` + //! ws: Varidiac list of eve::simd_value to zip. + //! + //! **Return value** + //! + //! Construct an instance of `eve::wide``` by aggregating each element of each values `ws`. + //! + //! --- + //! + //! #### Example + //! + //! @godbolt{doc/core/zip.cpp} + //! + //! @} + //================================================================================================z + EVE_MAKE_CALLABLE(zip_, zip); +} + +namespace eve::detail +{ + template + EVE_FORCEINLINE auto zip_(EVE_SUPPORTS(cpu_), as const&, Vs... vs) + { + kumi::tuple ins{vs...}; + Target res; + + // These should inline. + auto ptrs = kumi::map([](auto& m) { return &m; }, res); + kumi::for_each( [](auto in, auto* ptr) { *ptr = in; }, ins, ptrs ); + + return res; + } + + template + EVE_FORCEINLINE auto zip_(EVE_SUPPORTS(cpu_), Vs... vs) + { + return kumi::tuple{vs...}; + } + + template + EVE_FORCEINLINE auto zip_(EVE_SUPPORTS(cpu_), as const&, W0 w0, Ws... ws) noexcept + requires ( (sizeof...(Ws) + 1 == std::tuple_size::value) + && (std::same_as,cardinal_t> && ... ) + ) + { + return wide>{w0,ws...}; + } + + template + EVE_FORCEINLINE auto zip_(EVE_SUPPORTS(cpu_), W0 w0, Ws... ws) noexcept + requires( (std::same_as,cardinal_t> && ... ) ) + { + return wide,eve::element_type_t...>, cardinal_t>{w0, ws...}; + } +} diff --git a/include/eve/memory/pointer.hpp b/include/eve/memory/pointer.hpp index 838ae30710..1bcf3b8fc8 100644 --- a/include/eve/memory/pointer.hpp +++ b/include/eve/memory/pointer.hpp @@ -43,6 +43,13 @@ namespace eve using type = typename T::cardinal; }; + template + requires requires { T::iterator_cardinal(); } + struct pointer_cardinal + { + using type = decltype(T::iterator_cardinal()); + }; + template struct pointer_cardinal> : expected_cardinal {}; diff --git a/include/eve/module/real/algorithm/function/regular/generic/reduce.hpp b/include/eve/module/real/algorithm/function/regular/generic/reduce.hpp index b33b108e4e..a9a91e4249 100644 --- a/include/eve/module/real/algorithm/function/regular/generic/reduce.hpp +++ b/include/eve/module/real/algorithm/function/regular/generic/reduce.hpp @@ -10,12 +10,15 @@ #include #include #include +#include #include #include #include #include #include #include +#include +#include #include #include @@ -26,7 +29,9 @@ namespace eve::detail template EVE_FORCEINLINE auto find_reduction( Callable f, Option = 0) noexcept { - if constexpr( std::same_as ) return eve::minimum; + if constexpr( std::same_as ) return eve::detail::sum; + else if constexpr( std::same_as ) return eve::detail::sum; + else if constexpr( std::same_as ) return eve::minimum; else if constexpr( std::same_as ) return eve::maximum; else if constexpr( std::same_as ) return eve::all; else if constexpr( std::same_as ) return eve::any; @@ -56,6 +61,18 @@ namespace eve::detail return op(v); } + template + EVE_FORCEINLINE auto reduce_( EVE_SUPPORTS(cpu_), splat_type const& s, wide v ) noexcept + { + return eve::detail::sum(s, v); + } + + template + EVE_FORCEINLINE auto reduce_(EVE_SUPPORTS(cpu_), wide v) noexcept + { + return eve::detail::sum(v); + } + template EVE_FORCEINLINE auto reduce_(EVE_SUPPORTS(cpu_), logical> v, Callable f) noexcept { diff --git a/include/eve/module/real/core/function/regular/generic/compress_store.hpp b/include/eve/module/real/core/function/regular/generic/compress_store.hpp index 2d6d5dd841..43f11c0f33 100644 --- a/include/eve/module/real/core/function/regular/generic/compress_store.hpp +++ b/include/eve/module/real/core/function/regular/generic/compress_store.hpp @@ -9,6 +9,8 @@ #include +#include + namespace eve::detail { template> Ptr> EVE_FORCEINLINE T* compress_store_(EVE_SUPPORTS(cpu_), - C c, - unsafe_type, - wide v, - logical> mask, - Ptr ptr) noexcept + C c, + unsafe_type, + wide v, + logical> mask, + Ptr ptr) noexcept { if (!C::is_complete) return safe(compress_store[c])(v, mask, ptr); else return compress_store_impl(c, v, mask, ptr); } + template< relative_conditional_expr C, decorator Decorator + , kumi::product_type T, real_scalar_value U, typename N + , data_source Ptr + > + EVE_FORCEINLINE + auto compress_store_(EVE_SUPPORTS(cpu_), + C c, + Decorator d, + wide vs, + logical> mask, + Ptr ptrs) noexcept + { + return kumi::map ( [&] (auto v, auto p) { + return compress_store(c, d, v, mask, p); + }, vs.storage(), ptrs); + } + + template>> Ptr> diff --git a/include/eve/module/real/core/function/regular/simd/arm/neon/convert.hpp b/include/eve/module/real/core/function/regular/simd/arm/neon/convert.hpp index 8cb0ba83f6..a69898ac4c 100644 --- a/include/eve/module/real/core/function/regular/simd/arm/neon/convert.hpp +++ b/include/eve/module/real/core/function/regular/simd/arm/neon/convert.hpp @@ -163,6 +163,7 @@ namespace eve::detail else if constexpr( catin == category::int8x8 ) { if constexpr( catou == category::int16x8 ) return vmovl_s8(v0); + else if constexpr( catou == category::int16x4 ) return vget_low_s16(vmovl_s8(v0)); else return convert_(EVE_RETARGET(simd_), v0, tgt); } //============================================================================================== @@ -170,7 +171,7 @@ namespace eve::detail else if constexpr( catin == category::uint8x8 ) { if constexpr( catou == category::uint16x8 ) return vmovl_u8(v0); - else if constexpr( catou == category::int8x8 ) return vreinterpret_s8_u8(v0); + else if constexpr( catou == category::uint16x4 ) return vget_low_u16(vmovl_u8(v0)); else return convert_(EVE_RETARGET(simd_), v0, tgt); } //============================================================================================== diff --git a/include/eve/module/real/core/function/regular/simd/x86/fracscale.hpp b/include/eve/module/real/core/function/regular/simd/x86/fracscale.hpp index 8d696e9737..3424174b09 100644 --- a/include/eve/module/real/core/function/regular/simd/x86/fracscale.hpp +++ b/include/eve/module/real/core/function/regular/simd/x86/fracscale.hpp @@ -16,12 +16,14 @@ namespace eve::detail { template EVE_FORCEINLINE wide fracscale_(EVE_SUPPORTS(avx512_), wide a0, int s) noexcept + requires x86_abi> { return to_nearest(fracscale)(a0, s); } template EVE_FORCEINLINE wide fracscale_(EVE_SUPPORTS(avx512_), wide a0, std::integral_constant s) noexcept + requires x86_abi> { return to_nearest(fracscale)(a0, s); } @@ -30,14 +32,18 @@ namespace eve::detail // Rouding case template EVE_FORCEINLINE wide fracscale_(EVE_SUPPORTS(avx512_), D const &, wide a0, int s) noexcept - requires(is_one_of(types {})) + requires( is_one_of(types {}) + && x86_abi> + ) { return D()(fracscale[true_(as(a0))])(a0, s); } template EVE_FORCEINLINE wide fracscale_(EVE_SUPPORTS(avx512_), D const &, wide a0, std::integral_constant s) noexcept - requires(is_one_of(types {})) + requires( is_one_of(types {}) + && x86_abi> + ) { return D()(fracscale[true_(as(a0))])(a0, s); } @@ -47,6 +53,7 @@ namespace eve::detail template EVE_FORCEINLINE wide fracscale_(EVE_SUPPORTS(avx512_), C const &cx, wide const &a0, std::integral_constant s) noexcept + requires x86_abi> { return to_nearest(fracscale[cx])(a0, s); } @@ -82,14 +89,15 @@ namespace eve::detail template EVE_FORCEINLINE wide fracscale_(EVE_SUPPORTS(avx512_), C const &cx, wide const &a0, int s) noexcept + requires x86_abi> { return to_nearest(fracscale[cx])(a0, s); } template EVE_FORCEINLINE - wide fracscale_(EVE_SUPPORTS(avx512_), C const &cx, D const &, wide const &a0 - , int s) noexcept + wide fracscale_(EVE_SUPPORTS(avx512_), C const &cx, D const &, wide const &a0, int s) noexcept + requires x86_abi> { constexpr auto c = categorize>(); @@ -117,6 +125,7 @@ namespace eve::detail EVE_FORCEINLINE wide fracscale_(EVE_SUPPORTS(avx512_), C const &cx, D const &, wide const &a0 , std::integral_constant ) noexcept + requires x86_abi> { constexpr auto c = categorize>(); diff --git a/include/eve/module/real/core/function/regular/simd/x86/is_unordered.hpp b/include/eve/module/real/core/function/regular/simd/x86/is_unordered.hpp index 4b39306187..9acd1504b8 100644 --- a/include/eve/module/real/core/function/regular/simd/x86/is_unordered.hpp +++ b/include/eve/module/real/core/function/regular/simd/x86/is_unordered.hpp @@ -11,6 +11,7 @@ #include #include #include +#include namespace eve::detail { diff --git a/include/eve/module/real/core/function/regular/simd/x86/rotl.hpp b/include/eve/module/real/core/function/regular/simd/x86/rotl.hpp index c213c5e943..c4e2cf5419 100644 --- a/include/eve/module/real/core/function/regular/simd/x86/rotl.hpp +++ b/include/eve/module/real/core/function/regular/simd/x86/rotl.hpp @@ -29,7 +29,7 @@ namespace eve::detail // avx512 implementation template EVE_FORCEINLINE wide rotl_(EVE_SUPPORTS(avx512_), wide a0, wide a1) noexcept - requires(sizeof(T) >= 4) + requires(sizeof(T) >= 4 && x86_abi>) { using r_t = wide; constexpr auto c = categorize>(); @@ -51,7 +51,7 @@ namespace eve::detail // masked avx512 implementation template EVE_FORCEINLINE wide rotl_(EVE_SUPPORTS(avx512_), C const &cx, wide a0, wide a1) noexcept - requires(sizeof(T) >= 4) + requires(sizeof(T) >= 4 && x86_abi>) { using r_t = wide; constexpr auto c = categorize>(); diff --git a/include/eve/module/real/core/function/regular/simd/x86/rotr.hpp b/include/eve/module/real/core/function/regular/simd/x86/rotr.hpp index 338457aa2a..1acfd61df2 100644 --- a/include/eve/module/real/core/function/regular/simd/x86/rotr.hpp +++ b/include/eve/module/real/core/function/regular/simd/x86/rotr.hpp @@ -17,7 +17,7 @@ namespace eve::detail // avx512 implementation template EVE_FORCEINLINE wide rotr_(EVE_SUPPORTS(avx512_), wide a0, wide a1) noexcept - requires(sizeof(T) >= 4) + requires(sizeof(T) >= 4 && x86_abi>) { using r_t = wide; constexpr auto c = categorize>(); @@ -39,7 +39,7 @@ namespace eve::detail // masked avx512 implementation template EVE_FORCEINLINE wide rotr_(EVE_SUPPORTS(avx512_), C const &cx, wide a0, wide a1) noexcept - requires(sizeof(T) >= 4) + requires(sizeof(T) >= 4 && x86_abi>) { using r_t = wide; constexpr auto c = categorize>(); diff --git a/include/eve/module/real/core/function/regular/simd/x86/roundscale.hpp b/include/eve/module/real/core/function/regular/simd/x86/roundscale.hpp index 44df4e38b4..66ff092944 100644 --- a/include/eve/module/real/core/function/regular/simd/x86/roundscale.hpp +++ b/include/eve/module/real/core/function/regular/simd/x86/roundscale.hpp @@ -16,12 +16,14 @@ namespace eve::detail { template EVE_FORCEINLINE wide roundscale_(EVE_SUPPORTS(avx512_), wide a0, int s) noexcept + requires x86_abi> { return to_nearest(roundscale)(a0, s); } template EVE_FORCEINLINE wide roundscale_(EVE_SUPPORTS(avx512_), wide a0, std::integral_constant s) noexcept + requires x86_abi> { return to_nearest(roundscale)(a0, s); } @@ -30,14 +32,18 @@ namespace eve::detail // Rouding case template EVE_FORCEINLINE wide roundscale_(EVE_SUPPORTS(avx512_), D const &, wide a0, int s) noexcept - requires(is_one_of(types {})) + requires( is_one_of(types {}) + && x86_abi> + ) { return D()(roundscale[true_(as(a0))])(a0, s); } template EVE_FORCEINLINE wide roundscale_(EVE_SUPPORTS(avx512_), D const &, wide a0, std::integral_constant s) noexcept - requires(is_one_of(types {})) + requires( is_one_of(types {}) + && x86_abi> + ) { return D()(roundscale[true_(as(a0))])(a0, s); } @@ -47,6 +53,7 @@ namespace eve::detail template EVE_FORCEINLINE wide roundscale_(EVE_SUPPORTS(avx512_), C const &cx, wide const &a0, std::integral_constant s) noexcept + requires x86_abi> { return to_nearest(roundscale[cx])(a0, s); } @@ -82,6 +89,7 @@ namespace eve::detail template EVE_FORCEINLINE wide roundscale_(EVE_SUPPORTS(avx512_), C const &cx, wide const &a0, int s) noexcept + requires x86_abi> { return to_nearest(roundscale[cx])(a0, s); } @@ -90,6 +98,7 @@ namespace eve::detail EVE_FORCEINLINE wide roundscale_(EVE_SUPPORTS(avx512_), C const &cx, D const &, wide const &a0 , int s) noexcept + requires x86_abi> { constexpr auto c = categorize>(); @@ -117,6 +126,7 @@ namespace eve::detail EVE_FORCEINLINE wide roundscale_(EVE_SUPPORTS(avx512_), C const &cx, D const &, wide const &a0 , std::integral_constant ) noexcept + requires x86_abi> { constexpr auto c = categorize>(); diff --git a/include/eve/module/real/math/detail/constant/rempio2_limits.hpp b/include/eve/module/real/math/detail/constant/rempio2_limits.hpp index a7d0ac4a0c..83db5bda4c 100644 --- a/include/eve/module/real/math/detail/constant/rempio2_limits.hpp +++ b/include/eve/module/real/math/detail/constant/rempio2_limits.hpp @@ -10,26 +10,33 @@ #include #include #include +#include #include #include #include +#include +#include #include #include namespace eve::detail { template - EVE_FORCEINLINE auto Rempio2_limit(D const &, as const &) noexcept + EVE_FORCEINLINE T Rempio2_limit(D const &, as const &) noexcept { if constexpr(floating_value) { - if constexpr(std::is_same_v) + if constexpr(std::is_same_v) { return pio_4(eve::as()); } - if constexpr(std::is_same_v) + else if constexpr(std::is_same_v) { - return Ieee_constant(); //120, 105414350 + return pio_2(eve::as()); + } + else if constexpr(std::is_same_v) + { + return T(pi(eve::as())); // this to ensure that converting from float to double will preserve belonging to the interval } else if constexpr(std::is_same_v) { diff --git a/include/eve/module/real/math/detail/generic/rempio2_kernel.hpp b/include/eve/module/real/math/detail/generic/rempio2_kernel.hpp index 3033ee1109..025a5a71db 100644 --- a/include/eve/module/real/math/detail/generic/rempio2_kernel.hpp +++ b/include/eve/module/real/math/detail/generic/rempio2_kernel.hpp @@ -46,12 +46,12 @@ namespace eve::detail { // up to 255*pi/4 ~200 template EVE_FORCEINLINE kumi::tuple - rempio2_small(T const &xx) noexcept + rempio2_half_circle(T const &xx) noexcept { using elt_t = element_type_t; if constexpr( std::is_same_v ) { - /* Reduce range of x to within PI/2 with abs (x) < 105414350. */ + /* Reduce range of x to within PI/4 with abs (x) < pi/2. */ static const double mp1 = -0x1.921FB58000000p0; /* -1.5707963407039642 */ static const double mp2 = 0x1.DDE973C000000p-27; /* 1.3909067564377153e-08 */ static const double mp3 = -0x1.CB3B399D747F2p-55; /* -4.9789962505147994e-17 */ @@ -117,7 +117,7 @@ namespace eve::detail auto dfa = float32((a - float64(fa)) + da); if( eve::any(fa >= pio_4(eve::as()) || fa < -pio_4(eve::as())) ) { - auto [n1, fa1, dfa1] = rempio2_small(fa); + auto [n1, fa1, dfa1] = rempio2_half_circle(fa); n = quadrant(n + n1); return kumi::make_tuple(n, fa1, dfa1); @@ -126,18 +126,53 @@ namespace eve::detail } } + template EVE_FORCEINLINE kumi::tuple + rempio2_full_circle(T const &x) noexcept + { + using elt_t = element_type_t; + using elt_t = element_type_t; + elt_t mp1, mp2, mp3; + /* Reduce range of x to within PI/4 with abs (x) < pi. */ + if constexpr(std::is_same_v) + { + mp1 = -0x1.921FB58000000p0; /* -1.5707963407039642 */ + mp2 = 0x1.DDE973C000000p-27; /* 1.3909067564377153e-08 */ + mp3 = -0x1.CB3B399D747F2p-55; /* -4.9789962505147994e-17 */ + auto xn = nearest(x * twoopi(eve::as())); + auto y = fma (xn, mp2, fma (xn, mp1, x)); + auto n = quadrant(xn); + auto da = xn * mp3; + auto a = y - da; + da = (y - a) - da; + return {n, a, da}; + } + else + { + mp1 = -0x1.921fb0p+00f; /* -1.57079601e+00 // pio2_high */ + mp2 = -0x1.5110b4p-22f; /* -3.13916473e-07 // pio2_mid */ + mp3 = -0x1.846988p-48f; /* -5.39030253e-15 // pio2_low */ + auto xn = nearest(x * twoopi(eve::as())); + auto y = fma (xn, mp3, fma (xn, mp2, fma (xn, mp1, x))); + return {quadrant(xn), y, zero(as(y))}; + } + } + template EVE_FORCEINLINE kumi::tuple - rempio2_big(T const &xx) noexcept + rempio2_big(T xx) noexcept { using elt_t = element_type_t; - if ( eve::all(xx < Rempio2_limit(restricted_type(), as(xx))) ) + if ( eve::all(xx < Rempio2_limit(quarter_circle_type(), as(xx))) ) { return {T(0), xx, T(0)}; } - auto xlerfl = (xx <= Rempio2_limit(small_type(), as())); + auto xlerfl = (xx <= Rempio2_limit(half_circle_type(), as())); if( eve::all(xlerfl) ) { - return rempio2_small(xx); + return rempio2_half_circle(xx); + } + if( eve::all(xx < Rempio2_limit(full_circle_type(), as(xx))) ) + { + return rempio2_full_circle(xx); } if ( eve::all(xx < Rempio2_limit(medium_type(), as(xx))) ) { @@ -264,9 +299,9 @@ namespace eve::detail s = b + bb; t = (b - s) + bb; s = if_else(is_not_finite(x), eve::allbits, s); - s = if_else(xx < Rempio2_limit(restricted_type(), as(xx)), xx, s); - t = if_else(xx < Rempio2_limit(restricted_type(), as(xx)), T(0), t); - auto q = if_else(xx < Rempio2_limit(restricted_type(), as(xx)),T(0), quadrant(sum)); + s = if_else(xx < Rempio2_limit(quarter_circle_type(), as(xx)), xx, s); + t = if_else(xx < Rempio2_limit(quarter_circle_type(), as(xx)), T(0), t); + auto q = if_else(xx < Rempio2_limit(quarter_circle_type(), as(xx)),T(0), quadrant(sum)); return {q, s, t}; } else if constexpr( std::is_same_v ) @@ -290,7 +325,7 @@ namespace eve::detail 0x2757d1f5, 0x57d1f534, 0xd1f534dd, 0xf534ddc0, 0x34ddc0db, 0xddc0db62, 0xc0db6295, 0xdb629599, 0x6295993c, 0x95993c43, 0x993c4390, 0x3c439041}; constexpr const double pi63 = 0x1.921FB54442D18p-62; /* 2PI * 2^-64. */ - auto [sn, sr, dsr] = rempio2_small(xx); + auto [sn, sr, dsr] = rempio2_full_circle(xx); auto xi = bit_cast(xx, as()); auto index = ((xi >> 26) & 15); auto arr0 = gather(eve::as_aligned(&__inv_pio4[0], cardinal_t{}), index); @@ -320,7 +355,8 @@ namespace eve::detail auto br = if_else(xlerfl, sr, sr1); auto dbr = if_else(xlerfl, dsr, dsr1); br = if_else(is_not_finite(xx), eve::allbits, br); - return {bn, br, dbr}; + auto test = xx <= Rempio2_limit(full_circle_type(), as(xx)); + return {if_else(test, sn, bn), if_else(test, sr, br), if_else(test, dsr, dbr)}; } } } diff --git a/include/eve/module/real/math/function/regular/generic/cos.hpp b/include/eve/module/real/math/function/regular/generic/cos.hpp index 08a9560b62..43613f9511 100644 --- a/include/eve/module/real/math/function/regular/generic/cos.hpp +++ b/include/eve/module/real/math/function/regular/generic/cos.hpp @@ -18,10 +18,12 @@ #include #include #include +#include #include #include #include #include +#include #include #include #include @@ -32,7 +34,7 @@ namespace eve::detail { template - EVE_FORCEINLINE constexpr auto cos_(EVE_SUPPORTS(cpu_), restricted_type const &, T a0) noexcept + EVE_FORCEINLINE constexpr auto cos_(EVE_SUPPORTS(cpu_), quarter_circle_type const &, T a0) noexcept { if constexpr( has_native_abi_v ) { @@ -46,11 +48,11 @@ namespace eve::detail return if_else(x2nlepi2_16, eve::allbits, cos_eval(x2)); } else - return apply_over(restricted(cos), a0); + return apply_over(quarter_circle(cos), a0); } template - EVE_FORCEINLINE constexpr auto cos_(EVE_SUPPORTS(cpu_), small_type const &, T a0) noexcept + EVE_FORCEINLINE constexpr auto cos_(EVE_SUPPORTS(cpu_), half_circle_type const &, T a0) noexcept { if constexpr( has_native_abi_v ) { @@ -91,25 +93,47 @@ namespace eve::detail auto se = bit_xor(sin_eval(z, xr), sign_bit); auto ce = cos_eval(z); auto z1 = if_else(n, se, ce); -// return z1; return if_else(xnlepio2, eve::allbits, z1); } } else - return apply_over(small(cos), a0); + return apply_over(half_circle(cos), a0); } - ///////////////////////////////////////////////////////////////////////////////////////////////// - // medium, big +// template +// EVE_FORCEINLINE constexpr auto cos_(EVE_SUPPORTS(cpu_), full_circle_type const &, T a0) noexcept +// { +// if constexpr( has_native_abi_v ) +// { +// auto x = abs(a0); +// auto xnlelim = is_not_less_equal(x, Rempio2_limit(full_circle_type(), as(a0))); +// if constexpr( scalar_value ) +// { +// if( xnlelim ) return nan(eve::as()); +// } +// else +// x = if_else(xnlelim, allbits, x); +// auto [fn, xr, dxr] = full_circle(rempio2)(x); +// return cos_finalize(fn, xr, dxr); +// } +// else +// return apply_over(full_circle(cos), a0); +// } + template EVE_FORCEINLINE constexpr auto cos_(EVE_SUPPORTS(cpu_), D const &, T a0) noexcept + requires(is_one_of(types {})) { if constexpr( has_native_abi_v ) { + auto x = abs(a0); + auto xnlelim = is_not_less_equal(x, Rempio2_limit(D(), as(a0))); if constexpr( scalar_value ) - if( is_not_finite(a0) ) - return nan(eve::as()); - auto x = abs(a0); + { + if( xnlelim ) return nan(eve::as()); + } + else + x = if_else(xnlelim, allbits, x); auto [fn, xr, dxr] = D()(rempio2)(x); return cos_finalize(fn, xr, dxr); } @@ -117,17 +141,20 @@ namespace eve::detail return apply_over(D()(cos), a0); } + template EVE_FORCEINLINE constexpr auto cos_(EVE_SUPPORTS(cpu_), T const &a0) noexcept { if constexpr( has_native_abi_v ) { auto x = abs(a0); - if( eve::all(x <= pio_4(eve::as(x))) ) - return restricted(cos)(a0); - else if( eve::all(x <= pio_2(eve::as(x))) ) - return small(cos)(a0); - else if( eve::all(x <= Rempio2_limit(medium_type(), as(a0))) ) + if( eve::all(x <= Rempio2_limit(quarter_circle_type(), as(a0)))) + return quarter_circle(cos)(a0); + else if( eve::all(x <= Rempio2_limit(half_circle_type(), as(a0)))) + return half_circle(cos)(a0); + else if( eve::all(x <= Rempio2_limit(full_circle_type(), as(a0)))) + return full_circle(cos)(a0); + else if( eve::all(x <= Rempio2_limit(medium_type(), as(a0)))) return medium(cos)(a0); else return big(cos)(a0); diff --git a/include/eve/module/real/math/function/regular/generic/cospi.hpp b/include/eve/module/real/math/function/regular/generic/cospi.hpp index dcd04bde59..842dd1cabb 100644 --- a/include/eve/module/real/math/function/regular/generic/cospi.hpp +++ b/include/eve/module/real/math/function/regular/generic/cospi.hpp @@ -27,20 +27,19 @@ namespace eve::detail { template - EVE_FORCEINLINE constexpr auto cospi_(EVE_SUPPORTS(cpu_), restricted_type const &, T x) noexcept + EVE_FORCEINLINE constexpr auto cospi_(EVE_SUPPORTS(cpu_), quarter_circle_type const &, T x) noexcept { if constexpr( has_native_abi_v ) { - return eve::restricted(cos)(x * pi(eve::as())); + return eve::quarter_circle(cos)(x * pi(eve::as())); } else - return apply_over(restricted(cospi), x); + return apply_over(quarter_circle(cospi), x); } - ///////////////////////////////////////////////////////////////////////////////////////////////// - // medium, big, small template EVE_FORCEINLINE constexpr auto cospi_(EVE_SUPPORTS(cpu_), D const &, T a0) noexcept + requires(is_one_of(types {})) { if constexpr( has_native_abi_v ) { @@ -81,7 +80,7 @@ namespace eve::detail { auto x = abs(a0); if( eve::all(eve::abs(x) <= T(0.25)) ) - return restricted(cospi)(x); + return quarter_circle(cospi)(x); else return big(cospi)(x); } diff --git a/include/eve/module/real/math/function/regular/generic/cot.hpp b/include/eve/module/real/math/function/regular/generic/cot.hpp index 720685bb7d..7aabdba781 100644 --- a/include/eve/module/real/math/function/regular/generic/cot.hpp +++ b/include/eve/module/real/math/function/regular/generic/cot.hpp @@ -38,7 +38,7 @@ namespace eve::detail { template - EVE_FORCEINLINE constexpr auto cot_(EVE_SUPPORTS(cpu_), restricted_type const &, T a0) noexcept + EVE_FORCEINLINE constexpr auto cot_(EVE_SUPPORTS(cpu_), quarter_circle_type const &, T a0) noexcept { if constexpr( has_native_abi_v ) { @@ -53,11 +53,11 @@ namespace eve::detail } } else - return apply_over(restricted(cot), a0); + return apply_over(quarter_circle(cot), a0); } template - EVE_FORCEINLINE constexpr auto cot_(EVE_SUPPORTS(cpu_), small_type const &, T a0) noexcept + EVE_FORCEINLINE constexpr auto cot_(EVE_SUPPORTS(cpu_), half_circle_type const &, T a0) noexcept { if constexpr( has_native_abi_v ) { @@ -100,24 +100,23 @@ namespace eve::detail } } else - return apply_over(small(cot), a0); + return apply_over(half_circle(cot), a0); } - ////////////////////////////////////////////////////////////////// - /// medium, big - // why the hell the typename can not be typename as in cos ? template EVE_FORCEINLINE constexpr T cot_(EVE_SUPPORTS(cpu_), D const &, T a0) noexcept + requires(is_one_of(types {})) { if constexpr( has_native_abi_v ) { + auto x = abs(a0); + auto xnlelim = is_not_less_equal(x, Rempio2_limit(D(), as(a0))); if constexpr( scalar_value ) - if( is_not_finite(a0) ) - return nan(eve::as()); - const T x = abs(a0); - if constexpr( scalar_value ) - if( x < eps(as()) ) - return rec(a0); + { + if( xnlelim ) return nan(eve::as()); + } + else + x = if_else(xnlelim, allbits, x); auto [fn, xr, dxr] = D()(rempio2)(x); return cot_finalize(a0, fn, xr, dxr); } @@ -131,11 +130,13 @@ namespace eve::detail if constexpr( has_native_abi_v ) { auto x = eve::abs(a0); - if( eve::all(x <= pio_4(eve::as(x))) ) - return restricted(cot)(a0); - else if( eve::all(x <= pio_2(eve::as(x))) ) - return small(cot)(a0); - else if( eve::all(x <= Rempio2_limit(eve::medium_type(), as(a0))) ) + if( eve::all(x <= Rempio2_limit(quarter_circle_type(), as(a0)))) + return quarter_circle(cot)(a0); + else if( eve::all(x <= Rempio2_limit(half_circle_type(), as(a0)))) + return half_circle(cot)(a0); + else if( eve::all(x <= Rempio2_limit(full_circle_type(), as(a0)))) + return full_circle(cot)(a0); + else if( eve::all(x <= Rempio2_limit(medium_type(), as(a0)))) return medium(cot)(a0); else return big(cot)(a0); diff --git a/include/eve/module/real/math/function/regular/generic/cotpi.hpp b/include/eve/module/real/math/function/regular/generic/cotpi.hpp index 200153bf8c..7ffd3f9aad 100644 --- a/include/eve/module/real/math/function/regular/generic/cotpi.hpp +++ b/include/eve/module/real/math/function/regular/generic/cotpi.hpp @@ -30,7 +30,7 @@ namespace eve::detail { template - EVE_FORCEINLINE constexpr auto cotpi_(EVE_SUPPORTS(cpu_), restricted_type const &, T a0) noexcept + EVE_FORCEINLINE constexpr auto cotpi_(EVE_SUPPORTS(cpu_), quarter_circle_type const &, T a0) noexcept { if constexpr( has_native_abi_v ) { @@ -53,13 +53,12 @@ namespace eve::detail } } else - return apply_over(restricted(cotpi), a0); + return apply_over(quarter_circle(cotpi), a0); } - ///////////////////////////////////////////////////////////////////////////////////////////////// - // medium, big, small template EVE_FORCEINLINE constexpr auto cotpi_(EVE_SUPPORTS(cpu_), D const &, T a0) noexcept + requires(is_one_of(types {})) { if constexpr( has_native_abi_v ) { @@ -89,7 +88,7 @@ namespace eve::detail { auto x = abs(a0); if( eve::all(eve::abs(x) <= T(0.25)) ) - return restricted(cotpi)(a0); + return quarter_circle(cotpi)(a0); else return big(cotpi)(a0); } diff --git a/include/eve/module/real/math/function/regular/generic/cscd.hpp b/include/eve/module/real/math/function/regular/generic/cscd.hpp index e599bb9b6d..6034ed70de 100644 --- a/include/eve/module/real/math/function/regular/generic/cscd.hpp +++ b/include/eve/module/real/math/function/regular/generic/cscd.hpp @@ -25,7 +25,7 @@ namespace eve::detail { if constexpr( has_native_abi_v ) { - if constexpr( std::is_same_v ) + if constexpr( std::is_same_v ) { return rec(D()(sind)(a0)); } diff --git a/include/eve/module/real/math/function/regular/generic/cscpi.hpp b/include/eve/module/real/math/function/regular/generic/cscpi.hpp index c35614afd3..457540f65b 100644 --- a/include/eve/module/real/math/function/regular/generic/cscpi.hpp +++ b/include/eve/module/real/math/function/regular/generic/cscpi.hpp @@ -29,18 +29,16 @@ namespace eve::detail { template EVE_FORCEINLINE constexpr auto - cscpi_(EVE_SUPPORTS(cpu_), restricted_type const &, T const &a0) noexcept + cscpi_(EVE_SUPPORTS(cpu_), quarter_circle_type const &, T const &a0) noexcept { if constexpr( has_native_abi_v ) { - return restricted(csc)(a0 * pi(eve::as())); + return quarter_circle(csc)(a0 * pi(eve::as())); } else - return apply_over(restricted(cscpi), a0); + return apply_over(quarter_circle(cscpi), a0); } - ///////////////////////////////////////////////////////////////////////////////////////////////// - // medium, big, small template EVE_FORCEINLINE constexpr auto cscpi_(EVE_SUPPORTS(cpu_), D const &, T a0) noexcept { @@ -71,7 +69,7 @@ namespace eve::detail if constexpr( has_native_abi_v ) { if( eve::all(eve::abs(a0) <= T(0.25)) ) - return restricted(cscpi)(a0); + return quarter_circle(cscpi)(a0); else return big(cscpi)(a0); } diff --git a/include/eve/module/real/math/function/regular/generic/rempio2.hpp b/include/eve/module/real/math/function/regular/generic/rempio2.hpp index 826a927209..c07d8f72b0 100644 --- a/include/eve/module/real/math/function/regular/generic/rempio2.hpp +++ b/include/eve/module/real/math/function/regular/generic/rempio2.hpp @@ -29,15 +29,19 @@ namespace eve::detail { if constexpr( has_native_abi_v ) { - if constexpr( std::is_same_v ) + if constexpr( std::is_same_v ) { - return rempio2_small(xx); + return rempio2_half_circle(xx); } - else if constexpr( std::is_same_v ) + if constexpr( std::is_same_v ) + { + return rempio2_full_circle(xx); + } + else if constexpr( std::is_same_v ) { return rempio2_medium(xx); } - else if constexpr( std::is_same_v ) + else if constexpr( std::is_same_v ) { return rempio2_big(xx); } @@ -55,10 +59,12 @@ namespace eve::detail { if constexpr( has_native_abi_v ) { - if( eve::all(x <= Rempio2_limit(restricted_type(), as(x))) ) + if( eve::all(x <= Rempio2_limit(quarter_circle_type(), as(x))) ) return {T(0), x, T(0)}; - else if( eve::all(x <= Rempio2_limit(small_type(), as(x))) ) - return small(rempio2)(x); + else if( eve::all(x <= Rempio2_limit(full_circle_type(), as(x))) ) + return full_circle(rempio2)(x); + else if( eve::all(x <= Rempio2_limit(half_circle_type(), as(x))) ) + return half_circle(rempio2)(x); else if( eve::all(x <= Rempio2_limit(medium_type(), as(x))) ) return medium(rempio2)(x); else diff --git a/include/eve/module/real/math/function/regular/generic/secd.hpp b/include/eve/module/real/math/function/regular/generic/secd.hpp index f6f9239cc4..a356ca3eca 100644 --- a/include/eve/module/real/math/function/regular/generic/secd.hpp +++ b/include/eve/module/real/math/function/regular/generic/secd.hpp @@ -25,7 +25,7 @@ namespace eve::detail { if constexpr(has_native_abi_v) { - if constexpr( std::is_same_v ) + if constexpr( std::is_same_v ) { return rec(D()(cosd)(a0)); } diff --git a/include/eve/module/real/math/function/regular/generic/secpi.hpp b/include/eve/module/real/math/function/regular/generic/secpi.hpp index 76ec912073..695cf8af85 100644 --- a/include/eve/module/real/math/function/regular/generic/secpi.hpp +++ b/include/eve/module/real/math/function/regular/generic/secpi.hpp @@ -27,7 +27,7 @@ namespace eve::detail { template - EVE_FORCEINLINE constexpr auto secpi_(EVE_SUPPORTS(cpu_), restricted_type const &, T a0) noexcept + EVE_FORCEINLINE constexpr auto secpi_(EVE_SUPPORTS(cpu_), quarter_circle_type const &, T a0) noexcept { if constexpr( has_native_abi_v ) { @@ -49,7 +49,7 @@ namespace eve::detail } else { - return apply_over(restricted(secpi), a0); + return apply_over(quarter_circle(secpi), a0); } } diff --git a/include/eve/module/real/math/function/regular/generic/sin.hpp b/include/eve/module/real/math/function/regular/generic/sin.hpp index e651625c1d..aadffd0fc0 100644 --- a/include/eve/module/real/math/function/regular/generic/sin.hpp +++ b/include/eve/module/real/math/function/regular/generic/sin.hpp @@ -33,7 +33,7 @@ namespace eve::detail { template - EVE_FORCEINLINE constexpr auto sin_(EVE_SUPPORTS(cpu_), restricted_type const &, T a0) noexcept + EVE_FORCEINLINE constexpr auto sin_(EVE_SUPPORTS(cpu_), quarter_circle_type const &, T a0) noexcept { if constexpr( has_native_abi_v ) { @@ -45,17 +45,15 @@ namespace eve::detail return nan(eve::as()); auto x = eve::abs(a0); auto r = bit_xor(detail::sin_eval(x2, x), bitofsign(a0)); - if constexpr( scalar_value ) - return r; - else - return if_else(is_not_less_equal(x2, pi2_16), eve::allbits, r); + if constexpr( scalar_value ) return r; + else return if_else(is_not_less_equal(x2, pi2_16), eve::allbits, r); } else - return apply_over(restricted(sin), a0); + return apply_over(quarter_circle(sin), a0); } template - EVE_FORCEINLINE constexpr auto sin_(EVE_SUPPORTS(cpu_), small_type const &, T a0) noexcept + EVE_FORCEINLINE constexpr auto sin_(EVE_SUPPORTS(cpu_), half_circle_type const &, T a0) noexcept { if constexpr( has_native_abi_v ) { @@ -98,20 +96,23 @@ namespace eve::detail } } else - return apply_over(small(sin), a0); + return apply_over(half_circle(sin), a0); } - ///////////////////////////////////////////////////////////////////////////////////////////////// - // medium, big template EVE_FORCEINLINE constexpr auto sin_(EVE_SUPPORTS(cpu_), D const &, T a0) noexcept + requires(is_one_of(types {})) { if constexpr( has_native_abi_v ) { + auto x = abs(a0); + auto xnlelim = is_not_less_equal(x, Rempio2_limit(D(), as(a0))); if constexpr( scalar_value ) - if( is_not_finite(a0) ) - return nan(eve::as()); - auto x = abs(a0); + { + if( xnlelim ) return nan(eve::as()); + } + else + x = if_else(xnlelim, allbits, x); auto [fn, xr, dxr] = D()(rempio2)(x); return sin_finalize(bitofsign(a0), fn, xr, dxr); } @@ -125,11 +126,13 @@ namespace eve::detail if constexpr( has_native_abi_v ) { auto x = abs(a0); - if( eve::all(x <= pio_4(eve::as(x))) ) - return restricted(sin)(a0); - else if( eve::all(x <= pio_2(eve::as(x))) ) - return small(sin)(a0); - else if( eve::all(x <= Rempio2_limit(medium_type(), as(a0))) ) + if( eve::all(x <= Rempio2_limit(quarter_circle_type(), as(a0)))) + return quarter_circle(sin)(a0); + else if( eve::all(x <= Rempio2_limit(half_circle_type(), as(a0)))) + return half_circle(sin)(a0); + else if( eve::all(x <= Rempio2_limit(full_circle_type(), as(a0)))) + return full_circle(sin)(a0); + else if( eve::all(x <= Rempio2_limit(medium_type(), as(a0)))) return medium(sin)(a0); else return big(sin)(a0); diff --git a/include/eve/module/real/math/function/regular/generic/sincos.hpp b/include/eve/module/real/math/function/regular/generic/sincos.hpp index c5c3817aae..d66f7485b2 100644 --- a/include/eve/module/real/math/function/regular/generic/sincos.hpp +++ b/include/eve/module/real/math/function/regular/generic/sincos.hpp @@ -38,7 +38,7 @@ namespace eve::detail { template EVE_FORCEINLINE constexpr kumi::tuple - sincos_(EVE_SUPPORTS(cpu_), restricted_type const &, T a0) noexcept + sincos_(EVE_SUPPORTS(cpu_), quarter_circle_type const &, T a0) noexcept { if constexpr( has_native_abi_v ) { @@ -58,12 +58,12 @@ namespace eve::detail } } else - return apply_over2(restricted(sincos), a0); + return apply_over2(quarter_circle(sincos), a0); } template EVE_FORCEINLINE constexpr kumi::tuple - sincos_(EVE_SUPPORTS(cpu_), small_type const &, T a0) noexcept + sincos_(EVE_SUPPORTS(cpu_), half_circle_type const &, T a0) noexcept { if constexpr(has_native_abi_v) { @@ -114,22 +114,25 @@ namespace eve::detail } else { - return apply_over2(small(sincos), a0); + return apply_over2(half_circle(sincos), a0); } } - ////////////////////////////////////////////////////////////////////////////// - /// big medium template EVE_FORCEINLINE constexpr kumi::tuple sincos_(EVE_SUPPORTS(cpu_), D const &, T a0) noexcept + requires(is_one_of(types {})) { if constexpr( has_native_abi_v ) { + auto x = abs(a0); + auto xnlelim = is_not_less_equal(x, Rempio2_limit(D(), as(a0))); if constexpr( scalar_value ) - if( is_not_finite(a0) ) - return {nan(eve::as()), nan(eve::as())}; - const T x = abs(a0); + { + if( xnlelim ) return {nan(eve::as()), nan(eve::as())}; + } + else + x = if_else(xnlelim, allbits, x); auto [fn, xr, dxr] = D()(rempio2)(x); auto [s, c] = sincos_finalize(bitofsign(a0), fn, xr, dxr); return {s, c}; @@ -146,18 +149,18 @@ namespace eve::detail if constexpr( has_native_abi_v ) { auto x = abs(a0); - if( eve::all(x <= pio_4(eve::as(x))) ) - return restricted(sincos)(a0); - else if( eve::all(x <= pio_2(eve::as(x))) ) - return small(sincos)(a0); - else if( eve::all(x <= Rempio2_limit(medium_type(), as(a0))) ) + if( eve::all(x <= Rempio2_limit(quarter_circle_type(), as(a0)))) + return quarter_circle(sincos)(a0); + else if( eve::all(x <= Rempio2_limit(half_circle_type(), as(a0)))) + return half_circle(sincos)(a0); + else if( eve::all(x <= Rempio2_limit(full_circle_type(), as(a0)))) + return full_circle(sincos)(a0); + else if( eve::all(x <= Rempio2_limit(medium_type(), as(a0)))) return medium(sincos)(a0); else return big(sincos)(a0); } else - { return apply_over2(sincos, a0); - } } } diff --git a/include/eve/module/real/math/function/regular/generic/sinpi.hpp b/include/eve/module/real/math/function/regular/generic/sinpi.hpp index 0bda2a3c10..7dc9c49f14 100644 --- a/include/eve/module/real/math/function/regular/generic/sinpi.hpp +++ b/include/eve/module/real/math/function/regular/generic/sinpi.hpp @@ -27,20 +27,19 @@ namespace eve::detail { template - EVE_FORCEINLINE constexpr auto sinpi_(EVE_SUPPORTS(cpu_), restricted_type const &, T x) noexcept + EVE_FORCEINLINE constexpr auto sinpi_(EVE_SUPPORTS(cpu_), quarter_circle_type const &, T x) noexcept { if constexpr( has_native_abi_v ) { - return eve::restricted(sin)(x * pi(eve::as())); + return eve::quarter_circle(sin)(x * pi(eve::as())); } else - return apply_over(restricted(sinpi), x); + return apply_over(quarter_circle(sinpi), x); } - ///////////////////////////////////////////////////////////////////////////////////////////////// - // medium, big, small template EVE_FORCEINLINE constexpr auto sinpi_(EVE_SUPPORTS(cpu_), D const &, T a0) noexcept + requires(is_one_of(types {})) { if constexpr( has_native_abi_v ) { @@ -72,7 +71,7 @@ namespace eve::detail { auto x = abs(a0); if( eve::all(eve::abs(x) <= T(0.25)) ) - return restricted(sinpi)(a0); + return quarter_circle(sinpi)(a0); else return big(sinpi)(a0); } diff --git a/include/eve/module/real/math/function/regular/generic/sinpicospi.hpp b/include/eve/module/real/math/function/regular/generic/sinpicospi.hpp index 3894bae7d8..3f9129ba5f 100644 --- a/include/eve/module/real/math/function/regular/generic/sinpicospi.hpp +++ b/include/eve/module/real/math/function/regular/generic/sinpicospi.hpp @@ -27,18 +27,16 @@ namespace eve::detail { template EVE_FORCEINLINE constexpr kumi::tuple - sinpicospi_(EVE_SUPPORTS(cpu_), restricted_type const &, T a0) noexcept + sinpicospi_(EVE_SUPPORTS(cpu_), quarter_circle_type const &, T a0) noexcept { if constexpr( has_native_abi_v ) { - return restricted(sincos)(a0 * pi(eve::as())); + return quarter_circle(sincos)(a0 * pi(eve::as())); } else - return apply_over2(restricted(sinpicospi), a0); + return apply_over2(quarter_circle(sinpicospi), a0); } - ////////////////////////////////////////////////////////////////////////////// - /// big medium small template EVE_FORCEINLINE constexpr kumi::tuple sinpicospi_(EVE_SUPPORTS(cpu_), D const &, T a0) noexcept @@ -78,7 +76,7 @@ namespace eve::detail { auto x = abs(a0); if( eve::all(x <= T(0.25)) ) - return restricted(sinpicospi)(a0); + return quarter_circle(sinpicospi)(a0); else return big(sinpicospi)(a0); } diff --git a/include/eve/module/real/math/function/regular/generic/tan.hpp b/include/eve/module/real/math/function/regular/generic/tan.hpp index 3ecc61ea8f..2a349515cb 100644 --- a/include/eve/module/real/math/function/regular/generic/tan.hpp +++ b/include/eve/module/real/math/function/regular/generic/tan.hpp @@ -33,7 +33,7 @@ namespace eve::detail { template - EVE_FORCEINLINE constexpr auto tan_(EVE_SUPPORTS(cpu_), restricted_type const &, T a0) noexcept + EVE_FORCEINLINE constexpr auto tan_(EVE_SUPPORTS(cpu_), quarter_circle_type const &, T a0) noexcept { if constexpr( has_native_abi_v ) { @@ -51,11 +51,11 @@ namespace eve::detail return tancot_eval(a0); } else - return apply_over(restricted(tan), a0); + return apply_over(quarter_circle(tan), a0); } template - EVE_FORCEINLINE constexpr auto tan_(EVE_SUPPORTS(cpu_), small_type const &, T a0) noexcept + EVE_FORCEINLINE constexpr auto tan_(EVE_SUPPORTS(cpu_), half_circle_type const &, T a0) noexcept { if constexpr( has_native_abi_v ) { @@ -97,24 +97,24 @@ namespace eve::detail } } else - return apply_over(small(tan), a0); + return apply_over(half_circle(tan), a0); } - ///////////////////////////////////////////////////////////////////////////////////////////////// - // medium, big template EVE_FORCEINLINE constexpr auto tan_(EVE_SUPPORTS(cpu_), D const &, T a0) noexcept + requires(is_one_of(types {})) { if constexpr( has_native_abi_v ) { + auto x = abs(a0); + auto xnlelim = is_not_less_equal(x, Rempio2_limit(D(), as(a0))); if constexpr( scalar_value ) { - if( is_not_finite(a0) ) - return nan(eve::as()); - if( is_eqz(a0) ) - return a0; + if( xnlelim ) return nan(eve::as()); + if( is_eqz(a0) ) return a0; } - auto x = abs(a0); + else + x = if_else(xnlelim, allbits, x); auto [fn, xr, dxr] = D()(rempio2)(x); return tan_finalize(a0, fn, xr, dxr); } @@ -128,11 +128,13 @@ namespace eve::detail if constexpr( has_native_abi_v ) { auto x = abs(a0); - if( eve::all(x <= pio_4(eve::as(x))) ) - return restricted(tan)(a0); - else if( eve::all(x <= pio_2(eve::as(x))) ) - return small(tan)(a0); - else if( eve::all(x <= Rempio2_limit(medium_type(), as(a0))) ) + if( eve::all(x <= Rempio2_limit(quarter_circle_type(), as(a0)))) + return quarter_circle(tan)(a0); + else if( eve::all(x <= Rempio2_limit(half_circle_type(), as(a0)))) + return half_circle(tan)(a0); + else if( eve::all(x <= Rempio2_limit(full_circle_type(), as(a0)))) + return full_circle(tan)(a0); + else if( eve::all(x <= Rempio2_limit(medium_type(), as(a0)))) return medium(tan)(a0); else return big(tan)(a0); diff --git a/include/eve/module/real/math/function/regular/generic/tanpi.hpp b/include/eve/module/real/math/function/regular/generic/tanpi.hpp index a60588e5ac..3a0dcf3c5a 100644 --- a/include/eve/module/real/math/function/regular/generic/tanpi.hpp +++ b/include/eve/module/real/math/function/regular/generic/tanpi.hpp @@ -28,20 +28,19 @@ namespace eve::detail { template - EVE_FORCEINLINE constexpr auto tanpi_(EVE_SUPPORTS(cpu_), restricted_type const &, T x) noexcept + EVE_FORCEINLINE constexpr auto tanpi_(EVE_SUPPORTS(cpu_), quarter_circle_type const &, T x) noexcept { if constexpr( has_native_abi_v ) { - return eve::restricted(tan)(x * pi(eve::as())); + return eve::quarter_circle(tan)(x * pi(eve::as())); } else - return apply_over(restricted(tanpi), x); + return apply_over(quarter_circle(tanpi), x); } - ///////////////////////////////////////////////////////////////////////////////////////////////// - // medium, big, small template EVE_FORCEINLINE constexpr auto tanpi_(EVE_SUPPORTS(cpu_), D const &, T a0) noexcept + requires(is_one_of(types {})) { if constexpr( has_native_abi_v ) { @@ -74,7 +73,7 @@ namespace eve::detail { auto x = abs(a0); if( eve::all(eve::abs(x) <= T(0.25)) ) - return restricted(tanpi)(a0); + return quarter_circle(tanpi)(a0); else return big(tanpi)(a0); } diff --git a/include/eve/module/real/proba/function/regular/generic/cauchy_distribution.hpp b/include/eve/module/real/proba/function/regular/generic/cauchy_distribution.hpp index de71833f57..734e8a020e 100644 --- a/include/eve/module/real/proba/function/regular/generic/cauchy_distribution.hpp +++ b/include/eve/module/real/proba/function/regular/generic/cauchy_distribution.hpp @@ -221,7 +221,7 @@ namespace eve else tmp = tanpi(x-half(as(x))); - // as x is restricted to [0, 1] limits values at 0 and 1 are properly defined + // as x is quarter_circle to [0, 1] limits values at 0 and 1 are properly defined tmp = if_else(is_eqz(x), minf(as(x)), tmp); tmp = if_else(x == one(as(x)), inf(as(x)), tmp); return if_else(is_ltz(x) || x > one(as(x)), allbits, tmp); diff --git a/include/eve/module/real/proba/function/regular/generic/normal_distribution.hpp b/include/eve/module/real/proba/function/regular/generic/normal_distribution.hpp index 754f002e6d..bb0da0e033 100644 --- a/include/eve/module/real/proba/function/regular/generic/normal_distribution.hpp +++ b/include/eve/module/real/proba/function/regular/generic/normal_distribution.hpp @@ -52,7 +52,7 @@ namespace eve auto x1 = detail::urg01(gen, as()); auto x2 = detail::urg01(gen, as()); auto rho = eve::sqrt(-2*eve::log1p(-x1)); - return rho*small(cospi)(2*x2); + return rho*half_circle(cospi)(2*x2); } } diff --git a/include/eve/module/real/special/function/regular/generic/digamma.hpp b/include/eve/module/real/special/function/regular/generic/digamma.hpp index 605b538a9f..74e1af52f3 100644 --- a/include/eve/module/real/special/function/regular/generic/digamma.hpp +++ b/include/eve/module/real/special/function/regular/generic/digamma.hpp @@ -39,7 +39,7 @@ namespace eve::detail if constexpr( has_native_abi_v ) { auto dlarge = (std::is_same_v) ? 20: 10; - auto br_1_2 = [](auto x, auto ) + auto br_1_2 = [](auto x, auto result) { // computes digamma(a0)/a0 for double or double vectors // xx is sqr(a0) and 0 <= abs(a0) <= 3.25 @@ -72,7 +72,7 @@ namespace eve::detail 0x3f616fc90a0a1908ll, 0xbea2b84f95bbf448ll >(x); - return fma(g, y, g * r); + return fma(g, y, g * r)+result; } else { @@ -94,31 +94,31 @@ namespace eve::detail 0x3b0b7e48, 0xb515c27d >(x); - return fma(g, y, g * r); + return fma(g, y, g * r)+result; } }; - auto br_large = [](auto x, auto ) + auto br_large = [](auto x, auto result) { + //if we're above the lower-limit for the asymptotic expansion then use it: + x = dec(x); + result += log(x); + result += rec(x+x); + auto z = rec(sqr(x)); + T y(0); + if constexpr(std::is_same_v < elt_t, double>) { - //if we're above the lower-limit for the asymptotic expansion then use it: - x = dec(x); - auto result = log(x); - result += rec(x+x); - auto z = rec(sqr(x)); - T y(0); - if constexpr(std::is_same_v < elt_t, double>) - { - y = horn (z); - } - else - { - y = horn(z); - } - result -= z * y; - return result; - }; + y = horn (z); + } + else + { + y = horn(z); + } + result -= z * y; + return result; + }; + if constexpr(scalar_value) { auto result = zero(as(x)); @@ -143,7 +143,7 @@ namespace eve::detail } if(x >= dlarge) { // If we're above the lower-limit for the asymptotic expansion then use it: - return br_large(x, result)+result; + return br_large(x, result); } // If x > 2 reduce to the interval [1,2]: while(x > 2) @@ -157,7 +157,7 @@ namespace eve::detail result = -1/x; x += 1; } - return br_1_2(x, result)+result; + return br_1_2(x, result); } else // simd { @@ -179,28 +179,29 @@ namespace eve::detail auto r = nan(as()); //nan case treated here if( eve::any(notdone) ) { - notdone = next_interval(br_large, notdone, x > dlarge, r, x, result); + notdone = next_interval(br_large, notdone, x >= dlarge, r, x, result); if( eve::any(notdone) ) { // If x > 2 reduce to the interval [1,2]: x = if_else(x > dlarge, one, x); - auto cond = x > 2; + auto cond = x > T(2); while( eve::any(cond) ) { x = dec[cond](x); result = add[cond](result,rec(x)); - cond = x > 2; + cond = x > T(2); } - cond = x < 1; - if( eve::any(cond) ) // back one step + cond = x < T(1); + while( eve::any(cond) ) { - result = add[cond](-rec(x), result); + result = add[cond]( result, -rec(x)); x = inc[cond](x); + cond = x < T(1); } notdone = last_interval(br_1_2, notdone, r, x, result); } } - return r+result; + return r; } } else diff --git a/include/eve/views/convert.hpp b/include/eve/views/convert.hpp new file mode 100644 index 0000000000..2c4cecd895 --- /dev/null +++ b/include/eve/views/convert.hpp @@ -0,0 +1,32 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== +#pragma once + +#include + +namespace eve::views +{ + //================================================================================================ + //! @addtogroup eve.views + //! @{ + //! @var convert + //! @brief a shorthand for `eve::algo::views::convert`. + //! + //! @struct converting_iterator + //! @brief a shorthand for `eve::algo::views::converting_iterator` + //! + //! @struct converting_range + //! @brief a shorthand for `eve::algo::views::converting_range` + //! }@ + //================================================================================================ + + + using eve::algo::views::convert; + using eve::algo::views::converting_iterator; + using eve::algo::views::converting_range; +} diff --git a/include/eve/views/zip.hpp b/include/eve/views/zip.hpp new file mode 100644 index 0000000000..cfa67a0218 --- /dev/null +++ b/include/eve/views/zip.hpp @@ -0,0 +1,31 @@ +//================================================================================================== +/* + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +*/ +//================================================================================================== +#pragma once + +#include + +namespace eve::views +{ + //================================================================================================ + //! @addtogroup eve.views + //! @{ + //! @var zip + //! @brief a shorthand for `eve::algo::views::zip`. + //! + //! @struct zip_iterator + //! @brief a shorthand for `eve::algo::views::zip_iterator` + //! + //! @struct zip_range + //! @brief a shorthand for `eve::algo::views::zip_range` + //! }@ + //================================================================================================ + + using eve::algo::views::zip; + using eve::algo::views::zip_iterator; + using eve::algo::views::zip_range; +} diff --git a/test/doc/core/CMakeLists.txt b/test/doc/core/CMakeLists.txt index 85ba39749b..1a41570658 100644 --- a/test/doc/core/CMakeLists.txt +++ b/test/doc/core/CMakeLists.txt @@ -384,3 +384,4 @@ make_unit( "doc.core" valmax.cpp ) make_unit( "doc.core" valmin.cpp ) make_unit( "doc.core" zero.cpp ) make_unit( "doc.core" zeta.cpp ) +make_unit( "doc.core" zip.cpp ) diff --git a/test/doc/core/zip.cpp b/test/doc/core/zip.cpp new file mode 100644 index 0000000000..9399a2ee00 --- /dev/null +++ b/test/doc/core/zip.cpp @@ -0,0 +1,32 @@ +#include +#include +#include +#include + +struct data_block : eve::struct_support +{ + friend std::ostream& operator<<(std::ostream& os, data_block const& d) + { + return os << "{" << get<0>(d) << " x " << get<1>(d) << " - " << get<2>(d) << "}"; + } +}; + +int main() +{ + using card_t = eve::cardinal_t>; + eve::wide wd = [](auto i, auto) { return 1.25 * (i+1); }; + + eve::wide wf = [](auto i, auto) { return 1.f/(1+i); }; + eve::wide wi = [](auto i, auto) { return i+1; }; + + std::cout << "---- values" << std::endl + << "wf = " << wf << std::endl + << "wi = " << wi << std::endl + << "wd = " << wd << std::endl << std::endl; + std::cout << "---- zip as tuple" << std::endl + << "-> zip(wf,wi,wd) = " << eve::zip(wf,wi,wd) << std::endl << std::endl; + std::cout << "---- zip as UDT" << std::endl + << "-> zip(wf,wi,wd) = " << eve::zip(eve::as(), wf,wi,wd) << std::endl; + + return 0; +} diff --git a/test/exhaustive/module/real/math/cos/big/cos.hpp b/test/exhaustive/module/real/math/cos/big/cos.hpp deleted file mode 100644 index 0d6ca7a286..0000000000 --- a/test/exhaustive/module/real/math/cos/big/cos.hpp +++ /dev/null @@ -1,23 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on cos", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto std_cos = tts::vectorize( [](auto e) { return std::cos(e); } ); - - eve::exhaustive_producer p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_cos, eve::big(eve::cos)); -} diff --git a/test/exhaustive/module/real/math/cos/small/cos.hpp b/test/exhaustive/module/real/math/cos/half_circle/cos.hpp similarity index 92% rename from test/exhaustive/module/real/math/cos/small/cos.hpp rename to test/exhaustive/module/real/math/cos/half_circle/cos.hpp index 5730dbee20..609adcb848 100644 --- a/test/exhaustive/module/real/math/cos/small/cos.hpp +++ b/test/exhaustive/module/real/math/cos/half_circle/cos.hpp @@ -18,5 +18,5 @@ TTS_CASE_TPL("wide random check on cos", EVE_TYPE) auto std_cos = tts::vectorize( [](auto e) { return std::cos(double(e)); } ); eve::exhaustive_producer p(-eve::pio_2(eve::as()), eve::pio_2(eve::as())); - TTS_RANGE_CHECK(p, std_cos, eve::small(eve::cos)); + TTS_RANGE_CHECK(p, std_cos, eve::half_circle(eve::cos)); } diff --git a/test/exhaustive/module/real/math/cos/medium/cos.hpp b/test/exhaustive/module/real/math/cos/medium/cos.hpp deleted file mode 100644 index 169aaa9723..0000000000 --- a/test/exhaustive/module/real/math/cos/medium/cos.hpp +++ /dev/null @@ -1,23 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on cos", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto std_cos = tts::vectorize( [](auto e) { return std::cos(double(e)); } ); - - auto l = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - eve::exhaustive_producer p(-l, l); - TTS_ULP_RANGE_CHECK(p, std_cos, eve::medium(eve::cos), 0.5); -} diff --git a/test/exhaustive/module/real/math/cos/restricted/cos.hpp b/test/exhaustive/module/real/math/cos/quarter_circle/cos.hpp similarity index 92% rename from test/exhaustive/module/real/math/cos/restricted/cos.hpp rename to test/exhaustive/module/real/math/cos/quarter_circle/cos.hpp index 52abef147b..2844d2c559 100644 --- a/test/exhaustive/module/real/math/cos/restricted/cos.hpp +++ b/test/exhaustive/module/real/math/cos/quarter_circle/cos.hpp @@ -18,5 +18,5 @@ TTS_CASE_TPL("wide random check on cos", EVE_TYPE) auto std_cos = tts::vectorize( [](auto e) { return std::cos(e); } ); eve::exhaustive_producer p(-eve::pio_4(eve::as()), eve::pio_4(eve::as())); - TTS_RANGE_CHECK(p, std_cos, eve::restricted(eve::cos)); + TTS_RANGE_CHECK(p, std_cos, eve::quarter_circle(eve::cos)); } diff --git a/test/exhaustive/module/real/math/cospi/big/cospi.hpp b/test/exhaustive/module/real/math/cospi/big/cospi.hpp deleted file mode 100644 index e986d90fc4..0000000000 --- a/test/exhaustive/module/real/math/cospi/big/cospi.hpp +++ /dev/null @@ -1,35 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include -#include - -TTS_CASE_TPL("wide random check on cospi", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto my_stdcospi = tts::vectorize([](auto x){return boost::math::cos_pi(x); }); - - eve::exhaustive_producer p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, my_stdcospi, eve::big(eve::cospi)); -} - - -// #include -// TTS_CASE_TPL("wide random check on cospi", EVE_TYPE) -// { -// ::crlibm_init(); -// auto my_stdcospi = tts::vectorize([](v_t x){return v_t(::cospi_rn(x)); }); -// eve::exhaustive_producer p(eve::valmin(eve::as()), eve::valmax(eve::as())); -// TTS_RANGE_CHECK(p, my_stdcospi, eve::big(eve::cospi)); -// } diff --git a/test/exhaustive/module/real/math/cospi/medium/cospi.hpp b/test/exhaustive/module/real/math/cospi/medium/cospi.hpp deleted file mode 100644 index d73427ec95..0000000000 --- a/test/exhaustive/module/real/math/cospi/medium/cospi.hpp +++ /dev/null @@ -1,24 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include -#include - -TTS_CASE_TPL("wide random check on cospi", EVE_TYPE) -{ - using v_t = eve::element_type_t; - - auto my_stdcospi = tts::vectorize([](auto x){return boost::math::cos_pi(x); }); - - eve::exhaustive_producer p(v_t(-100000.0), v_t(100000.0)); - TTS_RANGE_CHECK(p, my_stdcospi, eve::medium(eve::cospi)); -} diff --git a/test/exhaustive/module/real/math/cospi/restricted/cospi.hpp b/test/exhaustive/module/real/math/cospi/quarter_circle/cospi.hpp similarity index 91% rename from test/exhaustive/module/real/math/cospi/restricted/cospi.hpp rename to test/exhaustive/module/real/math/cospi/quarter_circle/cospi.hpp index e887f3f22b..4f7fba3f3f 100644 --- a/test/exhaustive/module/real/math/cospi/restricted/cospi.hpp +++ b/test/exhaustive/module/real/math/cospi/quarter_circle/cospi.hpp @@ -18,5 +18,5 @@ TTS_CASE_TPL("wide random check on cospi", EVE_TYPE) auto my_stdcospi = tts::vectorize([](auto x){return boost::math::cos_pi(x); }); eve::exhaustive_producer p(-0.25, 0.25); - TTS_RANGE_CHECK(p, my_stdcospi, eve::restricted(eve::cospi)); + TTS_RANGE_CHECK(p, my_stdcospi, eve::quarter_circle(eve::cospi)); } diff --git a/test/exhaustive/module/real/math/cot/big/cot.hpp b/test/exhaustive/module/real/math/cot/big/cot.hpp deleted file mode 100644 index ef74367a12..0000000000 --- a/test/exhaustive/module/real/math/cot/big/cot.hpp +++ /dev/null @@ -1,32 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on cot", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto std_cot = tts::vectorize( [](auto e) { return 1/std::tan(double(e)); } ); - - if constexpr(eve::platform::supports_denormals) - { - eve::exhaustive_producer p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_cot, eve::big(eve::cot)); - } - else - { - eve::exhaustive_producer p(eve::smallestposval(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_cot, eve::big(eve::cot)); - } -} diff --git a/test/exhaustive/module/real/math/cot/small/cot.hpp b/test/exhaustive/module/real/math/cot/half_circle/cot.hpp similarity index 92% rename from test/exhaustive/module/real/math/cot/small/cot.hpp rename to test/exhaustive/module/real/math/cot/half_circle/cot.hpp index 6a0aab374c..5ef30a3ec4 100644 --- a/test/exhaustive/module/real/math/cot/small/cot.hpp +++ b/test/exhaustive/module/real/math/cot/half_circle/cot.hpp @@ -18,5 +18,5 @@ TTS_CASE_TPL("wide random check on cot", EVE_TYPE) auto std_cot = tts::vectorize( [](auto e) { return eve::rec(std::tan(double(e))); } ); eve::exhaustive_producer p(-eve::pio_2(eve::as()), eve::pio_2(eve::as())); - TTS_RANGE_CHECK(p, std_cot, eve::small(eve::cot)); + TTS_RANGE_CHECK(p, std_cot, eve::half_circle(eve::cot)); } diff --git a/test/exhaustive/module/real/math/cot/medium/cot.hpp b/test/exhaustive/module/real/math/cot/medium/cot.hpp deleted file mode 100644 index fa701c48a2..0000000000 --- a/test/exhaustive/module/real/math/cot/medium/cot.hpp +++ /dev/null @@ -1,34 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on cot", EVE_TYPE) -{ - using v_t = eve::element_type_t; - - auto std_cot = tts::vectorize( [](auto e) { return 1/std::tan(double(e)); } ); - auto l = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - - if constexpr(eve::platform::supports_denormals) - { - eve::exhaustive_producer p(-l, l); - TTS_RANGE_CHECK(p, std_cot, eve::medium(eve::cot)); - } - else - { - eve::exhaustive_producer p(eve::smallestposval(eve::as()), l); - TTS_RANGE_CHECK(p, std_cot, eve::medium(eve::cot)); - } -} diff --git a/test/exhaustive/module/real/math/cot/restricted/cot.hpp b/test/exhaustive/module/real/math/cot/quarter_circle/cot.hpp similarity index 88% rename from test/exhaustive/module/real/math/cot/restricted/cot.hpp rename to test/exhaustive/module/real/math/cot/quarter_circle/cot.hpp index ef433588b7..5f86f4e581 100644 --- a/test/exhaustive/module/real/math/cot/restricted/cot.hpp +++ b/test/exhaustive/module/real/math/cot/quarter_circle/cot.hpp @@ -21,11 +21,11 @@ TTS_CASE_TPL("wide random check on cot", EVE_TYPE) if constexpr(eve::platform::supports_denormals) { eve::exhaustive_producer p(-eve::pio_4(eve::as()), eve::pio_4(eve::as())); - TTS_RANGE_CHECK(p, std_cot, eve::restricted(eve::cot)); + TTS_RANGE_CHECK(p, std_cot, eve::quarter_circle(eve::cot)); } else { eve::exhaustive_producer p(eve::smallestposval(eve::as()), eve::pio_4(eve::as())); - TTS_RANGE_CHECK(p, std_cot, eve::restricted(eve::cot)); + TTS_RANGE_CHECK(p, std_cot, eve::quarter_circle(eve::cot)); } } diff --git a/test/exhaustive/module/real/math/cotpi/big/cotpi.hpp b/test/exhaustive/module/real/math/cotpi/big/cotpi.hpp deleted file mode 100644 index 52d5bc6e99..0000000000 --- a/test/exhaustive/module/real/math/cotpi/big/cotpi.hpp +++ /dev/null @@ -1,32 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on cotpi", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto my_stdcotpi = tts::vectorize ( [](auto x) - { return (x == 0 || !eve::is_flint(x)) - ? boost::math::cos_pi(x)/boost::math::sin_pi(x) - : eve::nan(); - } - ); - - eve::exhaustive_producer p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, my_stdcotpi, eve::big(eve::cotpi)); -} diff --git a/test/exhaustive/module/real/math/cotpi/medium/cotpi.hpp b/test/exhaustive/module/real/math/cotpi/medium/cotpi.hpp deleted file mode 100644 index 2e709dacac..0000000000 --- a/test/exhaustive/module/real/math/cotpi/medium/cotpi.hpp +++ /dev/null @@ -1,31 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include -#include - -TTS_CASE_TPL("wide random check on cotpi", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto my_stdcotpi = tts::vectorize ( [](auto x) - { return (x == 0 || !eve::is_flint(x)) - ? boost::math::cos_pi(x)/boost::math::sin_pi(x) - : eve::nan(); - } - ); - - eve::exhaustive_producer p(v_t(-100000.0), v_t(100000.0)); - TTS_RANGE_CHECK(p, my_stdcotpi, eve::medium(eve::cotpi)); -} diff --git a/test/exhaustive/module/real/math/cotpi/restricted/cotpi.hpp b/test/exhaustive/module/real/math/cotpi/quarter_circle/cotpi.hpp similarity index 93% rename from test/exhaustive/module/real/math/cotpi/restricted/cotpi.hpp rename to test/exhaustive/module/real/math/cotpi/quarter_circle/cotpi.hpp index 1bde3edc29..1b71bda9f5 100644 --- a/test/exhaustive/module/real/math/cotpi/restricted/cotpi.hpp +++ b/test/exhaustive/module/real/math/cotpi/quarter_circle/cotpi.hpp @@ -23,5 +23,5 @@ TTS_CASE_TPL("wide random check on cotpi", EVE_TYPE) ); eve::exhaustive_producer p(-0.25, 0.25); - TTS_RANGE_CHECK(p, my_stdcotpi, eve::restricted(eve::cotpi)); + TTS_RANGE_CHECK(p, my_stdcotpi, eve::quarter_circle(eve::cotpi)); } diff --git a/test/exhaustive/module/real/math/csc/big/csc.hpp b/test/exhaustive/module/real/math/csc/big/csc.hpp deleted file mode 100644 index 2eb50c638b..0000000000 --- a/test/exhaustive/module/real/math/csc/big/csc.hpp +++ /dev/null @@ -1,33 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on csc", EVE_TYPE) -{ - using v_t = eve::element_type_t; - - auto std_csc = tts::vectorize( [](auto e) { return 1/std::sin(double(e)); } ); - - if constexpr(eve::platform::supports_denormals) - { - eve::exhaustive_producer p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_csc, eve::big(eve::csc)); - } - else - { - eve::exhaustive_producer p(eve::smallestposval(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_csc, eve::big(eve::csc)); - } -} diff --git a/test/exhaustive/module/real/math/csc/small/csc.hpp b/test/exhaustive/module/real/math/csc/half_circle/csc.hpp similarity index 92% rename from test/exhaustive/module/real/math/csc/small/csc.hpp rename to test/exhaustive/module/real/math/csc/half_circle/csc.hpp index 5328899005..a6a8c89975 100644 --- a/test/exhaustive/module/real/math/csc/small/csc.hpp +++ b/test/exhaustive/module/real/math/csc/half_circle/csc.hpp @@ -18,5 +18,5 @@ TTS_CASE_TPL("wide random check on csc", EVE_TYPE) auto std_csc = tts::vectorize( [](auto e) { return eve::rec(std::sin(double(e))); } ); eve::exhaustive_producer p(-eve::pio_2(eve::as()), eve::pio_2(eve::as())); - TTS_RANGE_CHECK(p, std_csc, eve::small(eve::csc)); + TTS_RANGE_CHECK(p, std_csc, eve::half_circle(eve::csc)); } diff --git a/test/exhaustive/module/real/math/csc/medium/csc.hpp b/test/exhaustive/module/real/math/csc/medium/csc.hpp deleted file mode 100644 index 7e32e7c061..0000000000 --- a/test/exhaustive/module/real/math/csc/medium/csc.hpp +++ /dev/null @@ -1,34 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide exhaustive check on csc", EVE_TYPE) -{ - using v_t = eve::element_type_t; - - auto std_csc = tts::vectorize( [](auto e) { return 1/std::sin(double(e)); } ); - auto l = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - - if constexpr(eve::platform::supports_denormals) - { - eve::exhaustive_producer p(-l, l); - TTS_RANGE_CHECK(p, std_csc, eve::medium(eve::csc)); - } - else - { - eve::exhaustive_producer p(eve::smallestposval(eve::as()), l); - TTS_RANGE_CHECK(p, std_csc, eve::medium(eve::csc)); - } -} diff --git a/test/exhaustive/module/real/math/csc/restricted/csc.hpp b/test/exhaustive/module/real/math/csc/quarter_circle/csc.hpp similarity index 88% rename from test/exhaustive/module/real/math/csc/restricted/csc.hpp rename to test/exhaustive/module/real/math/csc/quarter_circle/csc.hpp index 238f9d90f7..0c99183f49 100644 --- a/test/exhaustive/module/real/math/csc/restricted/csc.hpp +++ b/test/exhaustive/module/real/math/csc/quarter_circle/csc.hpp @@ -22,11 +22,11 @@ TTS_CASE_TPL("wide random check on csc", EVE_TYPE) if constexpr(eve::platform::supports_denormals) { eve::exhaustive_producer p(-eve::pio_4(eve::as()), eve::pio_4(eve::as())); - TTS_RANGE_CHECK(p, std_csc, eve::restricted(eve::csc)); + TTS_RANGE_CHECK(p, std_csc, eve::quarter_circle(eve::csc)); } else { eve::exhaustive_producer p(eve::smallestposval(eve::as()), eve::pio_4(eve::as())); - TTS_RANGE_CHECK(p, std_csc, eve::restricted(eve::csc)); + TTS_RANGE_CHECK(p, std_csc, eve::quarter_circle(eve::csc)); } } diff --git a/test/exhaustive/module/real/math/cscpi/big/cscpi.hpp b/test/exhaustive/module/real/math/cscpi/big/cscpi.hpp deleted file mode 100644 index f594dfc68c..0000000000 --- a/test/exhaustive/module/real/math/cscpi/big/cscpi.hpp +++ /dev/null @@ -1,34 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include -#include - -TTS_CASE_TPL("wide random check on cscpi", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto my_stdcscpi = tts::vectorize ( [](auto x) - { - return (x == 0 || !eve::is_flint(x)) - ? eve::rec(boost::math::sin_pi(x)) - : eve::nan(); - } - ); - - eve::exhaustive_producer p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, my_stdcscpi, eve::big(eve::cscpi)); -} diff --git a/test/exhaustive/module/real/math/cscpi/medium/cscpi.hpp b/test/exhaustive/module/real/math/cscpi/medium/cscpi.hpp deleted file mode 100644 index 5104bf90c1..0000000000 --- a/test/exhaustive/module/real/math/cscpi/medium/cscpi.hpp +++ /dev/null @@ -1,32 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include -#include - -TTS_CASE_TPL("wide random check on cscpi", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto my_stdcscpi = tts::vectorize ( [](auto x) - { - return (x == 0 || !eve::is_flint(x)) - ? eve::rec(boost::math::sin_pi(x)) - : eve::nan(); - } - ); - - eve::exhaustive_producer p(v_t(-100000.0), v_t(100000.0)); - TTS_RANGE_CHECK(p, my_stdcscpi, eve::medium(eve::cscpi)); -} diff --git a/test/exhaustive/module/real/math/cscpi/restricted/cscpi.hpp b/test/exhaustive/module/real/math/cscpi/quarter_circle/cscpi.hpp similarity index 93% rename from test/exhaustive/module/real/math/cscpi/restricted/cscpi.hpp rename to test/exhaustive/module/real/math/cscpi/quarter_circle/cscpi.hpp index 8245cae191..5975f6731c 100644 --- a/test/exhaustive/module/real/math/cscpi/restricted/cscpi.hpp +++ b/test/exhaustive/module/real/math/cscpi/quarter_circle/cscpi.hpp @@ -22,5 +22,5 @@ TTS_CASE_TPL("wide random check on cscpi", EVE_TYPE) ); eve::exhaustive_producer p(-0.25, 0.25); - TTS_RANGE_CHECK(p, my_stdcscpi, eve::restricted(eve::cscpi)); + TTS_RANGE_CHECK(p, my_stdcscpi, eve::quarter_circle(eve::cscpi)); } diff --git a/test/exhaustive/module/real/math/sec/big/sec.hpp b/test/exhaustive/module/real/math/sec/big/sec.hpp deleted file mode 100644 index 9c21b7320c..0000000000 --- a/test/exhaustive/module/real/math/sec/big/sec.hpp +++ /dev/null @@ -1,23 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on sec", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto std_sec = tts::vectorize( [](auto e) { return 1/std::cos(double(e)); } ); - - eve::exhaustive_producer p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_sec, eve::big(eve::sec)); -} diff --git a/test/exhaustive/module/real/math/sec/small/sec.hpp b/test/exhaustive/module/real/math/sec/half_circle/sec.hpp similarity index 92% rename from test/exhaustive/module/real/math/sec/small/sec.hpp rename to test/exhaustive/module/real/math/sec/half_circle/sec.hpp index 4df64d5769..b6974c317d 100644 --- a/test/exhaustive/module/real/math/sec/small/sec.hpp +++ b/test/exhaustive/module/real/math/sec/half_circle/sec.hpp @@ -18,5 +18,5 @@ TTS_CASE_TPL("wide random check on sec", EVE_TYPE) auto std_sec = tts::vectorize( [](auto e) { return eve::rec(std::cos(double(e))); } ); eve::exhaustive_producer p(-eve::pio_2(eve::as()), eve::pio_2(eve::as())); - TTS_RANGE_CHECK(p, std_sec, eve::small(eve::sec)); + TTS_RANGE_CHECK(p, std_sec, eve::half_circle(eve::sec)); } diff --git a/test/exhaustive/module/real/math/sec/medium/sec.hpp b/test/exhaustive/module/real/math/sec/medium/sec.hpp deleted file mode 100644 index 39bf9c0a4f..0000000000 --- a/test/exhaustive/module/real/math/sec/medium/sec.hpp +++ /dev/null @@ -1,23 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on sec", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto std_sec = tts::vectorize( [](auto e) { return 1/std::cos(double(e)); } ); - auto l = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - - eve::exhaustive_producer p(-l, l); - TTS_RANGE_CHECK(p, std_sec, eve::medium(eve::sec)); -} diff --git a/test/exhaustive/module/real/math/sec/restricted/sec.hpp b/test/exhaustive/module/real/math/sec/quarter_circle/sec.hpp similarity index 92% rename from test/exhaustive/module/real/math/sec/restricted/sec.hpp rename to test/exhaustive/module/real/math/sec/quarter_circle/sec.hpp index fd0bb6bd64..85ec584bc6 100644 --- a/test/exhaustive/module/real/math/sec/restricted/sec.hpp +++ b/test/exhaustive/module/real/math/sec/quarter_circle/sec.hpp @@ -18,5 +18,5 @@ TTS_CASE_TPL("wide random check on sec", EVE_TYPE) auto std_sec = tts::vectorize( [](auto e) { return 1/std::cos(e); } ); eve::exhaustive_producer p(-eve::pio_4(eve::as()), eve::pio_4(eve::as())); - TTS_RANGE_CHECK(p, std_sec, eve::restricted(eve::sec)); + TTS_RANGE_CHECK(p, std_sec, eve::quarter_circle(eve::sec)); } diff --git a/test/exhaustive/module/real/math/secpi/big/secpi.hpp b/test/exhaustive/module/real/math/secpi/big/secpi.hpp deleted file mode 100644 index 4b047c4323..0000000000 --- a/test/exhaustive/module/real/math/secpi/big/secpi.hpp +++ /dev/null @@ -1,35 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include -#include - -TTS_CASE_TPL("wide random check on secpi", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto my_stdsecpi = tts::vectorize ( [](auto x) - { - return ((x < eve::maxflint(eve::as())) && eve::is_odd(x*2)) - ? eve::nan() - : eve::rec(boost::math::cos_pi(x)); - } - ); - - eve::exhaustive_producer p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, my_stdsecpi, eve::big(eve::secpi)); -} diff --git a/test/exhaustive/module/real/math/secpi/medium/secpi.hpp b/test/exhaustive/module/real/math/secpi/medium/secpi.hpp deleted file mode 100644 index 7be9dde06e..0000000000 --- a/test/exhaustive/module/real/math/secpi/medium/secpi.hpp +++ /dev/null @@ -1,33 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on secpi", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto my_stdsecpi = tts::vectorize ( [](auto x) - { - return ((x < eve::maxflint(eve::as())) && eve::is_odd(x*2)) - ? eve::nan() - : eve::rec(boost::math::cos_pi(x)); - } - ); - - eve::exhaustive_producer p(v_t(-100000.0), v_t(100000.0)); - TTS_RANGE_CHECK(p, my_stdsecpi, eve::medium(eve::secpi)); -} diff --git a/test/exhaustive/module/real/math/secpi/restricted/secpi.hpp b/test/exhaustive/module/real/math/secpi/quarter_circle/secpi.hpp similarity index 91% rename from test/exhaustive/module/real/math/secpi/restricted/secpi.hpp rename to test/exhaustive/module/real/math/secpi/quarter_circle/secpi.hpp index e15839c955..ccf675675b 100644 --- a/test/exhaustive/module/real/math/secpi/restricted/secpi.hpp +++ b/test/exhaustive/module/real/math/secpi/quarter_circle/secpi.hpp @@ -18,5 +18,5 @@ TTS_CASE_TPL("wide random check on secpi", EVE_TYPE) auto my_stdsecpi = tts::vectorize([](auto x){return eve::rec(boost::math::cos_pi(x)); }); eve::exhaustive_producer p(-0.25, 0.25); - TTS_RANGE_CHECK(p, my_stdsecpi, eve::restricted(eve::secpi)); + TTS_RANGE_CHECK(p, my_stdsecpi, eve::quarter_circle(eve::secpi)); } diff --git a/test/exhaustive/module/real/math/sin/big/sin.hpp b/test/exhaustive/module/real/math/sin/big/sin.hpp deleted file mode 100644 index e73e18fe61..0000000000 --- a/test/exhaustive/module/real/math/sin/big/sin.hpp +++ /dev/null @@ -1,23 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on sin", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto std_sin = tts::vectorize( [](auto e) { return std::sin(e); } ); - - eve::exhaustive_producer p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_sin, eve::big(eve::sin)); -} diff --git a/test/exhaustive/module/real/math/sin/small/sin.hpp b/test/exhaustive/module/real/math/sin/half_circle/sin.hpp similarity index 92% rename from test/exhaustive/module/real/math/sin/small/sin.hpp rename to test/exhaustive/module/real/math/sin/half_circle/sin.hpp index f79ce2e6c2..651a025ca9 100644 --- a/test/exhaustive/module/real/math/sin/small/sin.hpp +++ b/test/exhaustive/module/real/math/sin/half_circle/sin.hpp @@ -18,5 +18,5 @@ TTS_CASE_TPL("wide random check on sin", EVE_TYPE) auto std_sin = tts::vectorize( [](auto e) { return std::sin(double(e)); } ); eve::exhaustive_producer p(-eve::pio_2(eve::as()), eve::pio_2(eve::as())); - TTS_RANGE_CHECK(p, std_sin, eve::small(eve::sin)); + TTS_RANGE_CHECK(p, std_sin, eve::half_circle(eve::sin)); } diff --git a/test/exhaustive/module/real/math/sin/medium/sin.hpp b/test/exhaustive/module/real/math/sin/medium/sin.hpp deleted file mode 100644 index c261cefa9c..0000000000 --- a/test/exhaustive/module/real/math/sin/medium/sin.hpp +++ /dev/null @@ -1,24 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on sin", EVE_TYPE) -{ - using v_t = eve::element_type_t; - - auto std_sin = tts::vectorize( [](auto e) { return std::sin(e); } ); - auto l = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - - eve::exhaustive_producer p(-l, l); - TTS_RANGE_CHECK(p, std_sin, eve::medium(eve::sin)); -} diff --git a/test/exhaustive/module/real/math/sin/restricted/sin.hpp b/test/exhaustive/module/real/math/sin/quarter_circle/sin.hpp similarity index 92% rename from test/exhaustive/module/real/math/sin/restricted/sin.hpp rename to test/exhaustive/module/real/math/sin/quarter_circle/sin.hpp index cf70e52afb..ce60724f0c 100644 --- a/test/exhaustive/module/real/math/sin/restricted/sin.hpp +++ b/test/exhaustive/module/real/math/sin/quarter_circle/sin.hpp @@ -18,5 +18,5 @@ TTS_CASE_TPL("wide random check on sin", EVE_TYPE) auto std_sin = tts::vectorize( [](auto e) { return std::sin(e); } ); eve::exhaustive_producer p(-eve::pio_4(eve::as()), eve::pio_4(eve::as())); - TTS_RANGE_CHECK(p, std_sin, eve::restricted(eve::sin)); + TTS_RANGE_CHECK(p, std_sin, eve::quarter_circle(eve::sin)); } diff --git a/test/exhaustive/module/real/math/sincos/big/sincos.hpp b/test/exhaustive/module/real/math/sincos/big/sincos.hpp deleted file mode 100644 index 5b04de9d48..0000000000 --- a/test/exhaustive/module/real/math/sincos/big/sincos.hpp +++ /dev/null @@ -1,28 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on sincos", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto std_sin = tts::vectorize( [](auto e) { return std::sin(double(e)); } ); - auto std_cos = tts::vectorize( [](auto e) { return std::cos(double(e)); } ); - auto sincos_s = [](auto e) { auto [s, c] = eve::big(eve::sincos)(e); return s; }; - auto sincos_c = [](auto e) { auto [s, c] = eve::big(eve::sincos)(e); return c; }; - - eve::exhaustive_producer p(0, eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_sin, sincos_s); - TTS_RANGE_CHECK(p, std_cos, sincos_c); -} diff --git a/test/exhaustive/module/real/math/sincos/small/sincos.hpp b/test/exhaustive/module/real/math/sincos/half_circle/sincos.hpp similarity index 83% rename from test/exhaustive/module/real/math/sincos/small/sincos.hpp rename to test/exhaustive/module/real/math/sincos/half_circle/sincos.hpp index 27bb935035..5e6eb88b68 100644 --- a/test/exhaustive/module/real/math/sincos/small/sincos.hpp +++ b/test/exhaustive/module/real/math/sincos/half_circle/sincos.hpp @@ -18,8 +18,8 @@ TTS_CASE_TPL("wide random check on sincos", EVE_TYPE) using v_t = eve::element_type_t; auto std_sin = tts::vectorize( [](auto e) { return std::sin(double(e)); } ); auto std_cos = tts::vectorize( [](auto e) { return std::cos(double(e)); } ); - auto sincos_s = [](auto e) { auto [s, c] = eve::small(eve::sincos)(e); return s; }; - auto sincos_c = [](auto e) { auto [s, c] = eve::small(eve::sincos)(e); return c; }; + auto sincos_s = [](auto e) { auto [s, c] = eve::half_circle(eve::sincos)(e); return s; }; + auto sincos_c = [](auto e) { auto [s, c] = eve::half_circle(eve::sincos)(e); return c; }; eve::exhaustive_producer p(-eve::pio_2(eve::as()), eve::pio_2(eve::as())); TTS_RANGE_CHECK(p, std_sin, sincos_s); diff --git a/test/exhaustive/module/real/math/sincos/medium/sincos.hpp b/test/exhaustive/module/real/math/sincos/medium/sincos.hpp deleted file mode 100644 index 94ef18a70f..0000000000 --- a/test/exhaustive/module/real/math/sincos/medium/sincos.hpp +++ /dev/null @@ -1,28 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on sincos", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto std_sin = tts::vectorize( [](auto e) { return std::sin(double(e)); } ); - auto std_cos = tts::vectorize( [](auto e) { return std::cos(double(e)); } ); - auto sincos_s = [](auto e) { auto [s, c] = eve::medium(eve::sincos)(e); return s; }; - auto sincos_c = [](auto e) { auto [s, c] = eve::medium(eve::sincos)(e); return c; }; - - auto l = eve::detail::Rempio2_limit(eve::small_type(), eve::as()); - eve::exhaustive_producer p(-l, l); - TTS_RANGE_CHECK(p, std_sin, sincos_s); - TTS_RANGE_CHECK(p, std_cos, sincos_c); -} diff --git a/test/exhaustive/module/real/math/sinpi/big/sinpi.hpp b/test/exhaustive/module/real/math/sinpi/big/sinpi.hpp deleted file mode 100644 index db5363080b..0000000000 --- a/test/exhaustive/module/real/math/sinpi/big/sinpi.hpp +++ /dev/null @@ -1,32 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" - -TTS_CASE_TPL("wide random check on sinpi", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto my_stdsinpi = tts::vectorize([](auto x){return boost::math::sin_pi(x); }); - eve::exhaustive_producer p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, my_stdsinpi, eve::big(eve::sinpi)); -} - -// #include - -// TTS_CASE_TPL("wide random check on sinpi", EVE_TYPE) -// { -// ::crlibm_init(); -// auto my_stdsinpi = tts::vectorize([](v_t x){return v_t(::sinpi_rn(x)); }); -// eve::exhaustive_producer p(eve::valmin(eve::as()), eve::valmax(eve::as())); -// TTS_RANGE_CHECK(p, my_stdsinpi, eve::big(eve::sinpi)); -// } diff --git a/test/exhaustive/module/real/math/sinpi/medium/sinpi.hpp b/test/exhaustive/module/real/math/sinpi/medium/sinpi.hpp deleted file mode 100644 index 9a54d4af02..0000000000 --- a/test/exhaustive/module/real/math/sinpi/medium/sinpi.hpp +++ /dev/null @@ -1,21 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" - -TTS_CASE_TPL("wide random check on sinpi", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto my_stdsinpi = tts::vectorize([](auto x){return boost::math::sin_pi(x); }); - - eve::exhaustive_producer p(v_t(-100000.0), v_t(100000.0)); - TTS_RANGE_CHECK(p, my_stdsinpi, eve::medium(eve::sinpi)); -} diff --git a/test/exhaustive/module/real/math/sinpi/restricted/sinpi.hpp b/test/exhaustive/module/real/math/sinpi/quarter_circle/sinpi.hpp similarity index 91% rename from test/exhaustive/module/real/math/sinpi/restricted/sinpi.hpp rename to test/exhaustive/module/real/math/sinpi/quarter_circle/sinpi.hpp index 31a54c95b6..93de82a856 100644 --- a/test/exhaustive/module/real/math/sinpi/restricted/sinpi.hpp +++ b/test/exhaustive/module/real/math/sinpi/quarter_circle/sinpi.hpp @@ -17,5 +17,5 @@ TTS_CASE_TPL("wide random check on sinpi", EVE_TYPE) auto my_stdsinpi = tts::vectorize([](auto x){return boost::math::sin_pi(x); }); eve::exhaustive_producer p(-0.25, 0.25); - TTS_RANGE_CHECK(p, my_stdsinpi, eve::restricted(eve::sinpi)); + TTS_RANGE_CHECK(p, my_stdsinpi, eve::quarter_circle(eve::sinpi)); } diff --git a/test/exhaustive/module/real/math/sinpicospi/big/sinpicospi.hpp b/test/exhaustive/module/real/math/sinpicospi/big/sinpicospi.hpp deleted file mode 100644 index e72b128ebc..0000000000 --- a/test/exhaustive/module/real/math/sinpicospi/big/sinpicospi.hpp +++ /dev/null @@ -1,29 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" - -TTS_CASE_TPL("wide random check on sinpicospi", EVE_TYPE) -{ - using v_t = eve::element_type_t; - - auto std_sinpi = tts::vectorize( [](auto e) { return eve::sinpi(double(e)); } ); - auto std_cospi = tts::vectorize( [](auto e) { return eve::cospi(double(e)); } ); - auto sinpicospi_s = [](auto e) { auto [s, c] = eve::big(eve::sinpicospi)(e); return s; }; - auto sinpicospi_c = [](auto e) { auto [s, c] = eve::big(eve::sinpicospi)(e); return c; }; - - eve::exhaustive_producer p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_sinpi, sinpicospi_s); - TTS_RANGE_CHECK(p, std_cospi, sinpicospi_c); -} diff --git a/test/exhaustive/module/real/math/sinpicospi/medium/sinpicospi.hpp b/test/exhaustive/module/real/math/sinpicospi/medium/sinpicospi.hpp deleted file mode 100644 index da52db3915..0000000000 --- a/test/exhaustive/module/real/math/sinpicospi/medium/sinpicospi.hpp +++ /dev/null @@ -1,29 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" - -TTS_CASE_TPL("wide random check on sinpicospi", EVE_TYPE) -{ - using v_t = eve::element_type_t; - - auto std_sinpi = tts::vectorize( [](auto e) { return eve::sinpi(double(e)); } ); - auto std_cospi = tts::vectorize( [](auto e) { return eve::cospi(double(e)); } ); - auto sinpicospi_s = [](auto e) { auto [s, c] = eve::medium(eve::sinpicospi)(e); return s; }; - auto sinpicospi_c = [](auto e) { auto [s, c] = eve::medium(eve::sinpicospi)(e); return c; }; - - eve::exhaustive_producer p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_sinpi, sinpicospi_s); - TTS_RANGE_CHECK(p, std_cospi, sinpicospi_c); -} diff --git a/test/exhaustive/module/real/math/sinpicospi/restricted/sinpicospi.hpp b/test/exhaustive/module/real/math/sinpicospi/quarter_circle/sinpicospi.hpp similarity index 82% rename from test/exhaustive/module/real/math/sinpicospi/restricted/sinpicospi.hpp rename to test/exhaustive/module/real/math/sinpicospi/quarter_circle/sinpicospi.hpp index e7f7510bf2..b352a18984 100644 --- a/test/exhaustive/module/real/math/sinpicospi/restricted/sinpicospi.hpp +++ b/test/exhaustive/module/real/math/sinpicospi/quarter_circle/sinpicospi.hpp @@ -19,8 +19,8 @@ TTS_CASE_TPL("wide random check on sinpicospi", EVE_TYPE) auto std_sinpi = tts::vectorize( [](auto e) { return eve::sinpi(double(e)); } ); auto std_cospi = tts::vectorize( [](auto e) { return eve::cospi(double(e)); } ); - auto sinpicospi_s = [](auto e) { auto [s, c] = eve::small(eve::sinpicospi)(e); return s; }; - auto sinpicospi_c = [](auto e) { auto [s, c] = eve::small(eve::sinpicospi)(e); return c; }; + auto sinpicospi_s = [](auto e) { auto [s, c] = eve::half_circle(eve::sinpicospi)(e); return s; }; + auto sinpicospi_c = [](auto e) { auto [s, c] = eve::half_circle(eve::sinpicospi)(e); return c; }; eve::exhaustive_producer p(-v_t(0.25), v_t(0.25)); TTS_RANGE_CHECK(p, std_sinpi, sinpicospi_s); diff --git a/test/exhaustive/module/real/math/tan/big/tan.hpp b/test/exhaustive/module/real/math/tan/big/tan.hpp deleted file mode 100644 index bae4276e95..0000000000 --- a/test/exhaustive/module/real/math/tan/big/tan.hpp +++ /dev/null @@ -1,23 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on tan", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto std_tan = tts::vectorize( [](auto e) { return std::tan(e); } ); - - eve::exhaustive_producer p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_tan, eve::big(eve::tan)); -} diff --git a/test/exhaustive/module/real/math/tan/small/tan.hpp b/test/exhaustive/module/real/math/tan/half_circle/tan.hpp similarity index 92% rename from test/exhaustive/module/real/math/tan/small/tan.hpp rename to test/exhaustive/module/real/math/tan/half_circle/tan.hpp index 8fcb65a6bf..0d3ec7bf08 100644 --- a/test/exhaustive/module/real/math/tan/small/tan.hpp +++ b/test/exhaustive/module/real/math/tan/half_circle/tan.hpp @@ -18,5 +18,5 @@ TTS_CASE_TPL("wide random check on tan", EVE_TYPE) auto std_tan = tts::vectorize( [](auto e) { return std::tan(double(e)); } ); eve::exhaustive_producer p(-eve::pio_2(eve::as()), eve::pio_2(eve::as())); - TTS_RANGE_CHECK(p, std_tan, eve::small(eve::tan)); + TTS_RANGE_CHECK(p, std_tan, eve::half_circle(eve::tan)); } diff --git a/test/exhaustive/module/real/math/tan/medium/tan.hpp b/test/exhaustive/module/real/math/tan/medium/tan.hpp deleted file mode 100644 index 5b8c260ae8..0000000000 --- a/test/exhaustive/module/real/math/tan/medium/tan.hpp +++ /dev/null @@ -1,23 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on tan", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto std_tan = tts::vectorize( [](auto e) { return std::tan(e); } ); - auto l = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - - eve::exhaustive_producer p(-l, l); - TTS_RANGE_CHECK(p, std_tan, eve::medium(eve::tan)); -} diff --git a/test/exhaustive/module/real/math/tan/restricted/tan.hpp b/test/exhaustive/module/real/math/tan/quarter_circle/tan.hpp similarity index 92% rename from test/exhaustive/module/real/math/tan/restricted/tan.hpp rename to test/exhaustive/module/real/math/tan/quarter_circle/tan.hpp index 033940da43..ca62d5b16d 100644 --- a/test/exhaustive/module/real/math/tan/restricted/tan.hpp +++ b/test/exhaustive/module/real/math/tan/quarter_circle/tan.hpp @@ -18,5 +18,5 @@ TTS_CASE_TPL("wide random check on tan", EVE_TYPE) auto std_tan = tts::vectorize( [](auto e) { return std::tan(e); } ); eve::exhaustive_producer p(-eve::pio_4(eve::as()), eve::pio_4(eve::as())); - TTS_RANGE_CHECK(p, std_tan, eve::restricted(eve::tan)); + TTS_RANGE_CHECK(p, std_tan, eve::quarter_circle(eve::tan)); } diff --git a/test/exhaustive/module/real/math/tanpi/big/tanpi.hpp b/test/exhaustive/module/real/math/tanpi/big/tanpi.hpp deleted file mode 100644 index 1b3f8caca1..0000000000 --- a/test/exhaustive/module/real/math/tanpi/big/tanpi.hpp +++ /dev/null @@ -1,33 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" - -TTS_CASE_TPL("wide random check on tanpi", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto my_stdtanpi = tts::vectorize ( [](auto x) - { - return ((x < eve::maxflint(eve::as())) && eve::is_odd(x*2)) - ? eve::nan() - : boost::math::sin_pi(x)/boost::math::cos_pi(x); - } - ); - eve::exhaustive_producer p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, my_stdtanpi, eve::big(eve::tanpi)); -} diff --git a/test/exhaustive/module/real/math/tanpi/medium/tanpi.hpp b/test/exhaustive/module/real/math/tanpi/medium/tanpi.hpp deleted file mode 100644 index 38bfbf85f9..0000000000 --- a/test/exhaustive/module/real/math/tanpi/medium/tanpi.hpp +++ /dev/null @@ -1,32 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include -#include -#include "measures.hpp" -#include "producers.hpp" - -TTS_CASE_TPL("wide random check on tanpi", EVE_TYPE) -{ - using v_t = eve::element_type_t; - auto my_stdtanpi = tts::vectorize ( [](auto x) - { - return ((x < eve::maxflint(eve::as())) && eve::is_odd(x*2)) - ? eve::nan() - : boost::math::sin_pi(x)/boost::math::cos_pi(x); - } - ); - - eve::exhaustive_producer p(v_t(-100000.0), v_t(100000.0)); - TTS_RANGE_CHECK(p, my_stdtanpi, eve::medium(eve::tanpi)); -} diff --git a/test/exhaustive/module/real/math/tanpi/restricted/tanpi.hpp b/test/exhaustive/module/real/math/tanpi/quarter_circle/tanpi.hpp similarity index 92% rename from test/exhaustive/module/real/math/tanpi/restricted/tanpi.hpp rename to test/exhaustive/module/real/math/tanpi/quarter_circle/tanpi.hpp index bd799ca6e1..4e2d3be4e9 100644 --- a/test/exhaustive/module/real/math/tanpi/restricted/tanpi.hpp +++ b/test/exhaustive/module/real/math/tanpi/quarter_circle/tanpi.hpp @@ -18,5 +18,5 @@ TTS_CASE_TPL("wide random check on tanpi", EVE_TYPE) auto my_stdtanpi = tts::vectorize([](auto x){return boost::math::sin_pi(x)/boost::math::cos_pi(x); }); eve::exhaustive_producer p(-0.25, 0.25); - TTS_RANGE_CHECK(p, my_stdtanpi, eve::restricted(eve::tanpi)); + TTS_RANGE_CHECK(p, my_stdtanpi, eve::quarter_circle(eve::tanpi)); } diff --git a/test/generator.hpp b/test/generator.hpp index 375be41f15..ab909758a5 100644 --- a/test/generator.hpp +++ b/test/generator.hpp @@ -270,7 +270,7 @@ inline bool const TTS_CAT(register_,TTS_FUNCTION) = ::eve::test::test_setup{ [](auto tests) \ { \ auto s = SAMPLES; \ - auto const single_test = [=]( eve::as target) \ + auto const single_test = [=]( eve::as target) \ { \ [=](std::index_sequence) \ { \ @@ -280,20 +280,20 @@ inline bool const TTS_CAT(register_,TTS_FUNCTION) = ::eve::test::test_setup{ , [=]() \ { \ std::mt19937::result_type seed(18102008); \ - seed = ::tts::arguments.value_or(seed, "-s", "--seed"); \ + seed = ::tts::arguments.value({"-s", "--seed"}, seed); \ std::mt19937 gen(seed); \ \ constexpr std::make_index_sequence size = {}; \ - auto data = s(eve::as{}, gen); \ - auto args = eve::test::make_args(data, size, eve::as{}); \ + auto data = s(eve::as{}, gen); \ + auto args = eve::test::make_args(data, size, eve::as{}) ; \ if( ::tts::verbose_status ) \ { \ - if(::tts::arguments.is_set("-d","--data")) \ + if(::tts::arguments[{"-d","--data"}]) \ { \ std::cout << "Input data:\n"; \ - ((std::cout << " [" << ::tts::cyan() \ + ((std::cout << " [" << ::tts::cyan \ << ::tts::typename_(args))> \ - << ::tts::reset() \ + << ::tts::reset \ << "] = " \ << ::tts::as_string(std::get(args)) \ << "\n"),...); \ @@ -310,7 +310,7 @@ inline bool const TTS_CAT(register_,TTS_FUNCTION) = ::eve::test::test_setup{ \ [&] class L,typename... Ts>(L) \ { \ - (single_test( eve::as() ),...); \ + (single_test( eve::as() ),...); \ }( TYPES ); \ \ return true; \ @@ -321,18 +321,18 @@ inline bool const TTS_CAT(register_,TTS_FUNCTION) = ::eve::test::test_setup{ inline bool const TTS_CAT(register_,TTS_FUNCTION) = ::eve::test::test_setup{ \ [](auto tests) \ { \ - auto const single_test = [=]( eve::as ) \ + auto const single_test = [=]( eve::as ) \ { \ ::tts::detail::test::acknowledge(::tts::detail::test \ { \ std::string{DESCRIPTION} + " (with T = " + std::string{::tts::typename_} + ")" \ - , [=]() {tests(eve::as{}); } \ + , [=]() {tests(eve::as{}); } \ }); \ }; \ \ [&] class L,typename... Ts>(L) \ { \ - (single_test( eve::as() ),...); \ + (single_test( eve::as() ),...); \ }( TYPES ); \ \ return true; \ diff --git a/test/producers.hpp b/test/producers.hpp index 34c9328d21..278124dd52 100644 --- a/test/producers.hpp +++ b/test/producers.hpp @@ -13,13 +13,13 @@ #include #define TTS_RANGE_CHECK(Producer, Ref, New) \ - do \ + [&]() \ { \ if constexpr(eve::floating_value) \ TTS_ULP_RANGE_CHECK(Producer, (EVE_VALUE), (T), Ref, New, 2.0); \ else \ TTS_ULP_RANGE_CHECK(Producer, (EVE_VALUE), (T), Ref, New, 0.0); \ - } while(::tts::detail::done()) \ + }() \ /**/ #define TTS_RANGE_CHECK_WITH(Producer, Ref, New, Ulps) \ diff --git a/test/random/module/real/core/abs/regular/abs.hpp b/test/random/module/real/core/abs/regular/abs.hpp index 105b67a732..dc7a7d4b03 100644 --- a/test/random/module/real/core/abs/regular/abs.hpp +++ b/test/random/module/real/core/abs/regular/abs.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL( "wide random check on abs", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) { @@ -40,4 +41,4 @@ TTS_CASE_TPL( "wide random check on abs", EVE_TYPE) auto std_abs = [](auto e) { return e; }; TTS_RANGE_CHECK( eve::uniform_prng(vmin,vmax), std_abs, eve::abs ); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/arg/pedantic/arg.hpp b/test/random/module/real/core/arg/pedantic/arg.hpp index 0ea0371b22..433ae67653 100644 --- a/test/random/module/real/core/arg/pedantic/arg.hpp +++ b/test/random/module/real/core/arg/pedantic/arg.hpp @@ -14,9 +14,10 @@ #include TTS_CASE_TPL("wide random check on arg", EVE_TYPE) +(::tts::type) { auto std_arg = [](auto e) { return eve::is_negative(e) ? eve::pi(eve::as()) : EVE_VALUE(0);}; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_arg, eve::pedantic(eve::arg)); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/arg/regular/arg.hpp b/test/random/module/real/core/arg/regular/arg.hpp index bfe39e5ffa..76c2906ebe 100644 --- a/test/random/module/real/core/arg/regular/arg.hpp +++ b/test/random/module/real/core/arg/regular/arg.hpp @@ -14,9 +14,10 @@ #include TTS_CASE_TPL("wide random check on arg", EVE_TYPE) +(::tts::type) { auto std_arg = [](auto e) { return eve::is_negative(e) ? eve::pi(eve::as()) : EVE_VALUE(0); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_arg, eve::arg); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/average/regular/average.hpp b/test/random/module/real/core/average/regular/average.hpp index c6df0e7906..f8f7a05150 100644 --- a/test/random/module/real/core/average/regular/average.hpp +++ b/test/random/module/real/core/average/regular/average.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on average", EVE_TYPE) +(::tts::type) { auto std_average = [](auto e) { return std::midpoint(e, one(eve::as(e))); }; auto my_average = [](auto e) { return eve::average(e, one(eve::as(e))); }; @@ -27,4 +28,4 @@ TTS_CASE_TPL("wide random check on average", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_ULP_RANGE_CHECK(p, std_average, my_average, 0.5); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/bit_ceil/regular/bit_ceil.hpp b/test/random/module/real/core/bit_ceil/regular/bit_ceil.hpp index 81b831a36c..635fecd846 100644 --- a/test/random/module/real/core/bit_ceil/regular/bit_ceil.hpp +++ b/test/random/module/real/core/bit_ceil/regular/bit_ceil.hpp @@ -12,6 +12,7 @@ #include TTS_CASE_TPL("wide random check on bit_ceil", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) @@ -26,4 +27,4 @@ TTS_CASE_TPL("wide random check on bit_ceil", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), (1ul << (sizeof(EVE_VALUE)*8-2))); TTS_RANGE_CHECK(p, std_bit_ceil, eve::bit_ceil); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/bit_floor/regular/bit_floor.hpp b/test/random/module/real/core/bit_floor/regular/bit_floor.hpp index 6cbacbd212..948f087e71 100644 --- a/test/random/module/real/core/bit_floor/regular/bit_floor.hpp +++ b/test/random/module/real/core/bit_floor/regular/bit_floor.hpp @@ -12,6 +12,7 @@ #include TTS_CASE_TPL("wide random check on bit_floor", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) @@ -32,4 +33,4 @@ TTS_CASE_TPL("wide random check on bit_floor", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_bit_floor, eve::bit_floor); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/bit_mask/regular/bit_mask.hpp b/test/random/module/real/core/bit_mask/regular/bit_mask.hpp index 9a9f80aa3c..8822523524 100644 --- a/test/random/module/real/core/bit_mask/regular/bit_mask.hpp +++ b/test/random/module/real/core/bit_mask/regular/bit_mask.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on bit_mask", EVE_TYPE) +(::tts::type) { auto std_bit_mask = [](auto e) { return e ? eve::allbits(eve::as()) : eve::zero(eve::as()); }; eve::uniform_prng p(eve::valmin(eve::as())+1, eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_bit_mask, eve::bit_mask); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/bit_not/regular/bit_not.hpp b/test/random/module/real/core/bit_not/regular/bit_not.hpp index 01d0f38a55..c58ccc93cc 100644 --- a/test/random/module/real/core/bit_not/regular/bit_not.hpp +++ b/test/random/module/real/core/bit_not/regular/bit_not.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on bit_not", EVE_TYPE) +(::tts::type) { auto std_bit_not = [](auto e) -> EVE_VALUE { return ~EVE_VALUE(e); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_bit_not, eve::bit_not); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/bit_width/regular/bit_width.hpp b/test/random/module/real/core/bit_width/regular/bit_width.hpp index 36080f3b2e..88736e3125 100644 --- a/test/random/module/real/core/bit_width/regular/bit_width.hpp +++ b/test/random/module/real/core/bit_width/regular/bit_width.hpp @@ -13,9 +13,10 @@ #include TTS_CASE_TPL("wide random check on bit_width", EVE_TYPE) +(::tts::type) { using i_t = eve::as_integer_t; auto std_bit_width = [](auto e) -> i_t { return sizeof(EVE_VALUE)*8-std::countl_zero(e); }; eve::uniform_prng p(eve::zero(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_bit_width, eve::bit_width); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/bitofsign/regular/bitofsign.hpp b/test/random/module/real/core/bitofsign/regular/bitofsign.hpp index 731e6e5816..bc779a0a59 100644 --- a/test/random/module/real/core/bitofsign/regular/bitofsign.hpp +++ b/test/random/module/real/core/bitofsign/regular/bitofsign.hpp @@ -14,6 +14,7 @@ #include TTS_CASE_TPL("wide random check on bitofsign", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) @@ -31,4 +32,4 @@ TTS_CASE_TPL("wide random check on bitofsign", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_bitofsign, eve::bitofsign); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/cbrt/regular/cbrt.hpp b/test/random/module/real/core/cbrt/regular/cbrt.hpp index 6ef2ae3d1d..7f490d8b6b 100644 --- a/test/random/module/real/core/cbrt/regular/cbrt.hpp +++ b/test/random/module/real/core/cbrt/regular/cbrt.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on cbrt", EVE_TYPE) +(::tts::type) { auto std_cbrt = [](auto e) { return std::cbrt(e); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_cbrt, eve::cbrt); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/ceil/regular/ceil.hpp b/test/random/module/real/core/ceil/regular/ceil.hpp index 49ae15cd4e..61f99ec02e 100644 --- a/test/random/module/real/core/ceil/regular/ceil.hpp +++ b/test/random/module/real/core/ceil/regular/ceil.hpp @@ -12,6 +12,7 @@ #include TTS_CASE_TPL("wide random check on ceil", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) @@ -32,4 +33,4 @@ TTS_CASE_TPL("wide random check on ceil", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_ceil, eve::ceil); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/conj/regular/conj.hpp b/test/random/module/real/core/conj/regular/conj.hpp index 733bcb0f1b..e13698561c 100644 --- a/test/random/module/real/core/conj/regular/conj.hpp +++ b/test/random/module/real/core/conj/regular/conj.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on conj", EVE_TYPE) +(::tts::type) { auto std_conj = [](auto e) { return e; }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_conj, eve::conj); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/exponent/regular/exponent.hpp b/test/random/module/real/core/exponent/regular/exponent.hpp index 36e8029166..8b8e5168d1 100644 --- a/test/random/module/real/core/exponent/regular/exponent.hpp +++ b/test/random/module/real/core/exponent/regular/exponent.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on exponent", EVE_TYPE) +(::tts::type) { using i_t = eve::as_integer_t; @@ -22,4 +23,4 @@ TTS_CASE_TPL("wide random check on exponent", EVE_TYPE) eve::uniform_prng p(eve::smallestposval(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_exponent, eve::exponent); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/ffs/regular/ffs.hpp b/test/random/module/real/core/ffs/regular/ffs.hpp index a6e98353c2..540cb33b9a 100755 --- a/test/random/module/real/core/ffs/regular/ffs.hpp +++ b/test/random/module/real/core/ffs/regular/ffs.hpp @@ -13,9 +13,10 @@ #include TTS_CASE_TPL("wide random check on ffs", EVE_TYPE) +(::tts::type) { auto std_ffs = [](auto e) -> EVE_VALUE { return e & (~e+1); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_ffs, eve::ffs); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/firstbitset/regular/firstbitset.hpp b/test/random/module/real/core/firstbitset/regular/firstbitset.hpp index 536fa82f5d..c5a48a93c2 100644 --- a/test/random/module/real/core/firstbitset/regular/firstbitset.hpp +++ b/test/random/module/real/core/firstbitset/regular/firstbitset.hpp @@ -13,9 +13,10 @@ #include TTS_CASE_TPL("wide random check on firstbitset", EVE_TYPE) +(::tts::type) { auto std_firstbitset = [](auto e) -> EVE_VALUE { return e & (~e+1); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_firstbitset, eve::firstbitset); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/firstbitunset/regular/firstbitunset.hpp b/test/random/module/real/core/firstbitunset/regular/firstbitunset.hpp index bff6425442..7d6b71d96e 100644 --- a/test/random/module/real/core/firstbitunset/regular/firstbitunset.hpp +++ b/test/random/module/real/core/firstbitunset/regular/firstbitunset.hpp @@ -13,9 +13,10 @@ #include TTS_CASE_TPL("wide random check on firstbitunset", EVE_TYPE) +(::tts::type) { auto std_firstbitunset = [](auto e) -> EVE_VALUE{ return ~e & (e+1); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_firstbitunset, eve::firstbitunset); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/floor/regular/floor.hpp b/test/random/module/real/core/floor/regular/floor.hpp index 383cbc4a02..2eeb5453b4 100644 --- a/test/random/module/real/core/floor/regular/floor.hpp +++ b/test/random/module/real/core/floor/regular/floor.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on floor", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) @@ -27,4 +28,4 @@ TTS_CASE_TPL("wide random check on floor", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_floor, eve::floor); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/fls/regular/fls.hpp b/test/random/module/real/core/fls/regular/fls.hpp index 09fff8ccb8..2b7ff81aa4 100755 --- a/test/random/module/real/core/fls/regular/fls.hpp +++ b/test/random/module/real/core/fls/regular/fls.hpp @@ -13,9 +13,10 @@ #include TTS_CASE_TPL("wide random check on fls", EVE_TYPE) +(::tts::type) { auto std_fls = [](auto e) -> EVE_VALUE { return e & (~e+1); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_fls, eve::fls); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/frac/regular/frac.hpp b/test/random/module/real/core/frac/regular/frac.hpp index b4d75f84d6..1ca90fd4fa 100644 --- a/test/random/module/real/core/frac/regular/frac.hpp +++ b/test/random/module/real/core/frac/regular/frac.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on frac", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) @@ -27,4 +28,4 @@ TTS_CASE_TPL("wide random check on frac", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_frac, eve::frac); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/frexp/pedantic/frexp.hpp b/test/random/module/real/core/frexp/pedantic/frexp.hpp index 0f5b8a1a70..8a9f18c99e 100644 --- a/test/random/module/real/core/frexp/pedantic/frexp.hpp +++ b/test/random/module/real/core/frexp/pedantic/frexp.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on frexp", EVE_TYPE) +(::tts::type) { auto std_frexp = [](auto e) { return std::frexp(e); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_frexp, eve::eve::pedantic(eve::frexp)); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/frexp/raw/frexp.hpp b/test/random/module/real/core/frexp/raw/frexp.hpp index 06836dfd95..042498716d 100644 --- a/test/random/module/real/core/frexp/raw/frexp.hpp +++ b/test/random/module/real/core/frexp/raw/frexp.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on frexp", EVE_TYPE) +(::tts::type) { auto std_frexp = [](auto e) { return std::frexp(e); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_frexp, eve::eve::raw(eve::frexp)); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/frexp/regular/frexp.hpp b/test/random/module/real/core/frexp/regular/frexp.hpp index e1a65cb107..3c05209921 100644 --- a/test/random/module/real/core/frexp/regular/frexp.hpp +++ b/test/random/module/real/core/frexp/regular/frexp.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on frexp", EVE_TYPE) +(::tts::type) { auto std_frexp = [](auto e) { return std::frexp(e); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_frexp, eve::frexp); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/geommean/regular/geommean.hpp b/test/random/module/real/core/geommean/regular/geommean.hpp index fe1b62e024..43410b1844 100644 --- a/test/random/module/real/core/geommean/regular/geommean.hpp +++ b/test/random/module/real/core/geommean/regular/geommean.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on geommean", EVE_TYPE) +(::tts::type) { auto std_geommean = [](auto e) { return std::midpoint(e, one(eve::as(e))); }; auto my_geommean = [](auto e) { return eve::geommean(e, one(eve::as(e))); }; @@ -27,4 +28,4 @@ TTS_CASE_TPL("wide random check on geommean", EVE_TYPE) eve::uniform_prng p(EVE_VALUE(0), eve::valmax(eve::as())); TTS_ULP_RANGE_CHECK(p, std_geommean, my_geommean, 0.5); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/ifloor/regular/ifloor.hpp b/test/random/module/real/core/ifloor/regular/ifloor.hpp index 3052fe43d2..b89d5e47ae 100644 --- a/test/random/module/real/core/ifloor/regular/ifloor.hpp +++ b/test/random/module/real/core/ifloor/regular/ifloor.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on ifloor", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) { @@ -27,4 +28,4 @@ TTS_CASE_TPL("wide random check on ifloor", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_ifloor, eve::int_(eve::floor)); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/ifrexp/pedantic/ifrexp.hpp b/test/random/module/real/core/ifrexp/pedantic/ifrexp.hpp index 5f271f346d..f1968a3838 100644 --- a/test/random/module/real/core/ifrexp/pedantic/ifrexp.hpp +++ b/test/random/module/real/core/ifrexp/pedantic/ifrexp.hpp @@ -12,10 +12,11 @@ #include TTS_CASE_TPL("wide random check on ifrexp", EVE_TYPE) +(::tts::type) { using i_t = eve::as_integer_t; auto std_ifrexp = [](auto e) { int y; auto x = std::frexp(e, &y); return std::make_tuple(x, i_t(y)); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_ifrexp, eve::pedantic(eve::ifrexp)); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/ifrexp/raw/ifrexp.hpp b/test/random/module/real/core/ifrexp/raw/ifrexp.hpp index 3b4e6b76c1..b14da1953c 100644 --- a/test/random/module/real/core/ifrexp/raw/ifrexp.hpp +++ b/test/random/module/real/core/ifrexp/raw/ifrexp.hpp @@ -12,10 +12,11 @@ #include TTS_CASE_TPL("wide random check on ifrexp", EVE_TYPE) +(::tts::type) { using i_t = eve::as_integer_t; auto std_ifrexp = [](auto e) { int y; auto x = std::frexp(e, &y); return std::make_tuple(x, i_t(y)); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_ifrexp, eve::raw(eve::ifrexp)); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/ifrexp/regular/ifrexp.hpp b/test/random/module/real/core/ifrexp/regular/ifrexp.hpp index 5d0d2983f7..35d6503da8 100644 --- a/test/random/module/real/core/ifrexp/regular/ifrexp.hpp +++ b/test/random/module/real/core/ifrexp/regular/ifrexp.hpp @@ -12,10 +12,11 @@ #include TTS_CASE_TPL("wide random check on ifrexp", EVE_TYPE) +(::tts::type) { using i_t = eve::as_integer_t; auto std_ifrexp = [](auto e) { int y; auto x = std::frexp(e, &y); return std::make_tuple(x, i_t(y)); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_ifrexp, eve::ifrexp); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/inc/regular/inc.hpp b/test/random/module/real/core/inc/regular/inc.hpp index f95c32f285..eb8bad5b32 100644 --- a/test/random/module/real/core/inc/regular/inc.hpp +++ b/test/random/module/real/core/inc/regular/inc.hpp @@ -13,10 +13,11 @@ #include TTS_CASE_TPL("wide random check on inc", EVE_TYPE) +(::tts::type) { auto std_inc = [](auto e) -> EVE_VALUE { return e == eve::valmax(eve::as()) && (!std::is_floating_point_v) ? eve::valmin(eve::as()) : e+1; }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_inc, eve::inc); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/inc/saturated/inc.hpp b/test/random/module/real/core/inc/saturated/inc.hpp index ccd08a16cc..bf2cd21402 100644 --- a/test/random/module/real/core/inc/saturated/inc.hpp +++ b/test/random/module/real/core/inc/saturated/inc.hpp @@ -13,8 +13,8 @@ #include TTS_CASE_TPL("wide random check on inc", EVE_TYPE) +(::tts::type) { - if constexpr(eve::floating_value) { auto std_inc = [](auto e) -> EVE_VALUE { return e+1; }; @@ -27,4 +27,4 @@ TTS_CASE_TPL("wide random check on inc", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as())+1, eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_inc, eve::saturated(eve::inc)); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/inearest/regular/inearest.hpp b/test/random/module/real/core/inearest/regular/inearest.hpp index 8ba2bed026..8386ef2efb 100644 --- a/test/random/module/real/core/inearest/regular/inearest.hpp +++ b/test/random/module/real/core/inearest/regular/inearest.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on inearest", EVE_TYPE) +(::tts::type) { using i_t = eve::as_integer_t; @@ -32,4 +33,4 @@ TTS_CASE_TPL("wide random check on inearest", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_inearest, eve::int_(eve::nearest)); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_denormal/regular/is_denormal.hpp b/test/random/module/real/core/is_denormal/regular/is_denormal.hpp index 3bd77b6177..47ef85bbef 100644 --- a/test/random/module/real/core/is_denormal/regular/is_denormal.hpp +++ b/test/random/module/real/core/is_denormal/regular/is_denormal.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on is_denormal", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) { @@ -26,4 +27,4 @@ TTS_CASE_TPL("wide random check on is_denormal", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_denormal, eve::is_denormal); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_eqz/regular/is_eqz.hpp b/test/random/module/real/core/is_eqz/regular/is_eqz.hpp index afe7851f25..78aeab8125 100644 --- a/test/random/module/real/core/is_eqz/regular/is_eqz.hpp +++ b/test/random/module/real/core/is_eqz/regular/is_eqz.hpp @@ -13,9 +13,10 @@ #include TTS_CASE_TPL("wide random check on is_eqz", EVE_TYPE) +(::tts::type) { auto std_is_eqz = [](auto e) ->eve::logical { return e == EVE_VALUE(0); }; eve::uniform_prng p(eve::valmin(eve::as())+1, eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_eqz, eve::is_eqz); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_even/regular/is_even.hpp b/test/random/module/real/core/is_even/regular/is_even.hpp index fc46f0ee3d..d8aa10a10c 100644 --- a/test/random/module/real/core/is_even/regular/is_even.hpp +++ b/test/random/module/real/core/is_even/regular/is_even.hpp @@ -14,6 +14,7 @@ #include TTS_CASE_TPL("wide random check on is_even", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) { @@ -27,4 +28,4 @@ TTS_CASE_TPL("wide random check on is_even", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_even, eve::is_even); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_finite/regular/is_finite.hpp b/test/random/module/real/core/is_finite/regular/is_finite.hpp index 4ba8213f6c..d0e9384203 100644 --- a/test/random/module/real/core/is_finite/regular/is_finite.hpp +++ b/test/random/module/real/core/is_finite/regular/is_finite.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on is_finite", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) @@ -27,4 +28,4 @@ TTS_CASE_TPL("wide random check on is_finite", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_finite, eve::is_finite); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_flint/regular/is_flint.hpp b/test/random/module/real/core/is_flint/regular/is_flint.hpp index adf8ed830e..e7fe67165b 100644 --- a/test/random/module/real/core/is_flint/regular/is_flint.hpp +++ b/test/random/module/real/core/is_flint/regular/is_flint.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on is_flint", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) { @@ -26,4 +27,4 @@ TTS_CASE_TPL("wide random check on is_flint", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_flint, eve::is_flint); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_gez/regular/is_gez.hpp b/test/random/module/real/core/is_gez/regular/is_gez.hpp index 88cdb5bacc..05c5794bdb 100644 --- a/test/random/module/real/core/is_gez/regular/is_gez.hpp +++ b/test/random/module/real/core/is_gez/regular/is_gez.hpp @@ -12,9 +12,10 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on is_gez", EVE_TYPE) +(::tts::type) { auto std_is_gez = [](auto e) ->eve::logical { return (e >= EVE_VALUE(0)); }; eve::uniform_prng p(eve::valmin(eve::as())+1, eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_gez, eve::is_gez); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_gtz/regular/is_gtz.hpp b/test/random/module/real/core/is_gtz/regular/is_gtz.hpp index 49064005cd..62d8aa0337 100644 --- a/test/random/module/real/core/is_gtz/regular/is_gtz.hpp +++ b/test/random/module/real/core/is_gtz/regular/is_gtz.hpp @@ -11,9 +11,10 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on is_gtz", EVE_TYPE) +(::tts::type) { auto std_is_gtz = [](auto e) ->eve::logical { return (e > EVE_VALUE(0)); }; eve::uniform_prng p(eve::valmin(eve::as())+1, eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_gtz, eve::is_gtz); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_imag/regular/is_imag.hpp b/test/random/module/real/core/is_imag/regular/is_imag.hpp index 01e5f7077a..bd622e3c87 100644 --- a/test/random/module/real/core/is_imag/regular/is_imag.hpp +++ b/test/random/module/real/core/is_imag/regular/is_imag.hpp @@ -12,9 +12,10 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on is_imag", EVE_TYPE) +(::tts::type) { auto std_is_imag = [](auto e) ->eve::logical { return e == EVE_VALUE(0); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_imag, eve::is_imag); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_infinite/regular/is_infinite.hpp b/test/random/module/real/core/is_infinite/regular/is_infinite.hpp index 643893576e..e32f24c000 100644 --- a/test/random/module/real/core/is_infinite/regular/is_infinite.hpp +++ b/test/random/module/real/core/is_infinite/regular/is_infinite.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on is_infinite", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) { @@ -26,4 +27,4 @@ TTS_CASE_TPL("wide random check on is_infinite", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_infinite, eve::is_infinite); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_lez/regular/is_lez.hpp b/test/random/module/real/core/is_lez/regular/is_lez.hpp index 360eec9d5a..7505ab45e4 100644 --- a/test/random/module/real/core/is_lez/regular/is_lez.hpp +++ b/test/random/module/real/core/is_lez/regular/is_lez.hpp @@ -12,9 +12,10 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on is_lez", EVE_TYPE) +(::tts::type) { auto std_is_lez = [](auto e) ->eve::logical { return e <= EVE_VALUE(0); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_lez, eve::is_lez); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_ltz/regular/is_ltz.hpp b/test/random/module/real/core/is_ltz/regular/is_ltz.hpp index 8d9bd7d857..b784d18245 100644 --- a/test/random/module/real/core/is_ltz/regular/is_ltz.hpp +++ b/test/random/module/real/core/is_ltz/regular/is_ltz.hpp @@ -12,9 +12,10 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on is_ltz", EVE_TYPE) +(::tts::type) { auto std_is_ltz = [](auto e) ->eve::logical { return e < EVE_VALUE(0); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_ltz, eve::is_ltz); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_nan/regular/is_nan.hpp b/test/random/module/real/core/is_nan/regular/is_nan.hpp index 597a41a5cb..4b1b4a8a97 100644 --- a/test/random/module/real/core/is_nan/regular/is_nan.hpp +++ b/test/random/module/real/core/is_nan/regular/is_nan.hpp @@ -12,6 +12,7 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on is_nan", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) { @@ -25,4 +26,4 @@ TTS_CASE_TPL("wide random check on is_nan", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_nan, eve::is_nan); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_negative/regular/is_negative.hpp b/test/random/module/real/core/is_negative/regular/is_negative.hpp index e2b12e61a8..17323b845a 100644 --- a/test/random/module/real/core/is_negative/regular/is_negative.hpp +++ b/test/random/module/real/core/is_negative/regular/is_negative.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on is_negative", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) @@ -27,4 +28,4 @@ TTS_CASE_TPL("wide random check on is_negative", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_negative, eve::is_negative); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_nez/regular/is_nez.hpp b/test/random/module/real/core/is_nez/regular/is_nez.hpp index 334c3a5d6c..b6c1f90e09 100644 --- a/test/random/module/real/core/is_nez/regular/is_nez.hpp +++ b/test/random/module/real/core/is_nez/regular/is_nez.hpp @@ -11,9 +11,10 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on is_nez", EVE_TYPE) +(::tts::type) { auto std_is_nez = [](auto e) ->eve::logical { return e!= EVE_VALUE(0); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_nez, eve::is_nez); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_ngez/regular/is_ngez.hpp b/test/random/module/real/core/is_ngez/regular/is_ngez.hpp index 8e411dcb7b..400c365014 100644 --- a/test/random/module/real/core/is_ngez/regular/is_ngez.hpp +++ b/test/random/module/real/core/is_ngez/regular/is_ngez.hpp @@ -12,9 +12,10 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on is_ngez", EVE_TYPE) +(::tts::type) { auto std_is_ngez = [](auto e) ->eve::logical { return !(e >= EVE_VALUE(0)); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_ngez, eve::is_ngez); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_ngtz/regular/is_ngtz.hpp b/test/random/module/real/core/is_ngtz/regular/is_ngtz.hpp index dacfe1007d..25b96231ef 100644 --- a/test/random/module/real/core/is_ngtz/regular/is_ngtz.hpp +++ b/test/random/module/real/core/is_ngtz/regular/is_ngtz.hpp @@ -12,9 +12,10 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on is_ngtz", EVE_TYPE) +(::tts::type) { auto std_is_ngtz = [](auto e) ->eve::logical { return !(e > 0); }; eve::uniform_prng p(eve::valmin(eve::as())+1, eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_ngtz, eve::is_ngtz); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_nlez/regular/is_nlez.hpp b/test/random/module/real/core/is_nlez/regular/is_nlez.hpp index c6be116be5..12f583b504 100644 --- a/test/random/module/real/core/is_nlez/regular/is_nlez.hpp +++ b/test/random/module/real/core/is_nlez/regular/is_nlez.hpp @@ -11,9 +11,10 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on is_nlez", EVE_TYPE) +(::tts::type) { auto std_is_nlez = [](auto e) ->eve::logical { return !(e <= EVE_VALUE(0)); }; eve::uniform_prng p(eve::valmin(eve::as())+1, eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_nlez, eve::is_nlez); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_nltz/regular/is_nltz.hpp b/test/random/module/real/core/is_nltz/regular/is_nltz.hpp index d6a80ecc67..79a0d0a733 100644 --- a/test/random/module/real/core/is_nltz/regular/is_nltz.hpp +++ b/test/random/module/real/core/is_nltz/regular/is_nltz.hpp @@ -12,9 +12,10 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on is_nltz", EVE_TYPE) +(::tts::type) { auto std_is_nltz = [](auto e) ->eve::logical { return !(e < EVE_VALUE(0)); }; eve::uniform_prng p(eve::valmin(eve::as())+1, eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_nltz, eve::is_nltz); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_normal/regular/is_normal.hpp b/test/random/module/real/core/is_normal/regular/is_normal.hpp index 74037c1425..bf7818d5f2 100644 --- a/test/random/module/real/core/is_normal/regular/is_normal.hpp +++ b/test/random/module/real/core/is_normal/regular/is_normal.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on is_normal", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) { @@ -26,4 +27,4 @@ TTS_CASE_TPL("wide random check on is_normal", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_normal, eve::is_normal); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_not_denormal/regular/is_not_denormal.hpp b/test/random/module/real/core/is_not_denormal/regular/is_not_denormal.hpp index e895be3dfd..a046fed72d 100644 --- a/test/random/module/real/core/is_not_denormal/regular/is_not_denormal.hpp +++ b/test/random/module/real/core/is_not_denormal/regular/is_not_denormal.hpp @@ -12,6 +12,7 @@ #include TTS_CASE_TPL("wide random check on is_not_denormal", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) { @@ -25,4 +26,4 @@ TTS_CASE_TPL("wide random check on is_not_denormal", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_not_denormal, eve::is_not_denormal); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_not_finite/regular/is_not_finite.hpp b/test/random/module/real/core/is_not_finite/regular/is_not_finite.hpp index 054433afcc..21f32424d4 100644 --- a/test/random/module/real/core/is_not_finite/regular/is_not_finite.hpp +++ b/test/random/module/real/core/is_not_finite/regular/is_not_finite.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on is_not_finite", EVE_TYPE) +(::tts::type) { @@ -33,4 +34,4 @@ TTS_CASE_TPL("wide random check on is_not_finite", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_not_finite, eve::is_not_finite); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_not_imag/regular/is_not_imag.hpp b/test/random/module/real/core/is_not_imag/regular/is_not_imag.hpp index 47002d923a..5a2126c66f 100644 --- a/test/random/module/real/core/is_not_imag/regular/is_not_imag.hpp +++ b/test/random/module/real/core/is_not_imag/regular/is_not_imag.hpp @@ -11,10 +11,11 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on is_not_imag", EVE_TYPE) +(::tts::type) { auto std_is_not_imag = [](auto e) ->eve::logical { return e!= EVE_VALUE(0); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_not_imag, eve::is_not_imag); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_not_infinite/regular/is_not_infinite.hpp b/test/random/module/real/core/is_not_infinite/regular/is_not_infinite.hpp index 233b4c664f..5244933130 100644 --- a/test/random/module/real/core/is_not_infinite/regular/is_not_infinite.hpp +++ b/test/random/module/real/core/is_not_infinite/regular/is_not_infinite.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on is_not_infinite", EVE_TYPE) +(::tts::type) { @@ -28,4 +29,4 @@ TTS_CASE_TPL("wide random check on is_not_infinite", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_not_infinite, eve::is_not_infinite); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_not_nan/regular/is_not_nan.hpp b/test/random/module/real/core/is_not_nan/regular/is_not_nan.hpp index 0b59927aef..e665ce2b9a 100644 --- a/test/random/module/real/core/is_not_nan/regular/is_not_nan.hpp +++ b/test/random/module/real/core/is_not_nan/regular/is_not_nan.hpp @@ -12,6 +12,7 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on is_not_nan", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) { @@ -25,4 +26,4 @@ TTS_CASE_TPL("wide random check on is_not_nan", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_not_nan, eve::is_not_nan); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_not_real/regular/is_not_real.hpp b/test/random/module/real/core/is_not_real/regular/is_not_real.hpp index 52b03ee55b..3bf71a3a1a 100644 --- a/test/random/module/real/core/is_not_real/regular/is_not_real.hpp +++ b/test/random/module/real/core/is_not_real/regular/is_not_real.hpp @@ -11,10 +11,11 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on is_not_real", EVE_TYPE) +(::tts::type) { auto std_is_not_real = [](auto ) ->eve::logical { return false; }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_not_real, eve::is_not_real); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_odd/regular/is_odd.hpp b/test/random/module/real/core/is_odd/regular/is_odd.hpp index 422860a204..2f9cb20669 100644 --- a/test/random/module/real/core/is_odd/regular/is_odd.hpp +++ b/test/random/module/real/core/is_odd/regular/is_odd.hpp @@ -14,6 +14,7 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on is_odd", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) @@ -33,4 +34,4 @@ TTS_CASE_TPL("wide random check on is_odd", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_odd, eve::is_odd); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_positive/regular/is_positive.hpp b/test/random/module/real/core/is_positive/regular/is_positive.hpp index eebe792ffb..55ab19ae56 100644 --- a/test/random/module/real/core/is_positive/regular/is_positive.hpp +++ b/test/random/module/real/core/is_positive/regular/is_positive.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on is_positive", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) { @@ -26,4 +27,4 @@ TTS_CASE_TPL("wide random check on is_positive", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_positive, eve::is_positive); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_pow2/regular/is_pow2.hpp b/test/random/module/real/core/is_pow2/regular/is_pow2.hpp index 98990652bb..98b9d74995 100644 --- a/test/random/module/real/core/is_pow2/regular/is_pow2.hpp +++ b/test/random/module/real/core/is_pow2/regular/is_pow2.hpp @@ -14,6 +14,7 @@ #include TTS_CASE_TPL("wide random check on is_pow2", EVE_TYPE) +(::tts::type) { auto std_is_pow2 = [] < typename U > (U e) ->eve::logical { using ui_t = eve::as_integer_t; @@ -22,4 +23,4 @@ TTS_CASE_TPL("wide random check on is_pow2", EVE_TYPE) eve::uniform_prng p(eve::zero(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_pow2, eve::is_pow2); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/is_real/regular/is_real.hpp b/test/random/module/real/core/is_real/regular/is_real.hpp index eb60ddc16a..c6c24e0f8b 100644 --- a/test/random/module/real/core/is_real/regular/is_real.hpp +++ b/test/random/module/real/core/is_real/regular/is_real.hpp @@ -11,10 +11,11 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on is_real", EVE_TYPE) +(::tts::type) { using l_t = eve::as_logical_t; auto std_is_real = [](auto) { return l_t(true); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_is_real, eve::is_real); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/itrunc/regular/itrunc.hpp b/test/random/module/real/core/itrunc/regular/itrunc.hpp index a3ca8cb164..1e7b892584 100644 --- a/test/random/module/real/core/itrunc/regular/itrunc.hpp +++ b/test/random/module/real/core/itrunc/regular/itrunc.hpp @@ -12,6 +12,7 @@ #include TTS_CASE_TPL("wide random check on itrunc", EVE_TYPE) +(::tts::type) { using i_t = eve::as_integer_t; if constexpr(eve::floating_value) @@ -26,4 +27,4 @@ TTS_CASE_TPL("wide random check on itrunc", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_itrunc, eve::int_(eve::trunc)); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/logical_not/regular/logical_not.hpp b/test/random/module/real/core/logical_not/regular/logical_not.hpp index 55bc2b8854..1f03b81e7a 100644 --- a/test/random/module/real/core/logical_not/regular/logical_not.hpp +++ b/test/random/module/real/core/logical_not/regular/logical_not.hpp @@ -12,6 +12,7 @@ #include TTS_CASE_TPL("wide random check on logical_not", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) { @@ -31,4 +32,4 @@ TTS_CASE_TPL("wide random check on logical_not", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_logical_not, eve::logical_not); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/mantissa/regular/mantissa.hpp b/test/random/module/real/core/mantissa/regular/mantissa.hpp index a8b2ad9d8a..56d803ad3d 100644 --- a/test/random/module/real/core/mantissa/regular/mantissa.hpp +++ b/test/random/module/real/core/mantissa/regular/mantissa.hpp @@ -12,10 +12,11 @@ #include TTS_CASE_TPL("wide random check on mantissa", EVE_TYPE) +(::tts::type) { auto internal_f = [](auto e){ int exp; return std::frexp(e, &exp); }; auto std_mantissa = [ internal_f ](auto e) { return internal_f(e)*2; }; eve::uniform_prng p(eve::smallestposval(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_mantissa, eve::mantissa); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/minus/regular/minus.hpp b/test/random/module/real/core/minus/regular/minus.hpp index 5f0b4254a1..3d4476c1a0 100644 --- a/test/random/module/real/core/minus/regular/minus.hpp +++ b/test/random/module/real/core/minus/regular/minus.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on minus", EVE_TYPE) +(::tts::type) { auto std_minus = [](auto e) -> EVE_VALUE{ return -e; }; eve::uniform_prng p(eve::valmin(eve::as())+1, eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_minus, eve::minus); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/nearest/regular/nearest.hpp b/test/random/module/real/core/nearest/regular/nearest.hpp index 9ef835761f..303f3a7de5 100644 --- a/test/random/module/real/core/nearest/regular/nearest.hpp +++ b/test/random/module/real/core/nearest/regular/nearest.hpp @@ -12,6 +12,7 @@ #include TTS_CASE_TPL("wide random check on nearest", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) @@ -26,4 +27,4 @@ TTS_CASE_TPL("wide random check on nearest", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_nearest, eve::nearest); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/next/pedantic/next.hpp b/test/random/module/real/core/next/pedantic/next.hpp index 12b5a1b801..bf77679457 100644 --- a/test/random/module/real/core/next/pedantic/next.hpp +++ b/test/random/module/real/core/next/pedantic/next.hpp @@ -15,6 +15,7 @@ #include TTS_CASE_TPL("wide rng check on next", EVE_TYPE) +(::tts::type) { using v_t = eve::element_type_t; if constexpr(eve::floating_value) @@ -35,4 +36,4 @@ TTS_CASE_TPL("wide rng check on next", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_next, eve::pedantic(eve::next)); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/next/regular/next.hpp b/test/random/module/real/core/next/regular/next.hpp index f0b1c248ec..c53665b87b 100644 --- a/test/random/module/real/core/next/regular/next.hpp +++ b/test/random/module/real/core/next/regular/next.hpp @@ -14,6 +14,7 @@ #include TTS_CASE_TPL("wide rng check on next", EVE_TYPE) +(::tts::type) { using v_t = eve::element_type_t; @@ -35,4 +36,4 @@ TTS_CASE_TPL("wide rng check on next", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_next, eve::next); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/next/saturated/next.hpp b/test/random/module/real/core/next/saturated/next.hpp index f69c265e55..c0c02f72a9 100644 --- a/test/random/module/real/core/next/saturated/next.hpp +++ b/test/random/module/real/core/next/saturated/next.hpp @@ -14,6 +14,7 @@ #include TTS_CASE_TPL("wide rng check on next", EVE_TYPE) +(::tts::type) { using v_t = eve::element_type_t; if constexpr(eve::floating_value) @@ -33,4 +34,4 @@ TTS_CASE_TPL("wide rng check on next", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_next, eve::saturated(eve::next)); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/oneminus/regular/oneminus.hpp b/test/random/module/real/core/oneminus/regular/oneminus.hpp index eb4e3eb1d8..a22b2363f1 100644 --- a/test/random/module/real/core/oneminus/regular/oneminus.hpp +++ b/test/random/module/real/core/oneminus/regular/oneminus.hpp @@ -11,6 +11,7 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on oneminus", EVE_TYPE) +(::tts::type) { if constexpr(std::is_unsigned_v) @@ -27,4 +28,4 @@ TTS_CASE_TPL("wide random check on oneminus", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as())+1, eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_oneminus, eve::oneminus); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/oneminus/saturated/oneminus.hpp b/test/random/module/real/core/oneminus/saturated/oneminus.hpp index a79b9b0612..c0ee2249a3 100644 --- a/test/random/module/real/core/oneminus/saturated/oneminus.hpp +++ b/test/random/module/real/core/oneminus/saturated/oneminus.hpp @@ -11,6 +11,7 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on oneminus", EVE_TYPE) +(::tts::type) { if constexpr(eve::signed_value) @@ -25,4 +26,4 @@ TTS_CASE_TPL("wide random check on oneminus", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_oneminus, eve::saturated(eve::oneminus)); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/plus/regular/plus.hpp b/test/random/module/real/core/plus/regular/plus.hpp index ce571ab949..166b1f8e61 100644 --- a/test/random/module/real/core/plus/regular/plus.hpp +++ b/test/random/module/real/core/plus/regular/plus.hpp @@ -11,9 +11,10 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on plus", EVE_TYPE) +(::tts::type) { auto std_plus = [](auto e) { return e; }; eve::uniform_prng p(eve::valmin(eve::as())+1, eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_plus, eve::plus); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/popcount/regular/popcount.hpp b/test/random/module/real/core/popcount/regular/popcount.hpp index f73048863f..9d7eb1204e 100644 --- a/test/random/module/real/core/popcount/regular/popcount.hpp +++ b/test/random/module/real/core/popcount/regular/popcount.hpp @@ -13,6 +13,7 @@ #include "producers.hpp" TTS_CASE_TPL("wide rng check on popcount", EVE_TYPE) +(::tts::type) { using u_t = eve::as_integer_t; using su_t = eve::element_type_t; @@ -25,4 +26,4 @@ TTS_CASE_TPL("wide rng check on popcount", EVE_TYPE) return j; }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_popcount, eve::popcount); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/prev/pedantic/prev.hpp b/test/random/module/real/core/prev/pedantic/prev.hpp index 02b9e179da..135afc63e3 100644 --- a/test/random/module/real/core/prev/pedantic/prev.hpp +++ b/test/random/module/real/core/prev/pedantic/prev.hpp @@ -14,6 +14,7 @@ #include TTS_CASE_TPL("wide rng check on prev", EVE_TYPE) +(::tts::type) { using v_t = eve::element_type_t; if constexpr(eve::floating_value) @@ -33,4 +34,4 @@ TTS_CASE_TPL("wide rng check on prev", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_prev, eve::pedantic(eve::prev)); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/prev/regular/prev.hpp b/test/random/module/real/core/prev/regular/prev.hpp index df05abce3c..52af4e68d5 100644 --- a/test/random/module/real/core/prev/regular/prev.hpp +++ b/test/random/module/real/core/prev/regular/prev.hpp @@ -14,6 +14,7 @@ #include TTS_CASE_TPL("wide rng check on prev", EVE_TYPE) +(::tts::type) { using v_t = eve::element_type_t; if constexpr(eve::floating_value) @@ -33,4 +34,4 @@ TTS_CASE_TPL("wide rng check on prev", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_prev, eve::prev); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/prev/saturated/prev.hpp b/test/random/module/real/core/prev/saturated/prev.hpp index b55825fc96..fa425f3355 100644 --- a/test/random/module/real/core/prev/saturated/prev.hpp +++ b/test/random/module/real/core/prev/saturated/prev.hpp @@ -14,6 +14,7 @@ #include TTS_CASE_TPL("wide rng check on prev", EVE_TYPE) +(::tts::type) { using v_t = eve::element_type_t; if constexpr(eve::floating_value) @@ -34,4 +35,4 @@ TTS_CASE_TPL("wide rng check on prev", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_prev, eve::saturated(eve::prev)); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/rec/regular/rec.hpp b/test/random/module/real/core/rec/regular/rec.hpp index 5973973b01..83ef990f44 100644 --- a/test/random/module/real/core/rec/regular/rec.hpp +++ b/test/random/module/real/core/rec/regular/rec.hpp @@ -12,6 +12,7 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on rec", EVE_TYPE) +(::tts::type) { if constexpr(eve::integral_value) { @@ -30,4 +31,4 @@ TTS_CASE_TPL("wide random check on rec", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_rec, eve::rec); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/round/regular/round.hpp b/test/random/module/real/core/round/regular/round.hpp index 7aead5e246..6bb84c1e33 100644 --- a/test/random/module/real/core/round/regular/round.hpp +++ b/test/random/module/real/core/round/regular/round.hpp @@ -12,6 +12,7 @@ #include TTS_CASE_TPL("wide random check on round", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) { @@ -25,4 +26,4 @@ TTS_CASE_TPL("wide random check on round", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_round, eve::round); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/rsqrt/pedantic/rsqrt.hpp b/test/random/module/real/core/rsqrt/pedantic/rsqrt.hpp index 0dc8166ee9..b9e8f6c91e 100644 --- a/test/random/module/real/core/rsqrt/pedantic/rsqrt.hpp +++ b/test/random/module/real/core/rsqrt/pedantic/rsqrt.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide rng check on rsqrt", EVE_TYPE) +(::tts::type) { auto std_rsqrt = [](auto e) { return EVE_VALUE(1.0l/std::sqrt((long double)e)); }; eve::uniform_prng p(EVE_VALUE(0), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_rsqrt, eve::pedantic(eve::rsqrt)); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/rsqrt/regular/rsqrt.hpp b/test/random/module/real/core/rsqrt/regular/rsqrt.hpp index 9e17a531a3..e30a0a357a 100644 --- a/test/random/module/real/core/rsqrt/regular/rsqrt.hpp +++ b/test/random/module/real/core/rsqrt/regular/rsqrt.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on rsqrt", EVE_TYPE) +(::tts::type) { auto std_rsqrt = [](auto e) { return EVE_VALUE(1)/std::sqrt(e); }; eve::uniform_prng p(eve::smallestposval(eve::as()), EVE_VALUE(eve::valmax(eve::as()))); TTS_RANGE_CHECK(p, std_rsqrt, eve::rsqrt); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/sign/regular/sign.hpp b/test/random/module/real/core/sign/regular/sign.hpp index 8ddef2f5a9..9206c7dbf4 100644 --- a/test/random/module/real/core/sign/regular/sign.hpp +++ b/test/random/module/real/core/sign/regular/sign.hpp @@ -12,6 +12,7 @@ #include TTS_CASE_TPL("wide random check on sign", EVE_TYPE) +(::tts::type) { if constexpr(eve::signed_value) { @@ -25,4 +26,4 @@ TTS_CASE_TPL("wide random check on sign", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_sign, eve::sign); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/signnz/regular/signnz.hpp b/test/random/module/real/core/signnz/regular/signnz.hpp index 9814d64193..d9e873c91c 100644 --- a/test/random/module/real/core/signnz/regular/signnz.hpp +++ b/test/random/module/real/core/signnz/regular/signnz.hpp @@ -11,6 +11,7 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on signnz", EVE_TYPE) +(::tts::type) { if constexpr(eve::signed_value) { @@ -24,4 +25,4 @@ TTS_CASE_TPL("wide random check on signnz", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_signnz, eve::signnz); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/sqr/regular/sqr.hpp b/test/random/module/real/core/sqr/regular/sqr.hpp index 084e8bd591..50eb9943fc 100644 --- a/test/random/module/real/core/sqr/regular/sqr.hpp +++ b/test/random/module/real/core/sqr/regular/sqr.hpp @@ -11,10 +11,11 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on sqr", EVE_TYPE) +(::tts::type) { auto std_sqr = [](auto e) -> EVE_VALUE { return e*e; }; eve::uniform_prng p(eve::valmin(eve::as())+1, eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_sqr, eve::sqr); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/sqr/saturated/sqr.hpp b/test/random/module/real/core/sqr/saturated/sqr.hpp index 21a7171e3f..4072796e3e 100644 --- a/test/random/module/real/core/sqr/saturated/sqr.hpp +++ b/test/random/module/real/core/sqr/saturated/sqr.hpp @@ -12,6 +12,7 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on sqr", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) { @@ -44,4 +45,4 @@ TTS_CASE_TPL("wide random check on sqr", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_sqr, eve::saturated(eve::sqr)); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/sqr_abs/regular/sqr_abs.hpp b/test/random/module/real/core/sqr_abs/regular/sqr_abs.hpp index 59fddd98ed..2f90ac8a92 100644 --- a/test/random/module/real/core/sqr_abs/regular/sqr_abs.hpp +++ b/test/random/module/real/core/sqr_abs/regular/sqr_abs.hpp @@ -11,9 +11,10 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on sqr_abs", EVE_TYPE) +(::tts::type) { auto std_sqr_abs = [](auto e) { return e*e; }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_sqr_abs, eve::sqr_abs); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/sqrt/regular/sqrt.hpp b/test/random/module/real/core/sqrt/regular/sqrt.hpp index bdb1090e71..2355a3dd3f 100644 --- a/test/random/module/real/core/sqrt/regular/sqrt.hpp +++ b/test/random/module/real/core/sqrt/regular/sqrt.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on sqrt", EVE_TYPE) +(::tts::type) { auto std_sqrt = [](auto e) { return std::sqrt(e); }; eve::uniform_prng p(EVE_VALUE(0), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_sqrt, eve::sqrt); -} +}; \ No newline at end of file diff --git a/test/random/module/real/core/trunc/regular/trunc.hpp b/test/random/module/real/core/trunc/regular/trunc.hpp index aae756de96..47adbdaf17 100644 --- a/test/random/module/real/core/trunc/regular/trunc.hpp +++ b/test/random/module/real/core/trunc/regular/trunc.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on to int", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) { @@ -26,4 +27,4 @@ TTS_CASE_TPL("wide random check on to int", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_trunc, eve::trunc); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/acos/raw/acos.hpp b/test/random/module/real/math/acos/raw/acos.hpp index 005d779808..3151d1683d 100644 --- a/test/random/module/real/math/acos/raw/acos.hpp +++ b/test/random/module/real/math/acos/raw/acos.hpp @@ -11,10 +11,11 @@ #include TTS_CASE_TPL("wide random check on acos", EVE_TYPE) +(::tts::type) { auto std_acos = [](auto e) { return std::acos(e); }; double th = std::is_same_v ? 4096.0 : 512.0; eve::uniform_prng p(-1,1); TTS_RANGE_CHECK_WITH(p, std_acos, eve::raw(eve::acos), th); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/acos/regular/acos.hpp b/test/random/module/real/math/acos/regular/acos.hpp index 36a04fed60..3e3066d7a0 100644 --- a/test/random/module/real/math/acos/regular/acos.hpp +++ b/test/random/module/real/math/acos/regular/acos.hpp @@ -10,9 +10,10 @@ #include TTS_CASE_TPL("wide random check on acos", EVE_TYPE) +(::tts::type) { auto std_acos = [](auto e) { return std::acos(e); }; eve::uniform_prng p(-1,1); TTS_RANGE_CHECK_WITH(p, std_acos, eve::acos, 1024.0); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/acosd/raw/acosd.hpp b/test/random/module/real/math/acosd/raw/acosd.hpp index 0fdde58242..aa18e8024d 100644 --- a/test/random/module/real/math/acosd/raw/acosd.hpp +++ b/test/random/module/real/math/acosd/raw/acosd.hpp @@ -11,10 +11,11 @@ #include TTS_CASE_TPL("wide random check on acosd", EVE_TYPE) +(::tts::type) { auto std_acosd = [](auto e) { return eve::radindeg(std::acos(e)); }; double th = std::is_same_v ? 8192.0 : 1024.0; eve::uniform_prng p(-1, 1); TTS_RANGE_CHECK_WITH(p, std_acosd, eve::raw(eve::acosd), th); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/acosd/regular/acosd.hpp b/test/random/module/real/math/acosd/regular/acosd.hpp index 37da62e6d9..0a6a926aeb 100644 --- a/test/random/module/real/math/acosd/regular/acosd.hpp +++ b/test/random/module/real/math/acosd/regular/acosd.hpp @@ -12,10 +12,11 @@ #include TTS_CASE_TPL("wide random check on acosd", EVE_TYPE) +(::tts::type) { auto std_acosd = [](auto e) { return eve::radindeg(std::acos(e)); }; double th = std::is_same_v ? 4096.0 : 512.0; eve::uniform_prng p(-1, 1); TTS_RANGE_CHECK_WITH(p, std_acosd, eve::acosd, th); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/acosh/regular/acosh.hpp b/test/random/module/real/math/acosh/regular/acosh.hpp index 38adbc15d5..87561c8282 100644 --- a/test/random/module/real/math/acosh/regular/acosh.hpp +++ b/test/random/module/real/math/acosh/regular/acosh.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on acosh", EVE_TYPE) +(::tts::type) { auto std_acosh = [](auto e) { return std::acosh(e); }; eve::uniform_prng p(EVE_VALUE(1), eve::maxlog(eve::as())); TTS_RANGE_CHECK(p, std_acosh, eve::acosh); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/acospi/raw/acospi.hpp b/test/random/module/real/math/acospi/raw/acospi.hpp index 2c0aa38955..85c95c63cf 100644 --- a/test/random/module/real/math/acospi/raw/acospi.hpp +++ b/test/random/module/real/math/acospi/raw/acospi.hpp @@ -11,10 +11,11 @@ #include TTS_CASE_TPL("wide random check on acospi", EVE_TYPE) +(::tts::type) { auto std_acospi = [](auto e) { return eve::invpi(eve::as())*std::acos(e); }; double th = std::is_same_v ? 4096.0 : 512.0; eve::uniform_prng p(-1, 1); TTS_RANGE_CHECK_WITH(p, std_acospi, eve::raw(eve::acospi), th); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/acospi/regular/acospi.hpp b/test/random/module/real/math/acospi/regular/acospi.hpp index 5b2777df1c..33111067be 100644 --- a/test/random/module/real/math/acospi/regular/acospi.hpp +++ b/test/random/module/real/math/acospi/regular/acospi.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on acospi", EVE_TYPE) +(::tts::type) { auto std_acospi = [](auto e) { return eve::invpi(eve::as())*std::acos(e); }; eve::uniform_prng p(-1, 1); TTS_RANGE_CHECK(p, std_acospi, eve::acospi); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/acot/regular/acot.hpp b/test/random/module/real/math/acot/regular/acot.hpp index bb59e4aac7..b198210cd5 100644 --- a/test/random/module/real/math/acot/regular/acot.hpp +++ b/test/random/module/real/math/acot/regular/acot.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on acot", EVE_TYPE) +(::tts::type) { auto std_acot = [](auto e) { return std::atan(eve::rec(e)); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_acot, eve::acot); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/acoth/regular/acoth.hpp b/test/random/module/real/math/acoth/regular/acoth.hpp index 807dd4399e..08ca791e46 100644 --- a/test/random/module/real/math/acoth/regular/acoth.hpp +++ b/test/random/module/real/math/acoth/regular/acoth.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on acoth", EVE_TYPE) +(::tts::type) { auto std_acoth = [](auto e) { return std::atanh(eve::rec(e)); }; @@ -21,4 +22,4 @@ TTS_CASE_TPL("wide random check on acoth", EVE_TYPE) eve::uniform_prng p2(eve::valmin(eve::as()), EVE_VALUE(-1)); TTS_RANGE_CHECK_WITH(p2, std_acoth, eve::acoth, 64); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/acotpi/regular/acotpi.hpp b/test/random/module/real/math/acotpi/regular/acotpi.hpp index 7028904fd6..4f589fa204 100644 --- a/test/random/module/real/math/acotpi/regular/acotpi.hpp +++ b/test/random/module/real/math/acotpi/regular/acotpi.hpp @@ -14,9 +14,10 @@ #include TTS_CASE_TPL("wide random check on acotpi", EVE_TYPE) +(::tts::type) { auto std_acotpi = [](auto e) { return eve::invpi(eve::as())*std::atan(eve::rec(e)); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_acotpi, eve::acotpi); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/acsc/regular/acsc.hpp b/test/random/module/real/math/acsc/regular/acsc.hpp index 587fb01fa1..55f0ef945e 100644 --- a/test/random/module/real/math/acsc/regular/acsc.hpp +++ b/test/random/module/real/math/acsc/regular/acsc.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on acsc", EVE_TYPE) +(::tts::type) { auto std_acsc = [](auto e) { return std::asin(eve::rec(e)); }; @@ -21,4 +22,4 @@ TTS_CASE_TPL("wide random check on acsc", EVE_TYPE) eve::uniform_prng p2(EVE_VALUE(1), eve::valmax(eve::as())); TTS_RANGE_CHECK_WITH(p2, std_acsc, eve::acsc, 4.); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/acscd/regular/acscd.hpp b/test/random/module/real/math/acscd/regular/acscd.hpp index 7c3fe3fdef..cdf9550b70 100644 --- a/test/random/module/real/math/acscd/regular/acscd.hpp +++ b/test/random/module/real/math/acscd/regular/acscd.hpp @@ -15,6 +15,7 @@ #include TTS_CASE_TPL("wide random check on acscd", EVE_TYPE) +(::tts::type) { auto std_acscd = [](auto e) { return eve::radindeg(std::asin(eve::rec(e))); }; @@ -23,4 +24,4 @@ TTS_CASE_TPL("wide random check on acscd", EVE_TYPE) eve::uniform_prng p2(EVE_VALUE(1), eve::valmax(eve::as())); TTS_RANGE_CHECK_WITH(p2, std_acscd, eve::acscd, 4.); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/acscpi/regular/acscpi.hpp b/test/random/module/real/math/acscpi/regular/acscpi.hpp index a5af808fc3..b885c1aef7 100644 --- a/test/random/module/real/math/acscpi/regular/acscpi.hpp +++ b/test/random/module/real/math/acscpi/regular/acscpi.hpp @@ -14,6 +14,7 @@ #include TTS_CASE_TPL("wide random check on acscpi", EVE_TYPE) +(::tts::type) { auto std_acscpi = [](auto e) { return eve::invpi(eve::as())*std::asin(eve::rec(e)); }; @@ -22,4 +23,4 @@ TTS_CASE_TPL("wide random check on acscpi", EVE_TYPE) eve::uniform_prng p2(EVE_VALUE(1), eve::valmax(eve::as())); TTS_RANGE_CHECK_WITH(p2, std_acscpi, eve::acscpi, 8.); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/asec/regular/asec.hpp b/test/random/module/real/math/asec/regular/asec.hpp index a1d54d8182..527fb65be9 100644 --- a/test/random/module/real/math/asec/regular/asec.hpp +++ b/test/random/module/real/math/asec/regular/asec.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on asec", EVE_TYPE) +(::tts::type) { auto std_asec = [](auto e) { return std::acos(eve::rec(e)); }; @@ -21,4 +22,4 @@ TTS_CASE_TPL("wide random check on asec", EVE_TYPE) eve::uniform_prng p2(EVE_VALUE(1), eve::valmax(eve::as())); TTS_RANGE_CHECK(p2, std_asec, eve::asec); -} +}; diff --git a/test/random/module/real/math/asecd/regular/asecd.hpp b/test/random/module/real/math/asecd/regular/asecd.hpp index 8a88240e63..c3dcc87363 100644 --- a/test/random/module/real/math/asecd/regular/asecd.hpp +++ b/test/random/module/real/math/asecd/regular/asecd.hpp @@ -15,6 +15,7 @@ #include TTS_CASE_TPL("wide random check on asecd", EVE_TYPE) +(::tts::type) { auto std_asecd = [](auto e) { return eve::radindeg(std::acos(eve::rec(e))); }; @@ -23,4 +24,4 @@ TTS_CASE_TPL("wide random check on asecd", EVE_TYPE) eve::uniform_prng p2(EVE_VALUE(1), eve::valmax(eve::as())); TTS_RANGE_CHECK(p2, std_asecd, eve::asecd); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/asecpi/regular/asecpi.hpp b/test/random/module/real/math/asecpi/regular/asecpi.hpp index cc86361ede..594a0e2ecc 100644 --- a/test/random/module/real/math/asecpi/regular/asecpi.hpp +++ b/test/random/module/real/math/asecpi/regular/asecpi.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on asecpi", EVE_TYPE) +(::tts::type) { auto std_asecpi = [](auto e) { return eve::invpi(eve::as())*std::acos(eve::rec(e)); }; @@ -21,4 +22,4 @@ TTS_CASE_TPL("wide random check on asecpi", EVE_TYPE) eve::uniform_prng p2(EVE_VALUE(1), eve::valmax(eve::as())); TTS_RANGE_CHECK(p2, std_asecpi, eve::asecpi); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/asin/regular/asin.hpp b/test/random/module/real/math/asin/regular/asin.hpp index 2b649b43c3..f1f2ceb680 100644 --- a/test/random/module/real/math/asin/regular/asin.hpp +++ b/test/random/module/real/math/asin/regular/asin.hpp @@ -10,9 +10,10 @@ #include TTS_CASE_TPL("wide random check on asin", EVE_TYPE) +(::tts::type) { auto std_asin = [](auto e) { return std::asin(e); }; eve::uniform_prng p(-1, 1); TTS_RANGE_CHECK(p, std_asin, eve::asin); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/asind/regular/asind.hpp b/test/random/module/real/math/asind/regular/asind.hpp index 3b39932c10..cf9bf3af36 100644 --- a/test/random/module/real/math/asind/regular/asind.hpp +++ b/test/random/module/real/math/asind/regular/asind.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on asind", EVE_TYPE) +(::tts::type) { auto std_asind = [](auto e) { return eve::radindeg(std::asin(e)); }; eve::uniform_prng p(-1, 1); TTS_RANGE_CHECK(p, std_asind, eve::asind); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/asinh/regular/asinh.hpp b/test/random/module/real/math/asinh/regular/asinh.hpp index 94272429d6..fe58e86c6a 100644 --- a/test/random/module/real/math/asinh/regular/asinh.hpp +++ b/test/random/module/real/math/asinh/regular/asinh.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on asinh", EVE_TYPE) +(::tts::type) { auto std_asinh = [](auto e) { return std::asinh(e); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_asinh, eve::asinh); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/asinpi/regular/asinpi.hpp b/test/random/module/real/math/asinpi/regular/asinpi.hpp index 2c464b4018..24c7ac88aa 100644 --- a/test/random/module/real/math/asinpi/regular/asinpi.hpp +++ b/test/random/module/real/math/asinpi/regular/asinpi.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on asinpi", EVE_TYPE) +(::tts::type) { auto std_asinpi = [](auto e) { return eve::invpi(eve::as())*std::asin(e); }; eve::uniform_prng p(-1, 1); TTS_RANGE_CHECK(p, std_asinpi, eve::asinpi); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/atan/regular/atan.hpp b/test/random/module/real/math/atan/regular/atan.hpp index 5087189664..f742a5fade 100644 --- a/test/random/module/real/math/atan/regular/atan.hpp +++ b/test/random/module/real/math/atan/regular/atan.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on atan", EVE_TYPE) +(::tts::type) { auto std_atan = [](auto e) { return std::atan(e); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_atan, eve::atan); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/atand/regular/atand.hpp b/test/random/module/real/math/atand/regular/atand.hpp index 01bd889679..e3536de203 100644 --- a/test/random/module/real/math/atand/regular/atand.hpp +++ b/test/random/module/real/math/atand/regular/atand.hpp @@ -14,9 +14,10 @@ #include TTS_CASE_TPL("wide random check on atand", EVE_TYPE) +(::tts::type) { auto std_atand = [](auto e) { return eve::radindeg(std::atan(e)); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_atand, eve::atand); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/atanh/regular/atanh.hpp b/test/random/module/real/math/atanh/regular/atanh.hpp index 319a03863a..60a82e6071 100644 --- a/test/random/module/real/math/atanh/regular/atanh.hpp +++ b/test/random/module/real/math/atanh/regular/atanh.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on atanh", EVE_TYPE) +(::tts::type) { auto std_atanh = [](auto e) { return std::atanh(e); }; eve::uniform_prng p(-1, 1); TTS_RANGE_CHECK(p, std_atanh, eve::atanh); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/atanpi/regular/atanpi.hpp b/test/random/module/real/math/atanpi/regular/atanpi.hpp index 5083a1a941..f7fffbf853 100644 --- a/test/random/module/real/math/atanpi/regular/atanpi.hpp +++ b/test/random/module/real/math/atanpi/regular/atanpi.hpp @@ -13,9 +13,10 @@ #include TTS_CASE_TPL("wide random check on atanpi", EVE_TYPE) +(::tts::type) { auto std_atanpi = [](auto e) { return eve::invpi(eve::as())*std::atan(e); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_atanpi, eve::atanpi); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/cos/big/cos.hpp b/test/random/module/real/math/cos/big/cos.hpp deleted file mode 100644 index e262354c68..0000000000 --- a/test/random/module/real/math/cos/big/cos.hpp +++ /dev/null @@ -1,20 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on cos", EVE_TYPE) -{ - auto std_cos = [](auto e) { return std::cos(e); }; - - eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_cos, eve::big(eve::cos)); -} diff --git a/test/random/module/real/math/cos/medium/cos.hpp b/test/random/module/real/math/cos/full_circle/cos.hpp similarity index 67% rename from test/random/module/real/math/cos/medium/cos.hpp rename to test/random/module/real/math/cos/full_circle/cos.hpp index ff5a2015d1..effbcca4e2 100644 --- a/test/random/module/real/math/cos/medium/cos.hpp +++ b/test/random/module/real/math/cos/full_circle/cos.hpp @@ -6,15 +6,15 @@ */ //================================================================================================== #include -#include +#include #include "producers.hpp" #include TTS_CASE_TPL("wide random check on cos", EVE_TYPE) +(::tts::type) { auto std_cos = [](auto e) -> EVE_VALUE { return std::cos(double(e)); }; - auto l = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); - eve::uniform_prng p(-l, l); - TTS_RANGE_CHECK_WITH(p, std_cos, eve::medium(eve::cos), 0.5); -} + eve::uniform_prng p(-eve::pi(eve::as()), eve::pi(eve::as())); + TTS_RANGE_CHECK(p, std_cos, eve::full_circle(eve::cos)); +}; \ No newline at end of file diff --git a/test/random/module/real/math/cos/small/cos.hpp b/test/random/module/real/math/cos/half_circle/cos.hpp similarity index 87% rename from test/random/module/real/math/cos/small/cos.hpp rename to test/random/module/real/math/cos/half_circle/cos.hpp index 2b864abbb3..f4ff13a823 100644 --- a/test/random/module/real/math/cos/small/cos.hpp +++ b/test/random/module/real/math/cos/half_circle/cos.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on cos", EVE_TYPE) +(::tts::type) { auto std_cos = [](auto e) -> EVE_VALUE { return std::cos(double(e)); }; eve::uniform_prng p(-eve::pio_2(eve::as()), eve::pio_2(eve::as())); - TTS_RANGE_CHECK(p, std_cos, eve::small(eve::cos)); -} + TTS_RANGE_CHECK(p, std_cos, eve::half_circle(eve::cos)); +}; \ No newline at end of file diff --git a/test/random/module/real/math/cos/restricted/cos.hpp b/test/random/module/real/math/cos/quarter_circle/cos.hpp similarity index 87% rename from test/random/module/real/math/cos/restricted/cos.hpp rename to test/random/module/real/math/cos/quarter_circle/cos.hpp index fa8b64c88f..026ac3450f 100644 --- a/test/random/module/real/math/cos/restricted/cos.hpp +++ b/test/random/module/real/math/cos/quarter_circle/cos.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on cos", EVE_TYPE) +(::tts::type) { auto std_cos = [](auto e) { return std::cos(e); }; eve::uniform_prng p(-eve::pio_4(eve::as()), eve::pio_4(eve::as())); - TTS_RANGE_CHECK(p, std_cos, eve::restricted(eve::cos)); -} + TTS_RANGE_CHECK(p, std_cos, eve::quarter_circle(eve::cos)); +}; \ No newline at end of file diff --git a/test/random/module/real/math/cos/regular/cos.hpp b/test/random/module/real/math/cos/regular/cos.hpp index 4b7995e106..3e6045819e 100644 --- a/test/random/module/real/math/cos/regular/cos.hpp +++ b/test/random/module/real/math/cos/regular/cos.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on cos", EVE_TYPE) +(::tts::type) { auto std_cos = [](auto e) { return std::cos(e); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_cos, eve::cos); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/cosh/regular/cosh.hpp b/test/random/module/real/math/cosh/regular/cosh.hpp index 359e936962..c4f5e8b1ea 100644 --- a/test/random/module/real/math/cosh/regular/cosh.hpp +++ b/test/random/module/real/math/cosh/regular/cosh.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on cosh", EVE_TYPE) +(::tts::type) { auto std_cosh = [](auto e) { return std::cosh(e); }; eve::uniform_prng p(-eve::maxlog(eve::as()), eve::maxlog(eve::as())); TTS_RANGE_CHECK(p, std_cosh, eve::cosh); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/cospi/big/cospi.hpp b/test/random/module/real/math/cospi/big/cospi.hpp deleted file mode 100644 index f819671372..0000000000 --- a/test/random/module/real/math/cospi/big/cospi.hpp +++ /dev/null @@ -1,31 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include "producers.hpp" -#include -#include - -TTS_CASE_TPL("wide random check on cospi", EVE_TYPE) -{ - auto my_stdcospi = [](auto x) -> EVE_VALUE {return boost::math::cos_pi(x); }; - - eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, my_stdcospi, eve::big(eve::cospi)); -} - -// #include -// TTS_CASE_TPL("wide random check on cospi", EVE_TYPE) -// { -// ::crlibm_init(); -// auto my_stdcospi = tts::vectorize([](EVE_VALUE x){return EVE_VALUE(::cospi_rn(x)); }); -// eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); -// TTS_RANGE_CHECK(p, my_stdcospi, eve::big(eve::cospi)); -// } diff --git a/test/random/module/real/math/cospi/medium/cospi.hpp b/test/random/module/real/math/cospi/medium/cospi.hpp deleted file mode 100644 index 9fecf0da0a..0000000000 --- a/test/random/module/real/math/cospi/medium/cospi.hpp +++ /dev/null @@ -1,20 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include "producers.hpp" -#include -#include - -TTS_CASE_TPL("wide random check on cospi", EVE_TYPE) -{ - auto my_stdcospi = [](auto x) -> EVE_VALUE {return boost::math::cos_pi(x); }; - - eve::uniform_prng p(EVE_VALUE(-1000.0), EVE_VALUE(1000.0)); - TTS_RANGE_CHECK(p, my_stdcospi, eve::medium(eve::cospi)); -} diff --git a/test/random/module/real/math/cospi/restricted/cospi.hpp b/test/random/module/real/math/cospi/quarter_circle/cospi.hpp similarity index 87% rename from test/random/module/real/math/cospi/restricted/cospi.hpp rename to test/random/module/real/math/cospi/quarter_circle/cospi.hpp index 20ce037b8c..44635190ed 100644 --- a/test/random/module/real/math/cospi/restricted/cospi.hpp +++ b/test/random/module/real/math/cospi/quarter_circle/cospi.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on cospi", EVE_TYPE) +(::tts::type) { auto my_stdcospi = [](auto x) -> EVE_VALUE {return boost::math::cos_pi(x); }; eve::uniform_prng p(-0.25, 0.25); - TTS_RANGE_CHECK(p, my_stdcospi, eve::restricted(eve::cospi)); -} + TTS_RANGE_CHECK(p, my_stdcospi, eve::quarter_circle(eve::cospi)); +}; \ No newline at end of file diff --git a/test/random/module/real/math/cospi/regular/cospi.hpp b/test/random/module/real/math/cospi/regular/cospi.hpp index b89451b2f8..adeacd693a 100644 --- a/test/random/module/real/math/cospi/regular/cospi.hpp +++ b/test/random/module/real/math/cospi/regular/cospi.hpp @@ -14,9 +14,10 @@ #include TTS_CASE_TPL("wide random check on cospi", EVE_TYPE) +(::tts::type) { auto my_stdcospi = [](auto x) -> EVE_VALUE {return boost::math::cos_pi(x); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, my_stdcospi, eve::cospi); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/cot/big/cot.hpp b/test/random/module/real/math/cot/big/cot.hpp deleted file mode 100644 index 8fa0a62f7c..0000000000 --- a/test/random/module/real/math/cot/big/cot.hpp +++ /dev/null @@ -1,29 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on cot", EVE_TYPE) -{ - auto std_cot = [](auto e) -> EVE_VALUE { return 1/std::tan(double(e)); }; - - if constexpr(eve::platform::supports_denormals) - { - eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_cot, eve::big(eve::cot)); - } - else - { - eve::uniform_prng p(eve::smallestposval(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_cot, eve::big(eve::cot)); - } -} diff --git a/test/random/module/real/math/cot/medium/cot.hpp b/test/random/module/real/math/cot/full_circle/cot.hpp similarity index 78% rename from test/random/module/real/math/cot/medium/cot.hpp rename to test/random/module/real/math/cot/full_circle/cot.hpp index e753a9bc7c..21885d9293 100644 --- a/test/random/module/real/math/cot/medium/cot.hpp +++ b/test/random/module/real/math/cot/full_circle/cot.hpp @@ -13,19 +13,20 @@ #include TTS_CASE_TPL("wide random check on cot", EVE_TYPE) +(::tts::type) { auto std_cot = [](auto e) -> EVE_VALUE { return 1/std::tan(double(e)); }; - auto l = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); + auto l = eve::detail::Rempio2_limit(eve::full_circle_type(), eve::as()); if constexpr(eve::platform::supports_denormals) { eve::uniform_prng p(-l, l); - TTS_RANGE_CHECK(p, std_cot, eve::medium(eve::cot)); + TTS_RANGE_CHECK(p, std_cot, eve::full_circle(eve::cot)); } else { eve::uniform_prng p(eve::smallestposval(eve::as()), l); - TTS_RANGE_CHECK(p, std_cot, eve::medium(eve::cot)); + TTS_RANGE_CHECK(p, std_cot, eve::full_circle(eve::cot)); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/cot/small/cot.hpp b/test/random/module/real/math/cot/half_circle/cot.hpp similarity index 88% rename from test/random/module/real/math/cot/small/cot.hpp rename to test/random/module/real/math/cot/half_circle/cot.hpp index ae22fae82d..fb771f4855 100644 --- a/test/random/module/real/math/cot/small/cot.hpp +++ b/test/random/module/real/math/cot/half_circle/cot.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on cot", EVE_TYPE) +(::tts::type) { auto std_cot = [](auto e) -> EVE_VALUE { return eve::rec(std::tan(double(e))); }; eve::uniform_prng p(-eve::pio_2(eve::as()), eve::pio_2(eve::as())); - TTS_RANGE_CHECK(p, std_cot, eve::small(eve::cot)); -} + TTS_RANGE_CHECK(p, std_cot, eve::half_circle(eve::cot)); +}; \ No newline at end of file diff --git a/test/random/module/real/math/cot/restricted/cot.hpp b/test/random/module/real/math/cot/quarter_circle/cot.hpp similarity index 84% rename from test/random/module/real/math/cot/restricted/cot.hpp rename to test/random/module/real/math/cot/quarter_circle/cot.hpp index d1b0505710..0fa6904b2f 100644 --- a/test/random/module/real/math/cot/restricted/cot.hpp +++ b/test/random/module/real/math/cot/quarter_circle/cot.hpp @@ -12,17 +12,18 @@ #include TTS_CASE_TPL("wide random check on cot", EVE_TYPE) +(::tts::type) { auto std_cot = [](auto e) -> EVE_VALUE { return 1/std::tan(double(e)); }; if constexpr(eve::platform::supports_denormals) { eve::uniform_prng p(-eve::pio_4(eve::as()), eve::pio_4(eve::as())); - TTS_RANGE_CHECK(p, std_cot, eve::restricted(eve::cot)); + TTS_RANGE_CHECK(p, std_cot, eve::quarter_circle(eve::cot)); } else { eve::uniform_prng p(eve::smallestposval(eve::as()), eve::pio_4(eve::as())); - TTS_RANGE_CHECK(p, std_cot, eve::restricted(eve::cot)); + TTS_RANGE_CHECK(p, std_cot, eve::quarter_circle(eve::cot)); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/cot/regular/cot.hpp b/test/random/module/real/math/cot/regular/cot.hpp index 0fad47c720..5ad9152c9d 100644 --- a/test/random/module/real/math/cot/regular/cot.hpp +++ b/test/random/module/real/math/cot/regular/cot.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on cot", EVE_TYPE) +(::tts::type) { auto std_cot = [](auto e) -> EVE_VALUE { return 1/std::tan(double(e)); }; @@ -26,4 +27,4 @@ TTS_CASE_TPL("wide random check on cot", EVE_TYPE) eve::uniform_prng p(eve::smallestposval(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_cot, eve::cot); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/coth/regular/coth.hpp b/test/random/module/real/math/coth/regular/coth.hpp index bf01a8ea05..33fc396a01 100644 --- a/test/random/module/real/math/coth/regular/coth.hpp +++ b/test/random/module/real/math/coth/regular/coth.hpp @@ -14,6 +14,7 @@ #include TTS_CASE_TPL("wide random check on coth", EVE_TYPE) +(::tts::type) { auto std_coth = [](auto e) { return eve::rec(std::tanh(e)); }; @@ -22,4 +23,4 @@ TTS_CASE_TPL("wide random check on coth", EVE_TYPE) eve::uniform_prng p1(EVE_VALUE(1), eve::valmax(eve::as())); TTS_RANGE_CHECK(p1, std_coth, eve::coth); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/cotpi/big/cotpi.hpp b/test/random/module/real/math/cotpi/big/cotpi.hpp deleted file mode 100644 index 1e29256145..0000000000 --- a/test/random/module/real/math/cotpi/big/cotpi.hpp +++ /dev/null @@ -1,28 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on cotpi", EVE_TYPE) -{ - auto my_stdcotpi = [](auto x) - { return (x == 0 || !eve::is_flint(x)) - ? boost::math::cos_pi(x)/boost::math::sin_pi(x) - : eve::nan(eve::as()); - }; - - eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK_WITH(p, my_stdcotpi, eve::big(eve::cotpi), 4); -} diff --git a/test/random/module/real/math/cotpi/medium/cotpi.hpp b/test/random/module/real/math/cotpi/medium/cotpi.hpp deleted file mode 100644 index ff500edf50..0000000000 --- a/test/random/module/real/math/cotpi/medium/cotpi.hpp +++ /dev/null @@ -1,27 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on cotpi", EVE_TYPE) -{ - auto my_stdcotpi = [](auto x) - { return (x == 0 || !eve::is_flint(x)) - ? boost::math::cos_pi(x)/boost::math::sin_pi(x) - : eve::nan(eve::as()); - }; - - eve::uniform_prng p(EVE_VALUE(-100000.0), EVE_VALUE(100000.0)); - TTS_RANGE_CHECK_WITH(p, my_stdcotpi, eve::medium(eve::cotpi), 4); -} diff --git a/test/random/module/real/math/cotpi/restricted/cotpi.hpp b/test/random/module/real/math/cotpi/quarter_circle/cotpi.hpp similarity index 87% rename from test/random/module/real/math/cotpi/restricted/cotpi.hpp rename to test/random/module/real/math/cotpi/quarter_circle/cotpi.hpp index 2352d6713d..23ac1a02fb 100644 --- a/test/random/module/real/math/cotpi/restricted/cotpi.hpp +++ b/test/random/module/real/math/cotpi/quarter_circle/cotpi.hpp @@ -13,9 +13,10 @@ #include TTS_CASE_TPL("wide random check on cotpi", EVE_TYPE) +(::tts::type) { auto my_stdcotpi = [](auto x) { return boost::math::cos_pi(x)/boost::math::sin_pi(x); }; eve::uniform_prng p(-0.25, 0.25); - TTS_RANGE_CHECK_WITH(p, my_stdcotpi, eve::restricted(eve::cotpi), 4); -} + TTS_RANGE_CHECK_WITH(p, my_stdcotpi, eve::quarter_circle(eve::cotpi), 4); +}; \ No newline at end of file diff --git a/test/random/module/real/math/cotpi/regular/cotpi.hpp b/test/random/module/real/math/cotpi/regular/cotpi.hpp index 1b17c305de..8e981fe397 100644 --- a/test/random/module/real/math/cotpi/regular/cotpi.hpp +++ b/test/random/module/real/math/cotpi/regular/cotpi.hpp @@ -17,6 +17,7 @@ #include TTS_CASE_TPL("wide random check on cotpi", EVE_TYPE) +(::tts::type) { auto my_stdcotpi = [](auto x) { return (x == 0 || !eve::is_flint(x)) @@ -26,4 +27,4 @@ TTS_CASE_TPL("wide random check on cotpi", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK_WITH(p, my_stdcotpi, eve::cotpi, 4); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/csc/big/csc.hpp b/test/random/module/real/math/csc/big/csc.hpp deleted file mode 100644 index 7dffb9c9b0..0000000000 --- a/test/random/module/real/math/csc/big/csc.hpp +++ /dev/null @@ -1,29 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on csc", EVE_TYPE) -{ - auto std_csc = [](auto e) -> EVE_VALUE { return 1/std::sin(double(e)); }; - - if constexpr(eve::platform::supports_denormals) - { - eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_csc, eve::big(eve::csc)); - } - else - { - eve::uniform_prng p(eve::smallestposval(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_csc, eve::big(eve::csc)); - } -} diff --git a/test/random/module/real/math/csc/medium/csc.hpp b/test/random/module/real/math/csc/full_circle/csc.hpp similarity index 78% rename from test/random/module/real/math/csc/medium/csc.hpp rename to test/random/module/real/math/csc/full_circle/csc.hpp index b8e71fbb12..7c9b8fc244 100644 --- a/test/random/module/real/math/csc/medium/csc.hpp +++ b/test/random/module/real/math/csc/full_circle/csc.hpp @@ -13,18 +13,19 @@ #include TTS_CASE_TPL("wide rng check on csc", EVE_TYPE) +(::tts::type) { auto std_csc = [](auto e) -> EVE_VALUE { return 1/std::sin(double(e)); }; - auto l = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); + auto l = eve::detail::Rempio2_limit(eve::full_circle_type(), eve::as()); if constexpr(eve::platform::supports_denormals) { eve::uniform_prng p(-l, l); - TTS_RANGE_CHECK(p, std_csc, eve::medium(eve::csc)); + TTS_RANGE_CHECK(p, std_csc, eve::full_circle(eve::csc)); } else { eve::uniform_prng p(eve::smallestposval(eve::as()), l); - TTS_RANGE_CHECK(p, std_csc, eve::medium(eve::csc)); + TTS_RANGE_CHECK(p, std_csc, eve::full_circle(eve::csc)); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/csc/small/csc.hpp b/test/random/module/real/math/csc/half_circle/csc.hpp similarity index 88% rename from test/random/module/real/math/csc/small/csc.hpp rename to test/random/module/real/math/csc/half_circle/csc.hpp index 2de0857717..6b4f223e43 100644 --- a/test/random/module/real/math/csc/small/csc.hpp +++ b/test/random/module/real/math/csc/half_circle/csc.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on csc", EVE_TYPE) +(::tts::type) { auto std_csc = [](auto e) -> EVE_VALUE { return eve::rec(std::sin(double(e))); }; eve::uniform_prng p(-eve::pio_2(eve::as()), eve::pio_2(eve::as())); - TTS_RANGE_CHECK(p, std_csc, eve::small(eve::csc)); -} + TTS_RANGE_CHECK(p, std_csc, eve::half_circle(eve::csc)); +}; \ No newline at end of file diff --git a/test/random/module/real/math/csc/restricted/csc.hpp b/test/random/module/real/math/csc/quarter_circle/csc.hpp similarity index 84% rename from test/random/module/real/math/csc/restricted/csc.hpp rename to test/random/module/real/math/csc/quarter_circle/csc.hpp index 1cae1740d4..cc91128417 100644 --- a/test/random/module/real/math/csc/restricted/csc.hpp +++ b/test/random/module/real/math/csc/quarter_circle/csc.hpp @@ -12,17 +12,18 @@ #include TTS_CASE_TPL("wide random check on csc", EVE_TYPE) +(::tts::type) { auto std_csc = [](auto e) -> EVE_VALUE { return 1/std::sin(double(e)); }; if constexpr(eve::platform::supports_denormals) { eve::uniform_prng p(-eve::pio_4(eve::as()), eve::pio_4(eve::as())); - TTS_RANGE_CHECK(p, std_csc, eve::restricted(eve::csc)); + TTS_RANGE_CHECK(p, std_csc, eve::quarter_circle(eve::csc)); } else { eve::uniform_prng p(eve::smallestposval(eve::as()), eve::pio_4(eve::as())); - TTS_RANGE_CHECK(p, std_csc, eve::restricted(eve::csc)); + TTS_RANGE_CHECK(p, std_csc, eve::quarter_circle(eve::csc)); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/csc/regular/csc.hpp b/test/random/module/real/math/csc/regular/csc.hpp index 725238270b..21a993f975 100644 --- a/test/random/module/real/math/csc/regular/csc.hpp +++ b/test/random/module/real/math/csc/regular/csc.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on csc", EVE_TYPE) +(::tts::type) { auto std_csc = [](auto e) -> EVE_VALUE { return 1/std::sin(double(e)); }; @@ -26,4 +27,4 @@ TTS_CASE_TPL("wide random check on csc", EVE_TYPE) eve::uniform_prng p(eve::smallestposval(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_csc, eve::csc); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/csch/regular/csch.hpp b/test/random/module/real/math/csch/regular/csch.hpp index 22cb0d0670..f5e22b6145 100644 --- a/test/random/module/real/math/csch/regular/csch.hpp +++ b/test/random/module/real/math/csch/regular/csch.hpp @@ -13,9 +13,10 @@ #include TTS_CASE_TPL("wide random check on csch", EVE_TYPE) +(::tts::type) { auto std_csch = [](auto e) { return eve::rec(std::sinh(e)); }; eve::uniform_prng p(-eve::maxlog(eve::as())+1, eve::maxlog(eve::as())-1); TTS_RANGE_CHECK(p, std_csch, eve::csch); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/cscpi/big/cscpi.hpp b/test/random/module/real/math/cscpi/big/cscpi.hpp deleted file mode 100644 index 356752881e..0000000000 --- a/test/random/module/real/math/cscpi/big/cscpi.hpp +++ /dev/null @@ -1,29 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on cscpi", EVE_TYPE) -{ - auto my_stdcscpi = [](auto x) - { - return (x == 0 || !eve::is_flint(x)) - ? EVE_VALUE(eve::rec(boost::math::sin_pi(double(x)))) - : eve::nan(eve::as()); - }; - - eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK_WITH(p, my_stdcscpi, eve::big(eve::cscpi), 4); -} diff --git a/test/random/module/real/math/cscpi/medium/cscpi.hpp b/test/random/module/real/math/cscpi/medium/cscpi.hpp deleted file mode 100644 index b0c8d853da..0000000000 --- a/test/random/module/real/math/cscpi/medium/cscpi.hpp +++ /dev/null @@ -1,27 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on cscpi", EVE_TYPE) -{ - auto my_stdcscpi = [](auto x) - { - return (x == 0 || !eve::is_flint(x)) - ? EVE_VALUE(eve::rec(boost::math::sin_pi(double(x)))) - : eve::nan(eve::as()); - }; - - eve::uniform_prng p(EVE_VALUE(-100000.0), EVE_VALUE(100000.0)); - TTS_RANGE_CHECK_WITH(p, my_stdcscpi, eve::medium(eve::cscpi), 4); -} diff --git a/test/random/module/real/math/cscpi/restricted/cscpi.hpp b/test/random/module/real/math/cscpi/quarter_circle/cscpi.hpp similarity index 86% rename from test/random/module/real/math/cscpi/restricted/cscpi.hpp rename to test/random/module/real/math/cscpi/quarter_circle/cscpi.hpp index 547270c768..5d42ad5a23 100644 --- a/test/random/module/real/math/cscpi/restricted/cscpi.hpp +++ b/test/random/module/real/math/cscpi/quarter_circle/cscpi.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on cscpi", EVE_TYPE) +(::tts::type) { auto my_stdcscpi = [](auto x) { return eve::rec(boost::math::sin_pi(x)); }; eve::uniform_prng p(-0.25, 0.25); - TTS_RANGE_CHECK_WITH(p, my_stdcscpi, eve::restricted(eve::cscpi), 4); -} + TTS_RANGE_CHECK_WITH(p, my_stdcscpi, eve::quarter_circle(eve::cscpi), 4); +}; \ No newline at end of file diff --git a/test/random/module/real/math/cscpi/regular/cscpi.hpp b/test/random/module/real/math/cscpi/regular/cscpi.hpp index 68ceef2e14..847a29c938 100644 --- a/test/random/module/real/math/cscpi/regular/cscpi.hpp +++ b/test/random/module/real/math/cscpi/regular/cscpi.hpp @@ -16,6 +16,7 @@ #include TTS_CASE_TPL("wide random check on cscpi", EVE_TYPE) +(::tts::type) { auto my_stdcscpi = [](auto x) { @@ -26,4 +27,4 @@ TTS_CASE_TPL("wide random check on cscpi", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK_WITH(p, my_stdcscpi, eve::cscpi, 4); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/exp/pedantic/exp.hpp b/test/random/module/real/math/exp/pedantic/exp.hpp index 68c88c265b..8c95534874 100644 --- a/test/random/module/real/math/exp/pedantic/exp.hpp +++ b/test/random/module/real/math/exp/pedantic/exp.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on exp", EVE_TYPE) +(::tts::type) { auto std_exp = [](auto e) { return std::exp(e); }; eve::uniform_prng p(eve::minlog(eve::as())+1, eve::maxlog(eve::as())-1); TTS_RANGE_CHECK(p, std_exp, eve::pedantic(eve::exp)); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/exp/regular/exp.hpp b/test/random/module/real/math/exp/regular/exp.hpp index b45d8ea93f..ed1c27b4d5 100644 --- a/test/random/module/real/math/exp/regular/exp.hpp +++ b/test/random/module/real/math/exp/regular/exp.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on exp", EVE_TYPE) +(::tts::type) { auto std_exp = [](auto e) { return std::exp(e); }; eve::uniform_prng p(eve::minlog(eve::as())+1, eve::maxlog(eve::as())-1); TTS_RANGE_CHECK(p, std_exp, eve::exp); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/exp10/pedantic/exp10.hpp b/test/random/module/real/math/exp10/pedantic/exp10.hpp index 3d9a8f35cc..fcdb770bd3 100644 --- a/test/random/module/real/math/exp10/pedantic/exp10.hpp +++ b/test/random/module/real/math/exp10/pedantic/exp10.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on exp10", EVE_TYPE) +(::tts::type) { auto std_exp10 = [](auto e) -> EVE_VALUE { return ::exp10l(e); }; eve::uniform_prng p(eve::minlog10(eve::as())+1, eve::maxlog10(eve::as())-1); TTS_RANGE_CHECK(p, std_exp10, eve::pedantic(eve::exp10)); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/exp10/regular/exp10.hpp b/test/random/module/real/math/exp10/regular/exp10.hpp index a365d14e38..1fa7a51b5f 100644 --- a/test/random/module/real/math/exp10/regular/exp10.hpp +++ b/test/random/module/real/math/exp10/regular/exp10.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on exp10", EVE_TYPE) +(::tts::type) { auto std_exp10 = [](auto e) -> EVE_VALUE { return ::exp10l(e); }; eve::uniform_prng p(eve::minlog10(eve::as())+1, eve::maxlog10(eve::as())-1); TTS_RANGE_CHECK(p, std_exp10, eve::exp10); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/exp2/pedantic/exp2.hpp b/test/random/module/real/math/exp2/pedantic/exp2.hpp index 9fec40d22f..1357ca46d5 100644 --- a/test/random/module/real/math/exp2/pedantic/exp2.hpp +++ b/test/random/module/real/math/exp2/pedantic/exp2.hpp @@ -12,6 +12,7 @@ #include TTS_CASE_TPL("wide random check on exp2", EVE_TYPE) +(::tts::type) { if constexpr(eve::integral_value) { @@ -25,4 +26,4 @@ TTS_CASE_TPL("wide random check on exp2", EVE_TYPE) eve::uniform_prng p(eve::minlog2(eve::as())+1, eve::maxlog2(eve::as())); TTS_RANGE_CHECK(p, std_exp2, eve::exp2); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/exp2/regular/exp2.hpp b/test/random/module/real/math/exp2/regular/exp2.hpp index de92b7be61..db9925e063 100644 --- a/test/random/module/real/math/exp2/regular/exp2.hpp +++ b/test/random/module/real/math/exp2/regular/exp2.hpp @@ -12,6 +12,7 @@ #include TTS_CASE_TPL("wide random check on exp2", EVE_TYPE) +(::tts::type) { if constexpr(eve::integral_value) { @@ -25,4 +26,4 @@ TTS_CASE_TPL("wide random check on exp2", EVE_TYPE) eve::uniform_prng p(eve::minlog2(eve::as())+1, eve::maxlog2(eve::as())); TTS_RANGE_CHECK(p, std_exp2, eve::exp2); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/expm1/regular/expm1.hpp b/test/random/module/real/math/expm1/regular/expm1.hpp index 76bc12ee3f..246e3b0ca8 100644 --- a/test/random/module/real/math/expm1/regular/expm1.hpp +++ b/test/random/module/real/math/expm1/regular/expm1.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on expm1", EVE_TYPE) +(::tts::type) { auto std_expm1 = [](auto e) { return std::expm1(e); }; eve::uniform_prng p(eve::minlog(eve::as()), eve::maxlog(eve::as())-1); TTS_RANGE_CHECK(p, std_expm1, eve::expm1); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/iceil/regular/iceil.hpp b/test/random/module/real/math/iceil/regular/iceil.hpp index 8c1b02268e..5bb4f02254 100644 --- a/test/random/module/real/math/iceil/regular/iceil.hpp +++ b/test/random/module/real/math/iceil/regular/iceil.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on iceil", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) { @@ -29,4 +30,4 @@ TTS_CASE_TPL("wide random check on iceil", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_iceil, eve::int_(eve::ceil)); } -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/log/regular/log.hpp b/test/random/module/real/math/log/regular/log.hpp index 2ebac10bac..b80f0e0288 100644 --- a/test/random/module/real/math/log/regular/log.hpp +++ b/test/random/module/real/math/log/regular/log.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on log", EVE_TYPE) +(::tts::type) { auto std_log = [](auto e) { return std::log(e); }; eve::uniform_prng p(EVE_VALUE(0), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_log, eve::log); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/log10/regular/log10.hpp b/test/random/module/real/math/log10/regular/log10.hpp index e0397d211f..5f2f0a3655 100644 --- a/test/random/module/real/math/log10/regular/log10.hpp +++ b/test/random/module/real/math/log10/regular/log10.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on log10", EVE_TYPE) +(::tts::type) { auto std_log10 = [](auto e) { return std::log10(e); }; eve::uniform_prng p(EVE_VALUE(0), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_log10, eve::log10); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/log1p/regular/log1p.hpp b/test/random/module/real/math/log1p/regular/log1p.hpp index c945d92308..6f01e8e5f7 100644 --- a/test/random/module/real/math/log1p/regular/log1p.hpp +++ b/test/random/module/real/math/log1p/regular/log1p.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on log1p", EVE_TYPE) +(::tts::type) { auto std_log1p = [](auto e) { return std::log1p(e); }; eve::uniform_prng p(EVE_VALUE(-1), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_log1p, eve::log1p); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/log2/regular/log2.hpp b/test/random/module/real/math/log2/regular/log2.hpp index ced0953019..3478097ec9 100644 --- a/test/random/module/real/math/log2/regular/log2.hpp +++ b/test/random/module/real/math/log2/regular/log2.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on log2", EVE_TYPE) +(::tts::type) { auto std_log2 = [](auto e) { return std::log2(e); }; eve::uniform_prng p(EVE_VALUE(0), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_log2, eve::log2); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/pow_abs/pedantic/pow_abs.hpp b/test/random/module/real/math/pow_abs/pedantic/pow_abs.hpp index 124b373981..abe34cc56d 100644 --- a/test/random/module/real/math/pow_abs/pedantic/pow_abs.hpp +++ b/test/random/module/real/math/pow_abs/pedantic/pow_abs.hpp @@ -14,6 +14,7 @@ #include TTS_CASE_TPL("wide random check on pow_abs", EVE_TYPE) +(::tts::type) { auto std_pow_abs = [](auto e) { return eve::pow_abs(e, EVE_VALUE(10.51)); }; auto my_pow_abs = [](auto e) { return eve::pedantic(eve::pow_abs)(e, EVE_VALUE(10.51)); }; @@ -26,4 +27,4 @@ TTS_CASE_TPL("wide random check on pow_abs", EVE_TYPE) eve::uniform_prng p1(EVE_VALUE(0.05), EVE_VALUE(10.5)); TTS_RANGE_CHECK_WITH(p1, std_pow_abs1, my_pow_abs1, 8); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/pow_abs/regular/pow_abs.hpp b/test/random/module/real/math/pow_abs/regular/pow_abs.hpp index d4d6b2f1ab..9f28794ebc 100644 --- a/test/random/module/real/math/pow_abs/regular/pow_abs.hpp +++ b/test/random/module/real/math/pow_abs/regular/pow_abs.hpp @@ -14,6 +14,7 @@ #include TTS_CASE_TPL("wide random check on pow_abs", EVE_TYPE) +(::tts::type) { auto std_pow_abs = [](auto e) { return eve::pow_abs(e, EVE_VALUE(10.51)); }; auto my_pow_abs = [](auto e) { return (eve::pow_abs)(e, EVE_VALUE(10.51)); }; @@ -26,4 +27,4 @@ TTS_CASE_TPL("wide random check on pow_abs", EVE_TYPE) eve::uniform_prng p1(EVE_VALUE(0.05), EVE_VALUE(10.5)); TTS_RANGE_CHECK_WITH(p1, std_pow_abs1, my_pow_abs1, 8); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/radindeg/regular/radindeg.hpp b/test/random/module/real/math/radindeg/regular/radindeg.hpp index 4ac5ac0a36..4490d9c694 100644 --- a/test/random/module/real/math/radindeg/regular/radindeg.hpp +++ b/test/random/module/real/math/radindeg/regular/radindeg.hpp @@ -15,6 +15,7 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on radindeg", EVE_TYPE) +(::tts::type) { auto std_indeg = [](auto e) { @@ -26,4 +27,4 @@ TTS_CASE_TPL("wide random check on radindeg", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK_WITH(p, std_indeg, eve::radindeg, 4); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/radinpi/regular/radinpi.hpp b/test/random/module/real/math/radinpi/regular/radinpi.hpp index b3181badf9..020f5fbc0e 100644 --- a/test/random/module/real/math/radinpi/regular/radinpi.hpp +++ b/test/random/module/real/math/radinpi/regular/radinpi.hpp @@ -12,9 +12,10 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on inpi", EVE_TYPE) +(::tts::type) { auto std_inpi = [](auto e) { return eve::invpi(eve::as())*e; }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_inpi, eve::radinpi); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/sec/big/sec.hpp b/test/random/module/real/math/sec/big/sec.hpp deleted file mode 100644 index f627a6ea7f..0000000000 --- a/test/random/module/real/math/sec/big/sec.hpp +++ /dev/null @@ -1,20 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on sec", EVE_TYPE) -{ - auto std_sec = [](auto e) -> EVE_VALUE { return 1/std::cos(double(e)); }; - - eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_sec, eve::big(eve::sec)); -} diff --git a/test/random/module/real/math/sec/medium/sec.hpp b/test/random/module/real/math/sec/full_circle/sec.hpp similarity index 78% rename from test/random/module/real/math/sec/medium/sec.hpp rename to test/random/module/real/math/sec/full_circle/sec.hpp index 20c55876a8..60561d854a 100644 --- a/test/random/module/real/math/sec/medium/sec.hpp +++ b/test/random/module/real/math/sec/full_circle/sec.hpp @@ -11,10 +11,11 @@ #include TTS_CASE_TPL("wide random check on sec", EVE_TYPE) +(::tts::type) { auto std_sec = [](auto e) -> EVE_VALUE { return 1/std::cos(double(e)); }; - auto l = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); + auto l = eve::detail::Rempio2_limit(eve::full_circle_type(), eve::as()); eve::uniform_prng p(-l, l); - TTS_RANGE_CHECK(p, std_sec, eve::medium(eve::sec)); -} + TTS_RANGE_CHECK(p, std_sec, eve::full_circle(eve::sec)); +}; \ No newline at end of file diff --git a/test/random/module/real/math/sec/small/sec.hpp b/test/random/module/real/math/sec/half_circle/sec.hpp similarity index 88% rename from test/random/module/real/math/sec/small/sec.hpp rename to test/random/module/real/math/sec/half_circle/sec.hpp index 43fd57a77d..2599ba240e 100644 --- a/test/random/module/real/math/sec/small/sec.hpp +++ b/test/random/module/real/math/sec/half_circle/sec.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on sec", EVE_TYPE) +(::tts::type) { auto std_sec = [](auto e) -> EVE_VALUE { return eve::rec(std::cos(double(e))); }; eve::uniform_prng p(-eve::pio_2(eve::as()), eve::pio_2(eve::as())); - TTS_RANGE_CHECK(p, std_sec, eve::small(eve::sec)); -} + TTS_RANGE_CHECK(p, std_sec, eve::half_circle(eve::sec)); +}; \ No newline at end of file diff --git a/test/random/module/real/math/sec/restricted/sec.hpp b/test/random/module/real/math/sec/quarter_circle/sec.hpp similarity index 87% rename from test/random/module/real/math/sec/restricted/sec.hpp rename to test/random/module/real/math/sec/quarter_circle/sec.hpp index 1e1da8cc92..60a5a076a4 100644 --- a/test/random/module/real/math/sec/restricted/sec.hpp +++ b/test/random/module/real/math/sec/quarter_circle/sec.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on sec", EVE_TYPE) +(::tts::type) { auto std_sec = [](auto e) { return 1/std::cos(e); }; eve::uniform_prng p(-eve::pio_4(eve::as()), eve::pio_4(eve::as())); - TTS_RANGE_CHECK(p, std_sec, eve::restricted(eve::sec)); -} + TTS_RANGE_CHECK(p, std_sec, eve::quarter_circle(eve::sec)); +}; \ No newline at end of file diff --git a/test/random/module/real/math/sec/regular/sec.hpp b/test/random/module/real/math/sec/regular/sec.hpp index f94311de8b..83e0777f28 100644 --- a/test/random/module/real/math/sec/regular/sec.hpp +++ b/test/random/module/real/math/sec/regular/sec.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on sec", EVE_TYPE) +(::tts::type) { auto std_sec = [](auto e) -> EVE_VALUE { return 1/std::cos(double(e)); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_sec, eve::sec); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/sech/regular/sech.hpp b/test/random/module/real/math/sech/regular/sech.hpp index 9406195f83..5610762e17 100644 --- a/test/random/module/real/math/sech/regular/sech.hpp +++ b/test/random/module/real/math/sech/regular/sech.hpp @@ -13,9 +13,10 @@ #include TTS_CASE_TPL("wide random check on sech", EVE_TYPE) +(::tts::type) { auto std_sech = [](auto e) -> EVE_VALUE { return EVE_VALUE(1)/eve::cosh(double(e)); }; auto max = (eve::maxlog(eve::as())-EVE_VALUE(1))/2; eve::uniform_prng p(-max, max); TTS_RANGE_CHECK(p, std_sech, eve::sech); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/secpi/big/secpi.hpp b/test/random/module/real/math/secpi/big/secpi.hpp deleted file mode 100644 index 884e7f113e..0000000000 --- a/test/random/module/real/math/secpi/big/secpi.hpp +++ /dev/null @@ -1,38 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "producers.hpp" -#include -#include - -TTS_CASE_TPL("wide random check on secpi", EVE_TYPE) -{ - auto my_stdsecpi = [](auto x) - { - auto z = eve::abs(x); - - if (z >= eve::maxflint(eve::as(x))) return EVE_VALUE(1); - if (eve::is_even(z)) return EVE_VALUE(1); - - if ((z-EVE_VALUE(0.5) == eve::trunc(z)) && (z != z-EVE_VALUE(0.5) )) - return eve::nan(eve::as()); - - return EVE_VALUE(eve::rec(boost::math::cos_pi(double(x)))); - }; - - eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, my_stdsecpi, eve::big(eve::secpi)); -} diff --git a/test/random/module/real/math/secpi/medium/secpi.hpp b/test/random/module/real/math/secpi/medium/secpi.hpp deleted file mode 100644 index 8a8c08f806..0000000000 --- a/test/random/module/real/math/secpi/medium/secpi.hpp +++ /dev/null @@ -1,31 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include -#include -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on secpi", EVE_TYPE) -{ - auto my_stdsecpi = [](auto x) - { - auto z = eve::abs(x); - if (eve::is_even(z)) return EVE_VALUE(1); - if (z-EVE_VALUE(0.5) == eve::trunc(z)) return eve::nan(eve::as()); - return EVE_VALUE(eve::rec(boost::math::cos_pi(double(x)))); - }; - - eve::uniform_prng p(EVE_VALUE(-100000.0), EVE_VALUE(100000.0)); - TTS_RANGE_CHECK(p, my_stdsecpi, eve::medium(eve::secpi)); -} diff --git a/test/random/module/real/math/secpi/restricted/secpi.hpp b/test/random/module/real/math/secpi/quarter_circle/secpi.hpp similarity index 87% rename from test/random/module/real/math/secpi/restricted/secpi.hpp rename to test/random/module/real/math/secpi/quarter_circle/secpi.hpp index 3a21d79581..5ca49b6d31 100644 --- a/test/random/module/real/math/secpi/restricted/secpi.hpp +++ b/test/random/module/real/math/secpi/quarter_circle/secpi.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on secpi", EVE_TYPE) +(::tts::type) { auto my_stdsecpi = [](auto x) { return eve::rec(boost::math::cos_pi(x)); }; eve::uniform_prng p(-0.25, 0.25); - TTS_RANGE_CHECK(p, my_stdsecpi, eve::restricted(eve::secpi)); -} + TTS_RANGE_CHECK(p, my_stdsecpi, eve::quarter_circle(eve::secpi)); +}; \ No newline at end of file diff --git a/test/random/module/real/math/secpi/regular/secpi.hpp b/test/random/module/real/math/secpi/regular/secpi.hpp index edb2afa88e..9a4ce9271d 100644 --- a/test/random/module/real/math/secpi/regular/secpi.hpp +++ b/test/random/module/real/math/secpi/regular/secpi.hpp @@ -20,6 +20,7 @@ #include TTS_CASE_TPL("wide random check on secpi", EVE_TYPE) +(::tts::type) { auto my_stdsecpi = [](auto x) { @@ -36,4 +37,4 @@ TTS_CASE_TPL("wide random check on secpi", EVE_TYPE) eve::uniform_prng p(-2*eve::maxflint(eve::as()), 2*eve::maxflint(eve::as())); TTS_RANGE_CHECK(p, my_stdsecpi, eve::secpi); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/sin/big/sin.hpp b/test/random/module/real/math/sin/big/sin.hpp deleted file mode 100644 index 622fa80137..0000000000 --- a/test/random/module/real/math/sin/big/sin.hpp +++ /dev/null @@ -1,21 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on sin", EVE_TYPE) -{ - auto std_sin = [](auto e) { return std::sin(e); }; - eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_sin, eve::big(eve::sin)); -} diff --git a/test/random/module/real/math/sin/medium/sin.hpp b/test/random/module/real/math/sin/full_circle/sin.hpp similarity index 79% rename from test/random/module/real/math/sin/medium/sin.hpp rename to test/random/module/real/math/sin/full_circle/sin.hpp index 02a45c4088..8541e2de74 100644 --- a/test/random/module/real/math/sin/medium/sin.hpp +++ b/test/random/module/real/math/sin/full_circle/sin.hpp @@ -12,11 +12,12 @@ #include TTS_CASE_TPL("wide random check on sin", EVE_TYPE) +(::tts::type) { auto std_sin = [](auto e) { return std::sin(e); }; - auto l = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); + auto l = eve::detail::Rempio2_limit(eve::full_circle_type(), eve::as()); auto m = eve::one(eve::as(l)); eve::uniform_prng p(m, l); - TTS_RANGE_CHECK(p, std_sin, eve::medium(eve::sin)); -} + TTS_RANGE_CHECK(p, std_sin, eve::full_circle(eve::sin)); +}; \ No newline at end of file diff --git a/test/random/module/real/math/sin/small/sin.hpp b/test/random/module/real/math/sin/half_circle/sin.hpp similarity index 87% rename from test/random/module/real/math/sin/small/sin.hpp rename to test/random/module/real/math/sin/half_circle/sin.hpp index b25487324d..eca5a0a899 100644 --- a/test/random/module/real/math/sin/small/sin.hpp +++ b/test/random/module/real/math/sin/half_circle/sin.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on sin", EVE_TYPE) +(::tts::type) { auto std_sin = [](auto e) -> EVE_VALUE { return std::sin(double(e)); }; eve::uniform_prng p(-eve::pio_2(eve::as()), eve::pio_2(eve::as())); - TTS_RANGE_CHECK(p, std_sin, eve::small(eve::sin)); -} + TTS_RANGE_CHECK(p, std_sin, eve::half_circle(eve::sin)); +}; \ No newline at end of file diff --git a/test/random/module/real/math/sin/restricted/sin.hpp b/test/random/module/real/math/sin/quarter_circle/sin.hpp similarity index 87% rename from test/random/module/real/math/sin/restricted/sin.hpp rename to test/random/module/real/math/sin/quarter_circle/sin.hpp index 328eccbbf8..f128c296ad 100644 --- a/test/random/module/real/math/sin/restricted/sin.hpp +++ b/test/random/module/real/math/sin/quarter_circle/sin.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on sin", EVE_TYPE) +(::tts::type) { auto std_sin = [](auto e) { return std::sin(e); }; eve::uniform_prng p(-eve::pio_4(eve::as()), eve::pio_4(eve::as())); - TTS_RANGE_CHECK(p, std_sin, eve::restricted(eve::sin)); -} + TTS_RANGE_CHECK(p, std_sin, eve::quarter_circle(eve::sin)); +}; \ No newline at end of file diff --git a/test/random/module/real/math/sin/regular/sin.hpp b/test/random/module/real/math/sin/regular/sin.hpp index 28cc410fab..f7d37c07f4 100644 --- a/test/random/module/real/math/sin/regular/sin.hpp +++ b/test/random/module/real/math/sin/regular/sin.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on sin", EVE_TYPE) +(::tts::type) { auto std_sin = [](auto e) { return std::sin(e); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_sin, eve::sin); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/sincos/big/sincos.hpp b/test/random/module/real/math/sincos/big/sincos.hpp deleted file mode 100644 index 4b9d580e07..0000000000 --- a/test/random/module/real/math/sincos/big/sincos.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on sincos", EVE_TYPE) -{ - auto std_sin = [](auto e) -> EVE_VALUE { return std::sin(double(e)); }; - auto std_cos = [](auto e) -> EVE_VALUE { return std::cos(double(e)); }; - auto sincos_s = [](auto e) { auto [s, c] = eve::big(eve::sincos)(e); return s; }; - auto sincos_c = [](auto e) { auto [s, c] = eve::big(eve::sincos)(e); return c; }; - - eve::uniform_prng p(0, eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_sin, sincos_s); - TTS_RANGE_CHECK(p, std_cos, sincos_c); -} diff --git a/test/random/module/real/math/sincos/small/sincos.hpp b/test/random/module/real/math/sincos/half_circle/sincos.hpp similarity index 79% rename from test/random/module/real/math/sincos/small/sincos.hpp rename to test/random/module/real/math/sincos/half_circle/sincos.hpp index 72fad3a3f6..21c8cb69d8 100644 --- a/test/random/module/real/math/sincos/small/sincos.hpp +++ b/test/random/module/real/math/sincos/half_circle/sincos.hpp @@ -12,13 +12,14 @@ #include TTS_CASE_TPL("wide random check on sincos", EVE_TYPE) +(::tts::type) { auto std_sin = [](auto e) -> EVE_VALUE { return std::sin(double(e)); }; auto std_cos = [](auto e) -> EVE_VALUE { return std::cos(double(e)); }; - auto sincos_s = [](auto e) { auto [s, c] = eve::small(eve::sincos)(e); return s; }; - auto sincos_c = [](auto e) { auto [s, c] = eve::small(eve::sincos)(e); return c; }; + auto sincos_s = [](auto e) { auto [s, c] = eve::half_circle(eve::sincos)(e); return s; }; + auto sincos_c = [](auto e) { auto [s, c] = eve::half_circle(eve::sincos)(e); return c; }; eve::uniform_prng p(-eve::pio_2(eve::as()), eve::pio_2(eve::as())); TTS_RANGE_CHECK(p, std_sin, sincos_s); TTS_RANGE_CHECK(p, std_cos, sincos_c); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/sincos/medium/sincos.hpp b/test/random/module/real/math/sincos/medium/sincos.hpp deleted file mode 100644 index 73b8640ad8..0000000000 --- a/test/random/module/real/math/sincos/medium/sincos.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on sincos", EVE_TYPE) -{ - auto std_sin = [](auto e) -> EVE_VALUE { return std::sin(double(e)); }; - auto std_cos = [](auto e) -> EVE_VALUE { return std::cos(double(e)); }; - auto sincos_s = [](auto e) { auto [s, c] = eve::medium(eve::sincos)(e); return s; }; - auto sincos_c = [](auto e) { auto [s, c] = eve::medium(eve::sincos)(e); return c; }; - - auto l = eve::detail::Rempio2_limit(eve::small_type(), eve::as()); - eve::uniform_prng p(-l, l); - TTS_RANGE_CHECK(p, std_sin, sincos_s); - TTS_RANGE_CHECK(p, std_cos, sincos_c); -} diff --git a/test/random/module/real/math/sincos/regular/sincos.hpp b/test/random/module/real/math/sincos/regular/sincos.hpp index 8e5942edcf..34b7bb1835 100644 --- a/test/random/module/real/math/sincos/regular/sincos.hpp +++ b/test/random/module/real/math/sincos/regular/sincos.hpp @@ -13,6 +13,7 @@ #include TTS_CASE_TPL("wide random check on sincos", EVE_TYPE) +(::tts::type) { auto std_sin = [](auto e) -> EVE_VALUE { return std::sin(double(e)); }; auto std_cos = [](auto e) -> EVE_VALUE { return std::cos(double(e)); }; @@ -22,4 +23,4 @@ TTS_CASE_TPL("wide random check on sincos", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_sin, sincos_s); TTS_RANGE_CHECK(p, std_cos, sincos_c); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/sinh/regular/sinh.hpp b/test/random/module/real/math/sinh/regular/sinh.hpp index 0ea6aafede..b3b6768327 100644 --- a/test/random/module/real/math/sinh/regular/sinh.hpp +++ b/test/random/module/real/math/sinh/regular/sinh.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on sinh", EVE_TYPE) +(::tts::type) { auto std_sinh = [](auto e) { return std::sinh(e); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_sinh, eve::sinh); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/sinhcosh/regular/sinhcosh.hpp b/test/random/module/real/math/sinhcosh/regular/sinhcosh.hpp index f726cc9915..088243cf32 100644 --- a/test/random/module/real/math/sinhcosh/regular/sinhcosh.hpp +++ b/test/random/module/real/math/sinhcosh/regular/sinhcosh.hpp @@ -14,6 +14,7 @@ #include TTS_CASE_TPL("wide random check on sinhcosh", EVE_TYPE) +(::tts::type) { auto std_sin = [](auto e) -> EVE_VALUE { return std::sinh(double(e)); }; auto std_cos = [](auto e) -> EVE_VALUE { return std::cosh(double(e)); }; @@ -23,4 +24,4 @@ TTS_CASE_TPL("wide random check on sinhcosh", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_sin, sinhcosh_s); TTS_RANGE_CHECK(p, std_cos, sinhcosh_c); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/sinpi/big/sinpi.hpp b/test/random/module/real/math/sinpi/big/sinpi.hpp deleted file mode 100644 index 1ba8e48866..0000000000 --- a/test/random/module/real/math/sinpi/big/sinpi.hpp +++ /dev/null @@ -1,29 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include "producers.hpp" - -TTS_CASE_TPL("wide random check on sinpi", EVE_TYPE) -{ - auto my_stdsinpi = [](auto x){return boost::math::sin_pi(x); }; - eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, my_stdsinpi, eve::big(eve::sinpi)); -} - -// #include - -// TTS_CASE_TPL("wide random check on sinpi", EVE_TYPE) -// { -// ::crlibm_init(); -// auto my_stdsinpi = tts::vectorize([](EVE_VALUE x){return EVE_VALUE(::sinpi_rn(x)); }); -// eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); -// TTS_RANGE_CHECK(p, my_stdsinpi, eve::big(eve::sinpi)); -// } diff --git a/test/random/module/real/math/sinpi/medium/sinpi.hpp b/test/random/module/real/math/sinpi/medium/sinpi.hpp deleted file mode 100644 index a03dc27b5f..0000000000 --- a/test/random/module/real/math/sinpi/medium/sinpi.hpp +++ /dev/null @@ -1,18 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include "producers.hpp" - -TTS_CASE_TPL("wide random check on sinpi", EVE_TYPE) -{ - auto my_stdsinpi = [](auto x){return boost::math::sin_pi(x); }; - - eve::uniform_prng p(EVE_VALUE(-100000.0), EVE_VALUE(100000.0)); - TTS_RANGE_CHECK(p, my_stdsinpi, eve::medium(eve::sinpi)); -} diff --git a/test/random/module/real/math/sinpi/restricted/sinpi.hpp b/test/random/module/real/math/sinpi/quarter_circle/sinpi.hpp similarity index 86% rename from test/random/module/real/math/sinpi/restricted/sinpi.hpp rename to test/random/module/real/math/sinpi/quarter_circle/sinpi.hpp index 523318a5f2..1f5c0f2256 100644 --- a/test/random/module/real/math/sinpi/restricted/sinpi.hpp +++ b/test/random/module/real/math/sinpi/quarter_circle/sinpi.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on sinpi", EVE_TYPE) +(::tts::type) { auto my_stdsinpi = [](auto x){return boost::math::sin_pi(x); }; eve::uniform_prng p(-0.25, 0.25); - TTS_RANGE_CHECK(p, my_stdsinpi, eve::restricted(eve::sinpi)); -} + TTS_RANGE_CHECK(p, my_stdsinpi, eve::quarter_circle(eve::sinpi)); +}; \ No newline at end of file diff --git a/test/random/module/real/math/sinpi/regular/sinpi.hpp b/test/random/module/real/math/sinpi/regular/sinpi.hpp index 4538573f27..1e83e37ab4 100644 --- a/test/random/module/real/math/sinpi/regular/sinpi.hpp +++ b/test/random/module/real/math/sinpi/regular/sinpi.hpp @@ -12,9 +12,10 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on sinpi", EVE_TYPE) +(::tts::type) { auto my_stdsinpi = [](auto x){return boost::math::sin_pi(x); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, my_stdsinpi, eve::sinpi); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/sinpicospi/big/sinpicospi.hpp b/test/random/module/real/math/sinpicospi/big/sinpicospi.hpp deleted file mode 100644 index b156baafd9..0000000000 --- a/test/random/module/real/math/sinpicospi/big/sinpicospi.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include "producers.hpp" - -TTS_CASE_TPL("wide random check on sinpicospi", EVE_TYPE) -{ - auto std_sinpi = [](auto e) -> EVE_VALUE { return eve::sinpi(double(e)); }; - auto std_cospi = [](auto e) -> EVE_VALUE { return eve::cospi(double(e)); }; - auto sinpicospi_s = [](auto e) { auto [s, c] = eve::big(eve::sinpicospi)(e); return s; }; - auto sinpicospi_c = [](auto e) { auto [s, c] = eve::big(eve::sinpicospi)(e); return c; }; - - eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_sinpi, sinpicospi_s); - TTS_RANGE_CHECK(p, std_cospi, sinpicospi_c); -} diff --git a/test/random/module/real/math/sinpicospi/medium/sinpicospi.hpp b/test/random/module/real/math/sinpicospi/medium/sinpicospi.hpp deleted file mode 100644 index b343dd702e..0000000000 --- a/test/random/module/real/math/sinpicospi/medium/sinpicospi.hpp +++ /dev/null @@ -1,25 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include "producers.hpp" - -TTS_CASE_TPL("wide random check on sinpicospi", EVE_TYPE) -{ - auto std_sinpi = [](auto e) -> EVE_VALUE { return eve::sinpi(double(e)); }; - auto std_cospi = [](auto e) -> EVE_VALUE { return eve::cospi(double(e)); }; - auto sinpicospi_s = [](auto e) { auto [s, c] = eve::medium(eve::sinpicospi)(e); return s; }; - auto sinpicospi_c = [](auto e) { auto [s, c] = eve::medium(eve::sinpicospi)(e); return c; }; - - eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_sinpi, sinpicospi_s); - TTS_RANGE_CHECK(p, std_cospi, sinpicospi_c); -} diff --git a/test/random/module/real/math/sinpicospi/restricted/sinpicospi.hpp b/test/random/module/real/math/sinpicospi/quarter_circle/sinpicospi.hpp similarity index 78% rename from test/random/module/real/math/sinpicospi/restricted/sinpicospi.hpp rename to test/random/module/real/math/sinpicospi/quarter_circle/sinpicospi.hpp index ddcf5c96d7..bb5ac2c743 100644 --- a/test/random/module/real/math/sinpicospi/restricted/sinpicospi.hpp +++ b/test/random/module/real/math/sinpicospi/quarter_circle/sinpicospi.hpp @@ -12,13 +12,14 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on sinpicospi", EVE_TYPE) +(::tts::type) { auto std_sinpi = [](auto e) -> EVE_VALUE { return eve::sinpi(double(e)); }; auto std_cospi = [](auto e) -> EVE_VALUE { return eve::cospi(double(e)); }; - auto sinpicospi_s = [](auto e) { auto [s, c] = eve::small(eve::sinpicospi)(e); return s; }; - auto sinpicospi_c = [](auto e) { auto [s, c] = eve::small(eve::sinpicospi)(e); return c; }; + auto sinpicospi_s = [](auto e) { auto [s, c] = eve::half_circle(eve::sinpicospi)(e); return s; }; + auto sinpicospi_c = [](auto e) { auto [s, c] = eve::half_circle(eve::sinpicospi)(e); return c; }; eve::uniform_prng p(-EVE_VALUE(0.25), EVE_VALUE(0.25)); TTS_RANGE_CHECK(p, std_sinpi, sinpicospi_s); TTS_RANGE_CHECK(p, std_cospi, sinpicospi_c); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/sinpicospi/regular/sinpicospi.hpp b/test/random/module/real/math/sinpicospi/regular/sinpicospi.hpp index f445636782..100ba7b619 100644 --- a/test/random/module/real/math/sinpicospi/regular/sinpicospi.hpp +++ b/test/random/module/real/math/sinpicospi/regular/sinpicospi.hpp @@ -13,6 +13,7 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on sinpicospipi", EVE_TYPE) +(::tts::type) { auto std_sinpi = [](auto e) -> EVE_VALUE { return eve::sinpi(double(e)); }; auto std_cospi = [](auto e) -> EVE_VALUE { return eve::cospi(double(e)); }; @@ -22,4 +23,4 @@ TTS_CASE_TPL("wide random check on sinpicospipi", EVE_TYPE) eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_sinpi, sinpicospi_s); TTS_RANGE_CHECK(p, std_cospi, sinpicospi_c); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/tan/big/tan.hpp b/test/random/module/real/math/tan/big/tan.hpp deleted file mode 100644 index e763e6437c..0000000000 --- a/test/random/module/real/math/tan/big/tan.hpp +++ /dev/null @@ -1,20 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include "producers.hpp" -#include - -TTS_CASE_TPL("wide random check on tan", EVE_TYPE) -{ - auto std_tan = [](auto e) { return std::tan(e); }; - - eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); - TTS_RANGE_CHECK(p, std_tan, eve::big(eve::tan)); -} diff --git a/test/random/module/real/math/tan/medium/tan.hpp b/test/random/module/real/math/tan/full_circle/tan.hpp similarity index 77% rename from test/random/module/real/math/tan/medium/tan.hpp rename to test/random/module/real/math/tan/full_circle/tan.hpp index b9effc4108..1e4c642c74 100644 --- a/test/random/module/real/math/tan/medium/tan.hpp +++ b/test/random/module/real/math/tan/full_circle/tan.hpp @@ -11,10 +11,11 @@ #include TTS_CASE_TPL("wide random check on tan", EVE_TYPE) +(::tts::type) { auto std_tan = [](auto e) { return std::tan(e); }; - auto l = eve::detail::Rempio2_limit(eve::medium_type(), eve::as()); + auto l = eve::detail::Rempio2_limit(eve::full_circle_type(), eve::as()); eve::uniform_prng p(-l, l); - TTS_RANGE_CHECK(p, std_tan, eve::medium(eve::tan)); -} + TTS_RANGE_CHECK(p, std_tan, eve::full_circle(eve::tan)); +}; \ No newline at end of file diff --git a/test/random/module/real/math/tan/small/tan.hpp b/test/random/module/real/math/tan/half_circle/tan.hpp similarity index 87% rename from test/random/module/real/math/tan/small/tan.hpp rename to test/random/module/real/math/tan/half_circle/tan.hpp index 7fb0ddcf5f..61512c7f8d 100644 --- a/test/random/module/real/math/tan/small/tan.hpp +++ b/test/random/module/real/math/tan/half_circle/tan.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on tan", EVE_TYPE) +(::tts::type) { auto std_tan = [](auto e) -> EVE_VALUE { return std::tan(double(e)); }; eve::uniform_prng p(-eve::pio_2(eve::as()), eve::pio_2(eve::as())); - TTS_RANGE_CHECK(p, std_tan, eve::small(eve::tan)); -} + TTS_RANGE_CHECK(p, std_tan, eve::half_circle(eve::tan)); +}; \ No newline at end of file diff --git a/test/random/module/real/math/tan/restricted/tan.hpp b/test/random/module/real/math/tan/quarter_circle/tan.hpp similarity index 87% rename from test/random/module/real/math/tan/restricted/tan.hpp rename to test/random/module/real/math/tan/quarter_circle/tan.hpp index 6de2a7bbd6..540eef1da1 100644 --- a/test/random/module/real/math/tan/restricted/tan.hpp +++ b/test/random/module/real/math/tan/quarter_circle/tan.hpp @@ -11,9 +11,10 @@ #include TTS_CASE_TPL("wide random check on tan", EVE_TYPE) +(::tts::type) { auto std_tan = [](auto e) { return std::tan(e); }; eve::uniform_prng p(-eve::pio_4(eve::as()), eve::pio_4(eve::as())); - TTS_RANGE_CHECK(p, std_tan, eve::restricted(eve::tan)); -} + TTS_RANGE_CHECK(p, std_tan, eve::quarter_circle(eve::tan)); +}; \ No newline at end of file diff --git a/test/random/module/real/math/tan/regular/tan.hpp b/test/random/module/real/math/tan/regular/tan.hpp index ef8b19a883..7a233de56e 100644 --- a/test/random/module/real/math/tan/regular/tan.hpp +++ b/test/random/module/real/math/tan/regular/tan.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on tan", EVE_TYPE) +(::tts::type) { auto std_tan = [](auto e) { return std::tan(e); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_tan, eve::tan); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/tanh/regular/tanh.hpp b/test/random/module/real/math/tanh/regular/tanh.hpp index 0401c873fa..a7dc8ead53 100644 --- a/test/random/module/real/math/tanh/regular/tanh.hpp +++ b/test/random/module/real/math/tanh/regular/tanh.hpp @@ -12,9 +12,10 @@ #include TTS_CASE_TPL("wide random check on tanh", EVE_TYPE) +(::tts::type) { auto std_tanh = [](auto e) { return std::tanh(e); }; eve::uniform_prng p(eve::valmin(eve::as()), eve::valmax(eve::as())); TTS_RANGE_CHECK(p, std_tanh, eve::tanh); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/tanpi/big/tanpi.hpp b/test/random/module/real/math/tanpi/big/tanpi.hpp deleted file mode 100644 index 9bed8d4365..0000000000 --- a/test/random/module/real/math/tanpi/big/tanpi.hpp +++ /dev/null @@ -1,33 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "producers.hpp" - -TTS_CASE_TPL("wide random check on tanpi", EVE_TYPE) -{ - auto my_stdtanpi = [](auto x) - { - auto z = eve::abs(x); - if (z == trunc(z)) return EVE_VALUE(0); - if (eve::is_infinite(z)) return eve::nan(eve::as()); - if (z-EVE_VALUE(0.5) == eve::trunc(z)) return eve::nan(eve::as()); - return EVE_VALUE(boost::math::sin_pi(double(x))/boost::math::cos_pi(double(x))); - }; - - eve::uniform_prng p(-eve::maxflint(eve::as()), eve::maxflint(eve::as())); - TTS_RANGE_CHECK(p, my_stdtanpi, eve::big(eve::tanpi)); -} diff --git a/test/random/module/real/math/tanpi/medium/tanpi.hpp b/test/random/module/real/math/tanpi/medium/tanpi.hpp deleted file mode 100644 index 67bd132665..0000000000 --- a/test/random/module/real/math/tanpi/medium/tanpi.hpp +++ /dev/null @@ -1,34 +0,0 @@ -//================================================================================================== -/* - EVE - Expressive Vector Engine - Copyright : EVE Contributors & Maintainers - SPDX-License-Identifier: MIT -*/ -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "producers.hpp" - -TTS_CASE_TPL("wide random check on tanpi", EVE_TYPE) -{ - auto my_stdtanpi = [](auto x) - { - auto z = eve::abs(x); - - if (z == trunc(z)) return EVE_VALUE(0); - if (z-EVE_VALUE(0.5) == eve::trunc(z)) return eve::nan(eve::as()); - - return EVE_VALUE(boost::math::sin_pi(double(x))/boost::math::cos_pi(double(x))); - }; - - TTS_RANGE_CHECK ( eve::uniform_prng(EVE_VALUE(-100000.0), EVE_VALUE(100000.0)) - , my_stdtanpi, eve::medium(eve::tanpi) - ); -} diff --git a/test/random/module/real/math/tanpi/restricted/tanpi.hpp b/test/random/module/real/math/tanpi/quarter_circle/tanpi.hpp similarity index 90% rename from test/random/module/real/math/tanpi/restricted/tanpi.hpp rename to test/random/module/real/math/tanpi/quarter_circle/tanpi.hpp index 7212e8c5a2..d2f425b2dc 100644 --- a/test/random/module/real/math/tanpi/restricted/tanpi.hpp +++ b/test/random/module/real/math/tanpi/quarter_circle/tanpi.hpp @@ -12,11 +12,12 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on tanpi", EVE_TYPE) +(::tts::type) { auto my_stdtanpi = [](auto x){return boost::math::sin_pi(x)/boost::math::cos_pi(x); }; TTS_RANGE_CHECK ( eve::uniform_prng(-0.25, 0.25) , my_stdtanpi - , eve::restricted(eve::tanpi) + , eve::quarter_circle(eve::tanpi) ); -} +}; \ No newline at end of file diff --git a/test/random/module/real/math/tanpi/regular/tanpi.hpp b/test/random/module/real/math/tanpi/regular/tanpi.hpp index 2f75a9aff7..b42a142b04 100644 --- a/test/random/module/real/math/tanpi/regular/tanpi.hpp +++ b/test/random/module/real/math/tanpi/regular/tanpi.hpp @@ -20,6 +20,7 @@ #include "producers.hpp" TTS_CASE_TPL("wide random check on tanpi", EVE_TYPE) +(::tts::type) { auto my_stdtanpi = [](auto x) { @@ -36,4 +37,4 @@ TTS_CASE_TPL("wide random check on tanpi", EVE_TYPE) ) , my_stdtanpi, eve::tanpi ); -} +}; \ No newline at end of file diff --git a/test/random/module/real/special/stirling/regular/stirling.hpp b/test/random/module/real/special/stirling/regular/stirling.hpp index 4689568485..d32c2b490a 100644 --- a/test/random/module/real/special/stirling/regular/stirling.hpp +++ b/test/random/module/real/special/stirling/regular/stirling.hpp @@ -12,6 +12,7 @@ #include TTS_CASE_TPL("wide random check on stirling", EVE_TYPE) +(::tts::type) { auto std_stirling = [](auto e) { return std::stirling(e); }; auto eve_stirling = [](auto e) { return eve::stirling(e); }; @@ -21,4 +22,4 @@ TTS_CASE_TPL("wide random check on stirling", EVE_TYPE) ); TTS_RANGE_CHECK(p, std_stirling, eve_stirling); -} +}; \ No newline at end of file diff --git a/test/random/module/real/special/tgamma/pedantic/tgamma.hpp b/test/random/module/real/special/tgamma/pedantic/tgamma.hpp index e3ce396676..333f474280 100644 --- a/test/random/module/real/special/tgamma/pedantic/tgamma.hpp +++ b/test/random/module/real/special/tgamma/pedantic/tgamma.hpp @@ -12,6 +12,7 @@ #include TTS_CASE_TPL("wide random check on gamma", EVE_TYPE) +(::tts::type) { auto std_tgamma = [](auto e) { return std::tgamma(e); }; @@ -20,4 +21,4 @@ TTS_CASE_TPL("wide random check on gamma", EVE_TYPE) ); TTS_RANGE_CHECK(p, std_tgamma, eve::pedantic(eve::tgamma)); -} +}; \ No newline at end of file diff --git a/test/random/module/real/special/tgamma/regular/tgamma.hpp b/test/random/module/real/special/tgamma/regular/tgamma.hpp index 90b518fe77..69d6c30067 100644 --- a/test/random/module/real/special/tgamma/regular/tgamma.hpp +++ b/test/random/module/real/special/tgamma/regular/tgamma.hpp @@ -12,6 +12,7 @@ #include TTS_CASE_TPL("wide random check on gamma", EVE_TYPE) +(::tts::type) { auto std_tgamma = [](auto e) { return std::tgamma(e); }; @@ -20,4 +21,4 @@ TTS_CASE_TPL("wide random check on gamma", EVE_TYPE) ); TTS_RANGE_CHECK(p, std_tgamma, eve::tgamma); -} +}; \ No newline at end of file diff --git a/test/test.hpp b/test/test.hpp index cd4bf91f92..0f0d7694a2 100644 --- a/test/test.hpp +++ b/test/test.hpp @@ -16,20 +16,20 @@ int main(int argc, char const **argv) { std::cout << "[EVE] - Target: " - << ::tts::cyan() << ::tts::typename_ << ::tts::reset() + << ::tts::cyan << ::tts::typename_ << ::tts::reset << " - Assertions: "; #ifdef NDEBUG - std::cout << ::tts::red() << "Disabled" << ::tts::reset() << " - ";; + std::cout << ::tts::red << "Disabled" << ::tts::reset << " - ";; #else - std::cout << ::tts::green() << "Enabled" << ::tts::reset() << " - "; + std::cout << ::tts::green << "Enabled" << ::tts::reset << " - "; #endif ::tts::options parser{argc,argv}; std::mt19937::result_type seed(18102008); - seed = parser.value_or(seed, "-s", "--seed"); + seed = parser.value({"-s", "--seed"}, seed); - std::cout << "PRNG Seed: " << ::tts::cyan() << seed << ::tts::reset() << std::endl; + std::cout << "PRNG Seed: " << ::tts::cyan << seed << ::tts::reset << std::endl; eve_entry_point(argc, argv); return tts::report(0,0); diff --git a/test/tts/ranges.hpp b/test/tts/ranges.hpp index 6b9893ceec..365ae29b9c 100644 --- a/test/tts/ranges.hpp +++ b/test/tts/ranges.hpp @@ -1,11 +1,9 @@ //================================================================================================== -/* +/** TTS - Tiny Test System - Copyright 2020 Joel FALCOU - - Licensed under the MIT License . + Copyright : TTS Contributors & Maintainers SPDX-License-Identifier: MIT -*/ +**/ //================================================================================================== #pragma once @@ -25,9 +23,9 @@ namespace tts template struct adapter { template - static void run(Base const*& src, U*& dst, Func f) noexcept { *dst++ = f(*src++); } - static auto retrieve(Base const* src) noexcept { return *src; } - static void display(Base const& v, std::ostream& os) noexcept { os << v; } + static void run(Base const*& src, U*& dst, Func f) noexcept { *dst++ = f(*src++); } + static auto retrieve(Base const* src) noexcept { return *src; } + static void display(Base const& v, std::ostream& os) noexcept { os << tts::as_string(v); } }; template @@ -81,15 +79,16 @@ namespace tts::detail template void results( std::ostream& os - , U ulp, C count, R ratio, std::string const& desc, V const& v, bool hexfloat + , U ulp, C count, R ratio, std::string const& desc, V const& v ) { os << std::left << std::noshowpos; os << detail::text_field(16,1) << ulp << detail::text_field(16) << count << detail::value_field(16) << ratio - << detail::value_field(16,7) << desc; - os << (hexfloat ? std::hexfloat : std::scientific) << std::showpos; + << detail::value_field(16,7) + << ::tts::white << tts::bold << desc << tts::reset; + os << std::showpos; adapter::display(v,os); os << std::fixed << std::endl; } @@ -140,15 +139,13 @@ namespace tts template< typename RefType, typename NewType , typename Generator, typename RefFun, typename NewFun > - double ulp_histogramm ( Generator g, RefFun reference, NewFun challenger - , options const& args - ) + double ulp_histogram(Generator g, RefFun reference, NewFun challenger) { using out_type = std::decay_t() ))>; using nout_type = std::decay_t() ))>; //-- Find how many elements in a block - std::size_t count = args.value_or(4096ULL, "-b", "--block"); + std::size_t count = ::tts::arguments.value( "--block", 4096ULL); //-- Prepare blocks std::vector ref_out(count), new_out(count); @@ -157,8 +154,7 @@ namespace tts for(std::size_t i=0;i( samples[ i ] ) - , hexfloat ); detail::results ( std::cout, "" , "" , "" , "Found: " , std::get<2>( samples[ i ] ) - , hexfloat ); detail::results ( std::cout, "" , "" , "" , "instead of: " , std::get<3>( samples[ i ] ) - , hexfloat ); std::cout << std::string(80,'-') << std::endl << std::noshowpos; @@ -237,13 +230,16 @@ namespace tts template void print_producer(P const& producer, const char* alt) { - if constexpr( tts::detail::has_to_string

                                                                                          ) + if constexpr( tts::support_std_to_string

                                                                                          + || tts::streamable

                                                                                          + || tts::support_to_string

                                                                                          + ) { - std::cout << ::tts::cyan() << producer.to_string() << ::tts::reset(); + std::cout << ::tts::cyan << ::tts::as_string(producer) << ::tts::reset << "\n"; } else { - std::cout << ::tts::cyan(alt); + std::cout << ::tts::cyan << alt << ::tts::reset << "\n"; } } @@ -261,54 +257,53 @@ namespace tts // Generate a range based test between two function //================================================================================================== #define TTS_ULP_RANGE_CHECK(Producer, RefType, NewType, RefFunc, NewFunc, Ulpmax) \ - do \ + [&]() \ { \ - std::cout << ::tts::magenta("Comparing: ") << ::tts::cyan(TTS_STRING(RefFunc)) \ - << "<" << ::tts::cyan(TTS_STRING(TTS_REMOVE_PARENS(RefType))) << ">" \ - << " with " << ::tts::cyan(TTS_STRING(NewFunc)) \ - << "<" << ::tts::cyan(TTS_STRING(TTS_REMOVE_PARENS(NewType))) << ">" \ - << " using "; \ + std::cout << ::tts::magenta << "Comparing: " << ::tts::cyan << TTS_STRING(RefFunc) \ + << ::tts::reset << "<" \ + << ::tts::cyan << TTS_STRING(TTS_REMOVE_PARENS(RefType)) \ + << ::tts::reset << ">" \ + << " with " << ::tts::cyan << TTS_STRING(NewFunc) << ::tts::reset \ + << "<" << ::tts::cyan << TTS_STRING(TTS_REMOVE_PARENS(NewType)) \ + << ::tts::reset << "> using "; \ \ auto generator = TTS_REMOVE_PARENS(Producer); \ tts::init_producer(generator,::tts::arguments); \ - tts::print_producer(generator,TTS_STRING(Producer)); \ - std::cout << "\n"; \ - \ - auto local_tts_threshold = ::tts::arguments.value_or(Ulpmax, "-u","--ulpmax"); ; \ + tts::print_producer(generator, TTS_STRING(Producer) ); \ \ - auto local_tts_max_ulp = ::tts::ulp_histogramm < TTS_REMOVE_PARENS(RefType) \ - , TTS_REMOVE_PARENS(NewType) \ - > \ + auto local_tts_threshold = ::tts::arguments.value( "--ulpmax", Ulpmax ); \ + auto local_tts_max_ulp = ::tts::ulp_histogram< TTS_REMOVE_PARENS(RefType) \ + , TTS_REMOVE_PARENS(NewType) \ + > \ ( generator \ , RefFunc, NewFunc \ - , ::tts::arguments \ ); \ \ if(local_tts_max_ulp <= local_tts_threshold) \ { \ - TTS_PASS( "Expecting: " << ::tts::green(TTS_STRING(NewFunc)) \ - << " similar to " << ::tts::green(TTS_STRING(RefFunc)) \ - << " within " << std::setprecision(2) << ::tts::green() \ + TTS_PASS( "Expecting: " << ::tts::green << TTS_STRING(NewFunc) \ + << " similar to " << ::tts::green << TTS_STRING(RefFunc) \ + << " within " << std::setprecision(2) << ::tts::green \ << local_tts_threshold << ::tts::reset << " ULP" \ - << " and found: " << std::setprecision(2) << ::tts::green() \ + << " and found: " << std::setprecision(2) << ::tts::green \ << local_tts_max_ulp << ::tts::reset << " ULP" \ ); \ } \ else \ { \ - TTS_FAIL( "Expecting: " << ::tts::green(TTS_STRING(NewFunc)) \ - << " similar to " << ::tts::green(TTS_STRING(RefFunc)) \ - << " within " << std::setprecision(2) << ::tts::green() \ + TTS_FAIL( "Expecting: " << ::tts::green << TTS_STRING(NewFunc) \ + << " similar to " << ::tts::green << TTS_STRING(RefFunc) \ + << " within " << std::setprecision(2) << ::tts::green \ << local_tts_threshold << ::tts::reset << " ULP" \ - << " but found: " << std::setprecision(2) << ::tts::red() \ + << " but found: " << std::setprecision(2) << ::tts::red \ << local_tts_max_ulp << ::tts::reset << " ULP instead" \ ); \ } \ - } while(::tts::detail::done()) \ + }() /**/ //================================================================================================== -// Ready-to-use generators +// Ready-to-use PRNGs //================================================================================================== namespace tts { @@ -325,19 +320,18 @@ namespace tts void init( options const& args ) { - auto s = args.value_or(18102008, "-s", "--seed"); + std::mt19937::result_type no_seed(-1); + seed_ = args.value( "--seed", no_seed ); - if(s == -1 ) + if(seed_ == no_seed ) { auto now = std::chrono::high_resolution_clock::now(); - s = static_cast(now.time_since_epoch().count()); + seed_ = static_cast(now.time_since_epoch().count()); } - - seed_ = std::mt19937::result_type(s); generator_.seed(seed_); - auto mn = args.value_or(distribution_.min(), "-v", "--valmin"); - auto mx = args.value_or(distribution_.max(), "-w", "--valmax"); + auto mn = args.value( "--valmin", distribution_.min() ); + auto mx = args.value( "--valmax", distribution_.max() ); distribution_.param(param_type(mn, mx)); } @@ -347,12 +341,12 @@ namespace tts return distribution_(generator_); } - std::string to_string() const + friend std::string to_string(prng_generator const& p) { std::ostringstream txt; txt << typename_ - << "(" << distribution_.min() << ", " << distribution_.max() << ")" - << "[seed = " << seed_ << "]"; + << "(" << p.distribution_.min() << ", " << p.distribution_.max() << ")" + << "[seed = " << p.seed_ << "]"; return txt.str(); } diff --git a/test/tts/tts.hpp b/test/tts/tts.hpp index af5e42c9c9..7e94db6b05 100644 --- a/test/tts/tts.hpp +++ b/test/tts/tts.hpp @@ -1,211 +1,363 @@ //================================================================================================== -/* +/** TTS - Tiny Test System - Copyright 2020 Joel FALCOU - - Licensed under the MIT License . + Copyright : TTS Contributors & Maintainers SPDX-License-Identifier: MIT -*/ +**/ //================================================================================================== #pragma once - -//================================================================================================== -// Dependencies -//================================================================================================== -#include -#include -#include -#include -#include -#include -#include -#include - -//================================================================================================== -// Warning Suppressors -//================================================================================================== #if defined(__clang__) #pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments" #endif - -//================================================================================================== -// Misc. Helpers -//================================================================================================== +#if defined(_WIN32) || defined(_WIN64) +#define TTS_COLOR_WINDOWS +#if !defined(NOMINMAX) +#define NOMINMAX +#endif +#endif +#if defined(TTS_COLOR_WINDOWS) +#include +#include +#else +#include +#endif +#include +#include namespace tts::detail { - inline bool done() { return false; } - - template struct typelist {}; - template struct box { using type = T; }; - - // Iterate statically over a typelist - template - bool for_each_type(Function &&f, typelist const &) - { - (f(box {}), ...); - return true; - } - - // bit_cast till we got std::bit_cast :( - template inline U bit_cast(T a) noexcept - { - U that; - void const *src = reinterpret_cast(&a); - void * dst = reinterpret_cast(&that); - std::memcpy(dst, src, sizeof(a)); - return that; - } - - inline auto as_int(float a) noexcept { return bit_cast(a); } - inline auto as_int(double a) noexcept { return bit_cast(a); } - - template inline auto bitinteger(T a) noexcept + inline bool color_status = true; + inline std::ostream & modifiy_stream(std::ostream &stream, int foreground) { - auto ia = as_int(a); - using r_t = std::remove_cvref_t; - constexpr auto Signmask = r_t(1) << (sizeof(r_t)*8-1); - return std::signbit(a) ? Signmask-ia : ia; + if(color_status) + { +#if defined(TTS_COLOR_WINDOWS) + static WORD defaultAttributes = 0; + HANDLE hTerminal = INVALID_HANDLE_VALUE; + if (&stream == &std::cout) hTerminal = GetStdHandle(STD_OUTPUT_HANDLE); + else if (&stream == &std::cerr) hTerminal = GetStdHandle(STD_ERROR_HANDLE); + if (!defaultAttributes) + { + CONSOLE_SCREEN_BUFFER_INFO info; + if (!GetConsoleScreenBufferInfo(hTerminal, &info)) return stream; + defaultAttributes = info.wAttributes; + } + if (foreground > 7) return stream; + if (foreground == -1) + { + SetConsoleTextAttribute(hTerminal, defaultAttributes); + return stream; + } + CONSOLE_SCREEN_BUFFER_INFO info; + if (!GetConsoleScreenBufferInfo(hTerminal, &info)) return stream; + info.wAttributes &= ~(info.wAttributes & 0x0F); + info.wAttributes |= static_cast(FOREGROUND_INTENSITY | foreground); + SetConsoleTextAttribute(hTerminal, info.wAttributes); + return stream; +#else + static char const* modifier[] = + { + "\033[00m", + "\033[30m", + "\033[34m", + "\033[32m", + "\033[36m", + "\033[31m", + "\033[35m", + "\033[33m", + "\033[37m", + "\033[1m" , + }; + return stream << modifier[foreground+1]; +#endif + } + else + { + return stream; + } } - - template - std::pair mismatch(It1 first1, It1 last1, It2 first2, Func p) +} +#undef TTS_COLOR_WINDOWS +namespace tts +{ + inline std::ostream& reset (std::ostream &stream) { return detail::modifiy_stream(stream, -1); } + inline std::ostream& grey (std::ostream &stream) { return detail::modifiy_stream(stream, 0); } + inline std::ostream& blue (std::ostream &stream) { return detail::modifiy_stream(stream, 1); } + inline std::ostream& green (std::ostream &stream) { return detail::modifiy_stream(stream, 2); } + inline std::ostream& cyan (std::ostream &stream) { return detail::modifiy_stream(stream, 3); } + inline std::ostream& red (std::ostream &stream) { return detail::modifiy_stream(stream, 4); } + inline std::ostream& magenta(std::ostream &stream) { return detail::modifiy_stream(stream, 5); } + inline std::ostream& yellow (std::ostream &stream) { return detail::modifiy_stream(stream, 6); } + inline std::ostream& white (std::ostream &stream) { return detail::modifiy_stream(stream, 7); } + inline std::ostream& bold (std::ostream &stream) { return detail::modifiy_stream(stream, 8); } +} +#include +namespace tts +{ + inline int usage(const char* name) { - while (first1 != last1 && p(*first1, *first2)) - ++first1, ++first2; - return std::make_pair(first1, first2); + std::cout << bold << cyan << "TTS Unit Tests Driver\n" << reset; + std::cout << bold << white << "Usage: " << name << grey << " [OPTION...]\n" << reset; + std::cout << bold << yellow << "\nFlags:\n" << reset; + std::cout << green << " -h, --help " << reset + << bold << white << "Display this help message\n" << reset; + std::cout << green << " -n, --no-color " << reset + << bold << white << "Disable colored output\n" << reset; + std::cout << green << " -p, --pass " << reset + << bold << white << "Report passing tests\n" << reset; + std::cout << green << " -x, --hex " << reset + << bold << white << "Print the floating results in hexfloat mode\n" << reset; + std::cout << green << " -s, --scientific " << reset + << bold << white << "Print the floating results in scientific mode\n" << reset; + std::cout << bold << yellow << "\nParameters:\n" << reset; + std::cout << green << " --filter=str " << reset + << bold << white << "Only run tests with `str` in their description\n" << reset; + std::cout << green << " --precision=arg " << reset + << bold << white << "Set the precision for displaying floating pint values\n" << reset; + std::cout << green << " --repeat=arg " << reset + << bold << white << "Repeat each tests arg times\n" << reset; + std::cout << green << " --seed=arg " << reset + << bold << white << "Set the PRNG seeds (default is time-based)\n"; + std::cout << bold << yellow << "\nRange specifics Parameters:\n" << reset; + std::cout << green << " --block=arg " << reset + << bold << white << "Set size of range checks samples (min. 32)\n" << reset; + std::cout << green << " --loop=arg " << reset + << bold << white << "Repeat each range checks arg times\n" << reset; + std::cout << green << " --ulpmax=arg " << reset + << bold << white << "Set global failure ulp threshold for range tests (default is 2.0)\n" << reset; + std::cout << green << " --valmax=arg " << reset + << bold << white << "Set maximal value for range tests (default is code)\n" << reset; + std::cout << green << " --valmin=arg " << reset + << bold << white << "Set minimal value for range tests (default is code)\n" << reset; + std::cout << std::endl; + return 0; } - - //================================================================================================== - // Internal concepts - //================================================================================================== - template - concept support_std_to_string = requires(T e) { std::to_string(e); }; - - template - concept support_to_string = requires(T e) { to_string(e); }; - - template - concept has_to_string = requires(T e) { e.to_string(); }; - - template - concept sequence = requires(T e) {std::begin(e); std::end(e); }; - - template - concept streamable = requires(T e, std::ostream& o) { o << e; }; } - -//================================================================================================== -// Display helpers -//================================================================================================== +#include namespace tts { - template struct type_name_ + template struct callable; + template + struct callable { - static constexpr auto value() noexcept + public: + using signature_t = Return(*)(void*, Params...); + using deleter_t = void(*)(void*); + signature_t invoker = {}; + deleter_t cleanup = {}; + void* payload = {}; + constexpr callable() = default; + template + constexpr callable(Function f) + : invoker{invoke}, cleanup{destroy} + , payload{new Function{std::move(f)}} + {} + constexpr callable(callable&& other) noexcept + : invoker{std::move(other.invoker)}, cleanup{std::move(other.cleanup)} + , payload{std::move(other.payload)} { - #if defined(_MSC_VER ) - std::string_view data(__FUNCSIG__); - auto i = data.find('<') + 1, - j = data.find(">::value"); - return data.substr(i, j - i); - #else - std::string_view data(__PRETTY_FUNCTION__); - auto i = data.find('=') + 2, - j = data.find_last_of(']'); - return data.substr(i, j - i); - #endif + other.payload = {}; } + ~callable() { cleanup(payload); } + constexpr callable(const callable&) = delete; + constexpr callable& operator=(const callable&) = delete; + constexpr callable& operator=(callable&&) = delete; + constexpr Return operator()(Params... args) { return invoker(payload, args...); } + constexpr Return operator()(Params... args) const { return invoker(payload, args...); } + private: + template + static Return invoke(void* data, Params... args) { return (*static_cast(data))(args...); } + template + static void destroy(void* data) { delete static_cast(data); } }; - - template - inline constexpr auto const typename_ = type_name_::value(); - - template constexpr auto typename_of_(T&&){ return typename_; } - - // Display a result - template std::string as_string(T const& e) +} +#include +#include +namespace tts::detail +{ + struct test { - if constexpr( std::is_pointer_v ) + using behavior_t = tts::callable; + void operator()() { behaviour(); } + static inline bool acknowledge(test&& f); + std::string name; + behavior_t behaviour; + }; + inline std::vector suite = {}; + bool inline test::acknowledge(test&& f) + { + suite.emplace_back( std::forward(f)); + return true; + } +} +#include +#include +namespace tts::detail +{ + struct env + { + void pass() { test_count++; success_count++; } + void fail() { test_count++; failure_count++; } + void fatal() { test_count++; failure_count++; fatal_count++; } + void invalid() { test_count++; invalid_count++; } + int report(std::ptrdiff_t fails, std::ptrdiff_t invalids) const { - std::ostringstream os; - os << std::string(typename_) << "(" << e << ")"; - return os.str(); + auto test_txt = test_count > 1 ? "tests" : "test"; + auto pass_txt = success_count > 1 ? "successes" : "success"; + auto fail_txt = failure_count > 1 ? "failures" : "failure"; + auto inv_txt = invalid_count > 1 ? "invalids" : "invalid"; + std::cout << reset << std::string(80, '-') << std::endl; + std::cout << bold << "Results: " + << test_count << " " << test_txt + << " - " << success_count << "/" << test_count << " " + << green << pass_txt << reset << bold + << " - " << failure_count << "/" << fails << " " + << red << fail_txt << reset << bold + << " - " << invalid_count << "/" << invalids << " " << bold + << magenta << inv_txt << reset + << std::endl; + if(!fails && !invalids) return test_count == success_count ? 0 : 1; + else return (failure_count == fails && invalid_count == invalids) ? 0 : 1; } - else if constexpr( detail::support_std_to_string ) + int test_count = 0, + success_count = 0, + failure_count = 0, + fatal_count = 0, + invalid_count = 0; + }; +} +namespace tts +{ + inline ::tts::detail::env global_runtime; + inline int report(std::ptrdiff_t fails, std::ptrdiff_t invalids) + { + return global_runtime.report(fails,invalids); + } +} +#include +#include +#include +namespace tts +{ + struct option + { + option() = default; + option( std::string arg ) : token(std::move(arg)), position(token.rfind( '=' )) {} + auto flag() const { return token.substr(0, position); } + bool is_valid() const { return !flag().empty(); } + template T get(T const& def = T{}) const { - return std::to_string(e); + T that; + if(is_valid()) + { + std::istringstream os(token.substr(position+1)); + if(os >> that) return that; + else return def; + } + else + { + return def; + } } - else if constexpr( detail::streamable ) + std::string token = ""; + size_t position = std::string::npos; + }; + struct options + { + using params_t = std::initializer_list; + option find(const char* f ) const { return find({f}); } + option find(params_t fs) const { - std::ostringstream os; - os << e; - return os.str(); + for(int i=1;i ) + bool operator[](params_t fs) const { return find(fs).is_valid(); } + bool operator[](const char* f ) const { return operator[]({f}); } + template T value(params_t fs, T that = {}) const { - return to_string(e); + if( auto o = find(fs); o.is_valid()) that = o.template get(that); + return that; } - else if constexpr( detail::sequence ) + template T value(const char* f, T that = {}) const { - std::string that = "{ "; - for(auto const& v : e) that += as_string(v) + " "; - that += "}"; - return that; + return value({f},that); } - else + int argc; + char const** argv; + }; + inline ::tts::options arguments; + inline bool verbose_status; +} +#if !defined(TTS_CUSTOM_DRIVER_FUNCTION) +# define TTS_CUSTOM_DRIVER_FUNCTION main +namespace tts::detail +{ + constexpr bool use_main = true; +} +#else +namespace tts::detail +{ + constexpr bool use_main = false; +} +#endif +namespace tts::detail +{ + struct fatal_signal {}; +} +#if defined(TTS_MAIN) +int TTS_CUSTOM_DRIVER_FUNCTION([[maybe_unused]] int argc,[[maybe_unused]] char const** argv) +{ + ::tts::arguments = ::tts::options{argc,argv}; + ::tts::detail::color_status = !::tts::arguments[{"-n","--no-color"}]; + if( ::tts::arguments[{"-h","--help"}] ) + return ::tts::usage(argv[0]); + ::tts::verbose_status = ::tts::arguments[{"-p","--pass"}]; + std::size_t repetitions = ::tts::arguments.value( "--repeat", 1 ); + std::string filter = ::tts::arguments.value( "--filter", std::string{}); + try + { + for(auto &t: ::tts::detail::suite) { - std::ostringstream os; - os << "[" << std::string(typename_) << "]@(" << &e << ")"; - return os.str(); + if(filter.empty() || (t.name.find(filter) != std::string::npos) ) + { + auto count = ::tts::global_runtime.test_count; + std::cout << ::tts::yellow << ::tts::bold + << "[SCENARIO]" << " - " << t.name + << ::tts::reset << std::endl; + for(std::size_t i = 0; i < repetitions; ++i) t(); + if(count == ::tts::global_runtime.test_count) + ::tts::global_runtime.invalid(); + } } } - - inline std::string as_string(bool b) { return b ? std::string("true") : std::string("false"); } - inline std::string as_string(std::string const& e) { return e; } - inline std::string as_string(std::string_view const& e) { return std::string(e); } - inline std::string as_string(std::nullptr_t) { return std::string("nullptr"); } + catch( ::tts::detail::fatal_signal& ) + { + std::cout << "\n" << ::tts::red + << ::tts::bold << "** ABORTING AFTER FIRST FAILURE **" + << "\n"; + } + if constexpr( ::tts::detail::use_main ) return ::tts::report(0,0); + else return 0; } - -//================================================================================================== -// List of types list to use in template cases -//================================================================================================== -#define TTS_SIGNED_INTEGRAL_TYPES std::int8_t , std::int16_t , std::int32_t , std::int64_t -#define TTS_UNSIGNED_INTEGRAL_TYPES std::uint8_t, std::uint16_t, std::uint32_t, std::uint64_t - -#define TTS_INTEGRAL_TYPES \ - char, std::int8_t, std::int16_t , std::int32_t , std::int64_t, \ - std::uint8_t, std::uint16_t, std::uint32_t, std::uint64_t \ -/**/ - -#define TTS_IEEE_TYPES float, double -#define TTS_SIGNED_NUMERIC_TYPES TTS_IEEE_TYPES, TTS_SIGNED_INTEGRAL_TYPES -#define TTS_UNSIGNED_NUMERIC_TYPES TTS_UNSIGNED_INTEGRAL_TYPES -#define TTS_NUMERIC_TYPES TTS_IEEE_TYPES, TTS_INTEGRAL_TYPES -#define TTS_ALL_TYPES bool, TTS_NUMERIC_TYPES - -//================================================================================================== -// Preprocessor shenanigans -//================================================================================================== +#endif #ifndef TTS_FUNCTION #define TTS_FUNCTION TTS_UNIQUE(tts_function) #endif - #ifndef TTS_REGISTRATION #define TTS_REGISTRATION TTS_UNIQUE(tts_registration) #endif - #define TTS_UNIQUE3(ID, LINE) ID##LINE #define TTS_UNIQUE2(ID, LINE) TTS_UNIQUE3(ID, LINE) #define TTS_UNIQUE(ID) TTS_UNIQUE2(ID, __COUNTER__) - #define TTS_CAT(x, y) TTS_CAT_I(x, y) #define TTS_CAT_I(x, y) x##y - #define TTS_STRING(...) TTS_STRING_((__VA_ARGS__)) #define TTS_STRING__(...) #__VA_ARGS__ #define TTS_STRING_(TXT) TTS_STRING__ TXT - -// Remove parens around macro token if any are present -- NON TRIVIAL SHIT #define TTS_REMOVE_PARENS(x) TTS_EVAL((TTS_REMOVE_PARENS_I x), x) #define TTS_REMOVE_PARENS_I(...) 1, 1 #define TTS_APPLY(macro, args) TTS_APPLY_I(macro, args) @@ -219,360 +371,572 @@ namespace tts #define TTS_MAYBE_STRIP_PARENS_1(x) x #define TTS_MAYBE_STRIP_PARENS_2(x) TTS_APPLY(TTS_MAYBE_STRIP_PARENS_2_I, x) #define TTS_MAYBE_STRIP_PARENS_2_I(...) __VA_ARGS__ - -//================================================================================================== -// Color on *NIX terminal using ANSI control sequence -//================================================================================================== +#include namespace tts { - struct color + template struct type {}; + template struct types {}; +} +namespace tts::detail +{ + template struct lambda_test { - color(char const* cc) : code_(cc), text_(nullptr) {} - color const& operator()(char const* t) const noexcept { text_ = t; return *this; } - color const& operator()() const noexcept { text_ = nullptr; return *this; } - - char const* code() const noexcept { return code_; } - char const* reset() const noexcept { return "\033[0m"; } - char const* text() const noexcept { return text_; } - - static bool status; - - private: - char const *code_; - mutable char const *text_; + lambda_test(TestBed f) : base_test(f) {} + auto operator+(auto TestBody) const + { + base_test( TestBody ); + return true; + } + TestBed base_test; }; +} +#define TTS_CASE_TPL(DESCRIPTION,...) \ +static bool const TTS_CAT(register_,TTS_FUNCTION) = ::tts::detail::lambda_test{ \ +[](auto tests) \ + { \ + auto const single_test = [=]( ::tts::type ) \ + { \ + ::tts::detail::test::acknowledge(::tts::detail::test \ + { \ + std::string{DESCRIPTION} + " (with T = " + std::string{::tts::typename_} + ")" \ + , [=]() {tests(::tts::type{}); } \ + }); \ + }; \ + \ + [&] class L,typename... Ts>(L) \ + { \ + (single_test( ::tts::type() ),...); \ + }( ::tts::types<__VA_ARGS__>{} ); \ + \ + return true; \ + }} + [] \ - inline bool color::status = true; - - inline std::ostream & operator<<(std::ostream &stream, color const& c) - { - if(color::status) stream << c.code(); - if(c.text()) stream << c.text() << c.reset(); - - return stream; - } - - inline const auto reset = color("\033[0m"); - inline const auto bold = color("\033[1m"); - inline const auto red = color("\033[31m"); - inline const auto green = color("\033[32m"); - inline const auto yellow = color("\033[33m"); - inline const auto blue = color("\033[34m"); - inline const auto magenta = color("\033[35m"); - inline const auto cyan = color("\033[36m"); - inline const auto white = color("\033[37m"); - - //================================================================================================== - // Options on the command line - //================================================================================================== - inline int usage(const char* name) - { - std::cout << "TTS Unit Tests Driver\n"; - std::cout << "Usage:\n"; - std::cout << name << " [OPTION...]\n"; - std::cout << "\nFlags:\n"; - std::cout << " -h, --help Display this help message\n"; - std::cout << " -n, --no-color Disable colored output\n"; - std::cout << " -p, --pass Report passing tests\n"; - std::cout << " -x, --hex Print the floating results in hexfloat mode\n"; - std::cout << "\nParameters:\n"; - std::cout << " -f, --filter=str Only run tests with `str` in their description\n"; - std::cout << " -r, --repeat=arg Repeat each tests arg times\n"; - std::cout << " -l, --loop=arg Repeat each range checks arg times\n"; - std::cout << " -b, --block=arg Set size of range checks samples (min. 32)\n"; - std::cout << " -u, --ulpmax=arg Set global failure ulp threshold for range tests (default is 2.0)\n"; - std::cout << " -v, --valmin=arg Set minimal value for range tests (default is code)\n"; - std::cout << " -w, --valmax=arg Set maximal value for range tests (default is code)\n"; - std::cout << " -s, --seed=arg Set the PRNG seeds (default is time-based)\n"; - std::cout << std::endl; - - return 0; - } +#define TTS_CASE(...) \ +static bool const TTS_CAT(register_,TTS_FUNCTION) = ::tts::detail::lambda_test{ \ +[](auto tests) \ + { \ + std::ostringstream title; \ + title << __VA_ARGS__; \ + return ::tts::detail::test::acknowledge(::tts::detail::test{ title.str(), [=](){ tests(); } }); \ + }} + []() \ - struct option +namespace tts::detail +{ + struct section_guard { - option() = default; - option( std::string const& arg ) + int & id; + int const §ion; + section_guard(int &id_, int const §ion_, int &count) : id(id_) , section(section_) { - auto pos = arg.rfind( '=' ); - - if(pos == std::string::npos) - { - flag = arg.data(); - value = ""; - } - else - { - flag = arg.substr(0, pos); - value = arg.substr(pos+1); - } + if(section == 0) id = count++ - 1; } - - bool is_valid() const { return !flag.empty(); } - - template T get(T const& def = T{}) const + template bool check(Desc const& desc) { - T that; - - if(is_valid()) - { - std::istringstream os(value); - if(os >> that) return that; - else return def; - } - else - { - return def; - } + if(id == section) std::cout << " And then: " << desc << std::endl; + return id == section; } - - std::string flag; - std::string value; }; - - struct options + struct only_once { - template option find(Flags const&... flags ) const - { - for(int i=1;i bool is_set(Flags const&... flags ) const +#define TTS_AND_THEN(...) TTS_AND_THEN_IMPL(TTS_UNIQUE(id), __VA_ARGS__) +#include +#define TTS_SIGNED_INTEGRAL_TYPES std::int8_t , std::int16_t , std::int32_t , std::int64_t +#define TTS_UNSIGNED_INTEGRAL_TYPES std::uint8_t, std::uint16_t, std::uint32_t, std::uint64_t +#define TTS_INTEGRAL_TYPES TTS_SIGNED_INTEGRAL_TYPES, TTS_UNSIGNED_INTEGRAL_TYPES +#define TTS_IEEE_TYPES float, double +#define TTS_SIGNED_NUMERIC_TYPES TTS_IEEE_TYPES, TTS_SIGNED_INTEGRAL_TYPES +#define TTS_UNSIGNED_NUMERIC_TYPES TTS_UNSIGNED_INTEGRAL_TYPES +#define TTS_NUMERIC_TYPES TTS_IEEE_TYPES, TTS_INTEGRAL_TYPES +#define TTS_ALL_TYPES TTS_NUMERIC_TYPES, char, bool +#include +#include +#include +namespace tts +{ + class source_location + { + public: + [[nodiscard]] static constexpr auto current ( const char* file = __builtin_FILE() + , int line = __builtin_LINE() + ) noexcept { - auto o = find(flags...); - return o.is_valid(); + source_location sl{}; + sl.file_ = file; + sl.line_ = line; + return sl; } - - template T value(Flags const&... flags ) const + [[nodiscard]] constexpr auto filename() const noexcept { - T that; - - if( auto o = find(flags...); o.is_valid()) - that = o.template get(); - - return that; + std::string_view f(file_); + return f.substr(f.find_last_of('/')+1); } - - template - T value_or(T const& def, Flags const&... flags ) const + [[nodiscard]] constexpr auto line() const noexcept { return line_; } + friend std::ostream& operator<<(std::ostream& os, source_location const& s) { - T that(def); - - if( auto o = find(flags...); o.is_valid()) - that = o.template get(def); - - return that; + return os << tts::bold << tts::blue << s.filename() + << tts::white << "[" << tts::blue << s.line() << tts::white << "]" + << tts::reset; } - - int argc; - char const** argv; + private: + const char* file_{"unknown"}; + int line_{}; }; } - -//================================================================================================== -// Test environment -//================================================================================================== +#define TTS_PASS(Message) \ + [&]() \ + { \ + ::tts::global_runtime.pass(); \ + if(::tts::verbose_status) \ + std::cout << ::tts::source_location::current() << " - " << ::tts::bold \ + << ::tts::green << "!!SUCCESS!!" << ::tts::reset \ + << " - " << Message << std::endl; \ + }() +#define TTS_FAIL(Message) \ + [&]() \ + { \ + ::tts::global_runtime.fail(); \ + std::cout << ::tts::source_location::current() << " - " << ::tts::bold \ + << ::tts::red << "**FAILURE**" << ::tts::reset \ + << " - " << Message << std::endl; \ + }() +#define TTS_FATAL(Message) \ + [&]() \ + { \ + ::tts::global_runtime.fatal(); \ + std::cout << ::tts::source_location::current() << " - " << ::tts::bold \ + << ::tts::red << "** FATAL **" << ::tts::reset \ + << " - " << Message << std::endl; \ + throw ::tts::detail::fatal_signal(); \ + }() +#define TTS_INVALID(Message) \ + [&]() \ + { \ + ::tts::global_runtime.invalid(); \ + std::cout << ::tts::source_location::current() << " - " << ::tts::bold \ + << ::tts::magenta << "@@INVALID@@" << ::tts::reset \ + << " - " << Message << std::endl; \ + }() +#include +#include +#include +#include +#include namespace tts::detail { - struct env + template struct typename_ { - void pass() { test_count++; success_count++; } - void fail() { test_count++; failure_count++; } - void invalid() { test_count++; invalid_count++; } - - int report(std::ptrdiff_t fails, std::ptrdiff_t invalids) const + static constexpr auto value() noexcept { - auto test_txt = test_count > 1 ? "tests" : "test"; - auto pass_txt = success_count > 1 ? "successes" : "success"; - auto fail_txt = failure_count > 1 ? "failures" : "failure"; - auto inv_txt = invalid_count > 1 ? "invalids" : "invalid"; - - std::cout << reset << std::string(80, '-') << "\n"; - std::cout << "Results: " << test_count << " " << test_txt - << " - " << success_count << " " << green(pass_txt) - << " - " << failure_count << "/" << fails << " " << red(fail_txt) - << " - " << invalid_count << "/" << invalids << " " << magenta(inv_txt) - << std::endl; - - if(!fails && !invalids) - return test_count == success_count ? 0 : 1; - else - return (failure_count == fails && invalid_count == invalids) ? 0 : 1; + #if defined(_MSC_VER ) + std::string_view data(__FUNCSIG__); + auto i = data.find('<') + 1, + j = data.find(">::value"); + return data.substr(i, j - i); + #else + std::string_view data(__PRETTY_FUNCTION__); + auto i = data.find('=') + 2, + j = data.find_last_of(']'); + return data.substr(i, j - i); + #endif } - - int test_count = 0, - success_count = 0, - failure_count = 0, - invalid_count = 0; }; } - -//================================================================================================== -// Test case wrapper class -//================================================================================================== -namespace tts::detail +namespace tts { - struct test + template inline constexpr auto const typename_ = detail::typename_::value(); + template constexpr auto typename_of(T&&){ return typename_; } +} +namespace tts +{ + template + concept support_std_to_string = requires(T e) { std::to_string(e); }; + template + concept support_to_string = requires(T e) { to_string(e); }; + template + concept has_to_string = requires(T e) { e.to_string(); }; + template + concept sequence = requires(T e) {std::begin(e); std::end(e); }; + template + concept streamable = requires(T e, std::ostream& o) { o << e; }; + template std::string as_string(T const& e) { - using behavior_t = std::function; - - void operator()() { behaviour(); } - - static inline bool acknowledge(test&& f); - - std::string name; - behavior_t behaviour; - }; - - // Global tests suite - inline std::vector suite = {}; - - bool inline test::acknowledge(test&& f) + if constexpr( std::is_pointer_v ) + { + std::ostringstream os; + os << std::string(typename_) << "(" << e << ")"; + return os.str(); + } + else if constexpr( std::floating_point ) + { + auto precision = ::tts::arguments.value({"--precision"}, 2); + bool hexmode = ::tts::arguments[{"-x","--hex"}]; + bool scimode = ::tts::arguments[{"-s","--scientific"}]; + std::ostringstream os; + os << std::setprecision(precision); + if(hexmode) os << std::hexfloat << e << std::defaultfloat; + else if(scimode) os << std::scientific << e << std::defaultfloat; + else os << e; + return os.str(); + } + else if constexpr( support_std_to_string ) + { + return std::to_string(e); + } + else if constexpr( streamable ) + { + std::ostringstream os; + os << e; + return os.str(); + } + else if constexpr( support_to_string ) + { + return to_string(e); + } + else if constexpr( sequence ) + { + std::string that = "{ "; + for(auto const& v : e) that += as_string(v) + " "; + that += "}"; + return that; + } + else + { + std::ostringstream os; + os << "[" << std::string(typename_) << "]@(" << &e << ")"; + return os.str(); + } + } + inline std::string as_string(bool b) { return b ? std::string("true") : std::string("false"); } + inline std::string as_string(std::string const& e) { return e; } + inline std::string as_string(std::string_view const& e) { return std::string(e); } + inline std::string as_string(std::nullptr_t) { return std::string("nullptr"); } + inline std::string as_string(const char* e) { - suite.emplace_back( std::forward(f)); - return true; + std::ostringstream os; + os << "char*(" << (void*)e << ")"; + return os.str(); + } + inline std::string as_string(char* e ) + { + std::ostringstream os; + os << "char*(" << (void*)e << ")"; + return os.str(); } } - -//================================================================================================== -// Test application entry-point customization -//================================================================================================== -#if !defined(TTS_CUSTOM_DRIVER_FUNCTION) -# define TTS_CUSTOM_DRIVER_FUNCTION main -namespace tts::detail -{ - constexpr bool use_main = true; -} -#else namespace tts::detail { - constexpr bool use_main = false; -} -#endif - -namespace tts -{ - inline ::tts::detail::env global_runtime; - inline bool verbose_status; - inline ::tts::options arguments; - - inline int report(std::ptrdiff_t fails, std::ptrdiff_t invalids) + template + concept comparable_equal = requires(L l, R r) { compare_equal(l,r); }; + template + concept comparable_less = requires(L l, R r) { compare_less(l,r); }; + template inline constexpr bool eq(L const &l, R const &r) { - return global_runtime.report(fails,invalids); + if constexpr( comparable_equal ) return compare_equal(l,r); + else return l == r; + } + template inline constexpr bool lt(L const &l, R const &r) + { + if constexpr( comparable_less ) return compare_less(l,r); + else return l < r; } } - -#if defined(TTS_MAIN) -int TTS_CUSTOM_DRIVER_FUNCTION([[maybe_unused]] int argc,[[maybe_unused]] char const** argv) +namespace tts { - ::tts::arguments = ::tts::options{argc,argv}; - - if( ::tts::arguments.is_set("-h","--help") ) - return ::tts::usage(argv[0]); - - ::tts::verbose_status = ::tts::arguments.is_set("-p","--pass"); - ::tts::color::status = !::tts::arguments.is_set("-n","--no-color"); - std::size_t repetitions = ::tts::arguments.value_or(1, "-r","--repeat"); - std::string filter = ::tts::arguments.value_or("", "-f","--filter"); - - for(auto &t: ::tts::detail::suite) + struct result { - if(filter.empty() || (t.name.find(filter) != std::string::npos) ) + bool status; + std::string lhs,op,rhs; + explicit operator bool() const { return status; } + }; + template struct lhs_expr + { + Expression lhs; + lhs_expr(Expression x) : lhs(x) {} + lhs_expr(lhs_expr const &) = delete; + lhs_expr &operator=(lhs_expr const &) = delete; + operator result() const { return result {bool(lhs),as_string(bool(lhs)),"",""}; } + explicit operator bool() const { return bool(lhs); } + template result operator &&(R const &rhs) { - auto count = ::tts::global_runtime.test_count; - - std::cout << ::tts::yellow("[SCENARIO]") << " - " << t.name << std::endl; - for(std::size_t i = 0; i < repetitions; ++i) t(); - - if(count == ::tts::global_runtime.test_count) - ::tts::global_runtime.invalid(); + return { lhs && rhs, as_string(lhs), "&&", as_string(rhs) }; } - } - - if constexpr( ::tts::detail::use_main ) return ::tts::report(0,0); - else return 0; + template result operator ||(R const &rhs) + { + return { lhs || rhs, as_string(lhs), "||", as_string(rhs) }; + } + template result operator ==(R const &rhs) + { + return { detail::eq(lhs, rhs), as_string(lhs), "==", as_string(rhs) }; + } + template result operator !=(R const &rhs) + { + return { !detail::eq(lhs, rhs), as_string(lhs), "!=", as_string(rhs) }; + } + template result operator <(R const &rhs) + { + return { detail::lt(lhs, rhs), as_string(lhs), "<", as_string(rhs) }; + } + template result operator <=(R const &rhs) + { + return { detail::lt(lhs, rhs) || detail::eq(lhs, rhs), as_string(lhs), "<=", as_string(rhs) }; + } + template result operator >(R const &rhs) + { + return { !detail::lt(lhs, rhs) && !detail::eq(lhs, rhs), as_string(lhs), ">", as_string(rhs) }; + } + template result operator >=(R const &rhs) + { + return { !detail::lt(lhs, rhs), as_string(lhs), ">=", as_string(rhs) }; + } + }; + struct decomposer + { + template lhs_expr operator->*(Expression const &expr) + { + return {expr}; + } + }; } -#endif - -//================================================================================================== -// Wrapper for source location -//================================================================================================== +#define TTS_DECOMPOSE(XPR) (::tts::decomposer{}->*XPR) +#include namespace tts { - struct location + struct logger { - char const* file; - int line; - - std::string_view filename() const + logger(bool d = false) : display(d), done(false) {} + template + logger& check(Result const& res, Validator validate, auto pass, auto fail) { - std::string_view f(file); - return f.substr(f.find_last_of('/')+1); + display = validate(res) ? pass(res) : fail(res); + return *this; } - - friend std::ostream& operator<<(std::ostream& os, location const& l) + template + logger& check(Result const& res, auto pass, auto fail) + { + return check(res, [](auto const& r) { return static_cast(r); }, pass, fail); + } + template + logger& operator<<(Data const& d) { - os << ::tts::blue << l.filename() << ::tts::reset - << ":" - << ::tts::blue << l.line << tts::reset; - return os; + if(display) + { + if(!done) + { + std::cout << tts::yellow << ">> Additonnal information: " << ::tts::reset << "\n"; + done = true; + } + std::cout << d; + } + return *this; } + bool display, done; }; } +#define TTS_EXPECT_IMPL(EXPR,FAILURE) \ +::tts::logger{}.check \ +( TTS_DECOMPOSE(EXPR) \ +, [](tts::result const& res) \ + { \ + TTS_PASS( ::tts::green << TTS_STRING(EXPR) << tts::reset \ + << " evaluates as " << ::tts::green \ + << res.lhs << " " << res.op << " " << res.rhs \ + << ::tts::reset << " as expected."); \ + return false; \ + } \ +, [](tts::result const& res) \ + { \ + FAILURE ( "Expected: " << ::tts::green << TTS_STRING(EXPR) << tts::reset \ + << " but " << ::tts::red \ + << res.lhs << " " << res.op << " " << res.rhs \ + << ::tts::reset << " occured instead."); \ + return ::tts::verbose_status; \ + } \ +) \ -//================================================================================================== -// Wrappers for comparisons with external setup -//================================================================================================== -namespace tts::detail -{ - template - concept comparable_equal = requires(L l, R r) { compare_equal(l,r); }; - - template - concept comparable_less = requires(L l, R r) { compare_less(l,r); }; +#define TTS_CONSTEXPR_EXPECT_IMPL(EXPR,FAILURE) \ +::tts::logger{}.check \ +( ((void)(std::bool_constant<(EXPR)>::value), TTS_DECOMPOSE(EXPR)) \ +, [](::tts::result const& res) \ + { \ + TTS_PASS( ::tts::green << TTS_STRING(EXPR) << tts::reset \ + << " evaluates as " << ::tts::green \ + << res.lhs << " " << res.op << " " << res.rhs \ + << ::tts::reset << " at compile-time as expected."); \ + return false; \ + } \ +, [](tts::result const& res) \ + { \ + FAILURE ( "Expected: " << ::tts::green << TTS_STRING(EXPR) << tts::reset \ + << " but " << ::tts::red \ + << res.lhs << " " << res.op << " " << res.rhs \ + << ::tts::reset << " occured at compile-time instead."); \ + return ::tts::verbose_status; \ + } \ +) \ + +#define TTS_EXPECT(EXPR, ...) TTS_EXPECT_ ## __VA_ARGS__ ( EXPR ) +#define TTS_EXPECT_(EXPR) TTS_EXPECT_IMPL(EXPR,TTS_FAIL) +#define TTS_EXPECT_REQUIRED(EXPR) TTS_EXPECT_IMPL(EXPR,TTS_FATAL) +#define TTS_CONSTEXPR_EXPECT(EXPR, ...) TTS_CONSTEXPR_EXPECT_ ## __VA_ARGS__ ( EXPR ) +#define TTS_CONSTEXPR_EXPECT_(EXPR) TTS_CONSTEXPR_EXPECT_IMPL(EXPR,TTS_FAIL) +#define TTS_CONSTEXPR_EXPECT_REQUIRED(EXPR) TTS_CONSTEXPR_EXPECT_IMPL(EXPR,TTS_FATAL) +#define TTS_EXPECT_NOT_IMPL(EXPR,FAILURE) \ +::tts::logger{}.check \ +( TTS_DECOMPOSE(EXPR) \ +, [](::tts::result res) \ + { \ + FAILURE ( "Expected: " << ::tts::green << TTS_STRING(EXPR) << tts::reset \ + << " to not evaluate to " << ::tts::red \ + << res.lhs << " " << res.op << " " << res.rhs \ + << ::tts::reset << " but occured anyway." \ + ); \ + return ::tts::verbose_status; \ + } \ +, [](::tts::result res) \ + { \ + TTS_PASS ( ::tts::green << TTS_STRING(EXPR) << tts::reset \ + << " does not evaluate to " << ::tts::green \ + << res.lhs << " " << res.op << " " << res.rhs \ + << ::tts::reset << " as expected."); \ + return false; \ + } \ +) \ - template inline bool eq(L const &l, R const &r) - { - if constexpr( comparable_equal ) return compare_equal(l,r); - else return l == r; - } +#define TTS_CONSTEXPR_EXPECT_NOT_IMPL(EXPR,FAILURE) \ +::tts::logger{}.check \ +( ((void)(std::bool_constant<(EXPR)>::value), TTS_DECOMPOSE(EXPR)) \ +, [](tts::result const& res) \ + { \ + FAILURE ( "Expected: " << ::tts::green << TTS_STRING(EXPR) << tts::reset \ + << " to not evaluate to " << ::tts::red \ + << res.lhs << " " << res.op << " " << res.rhs \ + << ::tts::reset << " at compile-time but occured anyway." \ + ); \ + return ::tts::verbose_status; \ + } \ +, [](tts::result const& res) \ + { \ + TTS_PASS ( ::tts::green << TTS_STRING(EXPR) << tts::reset \ + << " does not evaluate to " << ::tts::green \ + << res.lhs << " " << res.op << " " << res.rhs \ + << ::tts::reset << " at compile-time as expected."); \ + return false; \ + } \ +) \ + +#define TTS_EXPECT_NOT(EXPR, ...) TTS_EXPECT_NOT_ ## __VA_ARGS__ ( EXPR ) +#define TTS_EXPECT_NOT_(EXPR) TTS_EXPECT_NOT_IMPL((EXPR),TTS_FAIL) +#define TTS_EXPECT_NOT_REQUIRED(EXPR) TTS_EXPECT_NOT_IMPL((EXPR),TTS_FATAL) +#define TTS_CONSTEXPR_EXPECT_NOT(EXPR, ...) TTS_CONSTEXPR_EXPECT_NOT_ ## __VA_ARGS__ ( EXPR ) +#define TTS_CONSTEXPR_EXPECT_NOT_(EXPR) TTS_CONSTEXPR_EXPECT_NOT_IMPL((EXPR),TTS_FAIL) +#define TTS_CONSTEXPR_EXPECT_NOT_REQUIRED(EXPR) TTS_CONSTEXPR_EXPECT_NOT_IMPL((EXPR),TTS_FATAL) +#define TTS_THROW_IMPL(EXPR, EXCEPTION, FAILURE) \ +::tts::logger{}.check \ +( ::tts::result{} \ +, [&](auto const&) { try { EXPR; } catch(EXCEPTION&) { return true; } catch(...) {} return false; } \ +, [](auto const& res) \ + { \ + TTS_PASS( ::tts::green << TTS_STRING(EXPR) << tts::reset \ + << " throws: " << ::tts::green \ + << TTS_STRING(EXCEPTION) \ + << ::tts::reset << " as expected." \ + ); \ + return false; \ + } \ +, [](auto const& res) \ + { \ + FAILURE ( "Expected: " << ::tts::green << TTS_STRING(EXPR) << tts::reset \ + << " failed to throw " << ::tts::red \ + << TTS_STRING(EXCEPTION) \ + ); \ + return ::tts::verbose_status; \ + } \ +) \ + +#define TTS_THROW(EXPR, EXCEPTION, ...) TTS_THROW_ ## __VA_ARGS__ ( EXPR, EXCEPTION ) +#define TTS_THROW_(EXPR, EXCEPTION) TTS_THROW_IMPL(EXPR, EXCEPTION,TTS_FAIL) +#define TTS_THROW_REQUIRED(EXPR, EXCEPTION) TTS_THROW_IMPL(EXPR, EXCEPTION,TTS_FATAL) +#define TTS_NO_THROW_IMPL(EXPR,FAILURE) \ +::tts::logger{}.check \ +( ::tts::result{} \ +, [&](auto const&) { try { EXPR; } catch(...) { return false; } return true; } \ +, [](auto const& res) \ + { \ + TTS_PASS( ::tts::green << TTS_STRING(EXPR) << tts::reset \ + << " does not throw as expected." \ + ); \ + return false; \ + } \ +, [](auto const& res) \ + { \ + FAILURE ( "Expected: " << ::tts::red << TTS_STRING(EXPR) << tts::reset \ + << " throws unexpectedly." \ + ); \ + return ::tts::verbose_status; \ + } \ +) \ - template inline bool lt(L const &l, R const &r) +#define TTS_NO_THROW(EXPR, ...) TTS_NO_THROW_ ## __VA_ARGS__ ( EXPR ) +#define TTS_NO_THROW_(EXPR) TTS_NO_THROW_IMPL(EXPR,TTS_FAIL) +#define TTS_NO_THROW_REQUIRED(EXPR) TTS_NO_THROW_IMPL(EXPR,TTS_FATAL) +#include +#include +#include +#include +#include +namespace tts::detail +{ + inline auto as_int(float a) noexcept { return std::bit_cast(a); } + inline auto as_int(double a) noexcept { return std::bit_cast(a); } + template inline auto bitinteger(T a) noexcept { - if constexpr( comparable_less ) return compare_less(l,r); - else return l < r; + auto ia = as_int(a); + using r_t = std::remove_cvref_t; + constexpr auto Signmask = r_t(1) << (sizeof(r_t)*8-1); + return std::signbit(a) ? Signmask-ia : ia; } } - -//================================================================================================== -// TNumerical precision tests -//================================================================================================== +#include +#include +#include namespace tts { template inline double absolute_distance(T const &a, U const &b) { if constexpr(std::is_same_v) { - if constexpr(std::is_same_v) // Boolean case + if constexpr(std::is_same_v) { return a == b ? 0. : 1.; } - else if constexpr(std::is_floating_point_v) // IEEE cases + else if constexpr(std::is_floating_point_v) { if((a == b) || (std::isnan(a) && std::isnan(b))) return 0.; - if(std::isinf(a) || std::isinf(b) || std::isnan(a) || std::isnan(b)) return std::numeric_limits::infinity(); - return std::abs(a - b); } - else if constexpr(std::is_integral_v && !std::is_same_v) // Natural case + else if constexpr(std::is_integral_v && !std::is_same_v) { auto d0 = static_cast(a), d1 = static_cast(b); return absolute_distance(d0, d1); @@ -584,23 +948,20 @@ namespace tts return absolute_distance(static_cast(a), static_cast(b)); } } - template inline double relative_distance(T const &a, U const &b) { if constexpr(std::is_same_v) { - if constexpr(std::is_same_v) // Boolean case + if constexpr(std::is_same_v) { return a == b ? 0. : 100.; } - else if constexpr(std::is_floating_point_v) // IEEE cases + else if constexpr(std::is_floating_point_v) { if((a == b) || (std::isnan(a) && std::isnan(b))) return 0.; - if(std::isinf(a) || std::isinf(b) || std::isnan(a) || std::isnan(b)) return std::numeric_limits::infinity(); - return 100. * (std::abs(a - b) / std::max(T(1), std::max(std::abs(a), std::abs(b)))); } - else if constexpr(std::is_integral_v && !std::is_same_v) // Natural case + else if constexpr(std::is_integral_v && !std::is_same_v) { auto d0 = static_cast(a), d1 = static_cast(b); return relative_distance(d0, d1); @@ -612,19 +973,17 @@ namespace tts return relative_distance(static_cast(a), static_cast(b)); } } - template inline double ulp_distance(T const &a, U const &b) { if constexpr(std::is_same_v) { - if constexpr(std::is_same_v) // Boolean case + if constexpr(std::is_same_v) { return a == b ? 0. : std::numeric_limits::infinity(); } - else if constexpr(std::is_floating_point_v) // IEEE cases + else if constexpr(std::is_floating_point_v) { using ui_t = std::conditional_t, std::uint32_t, std::uint64_t>; - if((a == b) || (std::isnan(a) && std::isnan(b))) { return 0.; @@ -637,20 +996,15 @@ namespace tts { auto aa = detail::bitinteger(a); auto bb = detail::bitinteger(b); - if(aa > bb) std::swap(aa, bb); - auto z = static_cast(bb-aa); - if( std::signbit(a) ^ std::signbit(b) ) ++z; return z/2.; } } - else if constexpr(std::is_integral_v && !std::is_same_v) // Natural case + else if constexpr(std::is_integral_v && !std::is_same_v) { using u_t = typename std::make_unsigned::type; - - // TODO: Fix overflow in case of very huge integral value return ((a < b) ? u_t(b - a) : u_t(a - b))/2.; } } @@ -661,419 +1015,179 @@ namespace tts } } } - -//================================================================================================== -// Expression decomposition -// This code is a direct adaptation of the similar technique used by Martin Moene in LEST -//================================================================================================== namespace tts { - // Represent a test result and its displayable representation - struct result + template struct precision_result { + std::string lhs,rhs; + std::string lhs_val,rhs_val; + T value; + U maxi; bool status; - std::string lhs,op,rhs; - explicit operator bool() { return status; } - }; - - // Carry value around up to display point inside test macro - template struct lhs_expr - { - Expression lhs; - lhs_expr(Expression x) : lhs(x) {} - lhs_expr(lhs_expr const &) = delete; - lhs_expr &operator=(lhs_expr const &) = delete; - - operator result() { return result {bool(lhs),as_string(bool(lhs)),"",""}; } - - template result operator ==(R const &rhs) - { - return { detail::eq(lhs, rhs), as_string(lhs), "==", as_string(rhs) }; - } - - template result operator !=(R const &rhs) - { - return { !detail::eq(lhs, rhs), as_string(lhs), "!=", as_string(rhs) }; - } - - template result operator <(R const &rhs) - { - return { detail::lt(lhs, rhs), as_string(lhs), "<", as_string(rhs) }; - } - - template result operator <=(R const &rhs) - { - return { detail::lt(lhs, rhs) || detail::eq(lhs, rhs), as_string(lhs), "<=", as_string(rhs) }; - } - - template result operator >(R const &rhs) - { - return { !detail::lt(lhs, rhs) && !detail::eq(lhs, rhs), as_string(lhs), ">", as_string(rhs) }; - } - - template result operator >=(R const &rhs) - { - return { !detail::lt(lhs, rhs), as_string(lhs), ">=", as_string(rhs) }; - } - }; - - // Trampoline type for custom display of value injected from a macro. - struct decomposer - { - template lhs_expr operator->*(Expression const &expr) - { - return {expr}; - } + explicit operator bool() const { return status; } }; } - -#define TTS_DECOMPOSE(XPR) (::tts::decomposer{}->*XPR) - -//================================================================================================== -// Tests macros - Basic information -//================================================================================================== -#define TTS_PASS(Message) \ - do \ - { \ - ::tts::global_runtime.pass(); \ - if(::tts::verbose_status) std::cout << ::tts::location{__FILE__,__LINE__} << " - " \ - << ::tts::bold << ::tts::green("PASSED") << ::tts::reset \ - << " - " << Message << std::endl; \ - \ - } while(::tts::detail::done()) -/**/ - -#define TTS_FAIL(Message) \ - do \ - { \ - ::tts::global_runtime.fail(); \ - std::cout << ::tts::location{__FILE__,__LINE__} << " - " \ - << ::tts::bold << ::tts::red("**FAILED**") << ::tts::reset \ - << " - " << Message << std::endl; \ - \ - } while(::tts::detail::done()) -/**/ - -#define TTS_INVALID(Message) \ - do \ - { \ - ::tts::global_runtime.invalid(); \ - std::cout << ::tts::location{__FILE__,__LINE__} << " - " \ - << ::tts::bold << ::tts::magenta("!!INVALID!!") << ::tts::reset \ - << " - " << Message << std::endl; \ - \ - } while(::tts::detail::done()) -/**/ - -//================================================================================================== -// Test macros - Basic expectation -//================================================================================================== -#define TTS_EXPECT_IMPL(EXPR) \ - do \ - { \ - ::tts::result tts_var_d = TTS_DECOMPOSE(EXPR); \ - if(tts_var_d) \ - { \ - TTS_PASS("Expecting: " << ::tts::green(TTS_STRING(EXPR)) ); \ - } \ - else \ - { \ - TTS_FAIL( "Expecting: " << ::tts::green(TTS_STRING(EXPR)) << " but " << ::tts::red() \ - << tts_var_d.lhs << " " << tts_var_d.op << " " << tts_var_d.rhs \ - << ::tts::reset() << " occured instead."); \ - } \ - } while(::tts::detail::done()) -/**/ - -#define TTS_EXPECT_NOT_IMPL(EXPR) \ - do \ - { \ - ::tts::result tts_var_d = TTS_DECOMPOSE(EXPR); \ - if(tts_var_d) \ - { \ - TTS_FAIL( "Not Expecting: " << ::tts::green(TTS_STRING(EXPR)) << " but " << ::tts::red() \ - << tts_var_d.lhs << " " << tts_var_d.op << " " << tts_var_d.rhs \ - << ::tts::reset() << " occured instead."); \ - } \ - else \ - { \ - TTS_PASS("Not Expecting: " << ::tts::green(TTS_STRING(EXPR)) ); \ - } \ - } while(::tts::detail::done()) -/**/ - -#define TTS_EXPECT(EXPR) TTS_EXPECT_IMPL((EXPR)) -#define TTS_EXPECT_NOT(EXPR) TTS_EXPECT_NOT_IMPL((EXPR)) - -//================================================================================================== -// Test macros - Constexpr expectation -//================================================================================================== -#define TTS_CONSTEXPR_EXPECT(EXPR) TTS_EXPECT_IMPL( std::bool_constant::value ) -#define TTS_CONSTEXPR_EXPECT_NOT(EXPR) TTS_EXPECT_NOT_IMPL( std::bool_constant::value ) - -//================================================================================================== -// Test macros - Relationship -//================================================================================================== -#define TTS_EQUAL(LHS, RHS) TTS_EXPECT_IMPL(LHS == RHS) -#define TTS_NOT_EQUAL(LHS, RHS) TTS_EXPECT_IMPL(LHS != RHS) -#define TTS_LESS(LHS, RHS) TTS_EXPECT_IMPL(LHS < RHS) -#define TTS_GREATER(LHS, RHS) TTS_EXPECT_IMPL(LHS > RHS) -#define TTS_LESS_EQUAL(LHS, RHS) TTS_EXPECT_IMPL(LHS <= RHS) -#define TTS_GREATER_EQUAL(LHS, RHS) TTS_EXPECT_IMPL(LHS >= RHS) - -//================================================================================================== -// Test macros - Constexpr Relationship -//================================================================================================== -#define TTS_CONSTEXPR_EQUAL(LHS, RHS) TTS_CONSTEXPR_EXPECT((LHS == RHS)) -#define TTS_CONSTEXPR_NOT_EQUAL(LHS, RHS) TTS_CONSTEXPR_EXPECT((LHS != RHS)) -#define TTS_CONSTEXPR_LESS(LHS, RHS) TTS_CONSTEXPR_EXPECT((LHS < RHS)) -#define TTS_CONSTEXPR_GREATER(LHS, RHS) TTS_CONSTEXPR_EXPECT((LHS > RHS)) -#define TTS_CONSTEXPR_LESS_EQUAL(LHS, RHS) TTS_CONSTEXPR_EXPECT((LHS <= RHS)) -#define TTS_CONSTEXPR_GREATER_EQUAL(LHS, RHS) TTS_CONSTEXPR_EXPECT((LHS >= RHS)) - -//================================================================================================== -// Test macros - Type checking -//================================================================================================== -#define TTS_TYPE_IS(T, TYPE) \ - do \ - { \ - constexpr auto check = std::is_same_v; \ - if constexpr(check) \ - { \ - TTS_PASS("Expecting " << ::tts::green(TTS_STRING(TTS_REMOVE_PARENS(T))) << " to be " \ - << ::tts::green() << tts::typename_ \ - << ::tts::reset \ - ); \ - } \ - \ - if constexpr(!check) \ - { \ - TTS_FAIL("Expecting " << ::tts::green(TTS_STRING(TTS_REMOVE_PARENS(T))) << " to be " \ - << ::tts::green() << tts::typename_ \ - << ::tts::reset << " but found " \ - << ::tts::red() << tts::typename_ \ - << ::tts::reset << " instead" \ - ); \ - } \ - } while(::tts::detail::done()) -/**/ - -#define TTS_EXPR_IS(EXPRESSION, TYPE) TTS_TYPE_IS(decltype(TTS_REMOVE_PARENS(EXPRESSION)), TYPE) - -//================================================================================================== -// Test macros - Exception -//================================================================================================== -#define TTS_THROW(EXPR, EXCEPTION) \ - do \ - { \ - bool tts_caught = false; \ - \ - try { EXPR; } \ - catch(EXCEPTION& ) { tts_caught = true; } \ - catch(...) { } \ - \ - if(tts_caught) \ - { \ - TTS_PASS( ::tts::green(TTS_STRING(EXPR)) << " throws " \ - << ::tts::green(TTS_STRING(EXCEPTION)) \ - ); \ - } \ - else \ - { \ - TTS_FAIL( ::tts::green(TTS_STRING(EXPR)) << " does not throw " \ - << ::tts::red(TTS_STRING(EXCEPTION)) \ - ); \ - } \ - } while(::tts::detail::done()) -/**/ - -#define TTS_NO_THROW(EXPR) \ - do \ +#define TTS_PRECISION_IMPL(LHS, RHS, N, UNIT, FUNC, FAILURE) \ +::tts::logger{}.check \ +( [](auto eval_a, auto eval_b, TTS_MAXI maxi) \ { \ - bool tts_caught = false; \ - \ - try { EXPR; } \ - catch(...) { tts_caught = true; } \ - \ - if(!tts_caught) { TTS_PASS(::tts::green(TTS_STRING(EXPR)) << " does not throw"); } \ - else { TTS_FAIL(::tts::green(TTS_STRING(EXPR)) << " throws "); } \ - } while(::tts::detail::done()) -/**/ - -//================================================================================================== -// Test macros - Precision checking base macros -//================================================================================================== -#define TTS_PRECISION_EQUAL(LHS, RHS, N, UNIT, FUNC) \ - do \ + auto r = FUNC(eval_a,eval_b); \ + return ::tts::precision_result \ + { TTS_STRING(LHS), TTS_STRING(RHS), ::tts::as_string(eval_a), ::tts::as_string(eval_b) \ + , r, maxi, r <= maxi \ + }; \ + }(LHS,RHS,N) \ +, [](auto const& res) \ { \ - auto eval_a = (LHS); \ - auto eval_b = (RHS); \ - auto r = FUNC(eval_a,eval_b); \ - auto tts_fmt_n = (N<1000 ? std::defaultfloat : std::scientific); \ - auto tts_fmt_r = (r<1000 ? std::defaultfloat : std::scientific); \ - \ - if(r <= N) \ - { \ - TTS_PASS( "Expecting: " \ - << ::tts::green() << ::tts::as_string(eval_a) \ - << " == " << ::tts::as_string(eval_b) << ::tts::reset() \ - << " within " << std::setprecision(2) << tts_fmt_n \ - << ::tts::green() << N << ::tts::reset << " " << UNIT \ - << " and found: " << std::setprecision(2) << tts_fmt_r \ - << ::tts::green() << r << ::tts::reset << " " << UNIT \ - ); \ - } \ - else \ - { \ - TTS_FAIL( "Expecting: " \ - << ::tts::green() << ::tts::as_string(eval_a) \ - << " == " << ::tts::as_string(eval_b) << ::tts::reset() \ - << " within " << std::setprecision(2) << tts_fmt_n \ - << ::tts::green() << N << ::tts::reset << " " << UNIT \ - << " but found: " << std::setprecision(2) << tts_fmt_r \ - << ::tts::red() << r << ::tts::reset << " " << UNIT << " instead" \ - ); \ - } \ - } while(::tts::detail::done()) -/**/ - -#define TTS_ABSOLUTE_EQUAL(L, R, N) TTS_PRECISION_EQUAL(L, R, N, " unit", ::tts::absolute_distance) -#define TTS_RELATIVE_EQUAL(L, R, N) TTS_PRECISION_EQUAL(L, R, N, "%" , ::tts::relative_distance) -#define TTS_ULP_EQUAL(L, R, N) TTS_PRECISION_EQUAL(L, R, N, "ULP" , ::tts::ulp_distance) -#define TTS_IEEE_EQUAL(L,R) TTS_ULP_EQUAL(L, R, 0.) - -//================================================================================================== -// Test macros - Sequence tests -//================================================================================================== -#define TTS_SEQUENCE_EQUAL(L,R,N,UNIT,FUNC) \ - do \ + auto& fmt_n = res.maxi < 1000 ? std::defaultfloat : std::scientific; \ + auto& fmt_r = res.value < 1000 ? std::defaultfloat : std::scientific; \ + TTS_PASS( ::tts::green << res.lhs << " == " << res.rhs << tts::reset \ + << " evaluates as " << ::tts::green \ + << res.lhs_val << " == " << res.rhs_val \ + << " within " << std::setprecision(2) << fmt_r \ + << ::tts::green << res.value << ::tts::reset << std::defaultfloat \ + << " " << UNIT << ::tts::reset << " when " \ + << std::setprecision(2) << fmt_n \ + << ::tts::green << res.maxi << ::tts::reset << std::defaultfloat \ + << " " << UNIT << " was expected." \ + ); \ + return false; \ + } \ +, [](auto const& res) \ { \ - if( std::size(L) == std::size(R) ) \ - { \ - auto found = tts::detail::mismatch( std::begin(L), std::end(L), std::begin(R) \ - , [](auto l, auto r) { return FUNC(l,r) <= N; } \ - ); \ - auto distance = std::end(L)-found.first; \ - if( distance == 0) \ - { \ - TTS_PASS( "Expecting: " << ::tts::green() \ - << TTS_STRING(L) << " == " << TTS_STRING(R) << ::tts::reset() \ - << " within " << ::tts::green() << N << ::tts::reset() << " " << UNIT \ - ); \ - } \ - else \ - { \ - TTS_FAIL( "Expecting: " << ::tts::green() << TTS_STRING(L) << " == " << TTS_STRING(R) \ - << ::tts::reset() \ - << " but value at index " << ::tts::yellow() << distance << ::tts::reset() \ - << " is " << ::tts::red() << ::tts::as_string(*found.first) << ::tts::reset() \ - << " instead of " \ - << ::tts::red() << ::tts::as_string(*found.second)<< ::tts::reset() \ - << " within " << ::tts::red() << FUNC(*found.first,*found.second) \ - << " " << UNIT << " instead of " << N \ - ); \ - } \ - } \ - else \ - { \ - TTS_FAIL( "Expecting: " << TTS_STRING(L) << " == " << TTS_STRING(R) \ - << " but sizes mismatch between: " << ::tts::red() << std::size(L) << ::tts::reset() \ - << " and " << ::tts::red() << std::size(R) << ::tts::reset() \ - ); \ - } \ - } while(::tts::detail::done()) -/**/ - -#define TTS_ALL_RELATIVE_EQUAL(L, R, N) TTS_SEQUENCE_EQUAL(L,R,N,"%" , ::tts::relative_distance ) -#define TTS_ALL_ULP_EQUAL(L, R, N) TTS_SEQUENCE_EQUAL(L,R,N,"ULP" , ::tts::ulp_distance ) -#define TTS_ALL_ABSOLUTE_EQUAL(L, R, N) TTS_SEQUENCE_EQUAL(L,R,N,"unit", ::tts::absolute_distance ) -#define TTS_ALL_EQUAL(L,R) TTS_ALL_ABSOLUTE_EQUAL(L,R,0) -#define TTS_ALL_IEEE_EQUAL(L,R) TTS_ALL_ULP_EQUAL(L, R, 0.) - -//================================================================================================== -// Test sub-case registrations -//================================================================================================== + auto& fmt_n = res.maxi < 1000 ? std::defaultfloat : std::scientific; \ + auto& fmt_r = res.value < 1000 ? std::defaultfloat : std::scientific; \ + FAILURE ( "Expected: " << ::tts::green << res.lhs << " == " << res.rhs \ + << tts::reset << " but " << ::tts::red \ + << res.lhs_val << " == " << res.rhs_val \ + << " within " << std::setprecision(2) << fmt_r \ + << ::tts::red << res.value << ::tts::reset << std::defaultfloat \ + << " " << UNIT << ::tts::reset << " when " \ + << std::setprecision(2) << fmt_n \ + << ::tts::green << res.maxi << ::tts::reset << std::defaultfloat \ + << " " << UNIT << " was expected." \ + ); \ + return ::tts::verbose_status; \ + } \ +) \ + +#define TTS_PRECISION(L,R,N,U,F, ...) TTS_PRECISION_ ## __VA_ARGS__ (L,R,N,U,F) +#define TTS_PRECISION_(L,R,N,U,F) TTS_PRECISION_IMPL(L,R,N,U,F,TTS_FAIL) +#define TTS_PRECISION_REQUIRED(L,R,N,U,F) TTS_PRECISION_IMPL(L,R,N,U,F,TTS_FATAL) +#define TTS_ABSOLUTE_EQUAL(L,R,N,...) TTS_PRECISION(L,R,N,"unit", ::tts::absolute_distance, __VA_ARGS__ ) +#define TTS_RELATIVE_EQUAL(L,R,N,...) TTS_PRECISION(L,R,N,"%" , ::tts::relative_distance, __VA_ARGS__ ) +#define TTS_ULP_EQUAL(L,R,N,...) TTS_PRECISION(L,R,N,"ULP" , ::tts::ulp_distance , __VA_ARGS__ ) +#define TTS_IEEE_EQUAL(L,R,...) TTS_ULP_EQUAL(L, R, 0, __VA_ARGS__ ) +#define TTS_EQUAL(LHS, RHS, ...) TTS_EXPECT(LHS == RHS, __VA_ARGS__) +#define TTS_NOT_EQUAL(LHS, RHS, ...) TTS_EXPECT(LHS != RHS, __VA_ARGS__) +#define TTS_LESS(LHS, RHS, ...) TTS_EXPECT(LHS < RHS, __VA_ARGS__) +#define TTS_GREATER(LHS, RHS, ...) TTS_EXPECT(LHS > RHS, __VA_ARGS__) +#define TTS_LESS_EQUAL(LHS, RHS, ...) TTS_EXPECT(LHS <= RHS, __VA_ARGS__) +#define TTS_GREATER_EQUAL(LHS, RHS, ...) TTS_EXPECT(LHS >= RHS, __VA_ARGS__) +#define TTS_CONSTEXPR_EQUAL(LHS, RHS, ...) TTS_CONSTEXPR_EXPECT(LHS == RHS, __VA_ARGS__) +#define TTS_CONSTEXPR_NOT_EQUAL(LHS, RHS, ...) TTS_CONSTEXPR_EXPECT(LHS != RHS, __VA_ARGS__) +#define TTS_CONSTEXPR_LESS(LHS, RHS, ...) TTS_CONSTEXPR_EXPECT(LHS < RHS, __VA_ARGS__) +#define TTS_CONSTEXPR_GREATER(LHS, RHS, ...) TTS_CONSTEXPR_EXPECT(LHS > RHS, __VA_ARGS__) +#define TTS_CONSTEXPR_LESS_EQUAL(LHS, RHS, ...) TTS_CONSTEXPR_EXPECT(LHS <= RHS, __VA_ARGS__) +#define TTS_CONSTEXPR_GREATER_EQUAL(LHS, RHS, ...) TTS_CONSTEXPR_EXPECT(LHS >= RHS, __VA_ARGS__) namespace tts::detail { - // Setup/section environment guard - struct section_guard + template + std::pair mismatch(It1 first1, It1 last1, It2 first2, Func p) { - int & id; - int const §ion; - - section_guard(int &id_, int const §ion_, int &count) : id(id_) , section(section_) - { - if(section == 0) id = count++ - 1; - } - - template bool check(Desc const&... desc) - { - if(id == section) - { - ((std::cout << desc),...); - std::cout << std::endl; - } - - return id == section; - } - }; - - struct only_once + while (first1 != last1 && p(*first1, *first2)) + ++first1, ++first2; + return std::make_pair(first1, first2); + } +} +#define TTS_ALL_PRECISION_IMPL(LHS, RHS, N, UNIT, FUNC, FAILURE) \ +[&]() \ +{ \ + if( std::size(LHS) == std::size(RHS) ) \ + { \ + auto found = ::tts::detail::mismatch( std::begin(LHS), std::end(LHS), std::begin(RHS) \ + , [](auto l, auto r) { return ::tts::FUNC(l,r) <= N; } \ + ); \ + auto distance = std::end(LHS)-found.first; \ + auto& fmt_n = N<1000 ? std::defaultfloat : std::scientific; \ + \ + if( distance == 0) \ + { \ + TTS_PASS( ::tts::green << TTS_STRING(LHS) << " == " << TTS_STRING(RHS) << tts::reset \ + << " evaluates within " << std::setprecision(2) << fmt_n \ + << ::tts::green << N << ::tts::reset << std::defaultfloat \ + << " " << UNIT << " for all values." \ + ); \ + return ::tts::logger{false}; \ + } \ + else \ + { \ + FAILURE ( "Expected: " << ::tts::green << TTS_STRING(LHS) << " == " << TTS_STRING(RHS) \ + << ::tts::reset << " but value at index " << ::tts::yellow \ + << distance << ::tts::reset << " is " << ::tts::red \ + << ::tts::as_string(*found.first) << ::tts::reset \ + << " instead of " << ::tts::red \ + << ::tts::as_string(*found.second)<< ::tts::reset \ + << " within " << ::tts::red \ + << ::tts::FUNC(*found.first,*found.second) \ + << " " << UNIT << " instead of " << N \ + ); \ + return ::tts::logger{::tts::verbose_status}; \ + } \ + } \ + else \ + { \ + FAILURE ( "Expected: " << ::tts::green << TTS_STRING(LHS) << " == " << TTS_STRING(RHS) \ + << ::tts::reset << " but sizes mismatch between: " \ + << ::tts::red << std::size(LHS) << ::tts::reset \ + << " and " << ::tts::red << std::size(RHS) << ::tts::reset \ + ); \ + return ::tts::logger{::tts::verbose_status}; \ + } \ +}() +#define TTS_ALL_PRECISION(L,R,N,U,F, ...) TTS_ALL_PRECISION_ ## __VA_ARGS__ (L,R,N,U,F) +#define TTS_ALL_PRECISION_(L,R,N,U,F) TTS_ALL_PRECISION_IMPL(L,R,N,U,F,TTS_FAIL) +#define TTS_ALL_PRECISION_REQUIRED(L,R,N,U,F) TTS_ALL_PRECISION_IMPL(L,R,N,U,F,TTS_FATAL) +#define TTS_ALL_ABSOLUTE_EQUAL(L,R,N,...) TTS_ALL_PRECISION(L,R,N,"unit",absolute_distance, __VA_ARGS__) +#define TTS_ALL_RELATIVE_EQUAL(L,R,N,...) TTS_ALL_PRECISION(L,R,N,"%" ,relative_distance, __VA_ARGS__) +#define TTS_ALL_ULP_EQUAL(L,R,N,...) TTS_ALL_PRECISION(L,R,N,"ULP" ,ulp_distance , __VA_ARGS__) +#define TTS_ALL_IEEE_EQUAL(L,R ,...) TTS_ALL_ULP_EQUAL(L,R,0., __VA_ARGS__) +#define TTS_ALL_EQUAL(L,R, ...) TTS_ALL_ABSOLUTE_EQUAL(L,R,0, __VA_ARGS__) +namespace tts +{ + template + struct type_result { - bool once = true; - explicit operator bool() { bool result = once; once = false; return result; } + std::string expr, type, expected; + explicit operator bool() const { return std::is_same_v; } }; } - -#define TTS_WHEN(STORY) \ - std::cout << "When : " << ::tts::yellow(STORY) << std::endl; \ - for(int tts_section = 0, tts_count = 1; tts_section < tts_count; tts_count -= 0==tts_section++) \ - for( tts::detail::only_once tts_only_once_setup{}; tts_only_once_setup; ) \ -/**/ - -#define TTS_AND_THEN_IMPL(DESCRIPTION,TTS_LOCAL_ID) \ - static int TTS_LOCAL_ID = 0; \ - if(::tts::detail::section_guard(TTS_LOCAL_ID, tts_section, tts_count ) \ - .check(" And then: ", DESCRIPTION) \ - ) \ - for(int tts_section = 0, tts_count = 1; tts_section < tts_count; tts_count -= 0==tts_section++ ) \ - for(tts::detail::only_once tts__only_once_section{}; tts__only_once_section; ) \ -/**/ - -#define TTS_AND_THEN(DESCRIPTION) TTS_AND_THEN_IMPL(DESCRIPTION, TTS_UNIQUE(id)) - -//================================================================================================== -// Test case registration macros -//================================================================================================== -#define TTS_CASE_IMPL(DESCRIPTION, FUNC) \ - static void FUNC(); \ - namespace \ +#define TTS_TYPE_IS_IMPL(T, TYPE, FAILURE) \ +::tts::logger{}.check \ +( ::tts::type_result \ + { TTS_STRING(TTS_REMOVE_PARENS(T)) \ + , std::string{tts::typename_} \ + , std::string{tts::typename_} \ + } \ +, [](auto const& res) \ { \ - inline bool TTS_CAT(register_,FUNC) = \ - ::tts::detail::test::acknowledge(::tts::detail::test{DESCRIPTION, FUNC}); \ + TTS_PASS( ::tts::green << res.expr << tts::reset \ + << " evaluates as " << ::tts::green << res.type \ + << ::tts::reset << " as expected."); \ + return false; \ } \ - static void FUNC() \ -/**/ - -#define TTS_CASE(DESCRIPTION) TTS_CASE_IMPL(DESCRIPTION,TTS_FUNCTION) - -#define TTS_CASE_TPL_IMPL(DESCRIPTION, FUNC, ...) \ - template static void FUNC(); \ - namespace \ +, [](auto const& res) \ { \ - inline bool TTS_CAT(register_,FUNC) = \ - ::tts::detail::for_each_type \ - ( \ - [](auto t) { \ - ::tts::detail::test::acknowledge(::tts::detail::test{ \ - std::string{DESCRIPTION} \ - + " (with T = " + std::string{::tts::typename_} + ")" \ - , []() { FUNC(); } \ - } \ - ); \ - },::tts::detail::typelist<__VA_ARGS__> {}); \ + FAILURE( ::tts::green << res.expr << tts::reset \ + << " evaluates as " << ::tts::red << res.type \ + << ::tts::reset << " instead of " \ + << ::tts::green << res.expected \ + ); \ + return ::tts::verbose_status; \ } \ - template static void FUNC() \ -/**/ +) \ -#define TTS_CASE_TPL(DESCRIPTION, ...) TTS_CASE_TPL_IMPL(DESCRIPTION,TTS_FUNCTION,__VA_ARGS__) +#define TTS_TYPE_IS(T, TYPE, ...) TTS_TYPE_IS_ ## __VA_ARGS__ ( T, TYPE ) +#define TTS_TYPE_IS_(T, TYPE) TTS_TYPE_IS_IMPL(T, TYPE,TTS_FAIL) +#define TTS_TYPE_IS_REQUIRED(T, TYPE) TTS_TYPE_IS_IMPL(T, TYPE,TTS_FATAL) +#define TTS_EXPR_IS(EXPR, TYPE, ...) TTS_TYPE_IS(decltype(TTS_REMOVE_PARENS(EXPR)), TYPE, __VA_ARGS__) diff --git a/test/types.hpp b/test/types.hpp index 6ff4189dea..caa43d686e 100644 --- a/test/types.hpp +++ b/test/types.hpp @@ -65,6 +65,31 @@ namespace eve::detail template struct wides; template struct wides> + { + // Precomputed # of repetitions based on ABI and sizeof(T) + static constexpr std::array cardinal_map() + { + // This is a precomputed map of the maximum number of cardinal to generate depending + // on the current ABI bits size. This prevents us to use std::bit_width and other complex + // computations. + switch(EVE_CURRENT_ABI::bits) + { + case 64 : return {0,5,4,0,3,0,0,0,2}; + case 128: return {0,6,5,0,4,0,0,0,3}; + case 256: return {0,7,6,0,5,0,0,0,4}; + case 512: return {0,8,7,0,6,0,0,0,5}; + default : return {}; + }; + }; + + using type = concatenate_t< to_wide_t < Ts + , std::make_index_sequence + >... + >; + }; + + template struct restricted_wides; + template struct restricted_wides> { // Precomputed # of repetitions based on ABI and sizeof(T) static constexpr std::array cardinal_map() @@ -89,8 +114,10 @@ namespace eve::detail }; // Prevent calling remove_cvref_t - template struct wides : wides {}; - template struct wides : wides {}; + template struct wides : wides {}; + template struct wides : wides {}; + template struct restricted_wides : restricted_wides {}; + template struct restricted_wides : restricted_wides {}; } namespace eve::test::simd @@ -137,3 +164,48 @@ namespace eve::test::simd , eve::fixed<1024> > cardinals = {}; } + +namespace eve::test::simd::restricted +{ + inline constexpr detail::restricted_wides< decltype(scalar::signed_integers) >::type signed_integers {}; + inline constexpr detail::restricted_wides< decltype(scalar::unsigned_integers) >::type unsigned_integers {}; + inline constexpr detail::restricted_wides< decltype(scalar::integers) >::type integers {}; + inline constexpr detail::restricted_wides< decltype(scalar::ieee_reals) >::type ieee_reals {}; + inline constexpr detail::restricted_wides< decltype(scalar::ieee_floats) >::type ieee_floats {}; + inline constexpr detail::restricted_wides< decltype(scalar::ieee_doubles) >::type ieee_doubles {}; + inline constexpr detail::restricted_wides< decltype(scalar::uints_64) >::type uints_64 {}; + inline constexpr detail::restricted_wides< decltype(scalar::uints_32) >::type uints_32 {}; + inline constexpr detail::restricted_wides< decltype(scalar::uints_16) >::type uints_16 {}; + inline constexpr detail::restricted_wides< decltype(scalar::uints_8 ) >::type uints_8 {}; + inline constexpr detail::restricted_wides< decltype(scalar::ints_64) >::type ints_64 {}; + inline constexpr detail::restricted_wides< decltype(scalar::ints_32) >::type ints_32 {}; + inline constexpr detail::restricted_wides< decltype(scalar::ints_16) >::type ints_16 {}; + inline constexpr detail::restricted_wides< decltype(scalar::ints_8 ) >::type ints_8 {}; + inline constexpr detail::restricted_wides< decltype(scalar::signed_types) >::type signed_types {}; + inline constexpr auto unsigned_types = unsigned_integers; + inline constexpr detail::restricted_wides< decltype(scalar::all_types) >::type all_types {}; + + using detail::types; + inline constexpr types< std::integral_constant + , std::integral_constant + , std::integral_constant + , std::integral_constant + , std::integral_constant + , std::integral_constant + , std::integral_constant + , std::integral_constant + > sizes = {}; + + inline constexpr types< eve::fixed< 1> + , eve::fixed< 2> + , eve::fixed< 4> + , eve::fixed< 8> + , eve::fixed< 16> + , eve::fixed< 32> + , eve::fixed< 64> + , eve::fixed< 128> + , eve::fixed< 256> + , eve::fixed< 512> + , eve::fixed<1024> + > cardinals = {}; +} diff --git a/test/unit/algo/CMakeLists.txt b/test/unit/algo/CMakeLists.txt index de300faec9..923d16a208 100644 --- a/test/unit/algo/CMakeLists.txt +++ b/test/unit/algo/CMakeLists.txt @@ -32,6 +32,7 @@ make_unit("unit.algo" zip.cpp) # Containers make_unit( "unit.algo" container/erase_remove.cpp ) make_unit( "unit.algo" container/soa_vector.cpp ) +make_unit( "unit.algo" container/transform_points_into_lines.cpp ) # Algorithms # find like ------------- @@ -55,3 +56,12 @@ make_unit("unit.algo" algorithm/sums_special_cases.cpp) # shuffles make_unit("unit.algo" algorithm/remove.cpp) + +# transform +make_unit("unit.algo" algorithm/transform_inplace_generic.cpp) +make_unit("unit.algo" algorithm/transform_to_generic.cpp) +make_unit("unit.algo" algorithm/transform_special_cases.cpp) + +# copy +make_unit("unit.algo" algorithm/copy_generic.cpp) +make_unit("unit.algo" algorithm/copy_fwd.cpp) diff --git a/test/unit/algo/algo_test.hpp b/test/unit/algo/algo_test.hpp index c41f457b1f..88b89b30a2 100644 --- a/test/unit/algo/algo_test.hpp +++ b/test/unit/algo/algo_test.hpp @@ -12,7 +12,7 @@ #include #include -#include +#include #include diff --git a/test/unit/algo/algorithm/all_of_generic.cpp b/test/unit/algo/algorithm/all_of_generic.cpp index c1e3d5ecef..ceadef1af7 100644 --- a/test/unit/algo/algorithm/all_of_generic.cpp +++ b/test/unit/algo/algorithm/all_of_generic.cpp @@ -23,7 +23,7 @@ struct any_with_all_ : TraitsSupport } }; -inline constexpr auto any_with_all = eve::algo::function_with_traits; +inline constexpr auto any_with_all = eve::algo::function_with_traits[eve::algo::all_of.get_traits()]; EVE_TEST_TYPES("eve.algo.all_of generic", algo_test::selected_types) (eve::as as_t) diff --git a/test/unit/algo/algorithm/copy_fwd.cpp b/test/unit/algo/algorithm/copy_fwd.cpp new file mode 100644 index 0000000000..8b71f8dd4b --- /dev/null +++ b/test/unit/algo/algorithm/copy_fwd.cpp @@ -0,0 +1,42 @@ +//================================================================================================== +/** + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +**/ +//================================================================================================== + +#include "unit/algo/algo_test.hpp" + +#include + +#include + +#include + +EVE_TEST_TYPES("Check that we can copy to an address before beginning (copy/copy_backward difference)", + algo_test::selected_types) +(eve::as) +{ + auto page = algo_test::allocate_page>(); + std::iota(page.begin(), page.end(), 0); + + const std::ptrdiff_t r_size = 500; + + std::vector> expected(page.begin(), page.begin() + r_size); + + for (int i = 0; i != T::size(); ++i) { + for (int j = i; j != T::size() * 2; ++j) { + auto from = page.begin() + j; + auto r = eve::algo::as_range(from, from + r_size); + + std::vector> expected(from, from + r_size); + + eve::algo::copy[eve::algo::force_cardinal](r, page.begin() + i); + + std::vector> actual(page.begin() + i, page.begin() + i + r_size); + + TTS_EQUAL(expected, actual); + } + } +}; diff --git a/test/unit/algo/algorithm/copy_generic.cpp b/test/unit/algo/algorithm/copy_generic.cpp new file mode 100644 index 0000000000..563688364c --- /dev/null +++ b/test/unit/algo/algorithm/copy_generic.cpp @@ -0,0 +1,27 @@ +//================================================================================================== +/** + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +**/ +//================================================================================================== + +#include "unit/algo/algo_test.hpp" + +#include + +#include "transform_to_generic_test.hpp" + +#include + +EVE_TEST_TYPES("Check copy to a different range", algo_test::selected_pairs_types) +(eve::as tgt) +{ + algo_test::transform_to_generic_test( + tgt, + eve::algo::copy, + [](auto f, auto l, auto o) { + std::copy(f, l, o); + } + ); +}; diff --git a/test/unit/algo/algorithm/find_if_not_generic.cpp b/test/unit/algo/algorithm/find_if_not_generic.cpp index 70ab8cb524..7bc14ad761 100644 --- a/test/unit/algo/algorithm/find_if_not_generic.cpp +++ b/test/unit/algo/algorithm/find_if_not_generic.cpp @@ -23,7 +23,8 @@ struct find_if_with_find_if_not_ : TraitsSupport } }; -inline constexpr auto find_if_with_find_if_not = eve::algo::function_with_traits; +inline constexpr auto find_if_with_find_if_not = + eve::algo::function_with_traits[eve::algo::find_if_not.get_traits()]; EVE_TEST_TYPES("eve.algo.find_if generic", algo_test::selected_types) (eve::as as_t) diff --git a/test/unit/algo/algorithm/find_like_special_cases.cpp b/test/unit/algo/algorithm/find_like_special_cases.cpp index bab869d029..9e7cb34eae 100644 --- a/test/unit/algo/algorithm/find_like_special_cases.cpp +++ b/test/unit/algo/algorithm/find_like_special_cases.cpp @@ -50,28 +50,28 @@ TTS_CASE("eve.algo.all/any/none/find_if, empty") (eve::algo::find(v, 1)), (std::find(v.begin(), v.end(), 1)) ); -} +}; TTS_CASE("eve.algo.find value") { std::vector const v{1, 2, 3, 4}; std::vector::const_iterator found = eve::algo::find[eve::algo::no_aligning](v, 3); TTS_EQUAL((found - v.begin()), 2); -} +}; TTS_CASE("eve.algo.find point") { std::vector x{1, 2, 3, 4}; std::vector y{0, 0, 1, 1}; - auto as_points = eve::algo::convert( - eve::algo::zip(x, y), eve::as{}); + auto as_points = eve::algo::views::convert( + eve::algo::views::zip(x, y), eve::as{}); auto found = eve::algo::find_if(as_points, [](eve::wide points) { return get_y(points) != 0; }); TTS_EQUAL(eve::read(found), (udt::point2D{3, 1})); -} +}; TTS_CASE("eve.algo.find_if not in radius") { @@ -85,15 +85,15 @@ TTS_CASE("eve.algo.find_if not in radius") return x * x + y * y <= r_square; }; - auto found = eve::algo::find_if_not(eve::algo::zip(x, y), within_radius); + auto found = eve::algo::find_if_not(eve::algo::views::zip(x, y), within_radius); TTS_EQUAL(eve::read(found), (kumi::tuple{-10, 5})); -} +}; TTS_CASE("eve.algo.mismatch example, use previous result") { std::vector const a{1, 2, 3, 4, 5, 6, 6, 8}; std::vector const b{1, 2, 2, 4, 5, 6, 7, 8}; - eve::algo::zip_iterator ra_rb = eve::algo::mismatch(a, b); + eve::algo::views::zip_iterator ra_rb = eve::algo::mismatch(a, b); TTS_EQUAL(ra_rb, eve::algo::mismatch(a, b.begin())); TTS_EQUAL(ra_rb, eve::algo::mismatch(a.begin(), b)); @@ -108,8 +108,8 @@ TTS_CASE("eve.algo.mismatch example, use previous result") { ++ra_rb; ra_rb = eve::algo::mismatch(eve::algo::as_range(ra, a.end()), rb); - TTS_EQUAL(ra_rb, eve::algo::zip(a.end(), b.end())); -} + TTS_EQUAL(ra_rb, eve::algo::views::zip(a.end(), b.end())); +}; TTS_CASE("eve.algo.mismatch example, first point not within a radius") { @@ -117,7 +117,7 @@ TTS_CASE("eve.algo.mismatch example, first point not within a radius") std::vector y { 2, 1, 4, -10, 3}; std::vector within { 5.0, 6.0, 7.6, 10.1, 6.0}; - auto x_y = eve::algo::zip[eve::algo::common_with_types](x, y); + auto x_y = eve::algo::views::zip[eve::algo::common_with_types](x, y); auto found = eve::algo::mismatch(x_y, within, [](eve::wide> x_y, eve::wide r) { @@ -130,7 +130,7 @@ TTS_CASE("eve.algo.mismatch example, first point not within a radius") TTS_EQUAL((found_x_y - x_y.begin()), 3); TTS_EQUAL(eve::read(found_x_y), (kumi::tuple{10, -10})); TTS_EQUAL(eve::read(found_r), 10.1); -} +}; TTS_CASE("eve.algo.mismatch example, zip") { @@ -139,7 +139,7 @@ TTS_CASE("eve.algo.mismatch example, zip") std::vector z { 5.1, 6.1, 4.9, 5}; auto found = eve::algo::mismatch( - eve::algo::zip(eve::algo::zip(x, y), z), + eve::algo::views::zip(eve::algo::views::zip(x, y), z), [](auto x_y, auto z) { auto [x, y] = x_y; return eve::convert(x + y, eve::as{}) < z; @@ -148,17 +148,17 @@ TTS_CASE("eve.algo.mismatch example, zip") TTS_EQUAL(eve::read(get<0>(found)), (kumi::tuple{3, 2})); TTS_EQUAL(eve::read(get<1>(found)), 4.9); -} +}; TTS_CASE("eve.algo.equal/mismatch by key") { std::vector k_1 {1, 2, 3, 4}; std::vector v_1 {'a', 'b', 'c', 'd'}; - auto map_1 = eve::algo::zip(k_1, v_1); + auto map_1 = eve::algo::views::zip(k_1, v_1); std::vector k_2 = k_1; std::vector v_2 = {0.1, 0.2, 0.3, 0.4}; - auto map_2 = eve::algo::zip(k_2, v_2); + auto map_2 = eve::algo::views::zip(k_2, v_2); auto compare_key = [](auto m1, auto m2) { return get<0>(m1) == get<0>(m2); }; @@ -181,4 +181,4 @@ TTS_CASE("eve.algo.equal/mismatch by key") TTS_NOT_EQUAL(get<0>(mmatch), map_1.end()); TTS_EQUAL (get<0>(mmatch), map_1.begin() + offset); } -} +}; diff --git a/test/unit/algo/algorithm/inclusive_scan_inplace_generic.cpp b/test/unit/algo/algorithm/inclusive_scan_inplace_generic.cpp index 6122158906..f12a974984 100644 --- a/test/unit/algo/algorithm/inclusive_scan_inplace_generic.cpp +++ b/test/unit/algo/algorithm/inclusive_scan_inplace_generic.cpp @@ -14,7 +14,6 @@ #include #include -#include EVE_TEST_TYPES("Check inlclusive_scan_inplace", algo_test::selected_types) (eve::as tgt) diff --git a/test/unit/algo/algorithm/inclusive_scan_to_generic.cpp b/test/unit/algo/algorithm/inclusive_scan_to_generic.cpp index fab42bbee7..5276d747d7 100644 --- a/test/unit/algo/algorithm/inclusive_scan_to_generic.cpp +++ b/test/unit/algo/algorithm/inclusive_scan_to_generic.cpp @@ -19,8 +19,7 @@ EVE_TEST_TYPES("Check inlclusive_scan_to", algo_test::selected_pairs_types) (eve::as tgt) { - using e_t = eve::element_type_t; - using init_t = eve::common_type_t, std::tuple_element_t<1,e_t>>; + using init_t = std::tuple_element_t<1, eve::element_type_t>; algo_test::transform_to_generic_test( tgt, diff --git a/test/unit/algo/algorithm/mismatch_generic_test.hpp b/test/unit/algo/algorithm/mismatch_generic_test.hpp index 938f0fdb52..074d5923cb 100644 --- a/test/unit/algo/algorithm/mismatch_generic_test.hpp +++ b/test/unit/algo/algorithm/mismatch_generic_test.hpp @@ -10,7 +10,7 @@ #include "unit/algo/algo_test.hpp" #include -#include +#include #include #include @@ -39,7 +39,7 @@ namespace algo_test void run(auto range1, auto range2) { - auto zipped_range = eve::algo::zip(range1, range2); + auto zipped_range = eve::algo::views::zip(range1, range2); auto zip_f = eve::algo::unalign(zipped_range.begin()); auto zip_l = eve::algo::unalign(zipped_range.end()); diff --git a/test/unit/algo/algorithm/sums_special_cases.cpp b/test/unit/algo/algorithm/sums_special_cases.cpp index d3dd3a5464..6717e08c09 100644 --- a/test/unit/algo/algorithm/sums_special_cases.cpp +++ b/test/unit/algo/algorithm/sums_special_cases.cpp @@ -10,7 +10,7 @@ #include #include -#include +#include #include #include @@ -32,14 +32,14 @@ TTS_CASE("eve.algo.reduce sum complex numbers") auto [re, im] = eve::algo::reduce( - eve::algo::zip(real, img), + eve::algo::views::zip(real, img), std::pair{plus, cmplx{0.0, 0.0} }, cmplx{1, -1} ); TTS_RELATIVE_EQUAL(re, 1.6, 0.0001); TTS_RELATIVE_EQUAL(im, -1.6, 0.0001); -} +}; TTS_CASE("eve.algo.inclusive_scan a vector") { @@ -50,7 +50,7 @@ TTS_CASE("eve.algo.inclusive_scan a vector") eve::algo::inclusive_scan_inplace(v, -1); TTS_EQUAL(v, expected); -} +}; TTS_CASE("eve.algo.inclusive_scan complex numbers") { @@ -69,13 +69,15 @@ TTS_CASE("eve.algo.inclusive_scan complex numbers") std::vector real_copy = real; std::vector img_copy = img; + kumi::tuple init{0.0, 0.0}; + eve::algo::inclusive_scan_to( - eve::algo::zip(real, img), - eve::algo::zip(real_copy, img_copy), + eve::algo::views::zip(real, img), + eve::algo::views::zip(real_copy, img_copy), std::pair{plus, eve::zero}, - eve::zero); + init); - eve::algo::inclusive_scan_inplace(eve::algo::zip(real, img), std::pair{plus, eve::zero}, eve::zero); + eve::algo::inclusive_scan_inplace(eve::algo::views::zip(real, img), std::pair{plus, eve::zero}, init); std::vector expected_real = { 0.0, 0.1, 0.3, 0.6 }; std::vector expected_img = { 0.0, -0.1, -0.3, -0.6 }; @@ -84,4 +86,4 @@ TTS_CASE("eve.algo.inclusive_scan complex numbers") TTS_EQUAL(expected_real, real_copy); TTS_EQUAL(expected_img, img_copy); -} +}; diff --git a/test/unit/algo/algorithm/transform_inplace_generic.cpp b/test/unit/algo/algorithm/transform_inplace_generic.cpp new file mode 100644 index 0000000000..2607226a21 --- /dev/null +++ b/test/unit/algo/algorithm/transform_inplace_generic.cpp @@ -0,0 +1,28 @@ +//================================================================================================== +/** + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +**/ +//================================================================================================== + +#include "unit/algo/algo_test.hpp" + +#include + +#include "transform_inplace_generic_test.hpp" + +#include + +EVE_TEST_TYPES("Check transform_inplace", algo_test::selected_types) +(eve::as tgt) +{ + algo_test::transform_inplace_generic_test( + tgt, + eve::algo::transform_inplace, + [](auto f, auto l, auto o, auto op) { + std::transform(f, l, o, op); + }, + [](auto x) { return x + x; } + ); +}; diff --git a/test/unit/algo/algorithm/transform_special_cases.cpp b/test/unit/algo/algorithm/transform_special_cases.cpp new file mode 100644 index 0000000000..99f13a99b6 --- /dev/null +++ b/test/unit/algo/algorithm/transform_special_cases.cpp @@ -0,0 +1,34 @@ +//================================================================================================== +/** + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +**/ +//================================================================================================== + +#include "unit/algo/algo_test.hpp" + +#include +#include + +TTS_CASE("eve.algo.transform different type works") +{ + std::vector in{1, 4, 9, 16}; + std::vector out; + out.resize(4); + std::vector expected{1, 2, 3, 4}; + + eve::algo::transform_to(in, out, [](auto x) { + // I know we support ints, it's a test + auto doubles = eve::convert(x, eve::as{}); + return eve::sqrt(doubles); + }); + + TTS_EQUAL(out, expected); + + // For completness + out.clear(); + out.resize(4); + eve::algo::transform_to(in, out, eve::sqrt); + TTS_EQUAL(out, expected); +}; diff --git a/test/unit/algo/algorithm/transform_to_generic.cpp b/test/unit/algo/algorithm/transform_to_generic.cpp new file mode 100644 index 0000000000..2ac4c3384a --- /dev/null +++ b/test/unit/algo/algorithm/transform_to_generic.cpp @@ -0,0 +1,30 @@ +//================================================================================================== +/** + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +**/ +//================================================================================================== + +#include "unit/algo/algo_test.hpp" + +#include + +#include "transform_to_generic_test.hpp" + +#include + +EVE_TEST_TYPES("Check trasnform_to", algo_test::selected_pairs_types) +(eve::as tgt) +{ + algo_test::transform_to_generic_test( + tgt, + eve::algo::transform_to, + [](auto f, auto l, auto o, auto op) { + (void)op; + std::transform(f, l, o, + [](auto x) { return static_cast(x + x); }); + }, + [](auto x) { return x + x; } + ); +}; diff --git a/test/unit/algo/algorithm/transform_to_generic_test.hpp b/test/unit/algo/algorithm/transform_to_generic_test.hpp index cef416b357..3f51fe6b24 100644 --- a/test/unit/algo/algorithm/transform_to_generic_test.hpp +++ b/test/unit/algo/algorithm/transform_to_generic_test.hpp @@ -38,7 +38,7 @@ namespace algo_test { template void run(R1 range_or_it1, R2 range_or_it2) { - auto zipped_range = eve::algo::zip(range_or_it1, range_or_it2); + auto zipped_range = eve::algo::views::zip(range_or_it1, range_or_it2); // To operate with both ends always auto r1 = get<0>(zipped_range); auto r2 = get<1>(zipped_range); diff --git a/test/unit/algo/array_utils.cpp b/test/unit/algo/array_utils.cpp index e97ced8d44..bbcb7025df 100644 --- a/test/unit/algo/array_utils.cpp +++ b/test/unit/algo/array_utils.cpp @@ -19,7 +19,7 @@ TTS_CASE("eve.algo.array_utils array_map") constexpr std::array expected = { 2, 4, 6, 8 }; constexpr auto actual = eve::algo::array_map(input, [](char x) -> int { return x * 2; }); TTS_CONSTEXPR_EXPECT(expected == actual); -} +}; TTS_CASE("eve.algo.array_utils array_map") { @@ -39,7 +39,7 @@ TTS_CASE("eve.algo.array_utils array_map") constexpr int actual = eve::algo::array_reduce(in, std::plus<>{}); TTS_CONSTEXPR_EXPECT( actual == 1 ); } -} +}; TTS_CASE("eve.algo.array_utils find_branchless") { @@ -49,4 +49,4 @@ TTS_CASE("eve.algo.array_utils find_branchless") constexpr std::size_t find_more_10 = eve::algo::find_branchless(in, [](int x) { return x > 10; }); TTS_CONSTEXPR_EQUAL(find_neg_2, 1u); TTS_CONSTEXPR_EQUAL(find_more_10, 3u); -} +}; diff --git a/test/unit/algo/concepts.cpp b/test/unit/algo/concepts.cpp index 2f594d52f0..16173fe505 100644 --- a/test/unit/algo/concepts.cpp +++ b/test/unit/algo/concepts.cpp @@ -10,8 +10,9 @@ #include +#include #include -#include +#include #include @@ -26,13 +27,47 @@ TTS_CASE("concepts, value type") std::vector v1, v2; TTS_TYPE_IS(eve::algo::value_type_t, int); - TTS_TYPE_IS((eve::algo::value_type_t), + TTS_TYPE_IS((eve::algo::value_type_t), (kumi::tuple)); -} +}; TTS_CASE("concepts, relaxed") { TTS_CONSTEXPR_EXPECT(eve::algo::relaxed_iterator); + TTS_CONSTEXPR_EXPECT(eve::algo::relaxed_iterator>); + TTS_CONSTEXPR_EXPECT(eve::algo::relaxed_iterator); + TTS_CONSTEXPR_EXPECT(eve::algo::relaxed_iterator>); + TTS_CONSTEXPR_EXPECT(eve::algo::relaxed_iterator const&>); + TTS_CONSTEXPR_EXPECT_NOT(eve::algo::relaxed_range); TTS_CONSTEXPR_EXPECT(eve::algo::relaxed_range>); -} +}; + +TTS_CASE("concepts, types_to_consider_for") +{ + TTS_TYPE_IS(eve::algo::types_to_consider_for_t, kumi::tuple); + TTS_TYPE_IS(eve::algo::types_to_consider_for_t, kumi::tuple); + TTS_TYPE_IS(eve::algo::types_to_consider_for_t>, kumi::tuple); + + std::vector v_i; + std::vector v_s; + + auto c_v_i_r = eve::algo::views::convert(v_i, eve::as{}); + auto c_v_i_i = eve::algo::views::convert(v_i.begin(), eve::as{}); + + + TTS_TYPE_IS(eve::algo::types_to_consider_for_t, (kumi::tuple)); + TTS_TYPE_IS(eve::algo::types_to_consider_for_t, (kumi::tuple)); + + + auto zip_s_i_i = eve::algo::views::zip(v_s, v_i, v_i); + + // This should probably be a type set but w/e + TTS_TYPE_IS(eve::algo::types_to_consider_for_t, (kumi::tuple)); + TTS_TYPE_IS(eve::algo::types_to_consider_for_t, (kumi::tuple)); + + auto zip_c_i_s = eve::algo::views::zip(c_v_i_r, v_s); + + TTS_TYPE_IS(eve::algo::types_to_consider_for_t, (kumi::tuple)); + TTS_TYPE_IS(eve::algo::types_to_consider_for_t, (kumi::tuple)); +}; diff --git a/test/unit/algo/container/erase_remove.cpp b/test/unit/algo/container/erase_remove.cpp index 502168ad9a..62b0e4a1db 100644 --- a/test/unit/algo/container/erase_remove.cpp +++ b/test/unit/algo/container/erase_remove.cpp @@ -21,17 +21,41 @@ TTS_CASE("erase/remove idiom in eve") udt::line2D{ udt::point2D{6, 2}, udt::point2D{-1, -1} } }; - udt::point2D bad_start{0, 1}; - (void) bad_start; + eve::algo::soa_vector expected { + udt::line2D{ udt::point2D{1, 3}, udt::point2D{2, 2} }, + udt::line2D{ udt::point2D{6, 2}, udt::point2D{-1, -1} } + }; - TTS_PASS("FIX-#868, then test"); + udt::point2D bad_start{0, 1}; -#if 0 // FIX-#868 lines.erase( eve::algo::remove_if(lines, [&](eve::wide l) { return get_start(l) == bad_start; }), lines.end() ); -#endif -} + + TTS_EQUAL(expected, lines); +}; + +TTS_CASE("erase/remove idiom in eve") +{ + eve::algo::soa_vector points { + udt::point2D{0, 1}, udt::point2D{1, 2}, udt::point2D{1, 3} + }; + + udt::point2D bad{0, 1}; + + eve::algo::soa_vector expected { + points.get(1), points.get(2) + }; + + points.erase( + eve::algo::remove_if(points, [&](eve::wide p) { + return p == bad; + }), + points.end() + ); + + TTS_EQUAL(expected, points); +}; diff --git a/test/unit/algo/container/soa_vector.cpp b/test/unit/algo/container/soa_vector.cpp index 9608ab2021..99206f08db 100644 --- a/test/unit/algo/container/soa_vector.cpp +++ b/test/unit/algo/container/soa_vector.cpp @@ -22,7 +22,7 @@ TTS_CASE("Check soa_vector default ctor") TTS_EQUAL ( empty_udt.size(), 0ULL ); TTS_EXPECT( empty_udt.empty() ); -} +}; TTS_CASE("Check soa_vector sized ctor") { @@ -39,7 +39,7 @@ TTS_CASE("Check soa_vector sized ctor") TTS_EQUAL( get<0>(udt_vector.get(0)), +1 ); TTS_EQUAL( get<1>(udt_vector.get(0)), -1 ); TTS_EQUAL( udt_vector.get(0), udt::grid2d{}); -} +}; TTS_CASE("Check soa_vector sized ctor with default value") { @@ -56,7 +56,7 @@ TTS_CASE("Check soa_vector sized ctor with default value") TTS_EXPECT_NOT( udt_vector.empty() ); TTS_EQUAL( get<0>(udt_vector.get(0)), 4 ); TTS_EQUAL( get<1>(udt_vector.get(0)), 19); -} +}; TTS_CASE("Check soa_vector initializer list ctor") { @@ -78,7 +78,7 @@ TTS_CASE("Check soa_vector initializer list ctor") TTS_EQUAL(udt_vector.get(0), (udt::grid2d{1,2})); TTS_EQUAL(udt_vector.get(1), (udt::grid2d{3,4})); TTS_EQUAL(udt_vector.get(2), (udt::grid2d{5,8})); -} +}; TTS_CASE("Check soa_vector::clear behavior") { @@ -100,7 +100,7 @@ TTS_CASE("Check soa_vector::clear behavior") TTS_EQUAL ( udt_vector.size(), 0ULL); TTS_EXPECT ( udt_vector.empty() ); -} +}; TTS_CASE("Check soa_vector::swap behavior") { @@ -139,7 +139,7 @@ TTS_CASE("Check soa_vector::swap behavior") TTS_EQUAL(uv2.get(0), (udt::grid2d{1,2})); TTS_EQUAL(uv2.get(1), (udt::grid2d{3,4})); TTS_EQUAL(uv2.get(2), (udt::grid2d{5,8})); -} +}; TTS_CASE("Check soa_vector::push_back behavior") { @@ -170,7 +170,7 @@ TTS_CASE("Check soa_vector::push_back behavior") uv.push_back( udt::grid2d{5,8} ); TTS_EQUAL(uv, uvref); -} +}; TTS_CASE("Check soa_vector::pop behavior") { @@ -201,7 +201,7 @@ TTS_CASE("Check soa_vector::pop behavior") uv.pop_back(); TTS_EQUAL(uv, uvref); -} +}; TTS_CASE("Check soa_vector::data behavior") { @@ -222,7 +222,7 @@ TTS_CASE("Check soa_vector::data behavior") auto uv_data = uv.data(); for(std::size_t i = 0;i< uv.size();++i) TTS_EQUAL( eve::read(uv_data++), uv.get(i)); -} +}; TTS_CASE("Check soa_vector::begin/end behavior") { @@ -247,7 +247,7 @@ TTS_CASE("Check soa_vector::begin/end behavior") i = 0; while(uv_begin != uv_end) TTS_EQUAL( eve::read(uv_begin++), uv.get(i++)); -} +}; TTS_CASE("Check types") { @@ -256,16 +256,16 @@ TTS_CASE("Check types") using const_ap = eve::aligned_ptr>; using v = eve::algo::soa_vector; - TTS_TYPE_IS(v::pointer, (eve::algo::zip_iterator)); - TTS_TYPE_IS(v::const_pointer, (eve::algo::zip_iterator)); - TTS_TYPE_IS(v::pointer_aligned, (eve::algo::zip_iterator)); - TTS_TYPE_IS(v::const_pointer_aligned, (eve::algo::zip_iterator)); + TTS_TYPE_IS(v::pointer, (eve::algo::views::zip_iterator)); + TTS_TYPE_IS(v::const_pointer, (eve::algo::views::zip_iterator)); + TTS_TYPE_IS(v::pointer_aligned, (eve::algo::views::zip_iterator)); + TTS_TYPE_IS(v::const_pointer_aligned, (eve::algo::views::zip_iterator)); - TTS_TYPE_IS(v::iterator, (eve::algo::converting_iterator)); - TTS_TYPE_IS(v::const_iterator, (eve::algo::converting_iterator)); - TTS_TYPE_IS(v::iterator_aligned, (eve::algo::converting_iterator)); - TTS_TYPE_IS(v::const_iterator_aligned, (eve::algo::converting_iterator)); -} + TTS_TYPE_IS(v::iterator, (eve::algo::views::converting_iterator)); + TTS_TYPE_IS(v::const_iterator, (eve::algo::views::converting_iterator)); + TTS_TYPE_IS(v::iterator_aligned, (eve::algo::views::converting_iterator)); + TTS_TYPE_IS(v::const_iterator_aligned, (eve::algo::views::converting_iterator)); +}; TTS_CASE("erase(pos)") { @@ -297,7 +297,7 @@ TTS_CASE("erase(pos)") pos = v.erase(v.begin_aligned()); TTS_EQUAL(v, expected); TTS_EQUAL((pos - v.begin()), 0); -} +}; TTS_CASE("erase(f, l)") { @@ -354,4 +354,4 @@ TTS_CASE("erase(f, l)") TTS_EQUAL(v.size(), 0u); TTS_EQUAL(pos, v.begin()); } -} +}; diff --git a/test/unit/algo/container/transform_points_into_lines.cpp b/test/unit/algo/container/transform_points_into_lines.cpp new file mode 100644 index 0000000000..76777dcd59 --- /dev/null +++ b/test/unit/algo/container/transform_points_into_lines.cpp @@ -0,0 +1,50 @@ +//================================================================================================== +/** + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +**/ +//================================================================================================== +#include "test.hpp" + +#include "unit/algo/udt.hpp" + +#include +#include +#include + +#include +#include + +TTS_CASE("transform points into vertical lines") +{ + eve::algo::soa_vector starts{ + udt::point2D{0, 1}, + udt::point2D{1, 1}, + udt::point2D{2, 2}, + udt::point2D{3, 3}, + }; + + std::vector lengths { + 1, 2, 3, 5 + }; + + eve::algo::soa_vector expected{ + udt::line2D{udt::point2D{0, 1}, udt::point2D{0, 1 - 1}}, + udt::line2D{udt::point2D{1, 1}, udt::point2D{1, 1 - 2}}, + udt::line2D{udt::point2D{2, 2}, udt::point2D{2, 2 - 3}}, + udt::line2D{udt::point2D{3, 3}, udt::point2D{3, 3 - 5}}, + }; + + eve::algo::soa_vector actual(starts.size()); + + eve::algo::transform_to(eve::algo::views::zip(starts, lengths), actual, + [](auto start_l) { + auto [start, l] = start_l; + auto end = start; + get_y(end) -= l; + return eve::zip(start, end); + }); + + TTS_EQUAL(expected, actual); +}; diff --git a/test/unit/algo/convert.cpp b/test/unit/algo/convert.cpp index d0ad0e2cfd..98c042caae 100644 --- a/test/unit/algo/convert.cpp +++ b/test/unit/algo/convert.cpp @@ -8,16 +8,16 @@ #include "unit/algo/algo_test.hpp" -#include +#include #include #include -TTS_CASE("eve::algo::convert, read/write") +TTS_CASE("eve::algo::views::convert, read/write") { std::vector v{1, 2, 3, 4}; - auto as_doubles = eve::algo::convert(v, eve::as{}); + auto as_doubles = eve::algo::views::convert(v, eve::as{}); int i = 0; for (auto f = as_doubles.begin(); f != as_doubles.end(); ++f) @@ -30,32 +30,33 @@ TTS_CASE("eve::algo::convert, read/write") TTS_EQUAL(v[i], 0); ++i; } -} +}; -TTS_CASE("eve::algo::convert, preprocess test") +TTS_CASE("eve::algo::views::convert, preprocess test") { - using From = float; - using To = int; - using N = eve::fixed>; + using From = float; + using To = int; + using SmallerTo = short; + using N = eve::fixed>; auto common_test = [] (R&& r, eve::as tgt, auto input_tr, ExpectedRawF, ExpectedRawS, ExpectedTraits) { - eve::algo::relaxed_range auto converted = eve::algo::convert(std::forward(r), tgt); + eve::algo::relaxed_range auto converted = eve::algo::views::convert(std::forward(r), tgt); auto processed = eve::algo::preprocess_range(input_tr, converted); - using I = eve::algo::converting_iterator; - using S = eve::algo::converting_iterator; + using I = eve::algo::views::converting_iterator; + using S = eve::algo::views::converting_iterator; TTS_TYPE_IS(decltype(processed.traits()), ExpectedTraits); TTS_TYPE_IS(decltype(processed.begin()), I); TTS_TYPE_IS(decltype(processed.end()), S); // Two converting iterators is mostly the same thing, except for when the range has more info - auto cf = eve::algo::convert(r.begin(), tgt); - auto cl = eve::algo::convert(r.end(), tgt); + auto cf = eve::algo::views::convert(r.begin(), tgt); + auto cl = eve::algo::views::convert(r.end(), tgt); auto as_iterators = eve::algo::preprocess_range(input_tr, eve::algo::as_range(cf, cl)); TTS_TYPE_IS(decltype(processed.traits()), decltype(as_iterators.traits())); TTS_TYPE_IS(decltype(processed.begin()), decltype(as_iterators.begin())); @@ -71,6 +72,8 @@ TTS_CASE("eve::algo::convert, preprocess test") eve::as{}, eve::algo::traits{}, u_it{}, u_it{}, eve::algo::traits{}); common_test(eve::algo::as_range(u_it{}, u_it{}), eve::as{}, eve::algo::traits{}, u_it{}, u_it{}, eve::algo::traits{}); + common_test(eve::algo::as_range(u_it{}, u_it{}), + eve::as{}, eve::algo::traits{}, u_it{}, u_it{}, eve::algo::traits{}); common_test(v, eve::as{}, eve::algo::traits{eve::algo::no_aligning}, u_it{}, u_it{}, eve::algo::traits{eve::algo::no_aligning}); @@ -96,27 +99,26 @@ TTS_CASE("eve::algo::convert, preprocess test") eve::as{}, eve::algo::traits{}, a_it{}, u_it{}, eve::algo::traits{eve::algo::no_aligning}); } +}; -} - -TTS_CASE("eve.algo.convert to/from") +TTS_CASE("eve.algo.views.convert to/from") { // pointer { using ap = eve::aligned_ptr; ap chars{}; - eve::algo::converting_iterator ints = eve::algo::convert(chars, eve::as{}); - eve::algo::converting_iterator shorts = eve::algo::convert(ints, eve::as{}); - ap chars2 = eve::algo::convert(shorts, eve::as{}); + eve::algo::views::converting_iterator ints = eve::algo::views::convert(chars, eve::as{}); + eve::algo::views::converting_iterator shorts = eve::algo::views::convert(ints, eve::as{}); + ap chars2 = eve::algo::views::convert(shorts, eve::as{}); (void) chars2; } // eve::iterator { using ap_it = eve::algo::aligned_ptr_iterator>; ap_it chars{}; - eve::algo::converting_iterator ints = eve::algo::convert(chars, eve::as{}); - eve::algo::converting_iterator shorts = eve::algo::convert(ints, eve::as{}); - ap_it chars2 = eve::algo::convert(shorts, eve::as{}); + eve::algo::views::converting_iterator ints = eve::algo::views::convert(chars, eve::as{}); + eve::algo::views::converting_iterator shorts = eve::algo::views::convert(ints, eve::as{}); + ap_it chars2 = eve::algo::views::convert(shorts, eve::as{}); (void)chars2; } // std::vector @@ -125,12 +127,12 @@ TTS_CASE("eve.algo.convert to/from") using ref_vc = eve::algo::range_ref_wrapper>; - ref_vc chars = eve::algo::convert(chars_v, eve::as{}); - eve::algo::converting_range ints = eve::algo::convert(chars, eve::as{}); - eve::algo::converting_range shorts = eve::algo::convert(ints, eve::as{}); - ref_vc chars2 = eve::algo::convert(shorts, eve::as{}); + ref_vc chars = eve::algo::views::convert(chars_v, eve::as{}); + eve::algo::views::converting_range ints = eve::algo::views::convert(chars, eve::as{}); + eve::algo::views::converting_range shorts = eve::algo::views::convert(ints, eve::as{}); + ref_vc chars2 = eve::algo::views::convert(shorts, eve::as{}); (void) chars2; } TTS_PASS("all types ok"); -} +}; diff --git a/test/unit/algo/convert_zip.cpp b/test/unit/algo/convert_zip.cpp index 37f59ef1aa..cf98f202a5 100644 --- a/test/unit/algo/convert_zip.cpp +++ b/test/unit/algo/convert_zip.cpp @@ -8,8 +8,8 @@ #include "unit/algo/algo_test.hpp" -#include -#include +#include +#include #include "unit/algo/udt.hpp" @@ -20,45 +20,45 @@ TTS_CASE("convert zip iter") using v_it = std::vector::const_iterator; using c_it = std::vector::iterator; - using c_to_v = eve::algo::converting_iterator; + using c_to_v = eve::algo::views::converting_iterator; - using zip_v_c_to_v = eve::algo::zip_iterator; - using zip_v_c_to_v_as_point = eve::algo::converting_iterator; + using zip_v_c_to_v = eve::algo::views::zip_iterator; + using zip_v_c_to_v_as_point = eve::algo::views::converting_iterator; // tuple and point { - auto zipped = eve::algo::zip(v.begin(), c.begin()); - auto as_int_int = eve::algo::convert(zipped, eve::as>{}); + auto zipped = eve::algo::views::zip(v.begin(), c.begin()); + auto as_int_int = eve::algo::views::convert(zipped, eve::as>{}); TTS_TYPE_IS(decltype(as_int_int), zip_v_c_to_v); // As product - auto as_point2D = eve::algo::convert(zipped, eve::as{}); + auto as_point2D = eve::algo::views::convert(zipped, eve::as{}); TTS_TYPE_IS(decltype(as_point2D), zip_v_c_to_v_as_point); } // Line { - using expected = eve::algo::converting_iterator< - eve::algo::zip_iterator, + using expected = eve::algo::views::converting_iterator< + eve::algo::views::zip_iterator, udt::line2D >; - auto actual1 = eve::algo::convert( - eve::algo::zip(v.begin(), c.begin(), v.begin(), v.begin()), eve::as{} + auto actual1 = eve::algo::views::convert( + eve::algo::views::zip(v.begin(), c.begin(), v.begin(), v.begin()), eve::as{} ); TTS_TYPE_IS(decltype(actual1), expected); #if 0 // FIX-918 - auto actual2 = eve::algo::convert( - eve::algo::zip( - eve::algo::convert(eve::algo::zip(v, c), eve::as{}), - eve::algo::convert(eve::algo::zip(v, v), eve::as{}) + auto actual2 = eve::algo::views::convert( + eve::algo::views::zip( + eve::algo::views::convert(eve::algo::views::zip(v, c), eve::as{}), + eve::algo::views::convert(eve::algo::views::zip(v, v), eve::as{}) ), eve::as{}); TTS_TYPE_IS(decltype(actual2), expected); #endif } -} +}; TTS_CASE("convert zip range") { @@ -67,42 +67,42 @@ TTS_CASE("convert zip range") using v_ref = eve::algo::range_ref_wrapper const>; using c_ref = eve::algo::range_ref_wrapper>; - using c_to_v = eve::algo::converting_range; + using c_to_v = eve::algo::views::converting_range; - using zip_v_c_to_v = eve::algo::zip_range; - using zip_v_c_to_v_as_point = eve::algo::converting_range; + using zip_v_c_to_v = eve::algo::views::zip_range; + using zip_v_c_to_v_as_point = eve::algo::views::converting_range; // tuple and point { - auto zipped = eve::algo::zip(v, c); - auto as_int_int = eve::algo::convert(zipped, eve::as>{}); + auto zipped = eve::algo::views::zip(v, c); + auto as_int_int = eve::algo::views::convert(zipped, eve::as>{}); TTS_TYPE_IS(decltype(as_int_int), zip_v_c_to_v); // As product - auto as_point2D = eve::algo::convert(zipped, eve::as{}); + auto as_point2D = eve::algo::views::convert(zipped, eve::as{}); TTS_TYPE_IS(decltype(as_point2D), zip_v_c_to_v_as_point); } // Line { - using expected = eve::algo::converting_range< - eve::algo::zip_range, + using expected = eve::algo::views::converting_range< + eve::algo::views::zip_range, udt::line2D >; - auto actual1 = eve::algo::convert( - eve::algo::zip(v, c, v, v), eve::as{} + auto actual1 = eve::algo::views::convert( + eve::algo::views::zip(v, c, v, v), eve::as{} ); TTS_TYPE_IS(decltype(actual1), expected); #if 0 // FIX-918 - auto actual2 = eve::algo::convert( - eve::algo::zip( - eve::algo::convert(eve::algo::zip(v, c), eve::as{}), - eve::algo::convert(eve::algo::zip(v, v), eve::as{}) + auto actual2 = eve::algo::views::convert( + eve::algo::views::zip( + eve::algo::views::convert(eve::algo::views::zip(v, c), eve::as{}), + eve::algo::views::convert(eve::algo::views::zip(v, v), eve::as{}) ), eve::as{}); TTS_TYPE_IS(decltype(actual2), expected); #endif } -} +}; diff --git a/test/unit/algo/converting_eve_iterator.cpp b/test/unit/algo/converting_eve_iterator.cpp index 6c5fb31212..6fdc2e783d 100644 --- a/test/unit/algo/converting_eve_iterator.cpp +++ b/test/unit/algo/converting_eve_iterator.cpp @@ -1,6 +1,6 @@ #include "unit/algo/algo_test.hpp" -#include +#include #include #include "iterator_concept_test.hpp" @@ -19,20 +19,22 @@ EVE_TEST_TYPES("Check converting_iterator", algo_test::selected_types) auto replace = [&](auto v, auto ignore) { return eve::replace_ignored(v, ignore, decltype(v){0}); }; auto run_test_one_pair = [&](auto f, auto l) { - algo_test::iterator_sentinel_test(eve::algo::convert(f, eve::as{}), - eve::algo::convert(l, eve::as{}), + algo_test::iterator_sentinel_test(eve::algo::views::convert(f, eve::as{}), + eve::algo::views::convert(l, eve::as{}), char_values, replace); if constexpr (eve::current_api != eve::avx512 || !eve::has_aggregated_abi_v) { - algo_test::iterator_sentinel_test(eve::algo::convert(f, eve::as{}), - eve::algo::convert(l, eve::as{}), + algo_test::iterator_sentinel_test(eve::algo::views::convert(f, eve::as{}), + eve::algo::views::convert(l, eve::as{}), int64_values, replace); } }; auto run_test_writeable = [&](auto f) { algo_test::writeable_readable_iterator( - eve::algo::convert(f, eve::as{}), char_values, replace); + eve::algo::views::convert(f, eve::as{}), char_values, replace); + algo_test::iterator_supports_compress( + eve::algo::views::convert(f, eve::as{}), char_values, replace); }; auto run_test = [&] (U* f, U* l) { diff --git a/test/unit/algo/for_each_iteration.cpp b/test/unit/algo/for_each_iteration.cpp index d56024337a..37bfc344dc 100644 --- a/test/unit/algo/for_each_iteration.cpp +++ b/test/unit/algo/for_each_iteration.cpp @@ -42,50 +42,50 @@ namespace } TTS_CASE("eve.algo for_each_iteration, selection") - { - fixture fix; +{ + fixture fix; - auto f = fix.unaligned_begin() + 3; - auto l = f + 40; + auto f = fix.unaligned_begin() + 3; + auto l = f + 40; - using u_it = decltype(f); - using a_it = decltype(fix.aligned_begin()); + using u_it = decltype(f); + using a_it = decltype(fix.aligned_begin()); - // aligning - { - auto tr = eve::algo::traits(); - auto sel = eve::algo::for_each_iteration(tr, f, l); - TTS_TYPE_IS(decltype(sel), - (eve::algo::detail::for_each_iteration_aligning)); + // aligning + { + auto tr = eve::algo::traits(); + auto sel = eve::algo::for_each_iteration(tr, f, l); + TTS_TYPE_IS(decltype(sel), + (eve::algo::detail::for_each_iteration_aligning)); - TTS_EQUAL(sel.base, fix.aligned_begin()); - TTS_TYPE_IS(decltype(sel.base), a_it); - } + TTS_EQUAL(sel.base, fix.aligned_begin()); + TTS_TYPE_IS(decltype(sel.base), a_it); + } - // precise f, l - { - auto tr = eve::algo::traits(eve::algo::no_aligning, eve::algo::divisible_by_cardinal); - auto sel = eve::algo::for_each_iteration(tr, f, l); + // precise f, l + { + auto tr = eve::algo::traits(eve::algo::no_aligning, eve::algo::divisible_by_cardinal); + auto sel = eve::algo::for_each_iteration(tr, f, l); - TTS_TYPE_IS(decltype(sel), - (eve::algo::detail::for_each_iteration_precise_f_l)); + TTS_TYPE_IS(decltype(sel), + (eve::algo::detail::for_each_iteration_precise_f_l)); - TTS_EQUAL(sel.base, f); - TTS_TYPE_IS(decltype(sel.base), u_it); - } + TTS_EQUAL(sel.base, f); + TTS_TYPE_IS(decltype(sel.base), u_it); + } - // precise f - { - auto tr = eve::algo::traits(eve::algo::no_aligning); - auto sel = eve::algo::for_each_iteration(tr, f, l); + // precise f + { + auto tr = eve::algo::traits(eve::algo::no_aligning); + auto sel = eve::algo::for_each_iteration(tr, f, l); - TTS_TYPE_IS(decltype(sel), - (eve::algo::detail::for_each_iteration_precise_f)); + TTS_TYPE_IS(decltype(sel), + (eve::algo::detail::for_each_iteration_precise_f)); - TTS_EQUAL(sel.base, f); - TTS_TYPE_IS(decltype(sel.base), u_it); - } -} + TTS_EQUAL(sel.base, f); + TTS_TYPE_IS(decltype(sel.base), u_it); + } +}; namespace { @@ -216,7 +216,7 @@ TTS_CASE("eve.algo for_each_iteration border cases, aligning") test(f + i, l - i, {{0, eve::ignore_first(i)}, {4, eve::ignore_extrema(0, i)}}); } } -} +}; TTS_CASE("eve.algo for_each_iteration border cases, precise") { @@ -276,7 +276,7 @@ TTS_CASE("eve.algo for_each_iteration border cases, precise") test(f + 1, l - 2, {{0, eve::ignore_none}, {4, eve::keep_first(1)}}); test(f + 2, l - 1, {{0, eve::ignore_none}, {4, eve::keep_first(1)}}); } -} +}; TTS_CASE("eve.algo for_each_iteration unrolling, aligning") { @@ -368,7 +368,7 @@ TTS_CASE("eve.algo for_each_iteration unrolling, aligning") {80, eve::ignore_extrema(0, 1)} } ); -} +}; TTS_CASE("eve.algo for_each_iteration unrolling, precise") { @@ -460,7 +460,7 @@ TTS_CASE("eve.algo for_each_iteration unrolling, precise") {64, eve::keep_first(1)}, } ); -} +}; TTS_CASE("eve.algo for_each_iteration steps indexing") { @@ -493,4 +493,4 @@ TTS_CASE("eve.algo for_each_iteration steps indexing") 0, 1, 2, // steps finishing 0, // ignore })); -} +}; diff --git a/test/unit/algo/iterator_concept_test.hpp b/test/unit/algo/iterator_concept_test.hpp index 8718d10117..efdfdf9e65 100644 --- a/test/unit/algo/iterator_concept_test.hpp +++ b/test/unit/algo/iterator_concept_test.hpp @@ -31,8 +31,8 @@ namespace algo_test TTS_GREATER (l, f); TTS_GREATER_EQUAL(l, f); - eve::fixed cardinal = typename I::cardinal{}; - TTS_TYPE_IS(typename I::cardinal, decltype(cardinal)); + eve::fixed cardinal = eve::algo::iterator_cardinal_t{}; + TTS_TYPE_IS(eve::algo::iterator_cardinal_t, decltype(cardinal)); TTS_TYPE_IS(decltype(l - f), std::ptrdiff_t); // read test @@ -98,6 +98,8 @@ namespace algo_test template S, typename T, typename ReplaceIgnored> void iterator_sentinel_test(I f, S l, T v, ReplaceIgnored replace) { + TTS_CONSTEXPR_EXPECT(eve::algo::readable_iterator); + eve::algo::preprocess_range(eve::algo::traits{}, f, f); is_relaxed_test(f, l); iterator_sentinel_test_one_pair(f, l, v, replace); @@ -165,7 +167,9 @@ namespace algo_test T expected = or_; expected.set(0, v.back()); - eve::logical mask{false}; + using m_t = std::conditional_t; + + eve::logical>> mask{false}; mask.set(T::size() - 1, true); eve::algo::unaligned_t res = eve::safe(eve::compress_store)(v, mask, f); TTS_EQUAL(eve::load(f), expected); diff --git a/test/unit/algo/preprocess_range.cpp b/test/unit/algo/preprocess_range.cpp index c09d8e3d8c..b6b8a0f533 100644 --- a/test/unit/algo/preprocess_range.cpp +++ b/test/unit/algo/preprocess_range.cpp @@ -10,7 +10,7 @@ #include -#include +#include #include #include @@ -264,33 +264,59 @@ EVE_TEST_TYPES("cardinal/type manipulation", algo_test::selected_types) using e_t = eve::element_type_t; std::vector v; + std::vector v_d; { auto processed = eve::algo::preprocess_range( eve::algo::traits(eve::algo::force_cardinal), v); using I = decltype(processed.begin()); - TTS_CONSTEXPR_EXPECT((std::same_as)); + TTS_TYPE_IS(eve::algo::wide_value_type_t, T); + } + + { + using cardinal_n = eve::detail::cache_line_cardinal; + auto processed = eve::algo::preprocess_range( + eve::algo::traits(eve::algo::force_cardinal), v); + + using I = decltype(processed.begin()); + TTS_TYPE_IS(eve::algo::iterator_cardinal_t, cardinal_n); } { auto processed = eve::algo::preprocess_range( eve::algo::traits(), - eve::algo::convert(v, eve::as>{})); + eve::algo::views::convert(v, eve::as>{})); using I = decltype(processed.begin()); TTS_TYPE_IS(typename I::value_type, double); - TTS_TYPE_IS(typename I::wide_value_type, eve::wide); + TTS_TYPE_IS(eve::algo::wide_value_type_t, eve::wide); } { auto processed = eve::algo::preprocess_range( eve::algo::traits(eve::algo::force_cardinal), - eve::algo::convert(v, eve::as{})); + eve::algo::views::convert(v, eve::as{})); + + using I = decltype(processed.begin()); + TTS_TYPE_IS(eve::algo::wide_value_type_t, + (eve::wide>)); + } + + { + auto processed = eve::algo::preprocess_range( + eve::algo::traits(eve::algo::consider_types), v); + + using I = decltype(processed.begin()); + TTS_TYPE_IS(eve::algo::wide_value_type_t, + (eve::wide>>)); + } + + { + auto processed = eve::algo::preprocess_range( + eve::algo::traits{}, eve::algo::views::convert(v_d, eve::as{})); using I = decltype(processed.begin()); - TTS_CONSTEXPR_EXPECT((std::same_as< - typename I::wide_value_type, - eve::wide> - >)); + TTS_TYPE_IS(eve::algo::wide_value_type_t, + (eve::wide>>)); } }; diff --git a/test/unit/algo/preprocess_zip_range.cpp b/test/unit/algo/preprocess_zip_range.cpp index eb25e37b7a..63ddc885fa 100644 --- a/test/unit/algo/preprocess_zip_range.cpp +++ b/test/unit/algo/preprocess_zip_range.cpp @@ -8,8 +8,7 @@ #include "unit/algo/algo_test.hpp" -#include -#include +#include #include #include @@ -24,11 +23,11 @@ TTS_CASE("zip_iterator, preprocess range, scalar end") std::vector v2{1, 2, 4}; using v_i = std::vector::iterator; - using zip_vi = eve::algo::zip_iterator; + using zip_vi = eve::algo::views::zip_iterator; using N = eve::fixed>; using ui_it = eve::algo::unaligned_ptr_iterator; - using zip_ui = eve::algo::zip_iterator; + using zip_ui = eve::algo::views::zip_iterator; zip_vi zf{v1.begin(), v2.begin()}; @@ -38,20 +37,20 @@ TTS_CASE("zip_iterator, preprocess range, scalar end") zip_ui processed_l = processed.end(); TTS_EQUAL((processed_l - processed_f), 3); -} +}; TTS_CASE("zip_iterator, preprocess range, zip end") { using u = int const*; using a = eve::aligned_ptr; - using zip_au = eve::algo::zip_iterator; - using zip_uu = eve::algo::zip_iterator; + using zip_au = eve::algo::views::zip_iterator; + using zip_uu = eve::algo::views::zip_iterator; using N = eve::fixed>; using a_it = eve::algo::aligned_ptr_iterator ; using u_it = eve::algo::unaligned_ptr_iterator; - using zip_au_it = eve::algo::zip_iterator; - using zip_uu_it = eve::algo::zip_iterator; + using zip_au_it = eve::algo::views::zip_iterator; + using zip_uu_it = eve::algo::views::zip_iterator; // au_uu { @@ -96,7 +95,7 @@ TTS_CASE("zip_iterator, preprocess range, zip end") TTS_TYPE_IS(decltype(std::declval().begin()), zip_au_it); TTS_TYPE_IS(decltype(std::declval().end()), zip_au_it); } -} +}; TTS_CASE("preprocess zip range, traits") { @@ -106,7 +105,7 @@ TTS_CASE("preprocess zip range, traits") using ac_it = eve::algo::aligned_ptr_iterator; using ai_it = eve::algo::aligned_ptr_iterator; - using zip_uc_it_ui_it = eve::algo::zip_iterator; + using zip_uc_it_ui_it = eve::algo::views::zip_iterator; alignas(sizeof(std::int8_t) * N{}()) std::array c; alignas(sizeof(std::uint32_t) * N{}()) std::array i; @@ -121,7 +120,7 @@ TTS_CASE("preprocess zip range, traits") // zip_u_u { - auto zipped = eve::algo::zip(c, i); + auto zipped = eve::algo::views::zip(c, i); auto processed = eve::algo::preprocess_range(eve::algo::traits{}, zipped); eve::algo::traits expected_traits{ }; @@ -133,9 +132,9 @@ TTS_CASE("preprocess zip range, traits") // first array aligned { - using zip_ac_it_ui_it = eve::algo::zip_iterator; + using zip_ac_it_ui_it = eve::algo::views::zip_iterator; - auto zipped = eve::algo::zip(af_ul(c), i); + auto zipped = eve::algo::views::zip(af_ul(c), i); auto processed = eve::algo::preprocess_range(eve::algo::traits{}, zipped); eve::algo::traits expected_traits{ eve::algo::no_aligning }; @@ -147,9 +146,9 @@ TTS_CASE("preprocess zip range, traits") // second array aligned { - using zip_uc_it_ai_it = eve::algo::zip_iterator; + using zip_uc_it_ai_it = eve::algo::views::zip_iterator; - auto zipped = eve::algo::zip(c, af_ul(i)); + auto zipped = eve::algo::views::zip(c, af_ul(i)); auto processed = eve::algo::preprocess_range(eve::algo::traits{}, zipped); eve::algo::traits expected_traits{ eve::algo::no_aligning }; @@ -161,9 +160,9 @@ TTS_CASE("preprocess zip range, traits") // first array, both ends aligned { - using zip_ac_it_ui_it = eve::algo::zip_iterator; + using zip_ac_it_ui_it = eve::algo::views::zip_iterator; - auto zipped = eve::algo::zip(af_al(c), i); + auto zipped = eve::algo::views::zip(af_al(c), i); auto processed = eve::algo::preprocess_range(eve::algo::traits{}, zipped); eve::algo::traits expected_traits{ eve::algo::no_aligning, eve::algo::divisible_by_cardinal }; @@ -177,10 +176,10 @@ TTS_CASE("preprocess zip range, traits") { eve::algo::traits tr{ eve::algo::force_cardinal<2> }; - auto zipped = eve::algo::zip(c, i); + auto zipped = eve::algo::views::zip(c, i); auto processed = eve::algo::preprocess_range(tr, zipped); TTS_TYPE_IS(decltype(processed.traits()), decltype(tr)); - TTS_TYPE_IS(decltype(processed.begin())::cardinal, eve::fixed<2>); + TTS_TYPE_IS(eve::algo::iterator_cardinal_t, eve::fixed<2>); } // divisible by cardinal @@ -188,13 +187,13 @@ TTS_CASE("preprocess zip range, traits") eve::algo::traits tr{ eve::algo::divisible_by_cardinal }; { - auto zipped = eve::algo::zip(c, i); + auto zipped = eve::algo::views::zip(c, i); auto processed = eve::algo::preprocess_range(tr, zipped); TTS_TYPE_IS(decltype(processed.traits()), decltype(tr)); } } -} +}; TTS_CASE("preprocess zip range, common_type") { @@ -206,10 +205,10 @@ TTS_CASE("preprocess zip range, common_type") using N = eve::fixed>; using uc_it = eve::algo::unaligned_ptr_iterator; using ui_it = eve::algo::unaligned_ptr_iterator; - using conv_uc_it = eve::algo::converting_iterator; - using expected_it = eve::algo::zip_iterator; + using conv_uc_it = eve::algo::views::converting_iterator; + using expected_it = eve::algo::views::zip_iterator; - auto zipped = eve::algo::zip[eve::algo::common_type](c, i); + auto zipped = eve::algo::views::zip[eve::algo::common_type](c, i); auto processed = eve::algo::preprocess_range(eve::algo::traits{}, zipped); @@ -221,16 +220,15 @@ TTS_CASE("preprocess zip range, common_type") using N = eve::fixed<2>; using uc_it = eve::algo::unaligned_ptr_iterator; using ui_it = eve::algo::unaligned_ptr_iterator; - using conv_uc_it = eve::algo::converting_iterator; - using conv_ui_it = eve::algo::converting_iterator; - using expected_it = eve::algo::zip_iterator; + using conv_uc_it = eve::algo::views::converting_iterator; + using conv_ui_it = eve::algo::views::converting_iterator; + using expected_it = eve::algo::views::zip_iterator; - auto zipped = eve::algo::zip[eve::algo::force_type](c, i); + auto zipped = eve::algo::views::zip[eve::algo::force_type](c, i); auto processed = eve::algo::preprocess_range(eve::algo::traits{eve::algo::force_cardinal<2>}, zipped); TTS_TYPE_IS(decltype(processed.begin()), expected_it); TTS_TYPE_IS(decltype(processed.end()), expected_it); } - -} +}; diff --git a/test/unit/algo/range_ref.cpp b/test/unit/algo/range_ref.cpp index 0194489068..66b0a7ea58 100644 --- a/test/unit/algo/range_ref.cpp +++ b/test/unit/algo/range_ref.cpp @@ -19,4 +19,4 @@ TTS_CASE("rng_ref") TTS_TYPE_IS(decltype(eve::algo::range_ref(eve::algo::range_ref(v))), eve::algo::range_ref_wrapper>); TTS_TYPE_IS(decltype(eve::algo::range_ref(eve::algo::as_range(v.begin(), v.end()))), (eve::algo::as_range::iterator, std::vector::iterator>)); -} +}; diff --git a/test/unit/algo/traits.cpp b/test/unit/algo/traits.cpp index bd4da17c72..4239055236 100644 --- a/test/unit/algo/traits.cpp +++ b/test/unit/algo/traits.cpp @@ -30,7 +30,7 @@ TTS_CASE("eve.algo basic traits testing") TTS_CONSTEXPR_EXPECT(Traits::contains(eve::algo::divisible_by_cardinal)); }(divisible_by_cardinal); } -} +}; TTS_CASE("eve.algo defaulting") { @@ -56,19 +56,60 @@ TTS_CASE("eve.algo defaulting") TTS_TYPE_IS(decltype(expected), decltype(actual)); } -} +}; + +TTS_CASE("eve.algo.traits consider types") +{ + eve::algo::traits expected{ eve::algo::consider_types }; + { + eve::algo::traits tr; + eve::algo::traits def{eve::algo::consider_types}; + auto actual = eve::algo::default_to(tr, def); + TTS_TYPE_IS(decltype(expected), decltype(actual)); + } + { + eve::algo::traits tr{eve::algo::consider_types}; + eve::algo::traits def; + auto actual = eve::algo::default_to(tr, def); + TTS_TYPE_IS(decltype(expected), decltype(actual)); + } + { + eve::algo::traits tr{eve::algo::consider_types}; + eve::algo::traits def{eve::algo::consider_types}; + auto actual = eve::algo::default_to(tr, def); + TTS_TYPE_IS(decltype(expected), decltype(actual)); + } + { + eve::algo::traits tr; + TTS_TYPE_IS((eve::algo::get_types_to_consider_for), kumi::tuple); + } + { + eve::algo::traits tr{eve::algo::consider_types}; + TTS_TYPE_IS((eve::algo::get_types_to_consider_for), (kumi::tuple)); + } +}; TTS_CASE("eve.algo.traits, type and cardinal") { { eve::algo::traits tr; - TTS_TYPE_IS((eve::algo::iteration_cardinal_t), eve::fixed>); + TTS_TYPE_IS((eve::algo::iteration_cardinal_t), eve::fixed>); } { eve::algo::traits tr{eve::algo::force_cardinal<2>}; - TTS_TYPE_IS((eve::algo::iteration_cardinal_t), eve::fixed<2>); + TTS_TYPE_IS((eve::algo::iteration_cardinal_t), eve::fixed<2>); + } + { + eve::algo::traits tr{eve::algo::consider_types}; + TTS_TYPE_IS((eve::algo::iteration_cardinal_t), eve::fixed>); + } + { + eve::algo::traits tr; + eve::algo::traits big_step{eve::algo::force_cardinal<64>}; + eve::algo::traits tr2 = eve::algo::default_to(tr, big_step); + TTS_TYPE_IS((eve::algo::iteration_cardinal_t), eve::fixed<64>); } -} +}; // Funciton with traits support @@ -90,11 +131,12 @@ struct func_ : TraitsSupport inline constexpr auto func = eve::algo::function_with_traits; -TTS_CASE("eve.algo.support_traits") { +TTS_CASE("eve.algo.support_traits") +{ constexpr auto unroll = func[eve::algo::traits{eve::algo::unroll<2>}]; TTS_CONSTEXPR_EQUAL(unroll.get_unrolling(), 2); constexpr auto is_divisible = unroll[eve::algo::divisible_by_cardinal]; TTS_CONSTEXPR_EXPECT(is_divisible.is_divisible_by_cardinal()); TTS_CONSTEXPR_EQUAL(is_divisible.get_unrolling(), 2); -} +}; diff --git a/test/unit/algo/unalign.cpp b/test/unit/algo/unalign.cpp index 6cae9f9c56..a23f109b72 100644 --- a/test/unit/algo/unalign.cpp +++ b/test/unit/algo/unalign.cpp @@ -20,4 +20,4 @@ TTS_CASE("eve::algo::unaligned_t") TTS_TYPE_IS((eve::algo::unaligned_t>>), const int*); TTS_TYPE_IS((eve::algo::unaligned_t>>), (eve::algo::unaligned_ptr_iterator>)); -} +}; diff --git a/test/unit/algo/zip.cpp b/test/unit/algo/zip.cpp index 58720a50e8..9c8342fc27 100644 --- a/test/unit/algo/zip.cpp +++ b/test/unit/algo/zip.cpp @@ -8,7 +8,7 @@ #include "unit/algo/algo_test.hpp" -#include +#include #include @@ -17,11 +17,11 @@ TTS_CASE("zip iterators") std::vector v{1, 2, 3, 4}; std::vector c{'a', 'b', 'c', 'd'}; - eve::algo::zip_iterator f = eve::algo::zip(v.begin(), c.begin()); + eve::algo::views::zip_iterator f = eve::algo::views::zip(v.begin(), c.begin()); TTS_EQUAL(v.begin(), get<0>(f)); TTS_EQUAL(c.begin(), get<1>(f)); - eve::algo::zip_iterator l = eve::algo::zip(v.end(), c.end()); + eve::algo::views::zip_iterator l = eve::algo::views::zip(v.end(), c.end()); TTS_EQUAL(v.end(), get<0>(l)); TTS_EQUAL(c.end(), get<1>(l)); @@ -32,92 +32,91 @@ TTS_CASE("zip iterators") TTS_TYPE_IS(decltype(rng.end()), decltype(l)); }; - rng_test(eve::algo::zip(v, c)); - rng_test(eve::algo::zip(v, c.begin())); - rng_test(eve::algo::zip(v.begin(), c)); -} + rng_test(eve::algo::views::zip(v, c)); + rng_test(eve::algo::views::zip(v, c.begin())); + rng_test(eve::algo::views::zip(v.begin(), c)); +}; TTS_CASE("zip range, decomposition") { std::vector const v{1, 2, 3, 4}; std::vector c{'a', 'b', 'c', 'd'}; - auto zipped = eve::algo::zip(v, c); + auto zipped = eve::algo::views::zip(v, c); auto [cref_v, ref_c] = zipped; TTS_EQUAL(cref_v.begin(), v.begin()); TTS_EQUAL(cref_v.end(), v.end()); TTS_EQUAL(ref_c.begin(), c.begin()); TTS_EQUAL(ref_c.end(), c.end()); -} +}; TTS_CASE("zip common_type") { std::vector const v{1, 2, 3, 4}; std::vector c{'a', 'b', 'c', 'd'}; - auto expected = eve::algo::zip(v, eve::algo::convert(c, eve::as{})); + auto expected = eve::algo::views::zip(v, eve::algo::views::convert(c, eve::as{})); auto expected_f = expected.begin(); { - auto zipped = eve::algo::zip[eve::algo::common_type](v, c); + auto zipped = eve::algo::views::zip[eve::algo::common_type](v, c); TTS_TYPE_IS(decltype(zipped), decltype(expected)); - auto zipped_f = eve::algo::zip[eve::algo::common_type](v.begin(), c.begin()); + auto zipped_f = eve::algo::views::zip[eve::algo::common_type](v.begin(), c.begin()); TTS_EQUAL(zipped_f, expected_f); } { - auto zipped = eve::algo::zip(v, c)[eve::algo::common_type]; + auto zipped = eve::algo::views::zip(v, c)[eve::algo::common_type]; TTS_TYPE_IS(decltype(zipped), decltype(expected)); } -} +}; TTS_CASE("zip common_with_types") { std::vector const v{1, 2, 3, 4}; std::vector c{'a', 'b', 'c', 'd'}; - auto expected = eve::algo::zip(eve::algo::convert(v, eve::as{}), - eve::algo::convert(c, eve::as{})); + auto expected = eve::algo::views::zip(eve::algo::views::convert(v, eve::as{}), + eve::algo::views::convert(c, eve::as{})); auto expected_f = expected.begin(); { - auto zipped = eve::algo::zip[eve::algo::common_with_types](v, c); + auto zipped = eve::algo::views::zip[eve::algo::common_with_types](v, c); TTS_TYPE_IS(decltype(zipped), decltype(expected)); - auto zipped_f = eve::algo::zip[eve::algo::common_with_types](v.begin(), c.begin()); + auto zipped_f = eve::algo::views::zip[eve::algo::common_with_types](v.begin(), c.begin()); TTS_EQUAL(zipped_f, expected_f); } { - auto zipped = eve::algo::zip(v, c)[eve::algo::common_with_types]; + auto zipped = eve::algo::views::zip(v, c)[eve::algo::common_with_types]; TTS_TYPE_IS(decltype(zipped), decltype(expected)); } -} - +}; TTS_CASE("zip force_type") { std::vector const v{1, 2, 3, 4}; std::vector c{'a', 'b', 'c', 'd'}; - auto expected = eve::algo::zip(eve::algo::convert(v, eve::as{}), - eve::algo::convert(c, eve::as{})); + auto expected = eve::algo::views::zip(eve::algo::views::convert(v, eve::as{}), + eve::algo::views::convert(c, eve::as{})); auto expected_f = expected.begin(); { - auto zipped = eve::algo::zip[eve::algo::force_type](v, c); + auto zipped = eve::algo::views::zip[eve::algo::force_type](v, c); TTS_TYPE_IS(decltype(zipped), decltype(expected)); - auto zipped_f = eve::algo::zip[eve::algo::force_type](v.begin(), c.begin()); + auto zipped_f = eve::algo::views::zip[eve::algo::force_type](v.begin(), c.begin()); TTS_EQUAL(zipped_f, expected_f); } { - auto zipped = eve::algo::zip(v, c)[eve::algo::force_type]; + auto zipped = eve::algo::views::zip(v, c)[eve::algo::force_type]; TTS_TYPE_IS(decltype(zipped), decltype(expected)); } -} +}; diff --git a/test/unit/algo/zip_iterator.cpp b/test/unit/algo/zip_iterator.cpp index 05e0fcc8cc..ed40576dd4 100644 --- a/test/unit/algo/zip_iterator.cpp +++ b/test/unit/algo/zip_iterator.cpp @@ -8,7 +8,7 @@ #include "unit/algo/algo_test.hpp" -#include +#include #include @@ -23,8 +23,8 @@ TTS_CASE("zip_iterator for not eve iterators") std::array f { 1, 2, 3, 4}; using u_f = eve::algo::unaligned_ptr_iterator>; - eve::algo::zip_iterator zf{ c.begin(), v.begin(), u_f{f.begin()} }; - eve::algo::zip_iterator zl{ c.end(), v.end(), u_f{f.end()} }; + eve::algo::views::zip_iterator zf{ c.begin(), v.begin(), u_f{f.begin()} }; + eve::algo::views::zip_iterator zl{ c.end(), v.end(), u_f{f.end()} }; kumi::tuple twos{std::uint8_t{2}, int{2}, float{2.0}}; @@ -55,18 +55,17 @@ TTS_CASE("zip_iterator for not eve iterators") TTS_EQUAL((i-- - zf), 1); TTS_EQUAL(i, zf); } -} +}; TTS_CASE("zip_iterator for not eve iterators, unaligned") { using a_p = eve::aligned_ptr; using u_p = int*; - using expected = eve::algo::zip_iterator; - using actual = eve::algo::unaligned_t>; + using expected = eve::algo::views::zip_iterator; + using actual = eve::algo::unaligned_t>; TTS_TYPE_IS(expected, actual); -} - +}; TTS_CASE("zip_iterator, sanity check, types test") { @@ -75,20 +74,20 @@ TTS_CASE("zip_iterator, sanity check, types test") using unaligned_short = eve::algo::unaligned_ptr_iterator>; using aligned_short = eve::algo::aligned_ptr_iterator >; - using zip_a_a = eve::algo::zip_iterator; - using zip_u_a = eve::algo::zip_iterator; - using zip_a_u = eve::algo::zip_iterator; - using zip_u_u = eve::algo::zip_iterator; + using zip_a_a = eve::algo::views::zip_iterator; + using zip_u_a = eve::algo::views::zip_iterator; + using zip_a_u = eve::algo::views::zip_iterator; + using zip_u_u = eve::algo::views::zip_iterator; using aligned_float_4 = eve::algo::aligned_ptr_iterator >; using unaligned_short_4 = eve::algo::unaligned_ptr_iterator>; - using zip_a_u_4 = eve::algo::zip_iterator; + using zip_a_u_4 = eve::algo::views::zip_iterator; - using wide_value_type = eve::wide, eve::fixed<8>>; + using wv_type = eve::wide, eve::fixed<8>>; // CTAD - eve::algo::zip_iterator zi {unaligned_float{}, aligned_short{}}; + eve::algo::views::zip_iterator zi {unaligned_float{}, aligned_short{}}; TTS_TYPE_IS(decltype(zi), zip_u_a); // Unaligned @@ -115,14 +114,14 @@ TTS_CASE("zip_iterator, sanity check, types test") TTS_TYPE_IS(decltype(zip_a_u{} - zip_u_u{}), std::ptrdiff_t); // Load - TTS_TYPE_IS(decltype(eve::load(zip_a_u{})), wide_value_type); - TTS_TYPE_IS(decltype(eve::load[eve::ignore_first(2)](zip_a_u{})), wide_value_type); - TTS_TYPE_IS(decltype(eve::load[eve::ignore_first(2).else_(wide_value_type{})](zip_a_u{})), wide_value_type); + TTS_TYPE_IS(decltype(eve::load(zip_a_u{})), wv_type); + TTS_TYPE_IS(decltype(eve::load[eve::ignore_first(2)](zip_a_u{})), wv_type); + TTS_TYPE_IS(decltype(eve::load[eve::ignore_first(2).else_(wv_type{})](zip_a_u{})), wv_type); // Store - TTS_TYPE_IS(decltype(eve::store(wide_value_type{}, zip_a_u{})), void); - TTS_TYPE_IS(decltype(eve::store[eve::ignore_first(2)](wide_value_type{}, zip_a_u{})), void); - TTS_TYPE_IS(decltype(eve::store[eve::ignore_first(2).else_(wide_value_type{})](wide_value_type{}, zip_a_u{})), void); + TTS_TYPE_IS(decltype(eve::store(wv_type{}, zip_a_u{})), void); + TTS_TYPE_IS(decltype(eve::store[eve::ignore_first(2)](wv_type{}, zip_a_u{})), void); + TTS_TYPE_IS(decltype(eve::store[eve::ignore_first(2).else_(wv_type{})](wv_type{}, zip_a_u{})), void); // Is readable iterator { @@ -136,7 +135,7 @@ TTS_CASE("zip_iterator, sanity check, types test") // sentinel for mismatching TTS_CONSTEXPR_EXPECT((eve::algo::sentinel_for)); TTS_CONSTEXPR_EXPECT((eve::algo::sentinel_for)); -} +}; EVE_TEST_TYPES("Check zip_iterator", algo_test::selected_types) (eve::as) @@ -167,10 +166,11 @@ EVE_TEST_TYPES("Check zip_iterator", algo_test::selected_types) auto replace = [&](auto v, auto ignore) { return eve::replace_ignored(v, ignore, zeroes); }; auto run_test_one_pair = [&](auto f1, auto f2, auto f3, auto l1) { - eve::algo::zip_iterator f {f1, f2, f3}; - eve::algo::zip_iterator l = f + (l1 - f1); + eve::algo::views::zip_iterator f {f1, f2, f3}; + eve::algo::views::zip_iterator l = f + (l1 - f1); algo_test::iterator_sentinel_test(f, l, values, replace); algo_test::writeable_readable_iterator(f, values, replace); + algo_test::iterator_supports_compress(f, values, replace); }; eve::algo::unaligned_ptr_iterator u_f_1{data_1.begin()}; diff --git a/test/unit/api/regular/conditional.cpp b/test/unit/api/regular/conditional.cpp index 53a9cc4f80..6451eb39f5 100644 --- a/test/unit/api/regular/conditional.cpp +++ b/test/unit/api/regular/conditional.cpp @@ -18,13 +18,16 @@ #if defined(SPY_SIMD_IS_X86_AVX512) template void check_conditional_bits() { - using m_t = typename eve::logical::storage_type::type; - m_t bits_mask = m_t(~eve::detail::set_lower_n_bits(Type::size())); - - for(std::ptrdiff_t i = 0;i <= Type::size();i++) + if constexpr( !eve::has_aggregated_abi_v ) { - auto ignore_mask = Cond(i).mask(eve::as()).storage().value; - TTS_EQUAL( m_t(ignore_mask & bits_mask), m_t(0) ); + using m_t = typename eve::logical::storage_type::type; + m_t bits_mask = m_t(~eve::detail::set_lower_n_bits(Type::size())); + + for(std::ptrdiff_t i = 0;i <= Type::size();i++) + { + auto ignore_mask = Cond(i).mask(eve::as()).storage().value; + TTS_EQUAL( m_t(ignore_mask & bits_mask), m_t(0) ); + } } } #endif @@ -46,10 +49,11 @@ EVE_TEST_TYPES( "ignore_all behavior", eve::test::simd::all_types) TTS_EQUAL( (if_else(ignore_all,type(42), type(69))) , type(69) ); #if defined(SPY_SIMD_IS_X86_AVX512) - TTS_EQUAL( ignore_all.mask(as()).storage().value, 0U ); + if constexpr( !eve::has_aggregated_abi_v ) + TTS_EQUAL( ignore_all.mask(as()).storage().value, 0U ); #endif - // For small wide, checks we don't have spurious true in the outside values + // For half_c wide, checks we don't have spurious true in the outside values using abi = typename type::abi_type; if constexpr( abi::is_wide_logical && !eve::use_complete_storage ) { @@ -82,13 +86,16 @@ EVE_TEST_TYPES( "ignore_none behavior", eve::test::simd::all_types) TTS_EQUAL( (if_else(ignore_none,type(42), type(69))) , type(42) ); #if defined(SPY_SIMD_IS_X86_AVX512) - using m_t = typename eve::logical::storage_type::type; - TTS_EQUAL ( ignore_none.mask(as()).storage().value - , eve::detail::set_lower_n_bits(type::size()) - ); + if constexpr( !eve::has_aggregated_abi_v ) + { + using m_t = typename eve::logical::storage_type::type; + TTS_EQUAL ( ignore_none.mask(as()).storage().value + , eve::detail::set_lower_n_bits(type::size()) + ); + } #endif - // For small wide, checks we don't have spurious true in the outside values + // For half_c wide, checks we don't have spurious true in the outside values using abi = typename type::abi_type; if constexpr( abi::is_wide_logical && !eve::use_complete_storage ) { @@ -138,7 +145,7 @@ EVE_TEST_TYPES( "keep_first behavior", eve::test::simd::all_types) check_conditional_bits(); #endif - // For small wide, checks we don't have spurious true in the outside values + // For half_c wide, checks we don't have spurious true in the outside values if constexpr( type::abi_type::is_wide_logical && !eve::use_complete_storage ) { for(std::ptrdiff_t i = 0;i <= type::size();i++) @@ -191,7 +198,7 @@ EVE_TEST_TYPES( "ignore_last behavior", eve::test::simd::all_types) check_conditional_bits(); #endif - // For small wide, checks we don't have spurious true in the outside values + // For half_c wide, checks we don't have spurious true in the outside values if constexpr( type::abi_type::is_wide_logical && !eve::use_complete_storage ) { for(std::ptrdiff_t i = 0;i <= type::size();i++) @@ -244,7 +251,7 @@ EVE_TEST_TYPES( "keep_last behavior", eve::test::simd::all_types) check_conditional_bits(); #endif - // For small wide, checks we don't have spurious true in the outside values + // For half_c wide, checks we don't have spurious true in the outside values if constexpr( type::abi_type::is_wide_logical && !eve::use_complete_storage ) { for(std::ptrdiff_t i = 0;i <= type::size();i++) @@ -299,7 +306,7 @@ EVE_TEST_TYPES( "ignore_first behavior", eve::test::simd::all_types) check_conditional_bits(); #endif - // For small wide, checks we don't have spurious true in the outside values + // For half_c wide, checks we don't have spurious true in the outside values if constexpr( type::abi_type::is_wide_logical && !eve::use_complete_storage ) { for(std::ptrdiff_t i = 0;i <= type::size();i++) @@ -348,17 +355,20 @@ EVE_TEST_TYPES( "keep_between behavior", eve::test::simd::all_types) TTS_EQUAL( (if_else(keep_between(fi,li),value, type(69))), ref); #if defined(SPY_SIMD_IS_X86_AVX512) - using m_t = typename eve::logical::storage_type::type; - m_t bits_mask = m_t(~eve::detail::set_lower_n_bits(type::size())); + if constexpr( !eve::has_aggregated_abi_v ) + { + using m_t = typename eve::logical::storage_type::type; + m_t bits_mask = m_t(~eve::detail::set_lower_n_bits(type::size())); - auto ignore_mask = keep_between(fi,li).mask(eve::as()).storage().value; - TTS_EQUAL( m_t(ignore_mask & bits_mask), m_t(0) ); + auto ignore_mask = keep_between(fi,li).mask(eve::as()).storage().value; + TTS_EQUAL( m_t(ignore_mask & bits_mask), m_t(0) ); + } #endif } } } - // For small wide, checks we don't have spurious true in the outside values + // For half_c wide, checks we don't have spurious true in the outside values if constexpr( type::abi_type::is_wide_logical && !eve::use_complete_storage ) { for(std::ptrdiff_t i = 0;i <= type::size();i++) @@ -413,18 +423,21 @@ EVE_TEST_TYPES( "ignore_first/last behavior", eve::test::simd::all_types) TTS_EQUAL( (if_else(ignore_first(fi) && ignore_last(li),value, type(69))), ref); #if defined(SPY_SIMD_IS_X86_AVX512) - using m_t = typename eve::logical::storage_type::type; - m_t bits_mask = m_t(~eve::detail::set_lower_n_bits(type::size())); + if constexpr( !eve::has_aggregated_abi_v ) + { + using m_t = typename eve::logical::storage_type::type; + m_t bits_mask = m_t(~eve::detail::set_lower_n_bits(type::size())); - auto ignore_mask = (ignore_first(fi) && ignore_last(li)).mask(eve::as()).storage().value; - TTS_EQUAL( m_t(ignore_mask & bits_mask), m_t(0) ); + auto ignore_mask = (ignore_first(fi) && ignore_last(li)).mask(eve::as()).storage().value; + TTS_EQUAL( m_t(ignore_mask & bits_mask), m_t(0) ); + } #endif } } } - // For small wide, checks we don't have spurious true in the outside values + // For half_c wide, checks we don't have spurious true in the outside values if constexpr( type::abi_type::is_wide_logical && !eve::use_complete_storage ) { for(std::ptrdiff_t i = 0;i <= type::size();i++) diff --git a/test/unit/api/regular/logicals.cpp b/test/unit/api/regular/logicals.cpp index a708a71197..f3fb0bd327 100644 --- a/test/unit/api/regular/logicals.cpp +++ b/test/unit/api/regular/logicals.cpp @@ -37,6 +37,7 @@ EVE_TEST( "Check behavior of bitwise operators on eve::wide" ) ) (T a0, T a1) + { TTS_IEEE_EQUAL( (a0 && a1), T([&](auto i, auto) { return eve::logical_and(a0.get(i), a1.get(i)); })); TTS_IEEE_EQUAL( (a0 || a1), T([&](auto i, auto) { return eve::logical_or (a0.get(i), a1.get(i)); })); diff --git a/test/unit/api/regular/pattern.cpp b/test/unit/api/regular/pattern.cpp index bc4b2f59da..c525f820f1 100644 --- a/test/unit/api/regular/pattern.cpp +++ b/test/unit/api/regular/pattern.cpp @@ -13,7 +13,7 @@ TTS_CASE("Check pattern properties checks") { using eve::na_; - TTS_CONSTEXPR_EQUAL ( (eve::pattern<0,1,2,3>.size()), 4 ); + TTS_CONSTEXPR_EQUAL ( (eve::pattern<0,1,2,3>.size()), 4ull ); TTS_CONSTEXPR_EXPECT ( (eve::pattern.has_zeros())); TTS_CONSTEXPR_EXPECT ( (eve::pattern< 0,na_, 2, 3>.has_zeros())); @@ -24,7 +24,7 @@ TTS_CASE("Check pattern properties checks") TTS_CONSTEXPR_EXPECT ( (eve::pattern< 0,na_, 2,na_>.validate(4)) ); TTS_CONSTEXPR_EXPECT ( (eve::pattern< 0, 1, 2, 3>.validate(4)) ); TTS_CONSTEXPR_EXPECT_NOT( (eve::pattern< 0, 1, 2, 4>.validate(4)) ); -} +}; TTS_CASE("Check lambda-pattern properties checks") { @@ -32,14 +32,14 @@ TTS_CASE("Check lambda-pattern properties checks") constexpr auto f = [](auto i, auto) { return i%2 ? na_ : i/2; }; - TTS_CONSTEXPR_EQUAL ( eve::fix_pattern<4>(f).size(), 4 ); + TTS_CONSTEXPR_EQUAL ( eve::fix_pattern<4>(f).size(), 4ull ); TTS_CONSTEXPR_EXPECT( eve::fix_pattern<4>(f).has_zeros() ); TTS_CONSTEXPR_EXPECT( eve::fix_pattern<4>(f).validate(4) ); - TTS_CONSTEXPR_EQUAL ( eve::fix_pattern<8>(f).size(), 8 ); + TTS_CONSTEXPR_EQUAL ( eve::fix_pattern<8>(f).size(), 8ull ); TTS_CONSTEXPR_EXPECT( eve::fix_pattern<8>(f).has_zeros()); TTS_CONSTEXPR_EXPECT( eve::fix_pattern<8>(f).validate(8)); -} +}; TTS_CASE("Check pattern random access behavior") { @@ -49,7 +49,7 @@ TTS_CASE("Check pattern random access behavior") TTS_CONSTEXPR_EQUAL(p(1,4), 1); TTS_CONSTEXPR_EQUAL(p(2,4), 2); TTS_CONSTEXPR_EQUAL(p(3,4), 3); -} +}; TTS_CASE("Check lambda-pattern random access behavior") { @@ -61,7 +61,7 @@ TTS_CASE("Check lambda-pattern random access behavior") TTS_CONSTEXPR_EQUAL(eve::fix_pattern<4>(f)(0,4), 0); TTS_CONSTEXPR_EQUAL(eve::fix_pattern<4>(f)(2,4), 1); TTS_CONSTEXPR_EQUAL(eve::fix_pattern<4>(f)(3,4),na_); -} +}; TTS_CASE("Check pattern comparison operators") { @@ -71,7 +71,7 @@ TTS_CASE("Check pattern comparison operators") TTS_CONSTEXPR_EXPECT ( (eve::pattern<0,0,1,1,2,2,3,3> ).under(3) ); TTS_CONSTEXPR_EXPECT ( (eve::pattern<4,5,6,7,8,9,10,11>).strictly_over(2) ); TTS_CONSTEXPR_EXPECT ( (eve::pattern<4,5,6,7,8,9,10,11>).over(4) ); -} +}; TTS_CASE("Check lambda-pattern comparison operators") { @@ -86,7 +86,7 @@ TTS_CASE("Check lambda-pattern comparison operators") TTS_CONSTEXPR_EXPECT( t.strictly_over(2) ); TTS_CONSTEXPR_EXPECT( t.over(4) ); -} +}; TTS_CASE("Check pattern_clamp effects") { @@ -96,7 +96,7 @@ TTS_CASE("Check pattern_clamp effects") TTS_CONSTEXPR_EQUAL ( eve::pattern_clamp<2>(q), (eve::pattern<0,1>) ); TTS_CONSTEXPR_EQUAL ( eve::pattern_clamp<4>(q), (eve::pattern<0,1,2,3>) ); TTS_CONSTEXPR_EQUAL ( eve::pattern_clamp<8>(q), (eve::pattern<0,1,2,3,4,5,6,7>) ); -} +}; TTS_CASE("Check pattern_view effects") { @@ -115,4 +115,4 @@ TTS_CASE("Check pattern_view effects") TTS_CONSTEXPR_EQUAL ( (eve::pattern_view<2,6,8>(q)), (eve::pattern<2,3,4,5>) ); TTS_CONSTEXPR_EQUAL ( (eve::pattern_view<3,7,8>(q)), (eve::pattern<3,4,5,6>) ); TTS_CONSTEXPR_EQUAL ( (eve::pattern_view<4,8,8>(q)), (eve::pattern<4,5,6,7>) ); -} +}; diff --git a/test/unit/api/regular/replace.cpp b/test/unit/api/regular/replace.cpp index 3cf69b368a..f376127da7 100644 --- a/test/unit/api/regular/replace.cpp +++ b/test/unit/api/regular/replace.cpp @@ -113,3 +113,24 @@ EVE_TEST( "Check behavior of replace_ignored(keep_between)" } } }; + +EVE_TEST( "Check behavior of replace_ignored(ignore_extrema)" + , eve::test::simd::all_types + , eve::test::generate ( eve::test::ramp(0) ) + ) +(T data) +{ + using eve::ignore_extrema; + + for(int fi = 0;fi < T::size();fi++) + { + for(int li = 0;li <= T::size();li++) + { + if(fi+li <= T::size()) + { + T replacement = [&](auto i, auto) { return (i >= fi && i < (T::size()-li)) ? data.get(i) : 10*i; }; + TTS_EQUAL( eve::replace_ignored(data,ignore_extrema(fi,li),replacement), replacement ); + } + } + } +}; diff --git a/test/unit/api/regular/shuffle/slide_right.cpp b/test/unit/api/regular/shuffle/slide_right.cpp index 9435666c65..25e5b3cf97 100644 --- a/test/unit/api/regular/shuffle/slide_right.cpp +++ b/test/unit/api/regular/shuffle/slide_right.cpp @@ -13,7 +13,7 @@ // slide_right test //================================================================================================== -EVE_TEST_TYPES("Check behavior of slide_right shuffle", eve::test::simd::all_types) +EVE_TEST_TYPES("Check behavior of slide_right shuffle", eve::test::simd::restricted::all_types) (eve::as) { T x{[](int i, int size) { return i - size; }}; @@ -59,4 +59,4 @@ TTS_CASE("Check behaviour of slide_right, 4 ints") TTS_EQUAL(shift_2, (eve::slide_right(x, y, eve::index<2>))); TTS_EQUAL(shift_3, (eve::slide_right(x, y, eve::index<3>))); TTS_EQUAL(shift_4, (eve::slide_right(x, y, eve::index<4>))); -} +}; diff --git a/test/unit/api/regular/swizzle/slide_right.cpp b/test/unit/api/regular/swizzle/slide_right.cpp index f810f2ae68..45b0c9d5fb 100644 --- a/test/unit/api/regular/swizzle/slide_right.cpp +++ b/test/unit/api/regular/swizzle/slide_right.cpp @@ -65,6 +65,6 @@ TTS_CASE( "Check behavior of smaller 8bytes with garbage" ) small_t expected{0, 5}; small_t actual = eve::slide_right(cast_down, eve::index<1>); TTS_EQUAL(expected, actual); -} +}; #endif // EVE_NO_SIMD diff --git a/test/unit/api/regular/swizzle/swap_adjacent_groups.cpp b/test/unit/api/regular/swizzle/swap_adjacent_groups.cpp index 4ffc60e4ef..fc43a13176 100644 --- a/test/unit/api/regular/swizzle/swap_adjacent_groups.cpp +++ b/test/unit/api/regular/swizzle/swap_adjacent_groups.cpp @@ -15,7 +15,7 @@ // SWAG test //================================================================================================== EVE_TEST( "Check behavior of SWAGs swizzle" - , eve::test::simd::all_types + , eve::test::simd::restricted::all_types , eve::test::generate ( eve::test::randoms(-50, 50) , eve::test::logicals(1, 2) ) diff --git a/test/unit/api/regular/wide.cpp b/test/unit/api/regular/wide.cpp index aca5d57735..d68ed3022f 100644 --- a/test/unit/api/regular/wide.cpp +++ b/test/unit/api/regular/wide.cpp @@ -117,7 +117,7 @@ EVE_TEST( "Check eve::wide::slice behavior" } else { - TTS_PASS("Type is too small to be split."); + TTS_PASS("Type is too half_c to be split."); } }; diff --git a/test/unit/api/tuple/CMakeLists.txt b/test/unit/api/tuple/CMakeLists.txt index a7504ed5ba..c1f09e08c9 100644 --- a/test/unit/api/tuple/CMakeLists.txt +++ b/test/unit/api/tuple/CMakeLists.txt @@ -21,3 +21,4 @@ make_unit("unit.api.tuple" swizzle/swap_adjacent_groups.cpp ) make_unit("unit.api.tuple" swizzle/zero.cpp ) make_unit("unit.api.tuple" shuffle/slide_right.cpp ) make_unit("unit.api.tuple" wide.cpp ) +make_unit("unit.api.tuple" zip.cpp ) diff --git a/test/unit/api/tuple/constant/as_value.cpp b/test/unit/api/tuple/constant/as_value.cpp index d9b0f749d7..467ad032e2 100644 --- a/test/unit/api/tuple/constant/as_value.cpp +++ b/test/unit/api/tuple/constant/as_value.cpp @@ -35,4 +35,4 @@ TTS_CASE("as_value for different tuples") actual = eve::as_value(expected, eve::as{}); TTS_EQUAL(expected, actual); } -} +}; diff --git a/test/unit/api/tuple/constant/zero.cpp b/test/unit/api/tuple/constant/zero.cpp index 49830227dd..c29ffb7ef7 100644 --- a/test/unit/api/tuple/constant/zero.cpp +++ b/test/unit/api/tuple/constant/zero.cpp @@ -19,7 +19,7 @@ TTS_CASE("zero for different tuples") TTS_TYPE_IS(udt::grid2d, decltype(eve::zero(eve::as{}))); TTS_TYPE_IS(eve::wide, decltype(eve::zero(eve::as>{}))); -} +}; TTS_CASE("copy zero tuple (armv-v7 bug)") { @@ -29,4 +29,4 @@ TTS_CASE("copy zero tuple (armv-v7 bug)") w_t src = eve::zero(eve::as{}); w_t cpy{src}; TTS_EQUAL(src, cpy); -} +}; diff --git a/test/unit/api/tuple/wide.cpp b/test/unit/api/tuple/wide.cpp index 6c847d7a38..c539fa203b 100644 --- a/test/unit/api/tuple/wide.cpp +++ b/test/unit/api/tuple/wide.cpp @@ -154,7 +154,7 @@ EVE_TEST_TYPES( "Check eve::wide::slice behavior", eve::test::scalar::all_types) } else { - TTS_PASS("Type is too small to be split."); + TTS_PASS("Type is too half_c to be split."); } }; diff --git a/test/unit/api/tuple/zip.cpp b/test/unit/api/tuple/zip.cpp new file mode 100644 index 0000000000..679c6f069d --- /dev/null +++ b/test/unit/api/tuple/zip.cpp @@ -0,0 +1,38 @@ +//================================================================================================== +/** + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +**/ +//================================================================================================== +#include "test.hpp" + +#include + +template +using tuple_t = kumi::tuple; + +//================================================================================================== +// Construct from multiple existing wides +//================================================================================================== +EVE_TEST_TYPES( "Check eve::zip", eve::test::simd::all_types) +(eve::as) +{ + using N = eve::fixed; + using e_t = eve::element_type_t; + using w_t = eve::wide, N>; + using s_t = typename eve::wide, N>::storage_type; + using w0_t = std::tuple_element_t<0, s_t>; + using w1_t = std::tuple_element_t<1, s_t>; + using w2_t = std::tuple_element_t<2, s_t>; + + w0_t w8{'z'}; + w1_t wt{e_t{45}}; + w2_t wd{13.37}; + + TTS_EQUAL(w_t(tuple_t{ 'z', e_t{45}, 13.37 }), eve::zip(eve::as>(), w8,wt,wd)); + TTS_EQUAL(w_t(tuple_t{ 'z', e_t{45}, 13.37 }), eve::zip(w8,wt,wd)); + + TTS_EQUAL((tuple_t{ 'z', e_t{45}, 13.37 }), eve::zip(eve::as>(), 'z', e_t{45}, 13.37)); + TTS_EQUAL((tuple_t{ 'z', e_t{45}, 13.37 }), eve::zip('z', e_t{45}, 13.37)); +}; diff --git a/test/unit/api/udt/CMakeLists.txt b/test/unit/api/udt/CMakeLists.txt index c4b8e19b0b..cc58cf88f5 100644 --- a/test/unit/api/udt/CMakeLists.txt +++ b/test/unit/api/udt/CMakeLists.txt @@ -10,3 +10,4 @@ make_unit("unit.api.udt" conditional.cpp ) make_unit("unit.api.udt" comparison.cpp ) make_unit("unit.api.udt" product_type.cpp ) make_unit("unit.api.udt" wide.cpp ) +make_unit("unit.api.udt" zip.cpp ) diff --git a/test/unit/api/udt/product_type.cpp b/test/unit/api/udt/product_type.cpp index 72c6e9853d..d97e3f73bc 100644 --- a/test/unit/api/udt/product_type.cpp +++ b/test/unit/api/udt/product_type.cpp @@ -24,7 +24,7 @@ TTS_CASE("like concet") TTS_CONSTEXPR_EXPECT_NOT((eve::like, char>)); { eve::like auto _ = wrapper{}; (void)_; } -} +}; struct supports_all_ops : eve::struct_support @@ -179,11 +179,11 @@ TTS_CASE("struct_support") TTS_CONSTEXPR_EXPECT_NOT(std::totally_ordered); // TTS_CONSTEXPR_EXPECT_NOT(supports_plus_test>); TTS_CONSTEXPR_EXPECT_NOT(std::totally_ordered>); -} +}; TTS_CASE("product_type construction") { supports_all_ops a{0, 1}; TTS_EQUAL(m0(a), 0); TTS_EQUAL(m1(a), 1); -} +}; diff --git a/test/unit/api/udt/wide.cpp b/test/unit/api/udt/wide.cpp index 7687d95cdd..cfa43c51bc 100644 --- a/test/unit/api/udt/wide.cpp +++ b/test/unit/api/udt/wide.cpp @@ -142,7 +142,7 @@ TTS_CASE( "Check eve::wide slice behavior") } else { - TTS_PASS("Type is too small to be split."); + TTS_PASS("Type is too half_c to be split."); } }; diff --git a/test/unit/api/udt/zip.cpp b/test/unit/api/udt/zip.cpp new file mode 100644 index 0000000000..7a9517028d --- /dev/null +++ b/test/unit/api/udt/zip.cpp @@ -0,0 +1,36 @@ +//================================================================================================== +/** + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +**/ +//================================================================================================== +#include "test.hpp" +#include "unit/api/udt/udt.hpp" + +#include + + +//================================================================================================== +// Construct from multiple existing wides +//================================================================================================== +EVE_TEST_TYPES( "Check eve::wide tuple like constructor", eve::test::simd::all_types) +(eve::as) +{ + constexpr auto sz = T::size(); + using wide_grid = eve::wide>; + + auto vp = [&](std::index_sequence) + { + return wide_grid( udt::grid2d{N,sz-N-1}...); + }( std::make_index_sequence()); + + using w0_t = std::tuple_element_t<0, wide_grid>; + using w1_t = std::tuple_element_t<1, wide_grid>; + + w0_t wx = [](auto i, auto ) { return i; }; + w1_t wy = [](auto i, auto c) { return c-1-i; }; + + TTS_EQUAL(vp, eve::zip(eve::as(),wx,wy) ); + TTS_EQUAL(vp.get(0), eve::zip(eve::as(),wx.get(0),wy.get(0)) ); +}; diff --git a/test/unit/arch/CMakeLists.txt b/test/unit/arch/CMakeLists.txt index febc2bc7ca..e5ba16d9c0 100644 --- a/test/unit/arch/CMakeLists.txt +++ b/test/unit/arch/CMakeLists.txt @@ -7,6 +7,7 @@ set( SOURCES is_supported.cpp current_api.cpp expected_cardinal.cpp + fundamental_cardinal.cpp ) make_unit( "unit.arch" ${SOURCES} ) diff --git a/test/unit/arch/current_api.cpp b/test/unit/arch/current_api.cpp index f16d643734..098b02cbbd 100644 --- a/test/unit/arch/current_api.cpp +++ b/test/unit/arch/current_api.cpp @@ -17,4 +17,4 @@ TTS_CASE("Check eve::current_api selection") TTS_NOT_EQUAL ( eve::current_api , spy::undefined_simd_ ); TTS_EXPECT ( eve::supports_simd ); # endif -} +}; diff --git a/test/unit/arch/expected_cardinal.cpp b/test/unit/arch/expected_cardinal.cpp index 5105dcbeab..c155a40a24 100644 --- a/test/unit/arch/expected_cardinal.cpp +++ b/test/unit/arch/expected_cardinal.cpp @@ -14,7 +14,7 @@ TTS_CASE("Check for 64 bits ABI expected cardinal") TTS_EQUAL( (eve::expected_cardinal_v), 2); TTS_EQUAL( (eve::expected_cardinal_v), 4); TTS_EQUAL( (eve::expected_cardinal_v), 8); -} +}; TTS_CASE("Check for 128 bits ABI expected cardinal") { @@ -37,7 +37,7 @@ TTS_CASE("Check for 128 bits ABI expected cardinal") TTS_EQUAL( (eve::expected_cardinal_v), 4 ); TTS_EQUAL( (eve::expected_cardinal_v), 8 ); TTS_EQUAL( (eve::expected_cardinal_v), 16 ); -} +}; TTS_CASE("Check for 256 bits ABI expected cardinal") { @@ -45,7 +45,7 @@ TTS_CASE("Check for 256 bits ABI expected cardinal") TTS_EQUAL( (eve::expected_cardinal_v), 8 ); TTS_EQUAL( (eve::expected_cardinal_v), 16 ); TTS_EQUAL( (eve::expected_cardinal_v), 32 ); -} +}; TTS_CASE("Check for 512 bits ABI expected cardinal") { @@ -53,4 +53,4 @@ TTS_CASE("Check for 512 bits ABI expected cardinal") TTS_EQUAL( (eve::expected_cardinal_v), 16 ); TTS_EQUAL( (eve::expected_cardinal_v), 32 ); TTS_EQUAL( (eve::expected_cardinal_v), 64 ); -} +}; diff --git a/test/unit/arch/fundamental_cardinal.cpp b/test/unit/arch/fundamental_cardinal.cpp new file mode 100644 index 0000000000..4722e59858 --- /dev/null +++ b/test/unit/arch/fundamental_cardinal.cpp @@ -0,0 +1,57 @@ +//================================================================================================== +/** + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +**/ +//================================================================================================== +#include "test.hpp" +#include +#include + +TTS_CASE("Check for 64 bits ABI fundamental cardinal") +{ + TTS_EQUAL( (eve::fundamental_cardinal_v), 1); + TTS_EQUAL( (eve::fundamental_cardinal_v), 2); + TTS_EQUAL( (eve::fundamental_cardinal_v), 4); + TTS_EQUAL( (eve::fundamental_cardinal_v), 8); +}; + +TTS_CASE("Check for 128 bits ABI fundamental cardinal") +{ + TTS_EQUAL( (eve::fundamental_cardinal_v), 1); + TTS_EQUAL( (eve::fundamental_cardinal_v), 2); + TTS_EQUAL( (eve::fundamental_cardinal_v), 4); + TTS_EQUAL( (eve::fundamental_cardinal_v), 8); + + TTS_EQUAL( (eve::fundamental_cardinal_v), 2 ); + TTS_EQUAL( (eve::fundamental_cardinal_v), 4 ); + TTS_EQUAL( (eve::fundamental_cardinal_v), 8 ); + TTS_EQUAL( (eve::fundamental_cardinal_v), 16 ); + + TTS_EQUAL( (eve::fundamental_cardinal_v), 2 ); + TTS_EQUAL( (eve::fundamental_cardinal_v), 4 ); + TTS_EQUAL( (eve::fundamental_cardinal_v), 8 ); + TTS_EQUAL( (eve::fundamental_cardinal_v), 16 ); + + TTS_EQUAL( (eve::fundamental_cardinal_v), 2 ); + TTS_EQUAL( (eve::fundamental_cardinal_v), 4 ); + TTS_EQUAL( (eve::fundamental_cardinal_v), 8 ); + TTS_EQUAL( (eve::fundamental_cardinal_v), 16 ); +}; + +TTS_CASE("Check for 256 bits ABI fundamental cardinal") +{ + TTS_EQUAL( (eve::fundamental_cardinal_v), 2 ); + TTS_EQUAL( (eve::fundamental_cardinal_v), 4 ); + TTS_EQUAL( (eve::fundamental_cardinal_v), 8 ); + TTS_EQUAL( (eve::fundamental_cardinal_v), 16 ); +}; + +TTS_CASE("Check for 512 bits ABI fundamental cardinal") +{ + TTS_EQUAL( (eve::fundamental_cardinal_v), 2 ); + TTS_EQUAL( (eve::fundamental_cardinal_v), 4 ); + TTS_EQUAL( (eve::fundamental_cardinal_v), 8 ); + TTS_EQUAL( (eve::fundamental_cardinal_v), 16 ); +}; diff --git a/test/unit/arch/is_supported.cpp b/test/unit/arch/is_supported.cpp index 9a058562d0..ab712b967c 100644 --- a/test/unit/arch/is_supported.cpp +++ b/test/unit/arch/is_supported.cpp @@ -58,7 +58,7 @@ TTS_CASE("Static detections of API") std::cout << "\n"; TTS_PASS("All static detections - done"); -} +}; TTS_CASE("Dynamic detections of API") { @@ -89,4 +89,4 @@ TTS_CASE("Dynamic detections of API") std::cout << "ASIMD : " << std::boolalpha << eve::is_supported(eve::asimd) << "\n"; TTS_PASS("All dynamic detections - done"); -} +}; diff --git a/test/unit/constant/as_value.cpp b/test/unit/constant/as_value.cpp index 44db4f1419..5e8b99e213 100644 --- a/test/unit/constant/as_value.cpp +++ b/test/unit/constant/as_value.cpp @@ -13,74 +13,73 @@ #include #include -EVE_TEST_TYPES( "Check behavior of as_value", eve::test::simd::all_types) +EVE_TEST_TYPES( "Check behavior of arithmetic as_value", eve::test::simd::all_types) (eve::as) { + using e_t = eve::element_type_t; + e_t max_value = std::numeric_limits::max(); + { - T expected{0}; - T actual = eve::as_value(eve::zero, eve::as{}); + T expected{max_value}; + T actual = eve::as_value(eve::valmax, eve::as{}); TTS_EQUAL(expected, actual); - actual = eve::as_value(0, eve::as{}); + actual = eve::as_value(max_value, eve::as{}); TTS_EQUAL(expected, actual); actual = eve::as_value(expected, eve::as{}); TTS_EQUAL(expected, actual); } { - using U = eve::logical; - U expected{true}; - U actual = eve::as_value(eve::true_, eve::as{}); - TTS_EQUAL(expected, actual); - actual = eve::as_value(true, eve::as{}); + e_t expected{max_value}; + e_t actual = eve::as_value(eve::valmax, eve::as{}); TTS_EQUAL(expected, actual); - actual = eve::as_value(expected, eve::as{}); + actual = eve::as_value(max_value, eve::as{}); TTS_EQUAL(expected, actual); } { - using U = eve::element_type_t; - U expected{0}; - U actual = eve::as_value(eve::zero, eve::as{}); + T expected{0}; + T actual = eve::as_value(eve::zero, eve::as{}); TTS_EQUAL(expected, actual); - actual = eve::as_value(0, eve::as{}); + actual = eve::as_value(0, eve::as{}); TTS_EQUAL(expected, actual); - actual = eve::as_value(expected, eve::as{}); + actual = eve::as_value(expected, eve::as{}); TTS_EQUAL(expected, actual); } { - using U = eve::logical>; - U expected{true}; - U actual = eve::as_value(eve::true_, eve::as{}); + e_t expected{0}; + e_t actual = eve::as_value(eve::zero, eve::as{}); TTS_EQUAL(expected, actual); - actual = eve::as_value(true, eve::as{}); + actual = eve::as_value(0, eve::as{}); TTS_EQUAL(expected, actual); - actual = eve::as_value(expected, eve::as{}); + actual = eve::as_value(expected, eve::as{}); TTS_EQUAL(expected, actual); } }; -EVE_TEST_TYPES( "Check behavior of as_value, val max for wides", eve::test::simd::all_types) +EVE_TEST_TYPES( "Check behavior of logical as_value", eve::test::simd::restricted::all_types) (eve::as) { - using e_t = eve::element_type_t; - e_t max_value = std::numeric_limits::max(); - { - T expected{max_value}; - T actual = eve::as_value(eve::valmax, eve::as{}); + using U = eve::logical; + U expected{true}; + U actual = eve::as_value(eve::true_, eve::as{}); TTS_EQUAL(expected, actual); - actual = eve::as_value(max_value, eve::as{}); + actual = eve::as_value(true, eve::as{}); TTS_EQUAL(expected, actual); - actual = eve::as_value(expected, eve::as{}); + actual = eve::as_value(expected, eve::as{}); TTS_EQUAL(expected, actual); } { - e_t expected{max_value}; - e_t actual = eve::as_value(eve::valmax, eve::as{}); + using U = eve::logical>; + U expected{true}; + U actual = eve::as_value(eve::true_, eve::as{}); TTS_EQUAL(expected, actual); - actual = eve::as_value(max_value, eve::as{}); + actual = eve::as_value(true, eve::as{}); + TTS_EQUAL(expected, actual); + actual = eve::as_value(expected, eve::as{}); TTS_EQUAL(expected, actual); } }; diff --git a/test/unit/internals/aggregation.cpp b/test/unit/internals/aggregation.cpp index 9fdf86ebd3..8a767cefa2 100644 --- a/test/unit/internals/aggregation.cpp +++ b/test/unit/internals/aggregation.cpp @@ -15,7 +15,7 @@ TTS_CASE("Check that aggregated_ ABI differs with architecture specificities" ) # else TTS_EXPECT( eve::aggregated_::is_wide_logical ); # endif -} +}; int aggregation_kind( eve::internal_wide_logical::aggregated_ ) { return +1; } int aggregation_kind( eve::internal_bit_logical::aggregated_ ) { return -1; } @@ -27,4 +27,4 @@ TTS_CASE("Check that aggregated_ ABI participates to function mangling" ) # else TTS_EQUAL( aggregation_kind(eve::aggregated_{}), +1); # endif -} +}; diff --git a/test/unit/internals/compress_store_swizzle_mask_num.cpp b/test/unit/internals/compress_store_swizzle_mask_num.cpp index 640908d11d..f057039d82 100644 --- a/test/unit/internals/compress_store_swizzle_mask_num.cpp +++ b/test/unit/internals/compress_store_swizzle_mask_num.cpp @@ -33,15 +33,27 @@ EVE_TEST_TYPES("compress_store_swizzle_mask_num 4 elements", for( bool m2 : {false, true} ) { for( bool m3 : {false, true} ) { mask_t mask {m0, m1, m2, m3}; + mask_t mask_with_ignore = mask && ignore.mask(eve::as(mask)); - auto [actual_num, actual_4th] = eve::detail::compress_store_swizzle_mask_num(ignore, mask); + int expected_num = expected_shuffle_num(mask_with_ignore); - int expected_num = expected_shuffle_num(mask && ignore.mask(eve::as(mask))); + // partial + { + auto [actual_num, actual_4th] = eve::detail::compress_store_swizzle_mask_num_partial(ignore, mask); + TTS_EQUAL(expected_num, actual_num); - TTS_EQUAL(expected_num, actual_num); + if (ignore.roffset(eve::as(mask)) == 0) TTS_EQUAL(m3, actual_4th); + else TTS_EQUAL(false, actual_4th); + } - if (ignore.roffset(eve::as(mask)) == 0) TTS_EQUAL(m3, actual_4th); - else TTS_EQUAL(false, actual_4th); + // complete + { + auto [actual_num, actual_count] = eve::detail::compress_store_swizzle_mask_num(ignore, mask); + TTS_EQUAL(expected_num, actual_num); + + int expected_count = eve::count_true(mask_with_ignore); + TTS_EQUAL(expected_count, actual_count); + } } } } diff --git a/test/unit/internals/dispatch.cpp b/test/unit/internals/dispatch.cpp index 595e02ff08..91581527a1 100644 --- a/test/unit/internals/dispatch.cpp +++ b/test/unit/internals/dispatch.cpp @@ -82,7 +82,7 @@ TTS_CASE("Check that constant can be externally defined for user-defined types" { TTS_EQUAL( eve::valmax( eve::as{} ), "valmax dispatched via friend" ); TTS_EQUAL( eve::valmax( eve::as{} ), "valmax dispatched via ADL" ); -} +}; TTS_CASE("Check that function can be externally defined for user-defined types" ) { @@ -92,7 +92,7 @@ TTS_CASE("Check that function can be externally defined for user-defined types" TTS_EQUAL( eve::add(fa, fb) , "add dispatched via friend" ); TTS_EQUAL( eve::add(aa, ab) , "add dispatched via ADL" ); TTS_EQUAL( (aa + ab) , "add dispatched via ADL" ); -} +}; TTS_CASE("Check that function + conditional can be externally defined for user-defined types" ) { @@ -101,7 +101,7 @@ TTS_CASE("Check that function + conditional can be externally defined for user-d TTS_EQUAL( eve::add[true](fa, fb) , "conditional add dispatched via friend" ); TTS_EQUAL( eve::add[true](aa, ab) , "conditional add dispatched via ADL" ); -} +}; TTS_CASE("Check that function + decorator can be externally defined for user-defined types" ) { @@ -110,7 +110,7 @@ TTS_CASE("Check that function + decorator can be externally defined for user-def TTS_EQUAL( eve::pedantic(eve::add)(fa, fb) , "pedantic add dispatched via friend" ); TTS_EQUAL( eve::pedantic(eve::add)(aa, ab) , "pedantic add dispatched via ADL" ); -} +}; TTS_CASE("Check that conditional function + decorator can be externally defined for user-defined types" ) { @@ -119,4 +119,4 @@ TTS_CASE("Check that conditional function + decorator can be externally defined TTS_EQUAL( eve::pedantic(eve::add[true])(fa, fb) , "conditional pedantic add dispatched via friend" ); TTS_EQUAL( eve::pedantic(eve::add[true])(aa, ab) , "conditional pedantic add dispatched via ADL" ); -} +}; diff --git a/test/unit/internals/meta.cpp b/test/unit/internals/meta.cpp index 2f7abebb44..293dd67b4d 100644 --- a/test/unit/internals/meta.cpp +++ b/test/unit/internals/meta.cpp @@ -5,12 +5,9 @@ SPDX-License-Identifier: MIT **/ //================================================================================================== - #include "test.hpp" - #include - TTS_CASE("eve::detail::for_until_") { { int i = 0; @@ -42,4 +39,4 @@ TTS_CASE("eve::detail::for_until_") { TTS_EXPECT_NOT(res); TTS_EXPECT(i == 8); } -} +}; diff --git a/test/unit/internals/optimize_pattern.cpp b/test/unit/internals/optimize_pattern.cpp index ca686ad175..c72381d60d 100644 --- a/test/unit/internals/optimize_pattern.cpp +++ b/test/unit/internals/optimize_pattern.cpp @@ -68,7 +68,7 @@ TTS_CASE("Check identity patterns get optimized") , 56, 57, 58, 59, 60, 61, 62, 63 >>) ); -} +}; TTS_CASE("Check zero patterns get optimized") { @@ -112,7 +112,7 @@ TTS_CASE("Check zero patterns get optimized") ) , (bound>) ); -} +}; TTS_CASE("Check broadcast patterns get optimized") { @@ -150,7 +150,7 @@ TTS_CASE("Check broadcast patterns get optimized") ); }(std::make_integer_sequence{}); -} +}; TTS_CASE("Check swap_adjacent_groups patterns get optimized") { @@ -226,7 +226,7 @@ TTS_CASE("Check swap_adjacent_groups patterns get optimized") TTS_EXPR_IS ( (find_optimized_pattern<64,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 >()) , (bound>) ); -} +}; TTS_CASE("Check broadcast_group patterns get optimized") { @@ -422,7 +422,7 @@ TTS_CASE("Check broadcast_group patterns get optimized") TTS_EXPR_IS ( (find_optimized_pattern<16,8,9,10,11,12,13,14,15,8,9,10,11,12,13,14,15>()) , (bound,index_t<1>,fixed<16>>) ); -} +}; TTS_CASE("Check reverse get optimized") { @@ -444,8 +444,7 @@ TTS_CASE("Check reverse get optimized") , (bound>) ); - -} +}; TTS_CASE("Check slide_left get optimized") { @@ -497,4 +496,4 @@ TTS_CASE("Check slide_left get optimized") TTS_EXPR_IS ( (find_optimized_pattern<8,7,-1,-1,-1,-1,-1,-1,-1>()) , (bound>) ); -} +}; diff --git a/test/unit/memory/CMakeLists.txt b/test/unit/memory/CMakeLists.txt index 29c62c8a35..32a6f43d79 100644 --- a/test/unit/memory/CMakeLists.txt +++ b/test/unit/memory/CMakeLists.txt @@ -39,7 +39,8 @@ make_unit( "unit.memory" store/aligned.cpp ) make_unit( "unit.memory" store/conditional.cpp ) make_unit( "unit.memory" store/tuple.cpp ) make_unit( "unit.memory" store/unaligned.cpp ) -make_unit( "unit.memory" compress_store_diff_logicals.cpp ) -make_unit( "unit.memory" compress_store_logical.cpp ) -make_unit( "unit.memory" compress_store_main.cpp ) +make_unit( "unit.memory" compress_store/logical.cpp ) +make_unit( "unit.memory" compress_store/tuple.cpp ) +make_unit( "unit.memory" compress_store/wide_diff_logicals.cpp ) +make_unit( "unit.memory" compress_store/wide.cpp ) make_unit( "unit.memory" write.cpp ) diff --git a/test/unit/memory/aligned_ptr.cpp b/test/unit/memory/aligned_ptr.cpp index e30e04bc5b..95540507db 100644 --- a/test/unit/memory/aligned_ptr.cpp +++ b/test/unit/memory/aligned_ptr.cpp @@ -18,7 +18,7 @@ TTS_CASE("aligned_ptr exposes proper traits") TTS_TYPE_IS( it_t::value_type , double); TTS_TYPE_IS( cit_t::value_type, double); -} +}; TTS_CASE("aligned_ptr constructor from nullptr") { @@ -26,7 +26,7 @@ TTS_CASE("aligned_ptr constructor from nullptr") TTS_EQUAL(nullptr_constructed_ptr.get() , nullptr); TTS_EQUAL(nullptr_constructed_ptr , nullptr); -} +}; TTS_CASE("aligned_ptr factory functions - Default SIMD alignment") { @@ -38,7 +38,7 @@ TTS_CASE("aligned_ptr factory functions - Default SIMD alignment") TTS_EQUAL(eve::as_aligned(&values[ 0 ]) , eve::as_aligned(&values[ 0 ])); TTS_NOT_EQUAL(eve::as_aligned(&values[ 0 ]) , &values[ 3 ]); TTS_NOT_EQUAL(eve::as_aligned(&values[ 0 ]) , eve::as_aligned(&values[ size ])); -} +}; TTS_CASE("aligned_ptr factory functions - Specific alignment") { @@ -48,7 +48,7 @@ TTS_CASE("aligned_ptr factory functions - Specific alignment") TTS_EQUAL(eve::as_aligned(&values[0], eve::lane<8>) , eve::as_aligned(&values[0], eve::lane<8>)); TTS_NOT_EQUAL(eve::as_aligned(&values[0], eve::lane<8>) , &values[3]); TTS_NOT_EQUAL(eve::as_aligned(&values[0], eve::lane<8>) , eve::as_aligned(&values[8], eve::lane<8>)); -} +}; TTS_CASE("aligned_ptr ordering") { @@ -64,7 +64,7 @@ TTS_CASE("aligned_ptr ordering") ptr1--; TTS_EXPECT(ptr > ptr1); -} +}; TTS_CASE("aligned_ptr pre/post increment & decrement") { @@ -82,7 +82,7 @@ TTS_CASE("aligned_ptr pre/post increment & decrement") --ptr; TTS_EQUAL(ptr.get(), &values[ 0 ]); -} +}; struct type { @@ -185,7 +185,7 @@ TTS_CASE("aligned_ptr provides pointer-like interface") TTS_EQUAL((other_ptr - ptr.get()), 1); } } -} +}; TTS_CASE("previous aligned address") { @@ -204,4 +204,4 @@ TTS_CASE("previous aligned address") aligned_ptr aligned_const = eve::previous_aligned_address((short const*)cur, lanes{}); TTS_EQUAL(aligned_const.get(), expected); } -} +}; diff --git a/test/unit/memory/compress_store_test.hpp b/test/unit/memory/compress_store/compress_store_test.hpp similarity index 100% rename from test/unit/memory/compress_store_test.hpp rename to test/unit/memory/compress_store/compress_store_test.hpp diff --git a/test/unit/memory/compress_store_logical.cpp b/test/unit/memory/compress_store/logical.cpp similarity index 100% rename from test/unit/memory/compress_store_logical.cpp rename to test/unit/memory/compress_store/logical.cpp diff --git a/test/unit/memory/compress_store/tuple.cpp b/test/unit/memory/compress_store/tuple.cpp new file mode 100644 index 0000000000..fd6746a4b8 --- /dev/null +++ b/test/unit/memory/compress_store/tuple.cpp @@ -0,0 +1,111 @@ +//================================================================================================== +/** + EVE - Expressive Vector Engine + Copyright : EVE Contributors & Maintainers + SPDX-License-Identifier: MIT +**/ +//================================================================================================== + +#include "test.hpp" + +#include + +#include + +template +using tuple_t = kumi::tuple; + +EVE_TEST_TYPES( "Check compress store behaviour with tuples ", eve::test::simd::all_types) +(eve::as) +{ + // No aggregated on avx512 support + using N = eve::fixed< eve::current_api == eve::avx512 ? 8 : T::size() >; + using e_t = eve::element_type_t; + using s_t = tuple_t; + using w_t = eve::wide; + + const w_t x{ + [](auto i, auto) { return s_t{ static_cast('a'+i) + , static_cast(i + 1) + , 1.5*(1+i) + }; + } + }; + + alignas(w_t::size() * sizeof(std::int8_t)) std::array data0; + alignas(w_t::size() * sizeof(e_t )) std::array data1; + alignas(w_t::size() * sizeof(double )) std::array data2; + + using u_ptr = kumi::tuple; + + auto test = [&](auto ptr, auto mask, auto ignore) { + data0.fill(0); + data1.fill(0); + data2.fill(0); + + u_ptr res = eve::unsafe(eve::compress_store[ignore])(x, mask, ptr); + + int f_i = ignore.offset(eve::as(mask)); + int l_i = f_i + ignore.count(eve::as(mask)); + int o = f_i; + for (int i = f_i; i != l_i; ++i) { + if (mask.get(i)) { + s_t elem = x.get(i); + TTS_EQUAL(data0[o], get<0>(elem)); + TTS_EQUAL(data1[o], get<1>(elem)); + TTS_EQUAL(data2[o], get<2>(elem)); + ++o; + } + } + + TTS_EQUAL(o, (get<0>(res) - data0.data())); + TTS_EQUAL(o, (get<1>(res) - data1.data())); + TTS_EQUAL(o, (get<2>(res) - data2.data())); + }; + + kumi::tuple ptr1{ data0.data(), data1.data(), data2.data() }; + kumi::tuple ptr2{ data0.data(), eve::as_aligned(data1.data(), N{}), data2.data() }; + + constexpr auto seed = sizeof(e_t) + T::size(); + std::mt19937 g(seed); + std::uniform_int_distribution d(0, 1); + + auto random_mask = [&]() mutable + { + eve::logical> m {false}; + for( int i = 0; i != N{}(); ++i ) { m.set(i, d(g) == 1); } + return m; + }; + + for (int i = 0; i < 100; ++i) { + test(ptr1, random_mask(), eve::ignore_none); + test(ptr2, random_mask(), eve::ignore_none); + test(ptr1, random_mask(), eve::ignore_first(1)); + test(ptr1, random_mask(), eve::ignore_extrema(0, 1)); + } +}; + +TTS_CASE( "explicit test case") +{ + std::array out_ints {0, 0}; + std::array out_bytes {0, 0}; + using s_t = kumi::tuple; + + eve::wide> x { + s_t{1, (std::uint8_t)2}, + s_t{3, (std::uint8_t)4}, + s_t{5, (std::uint8_t)6}, + s_t{7, (std::uint8_t)8}, + }; + + eve::logical>> m { true, false, true, false}; + + auto r = eve::safe(eve::compress_store)(x, m, kumi::tuple{out_ints.data(), out_bytes.data()}); + TTS_EQUAL(get<0>(r), out_ints.end()); + TTS_EQUAL(get<1>(r), out_bytes.end()); + + TTS_EQUAL(out_ints[0], 1); + TTS_EQUAL(out_ints[1], 5); + TTS_EQUAL(out_bytes[0], 2); + TTS_EQUAL(out_bytes[1], 6); +}; diff --git a/test/unit/memory/compress_store_main.cpp b/test/unit/memory/compress_store/wide.cpp similarity index 100% rename from test/unit/memory/compress_store_main.cpp rename to test/unit/memory/compress_store/wide.cpp diff --git a/test/unit/memory/compress_store_diff_logicals.cpp b/test/unit/memory/compress_store/wide_diff_logicals.cpp similarity index 100% rename from test/unit/memory/compress_store_diff_logicals.cpp rename to test/unit/memory/compress_store/wide_diff_logicals.cpp diff --git a/test/unit/memory/is_aligned.cpp b/test/unit/memory/is_aligned.cpp index 630713f2d2..cc36ecb61a 100644 --- a/test/unit/memory/is_aligned.cpp +++ b/test/unit/memory/is_aligned.cpp @@ -31,7 +31,7 @@ TTS_CASE("is_aligned for integers") TTS_EXPECT_NOT(eve::is_aligned<8>(4)); TTS_EXPECT(eve::is_aligned<8>(8)); TTS_EXPECT(eve::is_aligned<8>(16)); -} +}; TTS_CASE("is_aligned for pointers") { @@ -46,7 +46,7 @@ TTS_CASE("is_aligned for pointers") TTS_EXPECT(eve::is_aligned<4>(&v32)); TTS_EXPECT(eve::is_aligned<8>(&v64)); TTS_EXPECT(eve::is_aligned<8>(&v128)); -} +}; EVE_TEST_TYPES("is_aligned for pointers with respect to SIMD lanes", eve::test::simd::cardinals) (eve::as) diff --git a/test/unit/memory/load/aligned/arithmetic.cpp b/test/unit/memory/load/aligned/arithmetic.cpp index bdecc97e67..49c61bb6f7 100644 --- a/test/unit/memory/load/aligned/arithmetic.cpp +++ b/test/unit/memory/load/aligned/arithmetic.cpp @@ -17,7 +17,7 @@ // Load into wide from an aligned pointer //================================================================================================== EVE_TEST( "Check load to wides from aligned pointer" - , eve::test::simd::all_types + , eve::test::simd::restricted::all_types , eve::test::generate(eve::test::ramp(1)) ) (T reference) @@ -45,7 +45,7 @@ EVE_TEST( "Check load to wides from aligned pointer" //================================================================================================== // Realigned load tests //================================================================================================== -EVE_TEST_TYPES( "Check load to wides from re-aligned pointer", eve::test::simd::all_types) +EVE_TEST_TYPES( "Check load to wides from re-aligned pointer", eve::test::simd::restricted::all_types) (eve::as) { using v_t = eve::element_type_t; diff --git a/test/unit/memory/load/aligned/arithmetic_if.cpp b/test/unit/memory/load/aligned/arithmetic_if.cpp index d56099351c..09f565f70b 100644 --- a/test/unit/memory/load/aligned/arithmetic_if.cpp +++ b/test/unit/memory/load/aligned/arithmetic_if.cpp @@ -17,7 +17,7 @@ //================================================================================================== // Conditionally load into wide from an aligned pointer //================================================================================================== -EVE_TEST_TYPES( "Check conditional load to wides from aligned pointer", eve::test::simd::all_types) +EVE_TEST_TYPES( "Check conditional load to wides from aligned pointer", eve::test::simd::restricted::all_types) (eve::as) { using v_t = eve::element_type_t; @@ -118,7 +118,7 @@ EVE_TEST_TYPES( "Check conditional load to wides from aligned pointer", eve::tes //================================================================================================== // Realigned load tests //================================================================================================== -EVE_TEST_TYPES( "Check conditional load to wide from realigned pointer", eve::test::simd::all_types) +EVE_TEST_TYPES( "Check conditional load to wide from realigned pointer", eve::test::simd::restricted::all_types) (eve::as) { using v_t = eve::element_type_t; diff --git a/test/unit/memory/load/aligned/arithmetic_if_else.cpp b/test/unit/memory/load/aligned/arithmetic_if_else.cpp index 5368a225b5..3b00bb629c 100644 --- a/test/unit/memory/load/aligned/arithmetic_if_else.cpp +++ b/test/unit/memory/load/aligned/arithmetic_if_else.cpp @@ -17,7 +17,7 @@ // Conditionally load into wide from an aligned pointer //================================================================================================== EVE_TEST( "Check conditional load to wides from aligned pointer with alternatives" - , eve::test::simd::all_types + , eve::test::simd::restricted::all_types , eve::test::generate(eve::test::ramp(50)) ) (T others) diff --git a/test/unit/memory/load/aligned/logical.cpp b/test/unit/memory/load/aligned/logical.cpp index 21308be2b4..52d9eba0f7 100644 --- a/test/unit/memory/load/aligned/logical.cpp +++ b/test/unit/memory/load/aligned/logical.cpp @@ -17,7 +17,7 @@ // Load into wide from an aligned pointer //================================================================================================== EVE_TEST( "Check load to wides from aligned pointer" - , eve::test::simd::all_types + , eve::test::simd::restricted::all_types , eve::test::generate(eve::test::logicals(0,2)) ) (T reference) @@ -45,7 +45,7 @@ EVE_TEST( "Check load to wides from aligned pointer" //================================================================================================== // Realigned load tests //================================================================================================== -EVE_TEST_TYPES( "Check load to wides from re-aligned pointer", eve::test::simd::all_types) +EVE_TEST_TYPES( "Check load to wides from re-aligned pointer", eve::test::simd::restricted::all_types) (eve::as) { using v_t = eve::element_type_t; diff --git a/test/unit/memory/load/aligned/logical_if.cpp b/test/unit/memory/load/aligned/logical_if.cpp index 23ed6a55ca..1191a48c30 100644 --- a/test/unit/memory/load/aligned/logical_if.cpp +++ b/test/unit/memory/load/aligned/logical_if.cpp @@ -18,7 +18,7 @@ //================================================================================================== // Conditionally load into wide from an aligned pointer //================================================================================================== -EVE_TEST_TYPES( "Check load to wides from aligned pointer", eve::test::simd::all_types) +EVE_TEST_TYPES( "Check load to wides from aligned pointer", eve::test::simd::restricted::all_types) (eve::as) { using v_t = eve::element_type_t; @@ -121,7 +121,7 @@ EVE_TEST_TYPES( "Check load to wides from aligned pointer", eve::test::simd::all //================================================================================================== // Realigned load tests //================================================================================================== -EVE_TEST_TYPES( "Check conditional load to wide from realigned pointer", eve::test::simd::all_types) +EVE_TEST_TYPES( "Check conditional load to wide from realigned pointer", eve::test::simd::restricted::all_types) (eve::as) { using v_t = eve::logical>; diff --git a/test/unit/memory/load/aligned/logical_if_else.cpp b/test/unit/memory/load/aligned/logical_if_else.cpp index 1b2bfe5161..5aedcec644 100644 --- a/test/unit/memory/load/aligned/logical_if_else.cpp +++ b/test/unit/memory/load/aligned/logical_if_else.cpp @@ -18,7 +18,7 @@ // Conditionally load into wide from an aligned pointer //================================================================================================== EVE_TEST( "Check load to logical from aligned pointer with alternatives" - , eve::test::simd::all_types + , eve::test::simd::restricted::all_types , eve::test::generate(eve::test::logicals(1,2)) ) (T others) diff --git a/test/unit/memory/load/unaligned/arithmetic_if.cpp b/test/unit/memory/load/unaligned/arithmetic_if.cpp index 82497d779f..c69487b07d 100644 --- a/test/unit/memory/load/unaligned/arithmetic_if.cpp +++ b/test/unit/memory/load/unaligned/arithmetic_if.cpp @@ -16,7 +16,7 @@ //================================================================================================== // Conditionally load into wide from an unaligned pointer //================================================================================================== -EVE_TEST_TYPES( "Check load to wides from unaligned pointer", eve::test::simd::all_types) +EVE_TEST_TYPES( "Check load to wides from unaligned pointer", eve::test::simd::restricted::all_types) (eve::as) { using v_t = eve::element_type_t; diff --git a/test/unit/memory/load/unaligned/arithmetic_if_else.cpp b/test/unit/memory/load/unaligned/arithmetic_if_else.cpp index 304a7d8c39..ddb982ab31 100644 --- a/test/unit/memory/load/unaligned/arithmetic_if_else.cpp +++ b/test/unit/memory/load/unaligned/arithmetic_if_else.cpp @@ -16,7 +16,7 @@ // Conditionally load into wide from an aligned pointer //================================================================================================== EVE_TEST( "Check conditional load to wides from unaligned pointer with alternatives" - , eve::test::simd::all_types + , eve::test::simd::restricted::all_types , eve::test::generate(eve::test::ramp(50)) ) (T others) diff --git a/test/unit/memory/load/unaligned/logical.cpp b/test/unit/memory/load/unaligned/logical.cpp index f3a39e65cb..96b2bb214d 100644 --- a/test/unit/memory/load/unaligned/logical.cpp +++ b/test/unit/memory/load/unaligned/logical.cpp @@ -16,7 +16,7 @@ // Load into wide from a (non-contiguous) range //================================================================================================== EVE_TEST( "Check load to wides from non-contiguous range" - , eve::test::simd::all_types + , eve::test::simd::restricted::all_types , eve::test::generate(eve::test::logicals(1,2)) ) (T reference) @@ -37,7 +37,7 @@ EVE_TEST( "Check load to wides from non-contiguous range" // Load into wide from an unaligned pointer //================================================================================================== EVE_TEST( "Check load to wides from unaligned pointer" - , eve::test::simd::all_types + , eve::test::simd::restricted::all_types , eve::test::generate(eve::test::logicals(1,2)) ) (T reference) diff --git a/test/unit/memory/load/unaligned/logical_if.cpp b/test/unit/memory/load/unaligned/logical_if.cpp index 9f91aa0fe1..21b86e0922 100644 --- a/test/unit/memory/load/unaligned/logical_if.cpp +++ b/test/unit/memory/load/unaligned/logical_if.cpp @@ -16,7 +16,7 @@ //================================================================================================== // Conditionally load into wide from an unaligned pointer //================================================================================================== -EVE_TEST_TYPES( "Check load to wides from unaligned pointer", eve::test::simd::all_types) +EVE_TEST_TYPES( "Check load to wides from unaligned pointer", eve::test::simd::restricted::all_types) (eve::as) { using v_t = eve::element_type_t; diff --git a/test/unit/memory/load/unaligned/logical_if_else.cpp b/test/unit/memory/load/unaligned/logical_if_else.cpp index ff893baf67..cd82b42858 100644 --- a/test/unit/memory/load/unaligned/logical_if_else.cpp +++ b/test/unit/memory/load/unaligned/logical_if_else.cpp @@ -17,7 +17,7 @@ // Conditionally load into wide from an unaligned pointer //================================================================================================== EVE_TEST( "Check load to logical from unaligned pointer with alternatives" - , eve::test::simd::all_types + , eve::test::simd::restricted::all_types , eve::test::generate(eve::test::logicals(1,2)) ) (T others) diff --git a/test/unit/memory/store/aligned.cpp b/test/unit/memory/store/aligned.cpp index 386f3e277e..5b235cadb5 100644 --- a/test/unit/memory/store/aligned.cpp +++ b/test/unit/memory/store/aligned.cpp @@ -82,6 +82,10 @@ EVE_TEST( "Check store behavior with pointer of different alignment" eve::store[eve::ignore_none](d, ptr); TTS_EQUAL(D{f}, d); } + else + { + TTS_PASS("No test for this size"); + } }; for (auto* f = ref.begin();f != ref.end() - T::size() + 1;++f) diff --git a/test/unit/memory/store/conditional.cpp b/test/unit/memory/store/conditional.cpp index a5703ef540..c09c054b6a 100644 --- a/test/unit/memory/store/conditional.cpp +++ b/test/unit/memory/store/conditional.cpp @@ -90,7 +90,7 @@ void store_ignore_test_pass(T what, eve::element_type_t garbage_value, eve::e } EVE_TEST( "Check store behavior with ignore" - , eve::test::simd::all_types + , eve::test::simd::restricted::all_types , eve::test::generate(eve::test::ramp(1),eve::test::logicals(1,2)) ) (T data, L logical_data) diff --git a/test/unit/meta/as_floating_point.cpp b/test/unit/meta/as_floating_point.cpp index bbf40d0b23..b9813061e6 100644 --- a/test/unit/meta/as_floating_point.cpp +++ b/test/unit/meta/as_floating_point.cpp @@ -22,7 +22,7 @@ TTS_CASE("Check as_floating_point on scalar") TTS_TYPE_IS((as_floating_point_t ) , double ); TTS_TYPE_IS((as_floating_point_t ) , double ); TTS_TYPE_IS((as_floating_point_t ) , double ); -} +}; TTS_CASE("Check as_floating_point on logical scalar") { @@ -36,7 +36,7 @@ TTS_CASE("Check as_floating_point on logical scalar") TTS_TYPE_IS((as_floating_point_t> ) , logical ); TTS_TYPE_IS((as_floating_point_t> ) , logical ); TTS_TYPE_IS((as_floating_point_t>) , logical ); -} +}; TTS_CASE("Check as_floating_point on wide") { @@ -50,7 +50,7 @@ TTS_CASE("Check as_floating_point on wide") TTS_TYPE_IS((as_floating_point_t> ) , wide ); TTS_TYPE_IS((as_floating_point_t> ) , wide ); TTS_TYPE_IS((as_floating_point_t>) , wide ); -} +}; TTS_CASE("Check as_floating_point on logical wide") { @@ -65,4 +65,4 @@ TTS_CASE("Check as_floating_point on logical wide") TTS_TYPE_IS((as_floating_point_t>> ) , logical> ); TTS_TYPE_IS((as_floating_point_t>> ) , logical> ); TTS_TYPE_IS((as_floating_point_t>>) , logical> ); -} +}; diff --git a/test/unit/meta/as_integer.cpp b/test/unit/meta/as_integer.cpp index c6d796bc9d..e8be6e5bad 100644 --- a/test/unit/meta/as_integer.cpp +++ b/test/unit/meta/as_integer.cpp @@ -14,13 +14,14 @@ TTS_CASE_TPL( "Check as_integer on integral scalar", TTS_SIGNED_INTEGRAL_TYPES, TTS_UNSIGNED_INTEGRAL_TYPES ) +(::tts::type) { using eve::as_integer_t; TTS_TYPE_IS((as_integer_t ) , T ); TTS_TYPE_IS((as_integer_t) , std::make_unsigned_t ); TTS_TYPE_IS((as_integer_t) , std::make_signed_t ); -} +}; TTS_CASE("Check as_integer on floating-point scalar") { @@ -33,11 +34,12 @@ TTS_CASE("Check as_integer on floating-point scalar") TTS_TYPE_IS((as_integer_t) , std::int64_t ); TTS_TYPE_IS((as_integer_t), std::uint64_t ); TTS_TYPE_IS((as_integer_t), std::int64_t ); -} +}; TTS_CASE_TPL( "Check as_integer on logical scalar", TTS_SIGNED_NUMERIC_TYPES, TTS_UNSIGNED_NUMERIC_TYPES ) +(::tts::type) { using eve::as_integer_t; using eve::logical; @@ -45,11 +47,12 @@ TTS_CASE_TPL( "Check as_integer on logical scalar", TTS_TYPE_IS((as_integer_t>) , (logical> )); TTS_TYPE_IS((as_integer_t, unsigned>) , (logical>)); TTS_TYPE_IS((as_integer_t, signed>) , (logical> )); -} +}; TTS_CASE_TPL( "Check as_integer on integral wide", TTS_SIGNED_INTEGRAL_TYPES, TTS_UNSIGNED_INTEGRAL_TYPES ) +(::tts::type) { using eve::as_integer_t; using eve::wide; @@ -65,7 +68,7 @@ TTS_CASE_TPL( "Check as_integer on integral wide", TTS_TYPE_IS((as_integer_t, unsigned>) , wide> ); TTS_TYPE_IS((as_integer_t, signed>) , wide> ); -} +}; TTS_CASE("Check as_integer on floating-point wide") { @@ -79,11 +82,12 @@ TTS_CASE("Check as_integer on floating-point wide") TTS_TYPE_IS((as_integer_t>) , wide ); TTS_TYPE_IS((as_integer_t, unsigned>), wide ); TTS_TYPE_IS((as_integer_t, signed>), wide ); -} +}; TTS_CASE_TPL( "Check as_integer on logical wide", TTS_SIGNED_NUMERIC_TYPES, TTS_UNSIGNED_NUMERIC_TYPES ) +(::tts::type) { using eve::as_integer_t; using eve::logical; @@ -92,4 +96,4 @@ TTS_CASE_TPL( "Check as_integer on logical wide", TTS_TYPE_IS((as_integer_t>>) , (logical>> )); TTS_TYPE_IS((as_integer_t>, unsigned>) , (logical, unsigned>>)); TTS_TYPE_IS((as_integer_t>, signed>) , (logical, signed>> )); -} +}; diff --git a/test/unit/meta/as_logical.cpp b/test/unit/meta/as_logical.cpp index ee01eb00b4..b46149d729 100644 --- a/test/unit/meta/as_logical.cpp +++ b/test/unit/meta/as_logical.cpp @@ -12,6 +12,7 @@ TTS_CASE_TPL( "Check as_logical on scalar" , TTS_SIGNED_NUMERIC_TYPES, TTS_UNSIGNED_NUMERIC_TYPES ) +(::tts::type) { using eve::as_logical_t; using eve::logical; @@ -20,11 +21,12 @@ TTS_CASE_TPL( "Check as_logical on scalar" TTS_TYPE_IS(as_logical_t , logical); TTS_TYPE_IS(as_logical_t> , logical); TTS_TYPE_IS((as_logical_t>), logical); -} +}; TTS_CASE_TPL("Check as_wide on wide" , TTS_SIGNED_NUMERIC_TYPES, TTS_UNSIGNED_NUMERIC_TYPES ) +(::tts::type) { using eve::as_logical_t; using eve::logical; @@ -34,4 +36,4 @@ TTS_CASE_TPL("Check as_wide on wide" TTS_TYPE_IS(as_logical_t> , logical>); TTS_TYPE_IS(as_logical_t>> , logical>); TTS_TYPE_IS((as_logical_t,fixed<4>>>) , (logical>>)); -} +}; diff --git a/test/unit/meta/as_uinteger.cpp b/test/unit/meta/as_uinteger.cpp index 20a0dd470c..c62aea50ae 100644 --- a/test/unit/meta/as_uinteger.cpp +++ b/test/unit/meta/as_uinteger.cpp @@ -14,11 +14,12 @@ TTS_CASE_TPL( "Check as_uinteger on integral scalar", TTS_SIGNED_INTEGRAL_TYPES, TTS_UNSIGNED_INTEGRAL_TYPES ) +(::tts::type) { using eve::as_uinteger_t; TTS_TYPE_IS((as_uinteger_t) , std::make_unsigned_t ); -} +}; TTS_CASE("Check as_uinteger on floating-point scalar") { @@ -26,21 +27,23 @@ TTS_CASE("Check as_uinteger on floating-point scalar") TTS_TYPE_IS((as_uinteger_t) , std::uint32_t ); TTS_TYPE_IS((as_uinteger_t) , std::uint64_t ); -} +}; TTS_CASE_TPL( "Check as_uinteger on logical scalar", TTS_SIGNED_NUMERIC_TYPES, TTS_UNSIGNED_NUMERIC_TYPES ) +(::tts::type) { using eve::as_uinteger_t; using eve::logical; TTS_TYPE_IS((as_uinteger_t>), (logical>)); -} +}; TTS_CASE_TPL( "Check as_uinteger on integral wide", TTS_SIGNED_INTEGRAL_TYPES, TTS_UNSIGNED_INTEGRAL_TYPES ) +(::tts::type) { using eve::as_uinteger_t; using eve::wide; @@ -51,7 +54,7 @@ TTS_CASE_TPL( "Check as_uinteger on integral wide", } TTS_TYPE_IS((as_uinteger_t>) , wide> ); -} +}; TTS_CASE("Check as_uinteger on floating-point wide") { @@ -60,15 +63,16 @@ TTS_CASE("Check as_uinteger on floating-point wide") TTS_TYPE_IS((as_uinteger_t> ) , wide ); TTS_TYPE_IS((as_uinteger_t>) , wide ); -} +}; TTS_CASE_TPL( "Check as_uinteger on logical wide", TTS_SIGNED_NUMERIC_TYPES, TTS_UNSIGNED_NUMERIC_TYPES ) +(::tts::type) { using eve::as_uinteger_t; using eve::logical; using eve::wide; TTS_TYPE_IS((as_uinteger_t>>), (logical>>)); -} +}; diff --git a/test/unit/meta/as_wide.cpp b/test/unit/meta/as_wide.cpp index 8c56978814..180e092f73 100644 --- a/test/unit/meta/as_wide.cpp +++ b/test/unit/meta/as_wide.cpp @@ -10,6 +10,7 @@ #include TTS_CASE_TPL("Check as_wide on scalar", TTS_SIGNED_NUMERIC_TYPES, TTS_UNSIGNED_NUMERIC_TYPES ) +(::tts::type) { using eve::as_wide_t; using eve::logical; @@ -21,9 +22,10 @@ TTS_CASE_TPL("Check as_wide on scalar", TTS_SIGNED_NUMERIC_TYPES, TTS_UNSIGNED_N TTS_TYPE_IS ( (as_wide_t, fixed<4>>) , (wide,fixed<4>> ) ); -} +}; TTS_CASE_TPL("Check as_wide on wide", TTS_SIGNED_NUMERIC_TYPES, TTS_UNSIGNED_NUMERIC_TYPES) +(::tts::type) { using eve::as_wide_t; using eve::logical; @@ -35,4 +37,4 @@ TTS_CASE_TPL("Check as_wide on wide", TTS_SIGNED_NUMERIC_TYPES, TTS_UNSIGNED_NUM TTS_TYPE_IS ( (as_wide_t>, fixed<4>>) , (wide,fixed<4>> ) ); -} +}; diff --git a/test/unit/meta/cardinal.cpp b/test/unit/meta/cardinal.cpp index 01b87d049a..d6c9c52279 100644 --- a/test/unit/meta/cardinal.cpp +++ b/test/unit/meta/cardinal.cpp @@ -17,7 +17,7 @@ TTS_CASE( "Check for scalar cardinals") TTS_TYPE_IS( eve::cardinal_t> , eve::scalar_cardinal ); TTS_EQUAL ( eve::cardinal_v> , 1 ); -} +}; TTS_CASE_TPL( "Check for wide cardinals" , eve::fixed<1> @@ -29,13 +29,14 @@ TTS_CASE_TPL( "Check for wide cardinals" , eve::fixed<64> , eve::fixed<128> ) +(::tts::type) { TTS_TYPE_IS( (eve::cardinal_t< eve::wide >), T ); TTS_EQUAL ( (eve::cardinal_v< eve::wide >), T::value ); TTS_TYPE_IS( (eve::cardinal_t< eve::logical >>), T ); TTS_EQUAL ( (eve::cardinal_v< eve::logical >>), T::value ); -} +}; TTS_CASE_TPL( "Check for SIMD tuple-like type cardinals" , eve::fixed<1> @@ -47,9 +48,10 @@ TTS_CASE_TPL( "Check for SIMD tuple-like type cardinals" , eve::fixed<64> , eve::fixed<128> ) +(::tts::type) { using tuple_t = kumi::tuple; TTS_TYPE_IS( (eve::cardinal_t>), T ); TTS_EQUAL ( (eve::cardinal_v>), T::value ); -} +}; diff --git a/test/unit/meta/common_type.cpp b/test/unit/meta/common_type.cpp index 7b48db7857..ce7678ee64 100644 --- a/test/unit/meta/common_type.cpp +++ b/test/unit/meta/common_type.cpp @@ -14,7 +14,7 @@ #include -TTS_CASE("eve::common_type, small integrals") +TTS_CASE("eve::common_type, half_c integrals") { // Explanation TTS_TYPE_IS((std::common_type_t), std::uint32_t); @@ -35,7 +35,7 @@ TTS_CASE("eve::common_type, small integrals") // std::int16_t TTS_TYPE_IS((eve::common_type_t ), std::int16_t ); TTS_TYPE_IS((eve::common_type_t), std::uint16_t); -} +}; EVE_TEST_TYPES("eve::common_type for two types comutes", eve::test::scalar::all_types ) (eve::as) @@ -117,7 +117,7 @@ TTS_CASE("eve::common_type, product type") TTS_TYPE_IS((eve::common_type_t), line); TTS_TYPE_IS((eve::common_type_t), line); -} +}; TTS_CASE("eve::common_type, have_common_type") { @@ -125,7 +125,7 @@ TTS_CASE("eve::common_type, have_common_type") TTS_CONSTEXPR_EXPECT((eve::have_common_type)); TTS_CONSTEXPR_EXPECT_NOT((eve::have_common_type, kumi::tuple>)); -} +}; TTS_CASE("eve::common_type, reduction") { @@ -137,7 +137,7 @@ TTS_CASE("eve::common_type, reduction") (eve::common_type_t), std::int32_t ); -} +}; TTS_CASE("eve::common_type, generic constants") { @@ -149,4 +149,4 @@ TTS_CASE("eve::common_type, generic constants") (eve::common_type_t), int ); -} +}; diff --git a/test/unit/meta/decorator.cpp b/test/unit/meta/decorator.cpp index 54b405bafa..3230e8bc08 100644 --- a/test/unit/meta/decorator.cpp +++ b/test/unit/meta/decorator.cpp @@ -24,7 +24,7 @@ TTS_CASE("Checck that non-decorator types don't satisfy decorator" ) TTS_EXPECT_NOT( eve::decorator>); TTS_EXPECT_NOT( eve::decorator>); -} +}; TTS_CASE("Checck that decorators satisfies decorator" ) { @@ -39,4 +39,4 @@ TTS_CASE("Checck that decorators satisfies decorator" ) TTS_EXPECT( eve::decorator ); TTS_EXPECT( eve::decorator ); TTS_EXPECT( eve::decorator ); -} +}; diff --git a/test/unit/meta/element_type.cpp b/test/unit/meta/element_type.cpp index 1c019de3d1..ac015895c7 100644 --- a/test/unit/meta/element_type.cpp +++ b/test/unit/meta/element_type.cpp @@ -23,4 +23,4 @@ TTS_CASE( "Check for element_type") TTS_TYPE_IS((eve::element_type_t>) , tuple_t); TTS_TYPE_IS( eve::element_type_t> , eve::logical); TTS_TYPE_IS( eve::element_type_t>> , eve::logical); -} +}; diff --git a/test/unit/meta/has_abi.cpp b/test/unit/meta/has_abi.cpp index e294b45f68..02cc39a9b7 100644 --- a/test/unit/meta/has_abi.cpp +++ b/test/unit/meta/has_abi.cpp @@ -27,7 +27,7 @@ TTS_CASE( "Check for detection of native ABI") TTS_EXPECT( eve::has_native_abi_v ); TTS_EXPECT( eve::has_native_abi_v> ); -} +}; TTS_CASE( "Check for detection of aggregated ABI") { @@ -46,4 +46,4 @@ TTS_CASE( "Check for detection of aggregated ABI") TTS_EXPECT_NOT( eve::has_aggregated_abi_v ); TTS_EXPECT_NOT( eve::has_aggregated_abi_v> ); -} +}; diff --git a/test/unit/meta/native_simd_for_abi.cpp b/test/unit/meta/native_simd_for_abi.cpp index 813a015d47..f4a83439c7 100644 --- a/test/unit/meta/native_simd_for_abi.cpp +++ b/test/unit/meta/native_simd_for_abi.cpp @@ -18,17 +18,19 @@ template using tiny_wide = eve::wide>; TTS_CASE_TPL( "Check that wide satisfies native_simd_for_abi with any X86 ABI" , TTS_NUMERIC_TYPES ) +(::tts::type) { using eve::wide; using eve::logical; TTS_EXPECT((eve::native_simd_for_abi , eve::x86_128_ , eve::x86_256_, eve::x86_512_> )); TTS_EXPECT((eve::native_simd_for_abi> , eve::x86_128_ , eve::x86_256_, eve::x86_512_> )); -} +}; TTS_CASE_TPL( "Check that wide does not satisfy native_simd_for_abi with other ABI" , TTS_NUMERIC_TYPES ) +(::tts::type) { using eve::wide; using eve::logical; @@ -37,22 +39,24 @@ TTS_CASE_TPL( "Check that wide does not satisfy native_simd_for_abi with ot TTS_EXPECT_NOT((eve::native_simd_for_abi , eve::ppc_> )); TTS_EXPECT_NOT((eve::native_simd_for_abi> , eve::arm_64_ , eve::arm_128_> )); TTS_EXPECT_NOT((eve::native_simd_for_abi> , eve::ppc_> )); -} +}; #elif defined(SPY_SIMD_IS_PPC) TTS_CASE_TPL( "Check that wide satisfies native_simd_for_abi with any PPC ABI" , TTS_NUMERIC_TYPES ) +(::tts::type) { using eve::wide; using eve::logical; TTS_EXPECT((eve::native_simd_for_abi , eve::ppc_> )); TTS_EXPECT((eve::native_simd_for_abi> , eve::ppc_> )); -} +}; TTS_CASE_TPL( "Check that wide does not satisfy native_simd_for_abi with other ABI" , TTS_NUMERIC_TYPES ) +(::tts::type) { using eve::wide; using eve::logical; @@ -61,11 +65,12 @@ TTS_CASE_TPL( "Check that wide does not satisfy native_simd_for_abi wi TTS_EXPECT_NOT((eve::native_simd_for_abi , eve::x86_128_ , eve::x86_256_, eve::x86_512_ > )); TTS_EXPECT_NOT((eve::native_simd_for_abi> , eve::arm_64_ , eve::arm_128_ > )); TTS_EXPECT_NOT((eve::native_simd_for_abi> , eve::x86_128_ , eve::x86_256_, eve::x86_512_ > )); -} +}; #elif defined(SPY_SIMD_IS_ARM) TTS_CASE_TPL( "Check that wide satisfies native_simd_for_abi with any ARM ABI" , TTS_NUMERIC_TYPES ) +(::tts::type) { using eve::wide; using eve::logical; @@ -88,11 +93,12 @@ TTS_CASE_TPL( "Check that wide satisfies native_simd_for_abi with any ARM A TTS_EXPECT((eve::native_simd_for_abi> , eve::arm_64_ , eve::arm_128_> )); } } -} +}; TTS_CASE_TPL( "Check that wide does not satisfy native_simd_for_abi with other ABI" , TTS_NUMERIC_TYPES ) +(::tts::type) { using eve::wide; using eve::logical; @@ -101,13 +107,14 @@ TTS_CASE_TPL( "Check that wide does not satisfy native_simd_for_abi with ot TTS_EXPECT_NOT((eve::native_simd_for_abi , eve::ppc_> )); TTS_EXPECT_NOT((eve::native_simd_for_abi> , eve::x86_128_ , eve::x86_256_, eve::x86_512_ > )); TTS_EXPECT_NOT((eve::native_simd_for_abi> , eve::ppc_> )); -} +}; #endif #endif TTS_CASE_TPL( "Check that wide does not satisfy any native_simd_for_abi" , TTS_NUMERIC_TYPES ) +(::tts::type) { using eve::logical; @@ -129,4 +136,4 @@ TTS_CASE_TPL( "Check that wide does not satisfy any native_simd_for_abi" TTS_EXPECT_NOT((eve::native_simd_for_abi>, eve::arm_64_ , eve::arm_128_> )); TTS_EXPECT_NOT((eve::native_simd_for_abi>, eve::ppc_> )); } -} +}; diff --git a/test/unit/meta/sign_of.cpp b/test/unit/meta/sign_of.cpp index c15677aa86..67a0386807 100644 --- a/test/unit/meta/sign_of.cpp +++ b/test/unit/meta/sign_of.cpp @@ -13,6 +13,7 @@ TTS_CASE_TPL( "Check sign_of on scalar", TTS_SIGNED_NUMERIC_TYPES, TTS_UNSIGNED_NUMERIC_TYPES ) +(::tts::type) { using eve::detail::sign_of_t; @@ -24,11 +25,12 @@ TTS_CASE_TPL( "Check sign_of on scalar", { TTS_TYPE_IS((sign_of_t) , unsigned ); } -} +}; TTS_CASE_TPL( "Check sign_of on logical scalar", TTS_SIGNED_NUMERIC_TYPES, TTS_UNSIGNED_NUMERIC_TYPES ) +(::tts::type) { using eve::detail::sign_of_t; using eve::logical; @@ -41,11 +43,12 @@ TTS_CASE_TPL( "Check sign_of on logical scalar", { TTS_TYPE_IS((sign_of_t>) , unsigned ); } -} +}; TTS_CASE_TPL( "Check sign_of on wide", TTS_SIGNED_NUMERIC_TYPES, TTS_UNSIGNED_NUMERIC_TYPES ) +(::tts::type) { using eve::detail::sign_of_t; using eve::wide; @@ -58,11 +61,12 @@ TTS_CASE_TPL( "Check sign_of on wide", { TTS_TYPE_IS((sign_of_t>) , unsigned ); } -} +}; TTS_CASE_TPL( "Check sign_of on logical wide", TTS_SIGNED_NUMERIC_TYPES, TTS_UNSIGNED_NUMERIC_TYPES ) +(::tts::type) { using eve::detail::sign_of_t; using eve::logical; @@ -76,4 +80,4 @@ TTS_CASE_TPL( "Check sign_of on logical wide", { TTS_TYPE_IS((sign_of_t>>) , unsigned ); } -} +}; diff --git a/test/unit/meta/value.cpp b/test/unit/meta/value.cpp index c16097f0aa..a61beac1a4 100644 --- a/test/unit/meta/value.cpp +++ b/test/unit/meta/value.cpp @@ -29,7 +29,7 @@ TTS_CASE("Check validation of the scalar_value concept" ) TTS_EXPECT_NOT( (eve::scalar_value>> ) ); TTS_EXPECT_NOT( (eve::scalar_value>>) ); TTS_EXPECT_NOT( (eve::scalar_value>>) ); -} +}; TTS_CASE("Check validation of the simd_value" ) { @@ -51,4 +51,4 @@ TTS_CASE("Check validation of the simd_value" ) TTS_EXPECT( (eve::simd_value>> ) ); TTS_EXPECT( (eve::simd_value>>) ); TTS_EXPECT( (eve::simd_value>>) ); -} +}; diff --git a/test/unit/module/real/algorithm/all/regular/all.hpp b/test/unit/module/real/algorithm/all/regular/all.hpp index 3f3230dc02..a41fa41407 100644 --- a/test/unit/module/real/algorithm/all/regular/all.hpp +++ b/test/unit/module/real/algorithm/all/regular/all.hpp @@ -17,26 +17,29 @@ #include TTS_CASE_TPL("Check eve::all return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS( (eve::all(eve::logical())) , bool); -} +}; TTS_CASE("Check eve::all bool") { TTS_EXPR_IS( (eve::all(bool{})) , bool); TTS_EXPECT ( (eve::all(true)) ); TTS_EXPECT_NOT( (eve::all(false)) ); -} +}; TTS_CASE_TPL("Check eve::all behavior on logical", EVE_TYPE) +(::tts::type) { TTS_EXPECT (eve::all(eve::true_(eve::as()))); TTS_EXPECT_NOT(eve::all(eve::false_(eve::as()))); -} +}; #if defined(EVE_SIMD_TESTS) TTS_CASE_TPL("Check eve::all[ignore](simd)", EVE_TYPE) +(::tts::type) { // complete { @@ -135,6 +138,6 @@ TTS_CASE_TPL("Check eve::all[ignore](simd)", EVE_TYPE) } } } -} +}; #endif diff --git a/test/unit/module/real/algorithm/any/regular/any.hpp b/test/unit/module/real/algorithm/any/regular/any.hpp index 15bf44f9e4..e2261bd840 100644 --- a/test/unit/module/real/algorithm/any/regular/any.hpp +++ b/test/unit/module/real/algorithm/any/regular/any.hpp @@ -15,26 +15,29 @@ #include TTS_CASE_TPL("Check eve::any return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS( (eve::any(eve::logical())), bool); -} +}; TTS_CASE("Check eve::any bool") { TTS_EXPR_IS( (eve::any(bool{})) , bool); TTS_EXPECT ( (eve::any(true)) ); TTS_EXPECT_NOT( (eve::any(false)) ); -} +}; TTS_CASE_TPL("Check eve::any behavior on logical", EVE_TYPE) +(::tts::type) { TTS_EXPECT (eve::any(eve::true_(eve::as()))); TTS_EXPECT_NOT(eve::any(eve::false_(eve::as()))); -} +}; #if defined(EVE_SIMD_TESTS) TTS_CASE_TPL("Check eve::any[ignore]", EVE_TYPE) +(::tts::type) { // complete { @@ -125,6 +128,6 @@ TTS_CASE_TPL("Check eve::any[ignore]", EVE_TYPE) } } } -} +}; #endif diff --git a/test/unit/module/real/algorithm/count_true/regular/count_true.hpp b/test/unit/module/real/algorithm/count_true/regular/count_true.hpp index d72977d6d8..b81aabab95 100644 --- a/test/unit/module/real/algorithm/count_true/regular/count_true.hpp +++ b/test/unit/module/real/algorithm/count_true/regular/count_true.hpp @@ -14,11 +14,13 @@ #include TTS_CASE_TPL("Check eve::count_true return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS( (eve::count_true(eve::logical())) , std::ptrdiff_t); -} +}; TTS_CASE_TPL("Check eve::count_true behavior", EVE_TYPE) +(::tts::type) { auto cardinal = EVE_CARDINAL; @@ -44,10 +46,11 @@ TTS_CASE_TPL("Check eve::count_true behavior", EVE_TYPE) TTS_EQUAL(eve::count_true(rhs4), (cardinal-1) ); } #endif -} +}; #if defined(EVE_SIMD_TESTS) TTS_CASE_TPL("Check eve::count_true behavior with ignore", EVE_TYPE) +(::tts::type) { eve::logical data(true); @@ -66,5 +69,5 @@ TTS_CASE_TPL("Check eve::count_true behavior with ignore", EVE_TYPE) { TTS_EQUAL( eve::count_true[eve::ignore_first(1) && eve::ignore_last(1)](data), 0); } -} +}; #endif diff --git a/test/unit/module/real/algorithm/first_true/regular/first_true.hpp b/test/unit/module/real/algorithm/first_true/regular/first_true.hpp index 7ba8ca270c..ef0f1c7896 100644 --- a/test/unit/module/real/algorithm/first_true/regular/first_true.hpp +++ b/test/unit/module/real/algorithm/first_true/regular/first_true.hpp @@ -12,26 +12,29 @@ #include TTS_CASE_TPL("Check eve::first_true return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS( (eve::first_true(eve::logical())), std::optional); -} +}; TTS_CASE("Check eve::first_true bool") { TTS_EXPR_IS( (eve::first_true(bool{})) , std::optional); TTS_EQUAL ( (eve::first_true(true)), 0 ); TTS_EQUAL ( (eve::first_true(false)), std::nullopt ); -} +}; TTS_CASE_TPL("Check eve::first_true behavior on logical", EVE_TYPE) +(::tts::type) { TTS_EQUAL(eve::first_true(eve::true_(eve::as())), 0); TTS_EQUAL(eve::first_true(eve::false_(eve::as())), std::nullopt); -} +}; #if defined(EVE_SIMD_TESTS) TTS_CASE_TPL("Check eve::first_true", EVE_TYPE) +(::tts::type) { using l_t = eve::logical; @@ -105,6 +108,6 @@ TTS_CASE_TPL("Check eve::first_true", EVE_TYPE) x = true; TTS_EQUAL(eve::first_true[eve::ignore_first(T::size())](x), std::nullopt); } -} +}; #endif diff --git a/test/unit/module/real/algorithm/none/regular/none.hpp b/test/unit/module/real/algorithm/none/regular/none.hpp index d37628403e..e7b3fff905 100644 --- a/test/unit/module/real/algorithm/none/regular/none.hpp +++ b/test/unit/module/real/algorithm/none/regular/none.hpp @@ -15,26 +15,29 @@ #include TTS_CASE_TPL("Check eve::none return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS( (eve::none(eve::logical())) , bool); -} +}; TTS_CASE("Check eve::none bool") { TTS_EXPR_IS( (eve::none(bool{})) , bool); TTS_EXPECT_NOT( (eve::none(true)) ); TTS_EXPECT ( (eve::none(false)) ); -} +}; TTS_CASE_TPL("Check eve::none behavior on logical", EVE_TYPE) +(::tts::type) { TTS_EXPECT_NOT(eve::none(eve::true_(eve::as()))); TTS_EXPECT (eve::none(eve::false_(eve::as()))); -} +}; #if defined(EVE_SIMD_TESTS) TTS_CASE_TPL("Check eve::none[ignore]", EVE_TYPE) +(::tts::type) { // complete { @@ -125,6 +128,6 @@ TTS_CASE_TPL("Check eve::none[ignore]", EVE_TYPE) } } } -} +}; #endif diff --git a/test/unit/module/real/algorithm/reduce.cpp b/test/unit/module/real/algorithm/reduce.cpp index 624b3b1a48..f4a312ac87 100644 --- a/test/unit/module/real/algorithm/reduce.cpp +++ b/test/unit/module/real/algorithm/reduce.cpp @@ -8,6 +8,7 @@ #include "test.hpp" #include #include +#include //================================================================================================== // Types tests @@ -16,24 +17,35 @@ EVE_TEST_TYPES( "Check return types of eve::reduce(wide)", eve::test::simd::all_ (eve::as) { using v_t = eve::element_type_t; + TTS_EXPR_IS( (eve::reduce(T{}) ) , v_t ); TTS_EXPR_IS( (eve::reduce(T{}, eve::plus) ) , v_t ); + TTS_EXPR_IS( (eve::splat(eve::reduce)(T{}) ) , T ); TTS_EXPR_IS( (eve::splat(eve::reduce)(T{}, eve::plus)) , T ); }; //================================================================================================== // Arithmetic tests //================================================================================================== -EVE_TEST( "Check behavior of eve::reduce(eve::wide)" - , eve::test::simd::all_types - , eve::test::generate ( eve::test::ramp(1) ) - ) -(T const& a0) +EVE_TEST_TYPES( "Check behavior of eve::reduce(eve::wide)" + , eve::test::simd::all_types + ) +(eve::as) { - using v_t = eve::element_type_t; - auto ref = (a0.size()*(a0.size()+1))/2; + T data = [](auto i, auto c) { return i()), 0x11334455); TTS_EQUAL((eve::Constant()), 0xB122334455667788ULL); TTS_EQUAL((eve::Constant()), 0x1122334455667788LL); -} +}; TTS_CASE_TPL("Constant generation for wide", fixed<1>, @@ -44,6 +44,7 @@ TTS_CASE_TPL("Constant generation for wide", fixed<16>, fixed<32>, fixed<64>) +(::tts::type) { using namespace eve::literal; @@ -73,4 +74,4 @@ TTS_CASE_TPL("Constant generation for wide", (eve::wide(0xB122334455667788ULL))); TTS_EQUAL((eve::Constant, 0x1122334455667788LL>()), (eve::wide(0x1122334455667788LL))); -} +}; diff --git a/test/unit/module/real/core/cbrt.cpp b/test/unit/module/real/core/cbrt.cpp index f1d445ab26..e1ce2c081c 100644 --- a/test/unit/module/real/core/cbrt.cpp +++ b/test/unit/module/real/core/cbrt.cpp @@ -51,7 +51,7 @@ EVE_TEST( "Check behavior of cbrt(wide) and diff on floating types" using eve::sqr; using eve::rec; TTS_ULP_EQUAL( eve::cbrt(a0), map([&](auto e) { return std::cbrt(e); }, a0), 2); - TTS_ULP_EQUAL( diff(eve::cbrt)(a0), map([&](auto e) { return rec(sqr(std::cbrt(e))*3); }, a0), 2.5); + TTS_ULP_EQUAL( diff(eve::cbrt)(a0), map([&](auto e) { return rec(sqr(std::cbrt(e))*3); }, a0), 3); }; //================================================================================================== diff --git a/test/unit/module/real/core/gather/aligned/gather.hpp b/test/unit/module/real/core/gather/aligned/gather.hpp index 8287a516cc..6d0acfc24e 100644 --- a/test/unit/module/real/core/gather/aligned/gather.hpp +++ b/test/unit/module/real/core/gather/aligned/gather.hpp @@ -8,8 +8,8 @@ #include #include - TTS_CASE_TPL("Check eve::gather behavior with 32 bits indexes", EVE_TYPE) +(::tts::type) { using v_t = eve::element_type_t; @@ -24,9 +24,10 @@ TTS_CASE_TPL("Check eve::gather behavior with 32 bits indexes", EVE_TYPE) const v_t* cdata = &data[0]; TTS_EQUAL( ref, eve::gather(eve::as_aligned(cdata ), maps) ); TTS_EQUAL( ref, eve::gather(eve::as_aligned(&data[0]), maps) ); -} +}; TTS_CASE_TPL("Check eve::gather behavior with 64 bits indexes", EVE_TYPE) +(::tts::type) { using v_t = eve::element_type_t; @@ -41,4 +42,4 @@ TTS_CASE_TPL("Check eve::gather behavior with 64 bits indexes", EVE_TYPE) const v_t* cdata = &data[0]; TTS_EQUAL( ref, eve::gather(eve::as_aligned(cdata ), maps) ); TTS_EQUAL( ref, eve::gather(eve::as_aligned(&data[0]), maps) ); -} +}; diff --git a/test/unit/module/real/core/gather/unaligned/gather.hpp b/test/unit/module/real/core/gather/unaligned/gather.hpp index 0400d80762..426bc5e45c 100644 --- a/test/unit/module/real/core/gather/unaligned/gather.hpp +++ b/test/unit/module/real/core/gather/unaligned/gather.hpp @@ -7,8 +7,8 @@ //================================================================================================== #include - TTS_CASE_TPL("Check eve::gather behavior with 32 bits indexes", EVE_TYPE) +(::tts::type) { using v_t = eve::element_type_t; @@ -21,9 +21,10 @@ TTS_CASE_TPL("Check eve::gather behavior with 32 bits indexes", EVE_TYPE) const v_t* cdata = &data[0]; TTS_EQUAL( ref, eve::gather(cdata , maps) ); TTS_EQUAL( ref, eve::gather(&data[0], maps) ); -} +}; TTS_CASE_TPL("Check eve::gather behavior with 64 bits indexes", EVE_TYPE) +(::tts::type) { using v_t = eve::element_type_t; @@ -36,4 +37,4 @@ TTS_CASE_TPL("Check eve::gather behavior with 64 bits indexes", EVE_TYPE) const v_t* cdata = &data[0]; TTS_EQUAL( ref, eve::gather(cdata , maps) ); TTS_EQUAL( ref, eve::gather(&data[0], maps) ); -} +}; diff --git a/test/unit/module/real/core/iceil/regular/iceil.hpp b/test/unit/module/real/core/iceil/regular/iceil.hpp index c5d69dd42c..e8498f6e38 100644 --- a/test/unit/module/real/core/iceil/regular/iceil.hpp +++ b/test/unit/module/real/core/iceil/regular/iceil.hpp @@ -8,11 +8,13 @@ #include TTS_CASE_TPL("Check iceil return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS(eve::int_(eve::ceil)(T()), eve::as_integer_t); -} +}; TTS_CASE_TPL("Check eve::iceil behavior", EVE_TYPE) +(::tts::type) { using i_t = eve::as_integer_t; @@ -35,4 +37,4 @@ TTS_CASE_TPL("Check eve::iceil behavior", EVE_TYPE) TTS_EQUAL(eve::int_(eve::ceil)(T( 1.5)) , i_t( 2)); TTS_EQUAL(eve::int_(eve::ceil)(T( 1.6)) , i_t( 2)); } -} +}; diff --git a/test/unit/module/real/core/ifloor/regular/ifloor.hpp b/test/unit/module/real/core/ifloor/regular/ifloor.hpp index 61364e9036..8d9bca6dd8 100644 --- a/test/unit/module/real/core/ifloor/regular/ifloor.hpp +++ b/test/unit/module/real/core/ifloor/regular/ifloor.hpp @@ -8,11 +8,13 @@ #include TTS_CASE_TPL("Check ifloor return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS((eve::int_(eve::floor)(T())), (eve::as_integer_t)); -} +}; TTS_CASE_TPL("Check eve::int_(eve::floor) behavior", EVE_TYPE) +(::tts::type) { using i_t = eve::as_integer_t; @@ -35,4 +37,4 @@ TTS_CASE_TPL("Check eve::int_(eve::floor) behavior", EVE_TYPE) TTS_EQUAL(eve::int_(eve::floor)(T( 1.5)), i_t( 1)); TTS_EQUAL(eve::int_(eve::floor)(T( 1.6)), i_t( 1)); } -} +}; diff --git a/test/unit/module/real/core/ifrexp/pedantic/ifrexp.hpp b/test/unit/module/real/core/ifrexp/pedantic/ifrexp.hpp index 83805684b7..28c6ee815d 100644 --- a/test/unit/module/real/core/ifrexp/pedantic/ifrexp.hpp +++ b/test/unit/module/real/core/ifrexp/pedantic/ifrexp.hpp @@ -15,11 +15,13 @@ #include TTS_CASE_TPL("Check ifrexp return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS(eve::pedantic(eve::ifrexp)(T()), (kumi::tuple>)); -} +}; TTS_CASE_TPL("Check eve::pedantic(eve::ifrexp) behavior", EVE_TYPE) +(::tts::type) { using i_t = eve::as_integer_t; { @@ -57,4 +59,4 @@ TTS_CASE_TPL("Check eve::pedantic(eve::ifrexp) behavior", EVE_TYPE) TTS_ULP_EQUAL (r0, T(0.5), 1); TTS_EQUAL (r1, i_t(eve::minexponent(eve::as())-eve::nbmantissabits(eve::as())+1)); } -} +}; diff --git a/test/unit/module/real/core/ifrexp/raw/ifrexp.hpp b/test/unit/module/real/core/ifrexp/raw/ifrexp.hpp index 3df70b4e86..95bc6fbdca 100644 --- a/test/unit/module/real/core/ifrexp/raw/ifrexp.hpp +++ b/test/unit/module/real/core/ifrexp/raw/ifrexp.hpp @@ -9,14 +9,16 @@ #include TTS_CASE_TPL("Check ifrexp return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS(eve::raw(eve::ifrexp)(T()), (kumi::tuple>)); -} +}; TTS_CASE_TPL("Check eve::raw(eve::ifrexp) behavior", EVE_TYPE) +(::tts::type) { using i_t = eve::as_integer_t; auto [p0, p1] = eve::raw(eve::ifrexp)(T(1)); TTS_EQUAL(p0, T(0.5)); TTS_EQUAL(p1, i_t(1)); -} +}; diff --git a/test/unit/module/real/core/ifrexp/regular/ifrexp.hpp b/test/unit/module/real/core/ifrexp/regular/ifrexp.hpp index 7eef2e602e..97ff6480fe 100644 --- a/test/unit/module/real/core/ifrexp/regular/ifrexp.hpp +++ b/test/unit/module/real/core/ifrexp/regular/ifrexp.hpp @@ -9,11 +9,13 @@ #include TTS_CASE_TPL("Check ifrexp return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS(eve::ifrexp(T()), (kumi::tuple>)); -} +}; TTS_CASE_TPL("Check (eve::ifrexp behavior", EVE_TYPE) +(::tts::type) { using i_t = eve::as_integer_t; { @@ -26,4 +28,4 @@ TTS_CASE_TPL("Check (eve::ifrexp behavior", EVE_TYPE) TTS_EQUAL (p0 , T(0)); TTS_EQUAL (p1, i_t(0)); } -} +}; \ No newline at end of file diff --git a/test/unit/module/real/core/inearest/regular/inearest.hpp b/test/unit/module/real/core/inearest/regular/inearest.hpp index ffc9d9b44e..84905ae4f4 100644 --- a/test/unit/module/real/core/inearest/regular/inearest.hpp +++ b/test/unit/module/real/core/inearest/regular/inearest.hpp @@ -10,11 +10,13 @@ #include TTS_CASE_TPL("Check inearest return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS(eve::int_(eve::nearest)(T()), eve::as_integer_t); -} +}; TTS_CASE_TPL("Check eve::int_(eve::nearest) behavior", EVE_TYPE) +(::tts::type) { using i_t = eve::as_integer_t; @@ -43,4 +45,4 @@ TTS_CASE_TPL("Check eve::int_(eve::nearest) behavior", EVE_TYPE) TTS_EQUAL(eve::int_(eve::nearest)(T( 2.5)) , i_t( 2)); TTS_EQUAL(eve::int_(eve::nearest)(T( 2.6)) , i_t( 3)); } -} +}; diff --git a/test/unit/module/real/core/is_even.cpp b/test/unit/module/real/core/is_even.cpp index 13562abf53..4ba3a0f21f 100644 --- a/test/unit/module/real/core/is_even.cpp +++ b/test/unit/module/real/core/is_even.cpp @@ -30,7 +30,6 @@ EVE_TEST_TYPES( "Check return types of eve::is_even(simd)" //================================================================================================== // Tests for eve::is_even //================================================================================================== - EVE_TEST( "Check behavior of eve::is_even(simd)" , eve::test::simd::ieee_reals , eve::test::generate ( eve::test::ramp(0) @@ -44,3 +43,17 @@ EVE_TEST( "Check behavior of eve::is_even(simd)" TTS_EQUAL(eve::is_even(a0), map([](auto e) -> eve::logical { return (std::trunc(e/2)*2) == e; }, a0)); TTS_EQUAL(eve::is_even[t](a0), eve::if_else(t, eve::is_even(a0), eve::false_(eve::as(a0)))); }; + +EVE_TEST( "Check behavior of eve::is_even(simd)" + , eve::test::simd::integers + , eve::test::generate ( eve::test::ramp(0) + , eve::test::logicals(0, 3)) + ) +(T const& a0, M const & t) +{ + using eve::detail::map; + using v_t = eve::element_type_t; + + TTS_EQUAL(eve::is_even(a0), map([](auto e) -> eve::logical { return (e&1) == 0; }, a0)); + TTS_EQUAL(eve::is_even[t](a0), eve::if_else(t, eve::is_even(a0), eve::false_(eve::as(a0)))); +}; diff --git a/test/unit/module/real/core/is_finite.cpp b/test/unit/module/real/core/is_finite.cpp index 94d46ab4c3..501a8b32bf 100644 --- a/test/unit/module/real/core/is_finite.cpp +++ b/test/unit/module/real/core/is_finite.cpp @@ -35,8 +35,7 @@ EVE_TEST_TYPES( "Check return types of eve::is_finite(simd)" //================================================================================================== // Tests for eve::is_finite //================================================================================================== - -EVE_TEST( "Check behavior of eve::is_finite(simd)" +EVE_TEST( "Check behavior of eve::is_finite(simd) for IEEE" , eve::test::simd::ieee_reals , eve::test::generate ( eve::test::ramp(0) , eve::test::logicals(0, 3)) @@ -50,6 +49,18 @@ EVE_TEST( "Check behavior of eve::is_finite(simd)" TTS_EQUAL(eve::is_finite[t](a0), eve::if_else(t, eve::is_finite(a0), eve::false_(eve::as(a0)))); }; +EVE_TEST( "Check behavior of eve::is_finite(simd) for integer" + , eve::test::simd::integers + , eve::test::generate ( eve::test::ramp(0) + , eve::test::logicals(0, 3)) + ) +(T a0, M const & t) +{ + using eve::detail::map; + TTS_EQUAL(eve::is_finite(a0), eve::true_(eve::as(a0))); + TTS_EQUAL(eve::is_finite[t](a0), eve::if_else(t, eve::is_finite(a0), eve::false_(eve::as(a0)))); +}; + //================================================================================================== // Test cases values //================================================================================================== diff --git a/test/unit/module/real/core/is_infinite.cpp b/test/unit/module/real/core/is_infinite.cpp index 7cb55dc287..795f660d48 100644 --- a/test/unit/module/real/core/is_infinite.cpp +++ b/test/unit/module/real/core/is_infinite.cpp @@ -30,8 +30,19 @@ EVE_TEST_TYPES( "Check return types of eve::is_infinite(simd)" //================================================================================================== // Tests for eve::is_infinite //================================================================================================== +EVE_TEST( "Check behavior of eve::is_infinite(simd) integrals" + , eve::test::simd::integers + , eve::test::generate ( eve::test::ramp(0) + , eve::test::logicals(0, 3)) + ) +(T a0, M const & t) +{ + using eve::detail::map; + TTS_EQUAL(eve::is_infinite(a0), eve::false_(eve::as(a0))); + TTS_EQUAL(eve::is_infinite[t](a0), eve::if_else(t, eve::is_infinite(a0), eve::false_(eve::as(a0)))); +}; -EVE_TEST( "Check behavior of eve::is_infinite(simd)" +EVE_TEST( "Check behavior of eve::is_infinite(simd) IEEE" , eve::test::simd::ieee_reals , eve::test::generate ( eve::test::ramp(0) , eve::test::logicals(0, 3)) @@ -44,6 +55,7 @@ EVE_TEST( "Check behavior of eve::is_infinite(simd)" TTS_EQUAL(eve::is_infinite(a0), map([](auto e) -> eve::logical { return e-e != 0 && e == e; }, a0)); TTS_EQUAL(eve::is_infinite[t](a0), eve::if_else(t, eve::is_infinite(a0), eve::false_(eve::as(a0)))); }; + //================================================================================================== // Test cases values //================================================================================================== diff --git a/test/unit/module/real/core/is_not_nan.cpp b/test/unit/module/real/core/is_not_nan.cpp index 6cbfc7ddca..f56f3642c9 100644 --- a/test/unit/module/real/core/is_not_nan.cpp +++ b/test/unit/module/real/core/is_not_nan.cpp @@ -30,9 +30,8 @@ EVE_TEST_TYPES( "Check return types of eve::is_not_nan(simd)" //================================================================================================== // Tests for eve::is_not_nan //================================================================================================== - EVE_TEST( "Check behavior of eve::is_not_nan(simd)" - , eve::test::simd::ieee_reals + , eve::test::simd::all_types , eve::test::generate ( eve::test::ramp(0) , eve::test::logicals(0, 3)) ) diff --git a/test/unit/module/real/core/is_odd.cpp b/test/unit/module/real/core/is_odd.cpp index 99683f4f89..955203743e 100644 --- a/test/unit/module/real/core/is_odd.cpp +++ b/test/unit/module/real/core/is_odd.cpp @@ -30,8 +30,7 @@ EVE_TEST_TYPES( "Check return types of eve::is_odd(simd)" //================================================================================================== // Tests for eve::is_odd //================================================================================================== - -EVE_TEST( "Check behavior of eve::is_odd(simd)" +EVE_TEST( "Check behavior of eve::is_odd(simd) for IEEE " , eve::test::simd::ieee_reals , eve::test::generate ( eve::test::ramp(0) , eve::test::logicals(0, 3)) @@ -44,3 +43,17 @@ EVE_TEST( "Check behavior of eve::is_odd(simd)" TTS_EQUAL(eve::is_odd(a0), map([](auto e) -> eve::logical { return (std::trunc(e/2)*2) == e-1; }, a0)); TTS_EQUAL(eve::is_odd[t](a0), eve::if_else(t, eve::is_odd(a0), eve::false_(eve::as(a0)))); }; + +EVE_TEST( "Check behavior of eve::is_odd(simd) for IEEE " + , eve::test::simd::integers + , eve::test::generate ( eve::test::ramp(0) + , eve::test::logicals(0, 3)) + ) +(T const& a0, M const & t) +{ + using eve::detail::map; + using v_t = eve::element_type_t; + + TTS_EQUAL(eve::is_odd(a0), map([](auto e) -> eve::logical { return (e&1) != 0; }, a0)); + TTS_EQUAL(eve::is_odd[t](a0), eve::if_else(t, eve::is_odd(a0), eve::false_(eve::as(a0)))); +}; diff --git a/test/unit/module/real/core/itrunc/regular/itrunc.hpp b/test/unit/module/real/core/itrunc/regular/itrunc.hpp index 8877cb05b2..e803b8f8b4 100644 --- a/test/unit/module/real/core/itrunc/regular/itrunc.hpp +++ b/test/unit/module/real/core/itrunc/regular/itrunc.hpp @@ -9,11 +9,13 @@ #include TTS_CASE_TPL("Check itrunc return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS(eve::int_(eve::trunc)(T()), eve::as_integer_t); -} +}; TTS_CASE_TPL("Check eve::itrunc behavior", EVE_TYPE) +(::tts::type) { using i_t = eve::as_integer_t; @@ -36,4 +38,4 @@ TTS_CASE_TPL("Check eve::itrunc behavior", EVE_TYPE) TTS_EQUAL(eve::int_(eve::trunc)(T( 1.5)), i_t( 1)); TTS_EQUAL(eve::int_(eve::trunc)(T( 1.6)), i_t( 1)); } -} +}; diff --git a/test/unit/module/real/core/logical_xor.cpp b/test/unit/module/real/core/logical_xor.cpp index 1fa2281623..2e3c99a075 100644 --- a/test/unit/module/real/core/logical_xor.cpp +++ b/test/unit/module/real/core/logical_xor.cpp @@ -15,7 +15,7 @@ //== Types tests //================================================================================================== EVE_TEST_TYPES( "Check return types of eve::logical_xor(simd)" - , eve::test::simd::all_types + , eve::test::simd::restricted::all_types ) (eve::as) { @@ -36,7 +36,7 @@ EVE_TEST_TYPES( "Check return types of eve::logical_xor(simd)" //== Tests for eve::logical_xor //================================================================================================== EVE_TEST( "Check behavior of eve::logical_xor(simd)" - , eve::test::simd::all_types + , eve::test::simd::restricted::all_types , eve::test::generate (eve::test::logicals(0, 3) , eve::test::logicals(1, 2) , eve::test::randoms(0, 2)) diff --git a/test/unit/module/real/core/rat.cpp b/test/unit/module/real/core/rat.cpp index 728d72855e..1b67d6eef7 100644 --- a/test/unit/module/real/core/rat.cpp +++ b/test/unit/module/real/core/rat.cpp @@ -32,7 +32,7 @@ EVE_TEST_TYPES( "Check return types of eve::rat(scalar)" // Tests for eve::rat //================================================================================================== EVE_TEST( "Check behavior of eve::rat(simd)" - , eve::test::simd::ieee_reals + , eve::test::simd::restricted::ieee_reals , eve::test::generate ( eve::test::ramp(1.0)) ) (T const& a0) diff --git a/test/unit/module/real/core/rem.cpp b/test/unit/module/real/core/rem.cpp index 37dcf3ad0a..65c34cf5e0 100644 --- a/test/unit/module/real/core/rem.cpp +++ b/test/unit/module/real/core/rem.cpp @@ -63,7 +63,7 @@ EVE_TEST_TYPES( "Check return types of rem" auto mini = [] < typename T > (eve::as const &){ return std::is_signed_v> ? -100 : 0;}; EVE_TEST( "Check behavior of rem on wide" - , eve::test::simd::ieee_reals//all_types + , eve::test::simd::restricted::ieee_reals//all_types , eve::test::generate ( eve::test::randoms(mini, 100) , eve::test::randoms(mini, 100) ) @@ -73,9 +73,9 @@ EVE_TEST( "Check behavior of rem on wide" using eve::rem; using eve::pedantic; using eve::detail::map; - TTS_ULP_EQUAL( pedantic(rem)(a0, a1), map([](auto e, auto f) { return eve::rem(e, f); }, a0, a1), 30);//fma not avail scalar double it seems + TTS_ULP_EQUAL( pedantic(rem)(a0, a1), map([](auto e, auto f) { return eve::rem(e, f); }, a0, a1), 32);//fma not avail scalar double it seems a1 = eve::if_else(eve::is_eqz(a1), eve::one, a1); - TTS_ULP_EQUAL( rem(a0, a1), map([](auto e, auto f) { return eve::rem(e, f); }, a0, a1), 30); + TTS_ULP_EQUAL( rem(a0, a1), map([](auto e, auto f) { return eve::rem(e, f); }, a0, a1), 32); }; @@ -136,9 +136,9 @@ EVE_TEST( "Check behavior of rem on signed types" using eve::is_nez; using eve::pedantic; using eve::detail::map; - TTS_ULP_EQUAL( pedantic(rem[is_nez(a2)])(a0, a2), map([](auto e, auto f) {return is_nez(f) ? rem(e, f) : e ; }, a0, a2), 10); + TTS_ULP_EQUAL( pedantic(rem[is_nez(a2)])(a0, a2), map([](auto e, auto f) {return is_nez(f) ? rem(e, f) : e ; }, a0, a2), 48); a2 = eve::if_else(a2 >= 0, eve::one, a2); - TTS_ULP_EQUAL( rem[is_nez(a2)](a0, a2), map([](auto e, auto f) {return rem(e, f); }, a0, a2), 2); + TTS_ULP_EQUAL( rem[is_nez(a2)](a0, a2), map([](auto e, auto f) {return rem(e, f); }, a0, a2), 48); TTS_ULP_EQUAL( rem[a2 > T(64)](a0, a1), map([](auto e, auto f, auto g) {return g > 64 ? rem(e, f) : e ; }, a0, a1, a2), 2); a1 = eve::if_else(eve::is_eqz(a1), eve::one, a1); diff --git a/test/unit/module/real/core/remdiv.cpp b/test/unit/module/real/core/remdiv.cpp index 5e83a72be3..40f76a6ed0 100644 --- a/test/unit/module/real/core/remdiv.cpp +++ b/test/unit/module/real/core/remdiv.cpp @@ -38,7 +38,7 @@ EVE_TEST_TYPES( "Check return types of remdiv" auto mini = [] < typename T > (eve::as const &){ return std::is_signed_v> ? -100 : 1;}; EVE_TEST( "Check behavior of remdiv on wide" - , eve::test::simd::all_types + , eve::test::simd::restricted::all_types , eve::test::generate ( eve::test::randoms(mini, 100) , eve::test::randoms(mini, 100) ) @@ -50,8 +50,8 @@ EVE_TEST( "Check behavior of remdiv on wide" using eve::toward_zero; a1 = eve::if_else(eve::is_eqz(a1), eve::one, a1); auto [r, d] = eve::remdiv(a0, a1); - TTS_ULP_EQUAL( r, map([](auto e, auto f) { return eve::rem(e, f); }, a0, a1), 30);//fma not avail scalar double it seems - TTS_ULP_EQUAL( d, map([](auto e, auto f) { return toward_zero(eve::div)(e, f); }, a0, a1), 30);//fma not avail scalar double it seems + TTS_ULP_EQUAL( r, map([](auto e, auto f) { return eve::rem(e, f); }, a0, a1), 32);//fma not avail scalar double it seems + TTS_ULP_EQUAL( d, map([](auto e, auto f) { return toward_zero(eve::div)(e, f); }, a0, a1), 32);//fma not avail scalar double it seems }; diff --git a/test/unit/module/real/core/saturate/double/saturate.hpp b/test/unit/module/real/core/saturate/double/saturate.hpp index 529a73ea9c..5f6c42093c 100644 --- a/test/unit/module/real/core/saturate/double/saturate.hpp +++ b/test/unit/module/real/core/saturate/double/saturate.hpp @@ -11,14 +11,16 @@ #include TTS_CASE_TPL("Check eve::saturate return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS(eve::saturate(T(), eve::as()), T); -} +}; TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) +(::tts::type) { TTS_EQUAL(eve::saturate(eve::valmin(eve::as()), eve::as()), eve::valmin(eve::as()) ); TTS_EQUAL(eve::saturate(T(0) , eve::as()), T(0) ); TTS_EQUAL(eve::saturate(T(42.69) , eve::as()), T(42.69) ); TTS_EQUAL(eve::saturate(eve::valmax(eve::as()), eve::as()), eve::valmax(eve::as()) ); -} +}; diff --git a/test/unit/module/real/core/saturate/float/saturate.hpp b/test/unit/module/real/core/saturate/float/saturate.hpp index fbe030a4a4..02b4c71cba 100644 --- a/test/unit/module/real/core/saturate/float/saturate.hpp +++ b/test/unit/module/real/core/saturate/float/saturate.hpp @@ -11,11 +11,13 @@ #include TTS_CASE_TPL("Check eve::saturate return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS(eve::saturate(T(), eve::as()), T); -} +}; TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) +(::tts::type) { TTS_EQUAL(eve::saturate(T(42.69), eve::as()), T(42.69) ); TTS_EQUAL(eve::saturate(T(0) , eve::as()), T(0) ); @@ -32,4 +34,4 @@ TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) TTS_EQUAL(eve::saturate(eve::valmax(eve::as()), eve::as()), eve::valmax(eve::as()) ); TTS_EQUAL(eve::saturate(eve::valmin(eve::as()), eve::as()), eve::valmin(eve::as()) ); } -} +}; diff --git a/test/unit/module/real/core/saturate/int16/saturate.hpp b/test/unit/module/real/core/saturate/int16/saturate.hpp index c2a1fde5c3..9c01bba17f 100644 --- a/test/unit/module/real/core/saturate/int16/saturate.hpp +++ b/test/unit/module/real/core/saturate/int16/saturate.hpp @@ -10,11 +10,13 @@ #include TTS_CASE_TPL("Check eve::saturate return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS(eve::saturate( T(), eve::as()), T); -} +}; TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) +(::tts::type) { if constexpr(eve::signed_value) { @@ -45,4 +47,4 @@ TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) { TTS_EQUAL(eve::saturate(eve::valmax(eve::as()), eve::as()), T(eve::valmax(eve::as())) ); } -} +}; diff --git a/test/unit/module/real/core/saturate/int32/saturate.hpp b/test/unit/module/real/core/saturate/int32/saturate.hpp index b04a38b948..45ad056e8a 100644 --- a/test/unit/module/real/core/saturate/int32/saturate.hpp +++ b/test/unit/module/real/core/saturate/int32/saturate.hpp @@ -11,11 +11,13 @@ #include TTS_CASE_TPL("Check eve::saturate return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS(eve::saturate(T(), eve::as()), T); -} +}; TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) +(::tts::type) { TTS_EQUAL(eve::saturate(T(0) , eve::as() ), T(0) ); TTS_EQUAL(eve::saturate(T(42.69), eve::as() ), T(42.69) ); @@ -54,4 +56,4 @@ TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) TTS_EQUAL(eve::saturate(eve::valmax(eve::as()), eve::as()), T(eve::valmax(eve::as())) ); } } -} +}; diff --git a/test/unit/module/real/core/saturate/int64/saturate.hpp b/test/unit/module/real/core/saturate/int64/saturate.hpp index e2e0bc7ef9..5f1f7047f0 100644 --- a/test/unit/module/real/core/saturate/int64/saturate.hpp +++ b/test/unit/module/real/core/saturate/int64/saturate.hpp @@ -10,11 +10,13 @@ #include TTS_CASE_TPL("Check eve::saturate return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS(eve::saturate(T(), eve::as()), T); -} +}; TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) +(::tts::type) { TTS_EQUAL(eve::saturate(T(0) , eve::as() ), T(0) ); TTS_EQUAL(eve::saturate(T(42.69), eve::as() ), T(42.69) ); @@ -53,4 +55,4 @@ TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) TTS_EQUAL(eve::saturate(eve::valmax(eve::as()), eve::as()), T(eve::valmax(eve::as())) ); } } -} +}; diff --git a/test/unit/module/real/core/saturate/int8/saturate.hpp b/test/unit/module/real/core/saturate/int8/saturate.hpp index 4f913c9472..d5185c284a 100644 --- a/test/unit/module/real/core/saturate/int8/saturate.hpp +++ b/test/unit/module/real/core/saturate/int8/saturate.hpp @@ -11,11 +11,13 @@ #include TTS_CASE_TPL("Check eve::saturate return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS(eve::saturate(T(), eve::as()), T); -} +}; TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) +(::tts::type) { if constexpr(eve::signed_value) { @@ -29,4 +31,4 @@ TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) TTS_EQUAL(eve::saturate(T(0) , eve::as()), T(0) ); TTS_EQUAL(eve::saturate(T(42.69), eve::as()), T(42.69) ); TTS_EQUAL(eve::saturate(eve::valmax(eve::as()), eve::as()), T(eve::valmax(eve::as())) ); -} +}; diff --git a/test/unit/module/real/core/saturate/uint16/saturate.hpp b/test/unit/module/real/core/saturate/uint16/saturate.hpp index f026276c0a..d5d5e15500 100644 --- a/test/unit/module/real/core/saturate/uint16/saturate.hpp +++ b/test/unit/module/real/core/saturate/uint16/saturate.hpp @@ -10,11 +10,13 @@ #include TTS_CASE_TPL("Check eve::saturate return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS(eve::saturate(T(), eve::as()), T); -} +}; TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) +(::tts::type) { TTS_EQUAL(eve::saturate(T(0) , eve::as() ), T(0) ); TTS_EQUAL(eve::saturate(T(42.69), eve::as() ), T(42.69) ); @@ -35,4 +37,4 @@ TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) { TTS_EQUAL(eve::saturate(eve::valmax(eve::as()), eve::as()), T(eve::valmax(eve::as())) ); } -} +}; diff --git a/test/unit/module/real/core/saturate/uint32/saturate.hpp b/test/unit/module/real/core/saturate/uint32/saturate.hpp index d2ad602b74..0c6f35af0e 100644 --- a/test/unit/module/real/core/saturate/uint32/saturate.hpp +++ b/test/unit/module/real/core/saturate/uint32/saturate.hpp @@ -10,11 +10,13 @@ #include TTS_CASE_TPL("Check eve::saturate return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS(eve::saturate(T(), eve::as()), T); -} +}; TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) +(::tts::type) { TTS_EQUAL(eve::saturate(T(0) , eve::as()), T(0) ); TTS_EQUAL(eve::saturate(T(42.69), eve::as()), T(42.69) ); @@ -44,4 +46,4 @@ TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) TTS_EQUAL(eve::saturate(eve::valmax(eve::as()), eve::as()), T(eve::valmax(eve::as())) ); } } -} +}; diff --git a/test/unit/module/real/core/saturate/uint64/saturate.hpp b/test/unit/module/real/core/saturate/uint64/saturate.hpp index cd12e6ced6..5df0daa6c0 100644 --- a/test/unit/module/real/core/saturate/uint64/saturate.hpp +++ b/test/unit/module/real/core/saturate/uint64/saturate.hpp @@ -10,11 +10,13 @@ #include TTS_CASE_TPL("Check eve::saturate return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS(eve::saturate(T(), eve::as()), T); -} +}; TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) +(::tts::type) { if constexpr(eve::floating_value) { @@ -43,4 +45,4 @@ TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) TTS_EQUAL(eve::saturate(eve::valmax(eve::as()), eve::as()), T(eve::valmax(eve::as())) ); } } -} +}; diff --git a/test/unit/module/real/core/saturate/uint8/saturate.hpp b/test/unit/module/real/core/saturate/uint8/saturate.hpp index 3b6e5c1ce8..7135773d14 100644 --- a/test/unit/module/real/core/saturate/uint8/saturate.hpp +++ b/test/unit/module/real/core/saturate/uint8/saturate.hpp @@ -10,11 +10,13 @@ #include TTS_CASE_TPL("Check eve::saturate return type", EVE_TYPE) +(::tts::type) { TTS_EXPR_IS(eve::saturate(T(), eve::as()), T); -} +}; TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) +(::tts::type) { TTS_EQUAL(eve::saturate(T(0) , eve::as() ), T(0) ); TTS_EQUAL(eve::saturate(T(42.69), eve::as() ), T(42.69) ); @@ -35,4 +37,4 @@ TTS_CASE_TPL("Check eve::saturate behavior", EVE_TYPE) { TTS_EQUAL(eve::saturate(eve::valmax(eve::as()), eve::as()), T(eve::valmax(eve::as())) ); } -} +}; diff --git a/test/unit/module/real/elliptic/ellint_1.cpp b/test/unit/module/real/elliptic/ellint_1.cpp index 0c42fc8c98..5d1722836c 100644 --- a/test/unit/module/real/elliptic/ellint_1.cpp +++ b/test/unit/module/real/elliptic/ellint_1.cpp @@ -44,6 +44,6 @@ EVE_TEST( "Check behavior of ellint_1 on wide" using eve::detail::map; using v_t = eve::element_type_t; - TTS_ULP_EQUAL(eve::ellint_1(k) , map([](auto e) -> v_t { return boost::math::ellint_1(e); }, k), 10); - TTS_ULP_EQUAL(eve::ellint_1(phi, k) , map([](auto e, auto f) -> v_t { return boost::math::ellint_1(e, f); }, k, phi), 10); + TTS_ULP_EQUAL(eve::ellint_1(k) , map([](auto e) -> v_t { return boost::math::ellint_1(e); }, k), 16); + TTS_ULP_EQUAL(eve::ellint_1(phi, k) , map([](auto e, auto f) -> v_t { return boost::math::ellint_1(e, f); }, k, phi), 16); }; diff --git a/test/unit/module/real/elliptic/ellint_d.cpp b/test/unit/module/real/elliptic/ellint_d.cpp index 84c28e6b2b..a4860880e7 100644 --- a/test/unit/module/real/elliptic/ellint_d.cpp +++ b/test/unit/module/real/elliptic/ellint_d.cpp @@ -44,6 +44,6 @@ EVE_TEST( "Check behavior of ellint_d on wide" using eve::detail::map; using v_t = eve::element_type_t; - TTS_ULP_EQUAL(eve::ellint_d(k) , map([](auto e) -> v_t { return boost::math::ellint_d(e); }, k), 11); - TTS_ULP_EQUAL(eve::ellint_d(phi, k) , map([](auto e, auto f) -> v_t { return boost::math::ellint_d(e, f); }, k, phi), 11); + TTS_ULP_EQUAL(eve::ellint_d(k) , map([](auto e) -> v_t { return boost::math::ellint_d(e); }, k), 24); + TTS_ULP_EQUAL(eve::ellint_d(phi, k) , map([](auto e, auto f) -> v_t { return boost::math::ellint_d(e, f); }, k, phi), 24); }; diff --git a/test/unit/module/real/math/cos.cpp b/test/unit/module/real/math/cos.cpp index 9a3c837922..cfad6af1a5 100644 --- a/test/unit/module/real/math/cos.cpp +++ b/test/unit/module/real/math/cos.cpp @@ -7,14 +7,17 @@ //================================================================================================== #include "test.hpp" #include +#include #include #include #include #include +#include #include #include #include #include +#include //================================================================================================== // Types tests @@ -33,40 +36,61 @@ EVE_TEST_TYPES( "Check return types of cos" //================================================================================================== // cos tests //================================================================================================== -auto mrest = [](eve::as const & tgt){ return -eve::pio_4(tgt); }; -auto rest = [](eve::as const & tgt){ return eve::pio_4(tgt); }; -auto msmall = [](eve::as const & tgt){ return -eve::pio_2(tgt); }; -auto small = [](eve::as const & tgt){ return eve::pio_2(tgt); }; -auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::medium_type(), tgt); }; -auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::medium_type(), tgt); }; +auto mquarter_c = [](eve::as const & tgt){ return -eve::pio_4(tgt); }; +auto quarter_c = [](eve::as const & tgt){ return eve::pio_4(tgt); }; +auto mhalf_c = [](eve::as const & tgt){ return -eve::pio_2(tgt); }; +auto half_c = [](eve::as const & tgt){ return eve::pio_2(tgt); }; +auto mfull_c= [](eve::as const & tgt){ return -eve::pi(tgt); }; +auto full_c = [](eve::as const & tgt){ return eve::pi(tgt); }; +auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt); }; +auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt); }; EVE_TEST( "Check behavior of cos on wide" - , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::simd::ieee_floats//reals + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) + , eve::test::randoms(mfull_c, full_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) -(T const& a0, T const& a1, T const& a2, T const& a3) +(T const& a0, T const& a1 , T const& a2, T const& a3, T const& a4) { using eve::detail::map; using eve::cos; using eve::diff; using v_t = eve::element_type_t; auto ref = [](auto e) -> v_t { return std::cos(e); }; - TTS_ULP_EQUAL(eve::restricted(cos)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(cos)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(cos)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(cos)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(cos)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(cos)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(cos)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(cos)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::big(cos)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(cos)(a3) , map(ref, a3), 2); - TTS_ULP_EQUAL(cos(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(cos(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(cos(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(cos(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(eve::quarter_circle(cos)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(cos)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(cos)(a1) , map(ref, a1), 2); + TTS_ULP_EQUAL(eve::full_circle(cos)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::full_circle(cos)(a1) , map(ref, a1), 2); + TTS_ULP_EQUAL(eve::full_circle(cos)(a2) , map(ref, a2), 2); + TTS_ULP_EQUAL(cos(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(cos(a1) , map(ref, a1), 2); + TTS_ULP_EQUAL(cos(a2) , map(ref, a2), 2); + TTS_ULP_EQUAL(cos(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(cos(a4) , map(ref, a4), 2); TTS_ULP_EQUAL(diff(cos)(a0), map([](auto e) -> v_t { return -std::sin(e); }, a0), 2); + + +// TTS_ULP_EQUAL(diff(cos)(a0), map([](auto e) -> v_t { return -std::sin(e); }, a0), 2); +// std::cout << std::hexfloat << 1.0/180 << std::endl; +// __float128 a = 1.0Q/180; +// std::cout << std::hexfloat << double(a) << std::endl; +// std::cout << std::hexfloat << double(a-double(a))<< std::endl; + +// double z = 0x1.6c16c16c16c16p-8; +// std::cout << std::hexfloat << double(a-z)<< std::endl; + +// double a = 1.0/180; +// std::cout << std::hexfloat << a << std::endl; +// auto af = float(a); +// auto a2f = float(a-af); +// std::cout << std::hexfloat << af<< std::endl; +// std::cout << std::hexfloat << a2f<< std::endl; +// double z = double(af)+double(a2f); +// // double z = 0x1.6c16c16c16c16p-8; +// std::cout << std::hexfloat << z<< std::endl; + }; diff --git a/test/unit/module/real/math/cosd.cpp b/test/unit/module/real/math/cosd.cpp index 6d8b893526..67108015d4 100644 --- a/test/unit/module/real/math/cosd.cpp +++ b/test/unit/module/real/math/cosd.cpp @@ -35,17 +35,17 @@ EVE_TEST_TYPES( "Check return types of cosd" //================================================================================================== // cosd tests //================================================================================================== -auto mrest = [](eve::as const & ){ return T(-45); }; -auto rest = [](eve::as const & ){ return T( 45); }; -auto msmall = [](eve::as const & ){ return T(-90 ); }; -auto small = [](eve::as const & ){ return T( 90 ); }; +auto mquarter_c = [](eve::as const & ){ return T(-45); }; +auto quarter_c = [](eve::as const & ){ return T( 45); }; +auto mhalf_c = [](eve::as const & ){ return T(-90 ); }; +auto half_c = [](eve::as const & ){ return T( 90 ); }; auto mmed = [](eve::as const & ){ return -5000; }; auto med = [](eve::as const & ){ return 5000; }; EVE_TEST( "Check behavior of cosd on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) , eve::test::randoms(mmed, med)) ) (T const& a0, T const& a1, T const& a2) @@ -57,15 +57,9 @@ EVE_TEST( "Check behavior of cosd on wide" using v_t = eve::element_type_t; auto ref = [](auto e) -> v_t { return boost::math::cos_pi(e/180.0l); }; - TTS_ULP_EQUAL(eve::restricted(cosd)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(cosd)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(cosd)(a1) , map(ref, a1), 30); - TTS_ULP_EQUAL(eve::medium(cosd)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(cosd)(a1) , map(ref, a1), 30); - TTS_ULP_EQUAL(eve::medium(cosd)(a2) , map(ref, a2), 300); - TTS_ULP_EQUAL(eve::big(cosd)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(cosd)(a1) , map(ref, a1), 30); - TTS_ULP_EQUAL(eve::big(cosd)(a2) , map(ref, a2), 300); + TTS_ULP_EQUAL(eve::quarter_circle(cosd)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(cosd)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(cosd)(a1) , map(ref, a1), 30); TTS_ULP_EQUAL(cosd(a0) , map(ref, a0), 2); TTS_ULP_EQUAL(cosd(a1) , map(ref, a1), 30); TTS_ULP_EQUAL(cosd(a2) , map(ref, a2), 300); @@ -79,16 +73,10 @@ EVE_TEST_TYPES( "Check return types of cosd" ) (eve::as) { - TTS_ULP_EQUAL(eve::big(eve::cosd)(T(1)) , T(0.9998476951563912391570115588139148516927403105832) , 0.5 ); - TTS_ULP_EQUAL(eve::big(eve::cosd)(T(-1)) , T(0.9998476951563912391570115588139148516927403105832) , 0.5 ); - TTS_ULP_EQUAL(eve::big(eve::cosd)(T(45.0)) , T(0.70710678118654752440084436210484903928483593768847) , 0.5 ); - TTS_ULP_EQUAL(eve::big(eve::cosd)(-T(45.0)) , T(0.70710678118654752440084436210484903928483593768847) , 0.5 ); - TTS_ULP_EQUAL(eve::big(eve::cosd)(T(-500.0)) , T(-0.7660444431189780352023926505554166739358324570804) , 3.5 ); - TTS_ULP_EQUAL(eve::big(eve::cosd)(T(500.0)) , T(-0.7660444431189780352023926505554166739358324570804) , 3.5 ); - TTS_ULP_EQUAL(eve::medium(eve::cosd)(T(1)) , T(0.9998476951563912391570115588139148516927403105832) , 0.5 ); - TTS_ULP_EQUAL(eve::medium(eve::cosd)(T(-1)) , T(0.9998476951563912391570115588139148516927403105832) , 0.5 ); - TTS_ULP_EQUAL(eve::medium(eve::cosd)(T(45.0)) , T(0.70710678118654752440084436210484903928483593768847) , 0.5 ); - TTS_ULP_EQUAL(eve::medium(eve::cosd)(-T(45.0)) , T(0.70710678118654752440084436210484903928483593768847) , 0.5 ); - TTS_ULP_EQUAL(eve::medium(eve::cosd)(T(-500.0)) , T(-0.7660444431189780352023926505554166739358324570804) , 3.5 ); - TTS_ULP_EQUAL(eve::medium(eve::cosd)(T(500.0)) , T(-0.7660444431189780352023926505554166739358324570804) , 3.5 ); + TTS_ULP_EQUAL(eve::cosd(T(1)) , T(0.9998476951563912391570115588139148516927403105832) , 0.5 ); + TTS_ULP_EQUAL(eve::cosd(T(-1)) , T(0.9998476951563912391570115588139148516927403105832) , 0.5 ); + TTS_ULP_EQUAL(eve::cosd(T(45.0)) , T(0.70710678118654752440084436210484903928483593768847) , 0.5 ); + TTS_ULP_EQUAL(eve::cosd(-T(45.0)) , T(0.70710678118654752440084436210484903928483593768847) , 0.5 ); + TTS_ULP_EQUAL(eve::cosd(T(-500.0)) , T(-0.7660444431189780352023926505554166739358324570804) , 3.5 ); + TTS_ULP_EQUAL(eve::cosd(T(500.0)) , T(-0.7660444431189780352023926505554166739358324570804) , 3.5 ); }; diff --git a/test/unit/module/real/math/cospi.cpp b/test/unit/module/real/math/cospi.cpp index 9f4dd14dfc..3592ca1a09 100644 --- a/test/unit/module/real/math/cospi.cpp +++ b/test/unit/module/real/math/cospi.cpp @@ -36,17 +36,17 @@ EVE_TEST_TYPES( "Check return types of cospi" //================================================================================================== // cospi tests //================================================================================================== -auto mrest = [](eve::as const & ){ return T(-0.25); }; -auto rest = [](eve::as const & ){ return T( 0.25); }; -auto msmall = [](eve::as const & ){ return T(-0.5 ); }; -auto small = [](eve::as const & ){ return T( 0.5 ); }; -auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::medium_type(), tgt)*eve::invpi(tgt); }; -auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::medium_type(), tgt)*eve::invpi(tgt); }; +auto mquarter_c = [](eve::as const & ){ return T(-0.25); }; +auto quarter_c = [](eve::as const & ){ return T( 0.25); }; +auto mhalf_c = [](eve::as const & ){ return T(-0.5 ); }; +auto half_c = [](eve::as const & ){ return T( 0.5 ); }; +auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt)*eve::invpi(tgt); }; +auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt)*eve::invpi(tgt); }; EVE_TEST( "Check behavior of cospi on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) @@ -60,16 +60,9 @@ EVE_TEST( "Check behavior of cospi on wide" using v_t = eve::element_type_t; long double ldpi = 3.1415926535897932384626433832795028841971693993751; auto ref = [](auto e) -> v_t { return boost::math::cos_pi(e); }; - TTS_ULP_EQUAL(eve::restricted(cospi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(cospi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(cospi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(cospi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(cospi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(cospi)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(cospi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(cospi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::big(cospi)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(cospi)(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(eve::quarter_circle(cospi)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(cospi)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(cospi)(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(cospi(a0) , map(ref, a0), 2); TTS_ULP_EQUAL(cospi(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(cospi(a2) , map(ref, a2), 2); diff --git a/test/unit/module/real/math/cot.cpp b/test/unit/module/real/math/cot.cpp index 9345fdea26..a8a943c772 100644 --- a/test/unit/module/real/math/cot.cpp +++ b/test/unit/module/real/math/cot.cpp @@ -37,41 +37,41 @@ EVE_TEST_TYPES( "Check return types of cot" //================================================================================================== // cot tests //================================================================================================== -auto mrest = [](eve::as const & tgt){ return -eve::pio_4(tgt); }; -auto rest = [](eve::as const & tgt){ return eve::pio_4(tgt); }; -auto msmall = [](eve::as const & tgt){ return -eve::pio_2(tgt); }; -auto small = [](eve::as const & tgt){ return eve::pio_2(tgt); }; -auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::medium_type(), tgt); }; -auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::medium_type(), tgt); }; +auto mquarter_c = [](eve::as const & tgt){ return -eve::pio_4(tgt); }; +auto quarter_c = [](eve::as const & tgt){ return eve::pio_4(tgt); }; +auto mhalf_c = [](eve::as const & tgt){ return -eve::pio_2(tgt); }; +auto mfull_c =[](eve::as const & tgt){ return -eve::pi(tgt); }; +auto full_c =[](eve::as const & tgt){ return eve::pi(tgt); }; +auto half_c = [](eve::as const & tgt){ return eve::pio_2(tgt); }; +auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt); }; +auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt); }; EVE_TEST( "Check behavior of cot on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) + , eve::test::randoms(mfull_c ,full_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) -(T const& a0, T const& a1, T const& a2, T const& a3) +(T const& a0, T const& a1, T const& a2, T const& a3, T const& a4) { using eve::detail::map; using eve::cot; using eve::diff; using v_t = eve::element_type_t; auto ref = [](auto e) -> v_t { return 1/std::tan(double(e)); }; - TTS_ULP_EQUAL(eve::restricted(cot)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(cot)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(cot)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(cot)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(cot)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(cot)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(cot)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(cot)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::big(cot)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(cot)(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(eve::quarter_circle(cot)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(cot)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(cot)(a1) , map(ref, a1), 2); + TTS_ULP_EQUAL(eve::full_circle(cot)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::full_circle(cot)(a1) , map(ref, a1), 2); + TTS_ULP_EQUAL(eve::full_circle(cot)(a2) , map(ref, a2), 2); TTS_ULP_EQUAL(cot(a0) , map(ref, a0), 2); TTS_ULP_EQUAL(cot(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(cot(a2) , map(ref, a2), 2); TTS_ULP_EQUAL(cot(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(cot(a4) , map(ref, a4), 2); TTS_ULP_EQUAL(diff(cot)(a0), map([](auto e) -> v_t { return -eve::sqr(eve::csc(e)); }, a0), 2); TTS_IEEE_EQUAL(cot(T( 0 )), eve::inf(eve::as()) ); diff --git a/test/unit/module/real/math/cotd.cpp b/test/unit/module/real/math/cotd.cpp index 6e0ca8269b..6626d1ea96 100644 --- a/test/unit/module/real/math/cotd.cpp +++ b/test/unit/module/real/math/cotd.cpp @@ -40,17 +40,17 @@ EVE_TEST_TYPES( "Check return types of cotd" //================================================================================================== // cotd tests //================================================================================================== -auto mrest = [](eve::as const & ){ return T(-45); }; -auto rest = [](eve::as const & ){ return T( 45); }; -auto msmall = [](eve::as const & ){ return T(-90 ); }; -auto small = [](eve::as const & ){ return T( 90 ); }; +auto mquarter_c = [](eve::as const & ){ return T(-45); }; +auto quarter_c = [](eve::as const & ){ return T( 45); }; +auto mhalf_c = [](eve::as const & ){ return T(-90 ); }; +auto half_c = [](eve::as const & ){ return T( 90 ); }; auto mmed = [](eve::as const & ){ return -5000; }; auto med = [](eve::as const & ){ return 5000; }; EVE_TEST( "Check behavior of cotd on wide" - , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::simd::restricted::ieee_reals + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) @@ -62,26 +62,19 @@ EVE_TEST( "Check behavior of cotd on wide" using eve::deginrad; using v_t = eve::element_type_t; auto ref = [](auto e) -> v_t { auto d = eve::sind(e); return d ? eve::cosd(e)/eve::sind(e): eve::nan(eve::as(e)); }; - TTS_ULP_EQUAL(eve::restricted(cotd)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(cotd)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(cotd)(a1) , map(ref, a1), 40); - TTS_ULP_EQUAL(eve::medium(cotd)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(cotd)(a1) , map(ref, a1), 40); - TTS_ULP_EQUAL(eve::medium(cotd)(a2) , map(ref, a2), 300); - TTS_ULP_EQUAL(eve::big(cotd)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(cotd)(a1) , map(ref, a1), 40); - TTS_ULP_EQUAL(eve::big(cotd)(a2) , map(ref, a2), 300); - TTS_ULP_EQUAL(eve::big(cotd)(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(eve::quarter_circle(cotd)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(cotd)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(cotd)(a1) , map(ref, a1), 40); TTS_ULP_EQUAL(cotd(a0) , map(ref, a0), 2); TTS_ULP_EQUAL(cotd(a1) , map(ref, a1), 40); TTS_ULP_EQUAL(cotd(a2) , map(ref, a2), 300); TTS_ULP_EQUAL(cotd(a3) , map(ref, a3), 2); auto dinr = 1.7453292519943295769236907684886127134428718885417e-2l; - TTS_ULP_EQUAL(diff(cotd)(a0), map([dinr](auto e) -> v_t { return -dinr*eve::sqr(eve::cscd(e)); }, a0), 2); + TTS_ULP_EQUAL(diff(cotd)(a0), map([dinr](auto e) -> v_t { return -dinr*eve::sqr(eve::cscd(e)); }, a0), 4); }; -EVE_TEST_TYPES( "Check return types of cotd" +EVE_TEST_TYPES( "Check corner cases of cotd" , eve::test::simd::ieee_reals ) (eve::as) @@ -94,18 +87,6 @@ EVE_TEST_TYPES( "Check return types of cotd" TTS_ULP_EQUAL(cotd( T(500.0)) , T(-1.19175359259420995870530807186041933693070040770853) , 6); TTS_ULP_EQUAL(cotd(-T(500.0)) , T(1.19175359259420995870530807186041933693070040770853) , 6); - TTS_ULP_EQUAL(eve::big(cotd)( T( 1)) , T(57.289961630759424687278147537112577980217522235144) , 6); - TTS_ULP_EQUAL(eve::big(cotd)(-T( 1)) , T(-57.289961630759424687278147537112577980217522235144) , 6); - TTS_ULP_EQUAL(eve::big(cotd)( T( 45)) , T(1) , 6); - TTS_ULP_EQUAL(eve::big(cotd)(-T( 45)) , T(-1) , 6); - TTS_ULP_EQUAL(eve::big(cotd)( T(500.0)) , T(-1.19175359259420995870530807186041933693070040770853) , 6); - TTS_ULP_EQUAL(eve::big(cotd)(-T(500.0)) , T(1.19175359259420995870530807186041933693070040770853) , 6); - TTS_ULP_EQUAL(eve::medium(cotd)( T( 1)) , T(57.289961630759424687278147537112577980217522235144) , 6); - TTS_ULP_EQUAL(eve::medium(cotd)(-T( 1)) , T(-57.289961630759424687278147537112577980217522235144) , 6); - TTS_ULP_EQUAL(eve::medium(cotd)( T( 45)) , T(1) , 6); - TTS_ULP_EQUAL(eve::medium(cotd)(-T( 45)) , T(-1) , 6); - TTS_ULP_EQUAL(eve::medium(cotd)( T(500.0)) , T(-1.19175359259420995870530807186041933693070040770853) , 6); - TTS_ULP_EQUAL(eve::medium(cotd)(-T(500.0)) , T(1.19175359259420995870530807186041933693070040770853) , 6); }; diff --git a/test/unit/module/real/math/cotpi.cpp b/test/unit/module/real/math/cotpi.cpp index b57d3a1c50..ee7832e37d 100644 --- a/test/unit/module/real/math/cotpi.cpp +++ b/test/unit/module/real/math/cotpi.cpp @@ -37,17 +37,17 @@ EVE_TEST_TYPES( "Check return types of cotpi" //================================================================================================== // cotpi tests //================================================================================================== -auto mrest = [](eve::as const & ){ return T(-0.25); }; -auto rest = [](eve::as const & ){ return T( 0.25); }; -auto msmall = [](eve::as const & ){ return T(-0.5 ); }; -auto small = [](eve::as const & ){ return T( 0.5 ); }; -auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::medium_type(), tgt)*eve::invpi(tgt); }; -auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::medium_type(), tgt)*eve::invpi(tgt); }; +auto mquarter_c = [](eve::as const & ){ return T(-0.25); }; +auto quarter_c = [](eve::as const & ){ return T( 0.25); }; +auto mhalf_c = [](eve::as const & ){ return T(-0.5 ); }; +auto half_c = [](eve::as const & ){ return T( 0.5 ); }; +auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt)*eve::invpi(tgt); }; +auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt)*eve::invpi(tgt); }; EVE_TEST( "Check behavior of cotpi on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) @@ -61,16 +61,9 @@ EVE_TEST( "Check behavior of cotpi on wide" using v_t = eve::element_type_t; long double ldpi = 3.1415926535897932384626433832795028841971693993751; auto ref = [](auto e) -> v_t { auto d = boost::math::sin_pi(e); return d ? boost::math::cos_pi(e)/d : eve::nan(eve::as(e)); }; - TTS_ULP_EQUAL(eve::restricted(cotpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(cotpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(cotpi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(cotpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(cotpi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(cotpi)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(cotpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(cotpi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::big(cotpi)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(cotpi)(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(eve::quarter_circle(cotpi)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(cotpi)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(cotpi)(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(cotpi(a0) , map(ref, a0), 2); TTS_ULP_EQUAL(cotpi(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(cotpi(a2) , map(ref, a2), 2); diff --git a/test/unit/module/real/math/csc.cpp b/test/unit/module/real/math/csc.cpp index f6e33a5460..0c0b39bf57 100644 --- a/test/unit/module/real/math/csc.cpp +++ b/test/unit/module/real/math/csc.cpp @@ -35,17 +35,17 @@ EVE_TEST_TYPES( "Check return types of csc" //================================================================================================== // csc tests //================================================================================================== -auto mrest = [](eve::as const & tgt){ return -eve::pio_4(tgt); }; -auto rest = [](eve::as const & tgt){ return eve::pio_4(tgt); }; -auto msmall = [](eve::as const & tgt){ return -eve::pio_2(tgt); }; -auto small = [](eve::as const & tgt){ return eve::pio_2(tgt); }; -auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::medium_type(), tgt); }; -auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::medium_type(), tgt); }; +auto mquarter_c = [](eve::as const & tgt){ return -eve::pio_4(tgt); }; +auto quarter_c = [](eve::as const & tgt){ return eve::pio_4(tgt); }; +auto mhalf_c = [](eve::as const & tgt){ return -eve::pio_2(tgt); }; +auto half_c = [](eve::as const & tgt){ return eve::pio_2(tgt); }; +auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt); }; +auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt); }; EVE_TEST( "Check behavior of csc on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) @@ -56,16 +56,9 @@ EVE_TEST( "Check behavior of csc on wide" using eve::diff; using v_t = eve::element_type_t; auto ref = [](auto e) -> v_t { return 1.0/std::sin(double(e)); }; - TTS_ULP_EQUAL(eve::restricted(csc)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(csc)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(csc)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(csc)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(csc)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(csc)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(csc)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(csc)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::big(csc)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(csc)(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(eve::quarter_circle(csc)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(csc)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(csc)(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(csc(a0) , map(ref, a0), 2); TTS_ULP_EQUAL(csc(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(csc(a2) , map(ref, a2), 2); diff --git a/test/unit/module/real/math/cscd.cpp b/test/unit/module/real/math/cscd.cpp index 5107ccd6ee..bff5d05175 100644 --- a/test/unit/module/real/math/cscd.cpp +++ b/test/unit/module/real/math/cscd.cpp @@ -36,17 +36,17 @@ EVE_TEST_TYPES( "Check return types of cscd" //================================================================================================== // cscd tests //================================================================================================== -auto mrest = [](eve::as const & ){ return T(-45); }; -auto rest = [](eve::as const & ){ return T( 45); }; -auto msmall = [](eve::as const & ){ return T(-90 ); }; -auto small = [](eve::as const & ){ return T( 90 ); }; +auto mquarter_c = [](eve::as const & ){ return T(-45); }; +auto quarter_c = [](eve::as const & ){ return T( 45); }; +auto mhalf_c = [](eve::as const & ){ return T(-90 ); }; +auto half_c = [](eve::as const & ){ return T( 90 ); }; auto mmed = [](eve::as const & ){ return -5000; }; auto med = [](eve::as const & ){ return 5000; }; EVE_TEST( "Check behavior of cscd on wide" - , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::simd::restricted::ieee_reals + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) , eve::test::randoms(mmed, med)) ) (T const& a0, T const& a1, T const& a2) @@ -57,15 +57,9 @@ EVE_TEST( "Check behavior of cscd on wide" using eve::deginrad; using v_t = eve::element_type_t; auto ref = [](auto e) -> v_t { auto d = eve::sind(e);return d ? 1.0/d : eve::nan(eve::as(e)); }; - TTS_ULP_EQUAL(eve::restricted(cscd)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(cscd)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(cscd)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(cscd)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(cscd)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(cscd)(a2) , map(ref, a2), 300); - TTS_ULP_EQUAL(eve::big(cscd)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(cscd)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::big(cscd)(a2) , map(ref, a2), 300); + TTS_ULP_EQUAL(eve::quarter_circle(cscd)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(cscd)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(cscd)(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(cscd(a0) , map(ref, a0), 2); TTS_ULP_EQUAL(cscd(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(cscd(a2) , map(ref, a2), 300); diff --git a/test/unit/module/real/math/cscpi.cpp b/test/unit/module/real/math/cscpi.cpp index 415085b2bf..0ee00ff621 100644 --- a/test/unit/module/real/math/cscpi.cpp +++ b/test/unit/module/real/math/cscpi.cpp @@ -37,17 +37,17 @@ EVE_TEST_TYPES( "Check return types of cscpi" //================================================================================================== // cscpi tests //================================================================================================== -auto mrest = [](eve::as const & ){ return T(-0.25); }; -auto rest = [](eve::as const & ){ return T( 0.25); }; -auto msmall = [](eve::as const & ){ return T(-0.5 ); }; -auto small = [](eve::as const & ){ return T( 0.5 ); }; -auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::medium_type(), tgt)*eve::invpi(tgt); }; -auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::medium_type(), tgt)*eve::invpi(tgt); }; +auto mquarter_c = [](eve::as const & ){ return T(-0.25); }; +auto quarter_c = [](eve::as const & ){ return T( 0.25); }; +auto mhalf_c = [](eve::as const & ){ return T(-0.5 ); }; +auto half_c = [](eve::as const & ){ return T( 0.5 ); }; +auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt)*eve::invpi(tgt); }; +auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt)*eve::invpi(tgt); }; EVE_TEST( "Check behavior of cscpi on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) @@ -61,16 +61,9 @@ EVE_TEST( "Check behavior of cscpi on wide" using v_t = eve::element_type_t; long double ldpi = 3.1415926535897932384626433832795028841971693993751; auto ref = [](auto e) -> v_t {auto d = eve::sinpi(double(e)); return d ? 1.0/d :eve::nan(eve::as(e)); }; - TTS_ULP_EQUAL(eve::restricted(cscpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(cscpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(cscpi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(cscpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(cscpi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(cscpi)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(cscpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(cscpi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::big(cscpi)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(cscpi)(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(eve::quarter_circle(cscpi)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(cscpi)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(cscpi)(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(cscpi(a0) , map(ref, a0), 2); TTS_ULP_EQUAL(cscpi(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(cscpi(a2) , map(ref, a2), 2); diff --git a/test/unit/module/real/math/pow.cpp b/test/unit/module/real/math/pow.cpp index e96ece1c57..1ab3fca637 100644 --- a/test/unit/module/real/math/pow.cpp +++ b/test/unit/module/real/math/pow.cpp @@ -51,8 +51,8 @@ EVE_TEST( "Check behavior of pow on wide" using eve::detail::map; using v_t = eve::element_type_t; - TTS_ULP_EQUAL(eve::pow(a0, a1) , map([](auto e, auto f) -> v_t { return std::pow(std::abs(e), f); }, a0, a1), 2); - TTS_ULP_EQUAL(eve::pow(a2, a3) , map([](auto e, auto f) -> v_t { return std::pow(std::abs(e), f); }, a2, a3), 2); + TTS_ULP_EQUAL(eve::pow(a0, a1) , map([](auto e, auto f) -> v_t { return std::pow(std::abs(e), f); }, a0, a1), 64); + TTS_ULP_EQUAL(eve::pow(a2, a3) , map([](auto e, auto f) -> v_t { return std::pow(std::abs(e), f); }, a2, a3), 64); TTS_ULP_EQUAL(eve::diff_1st(eve::pow)(a0, a1), eve::pow(a0, eve::dec(a1))*a1, 2); TTS_ULP_EQUAL(eve::diff_1st(eve::pow)(a2, a3), eve::pow(a2, eve::dec(a3))*a3, 2); TTS_ULP_EQUAL(eve::diff_2nd(eve::pow)(a0, a1), eve::pow(a0, a1)*eve::log(a0), 2); diff --git a/test/unit/module/real/math/pow1p.cpp b/test/unit/module/real/math/pow1p.cpp index f26641cbf9..51e304ab3e 100644 --- a/test/unit/module/real/math/pow1p.cpp +++ b/test/unit/module/real/math/pow1p.cpp @@ -51,8 +51,8 @@ EVE_TEST( "Check behavior of pow1p on wide" using eve::detail::map; using v_t = eve::element_type_t; - TTS_ULP_EQUAL(eve::pow1p(a0, a1) , map([](auto e, auto f) -> v_t { return std::pow(double(e+1), double(f)); }, a0, a1), 2); - TTS_ULP_EQUAL(eve::pow1p(a2, a3) , map([](auto e, auto f) -> v_t { return std::pow(double(e+1), double(f)); }, a2, a3), 5); + TTS_ULP_EQUAL(eve::pow1p(a0, a1) , map([](auto e, auto f) -> v_t { return std::pow(double(e+1), double(f)); }, a0, a1), 64); + TTS_ULP_EQUAL(eve::pow1p(a2, a3) , map([](auto e, auto f) -> v_t { return std::pow(double(e+1), double(f)); }, a2, a3), 64); TTS_ULP_EQUAL(eve::diff(eve::pow1p)(a0, a1), eve::pow1p(a0, eve::dec(a1))*a1, 2); TTS_ULP_EQUAL(eve::diff(eve::pow1p)(a2, a3), eve::pow1p(a2, eve::dec(a3))*a3, 2); TTS_ULP_EQUAL(eve::diff_2nd(eve::pow1p)(a0, a1), eve::pow1p(a0, a1)*eve::log1p(a0), 2); diff --git a/test/unit/module/real/math/powm1.cpp b/test/unit/module/real/math/powm1.cpp index ba258da8c4..4242933c6a 100644 --- a/test/unit/module/real/math/powm1.cpp +++ b/test/unit/module/real/math/powm1.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -30,7 +31,6 @@ EVE_TEST_TYPES( "Check return types of powm1" TTS_EXPR_IS( eve::powm1(T(), T()) , T); TTS_EXPR_IS( eve::powm1(v_t(), v_t()), v_t); TTS_EXPR_IS( eve::powm1(T(), v_t()), T); -// TTS_EXPR_IS( eve::powm1(v_t(), T()), T); }; //================================================================================================== @@ -48,8 +48,8 @@ EVE_TEST( "Check behavior of powm1 on wide" using eve::detail::map; using v_t = eve::element_type_t; - TTS_ULP_EQUAL(eve::powm1(a0, a1) , map([](auto e, auto f) -> v_t { return std::pow(double(e), double(f))-1; }, a0, a1), 2); - TTS_ULP_EQUAL(eve::powm1(a2, a3) , map([](auto e, auto f) -> v_t { return std::pow(double(e), double(f))-1; }, a2, a3), 5); + TTS_RELATIVE_EQUAL(eve::powm1(a0, a1) , map([](auto e, auto f) -> v_t { return eve::pow(double(e), double(f))-1; }, a0, a1), 1000*eve::eps(eve::as())); + TTS_RELATIVE_EQUAL(eve::powm1(a2, a3) , map([](auto e, auto f) -> v_t { return eve::pow(double(e), double(f))-1; }, a2, a3), 1000*eve::eps(eve::as())); TTS_ULP_EQUAL(eve::diff_1st(eve::powm1)(a0, a1), eve::pow(a0, eve::dec(a1))*a1, 2); TTS_ULP_EQUAL(eve::diff_1st(eve::powm1)(a2, a3), eve::pow(a2, eve::dec(a3))*a3, 2); TTS_ULP_EQUAL(eve::diff_2nd(eve::powm1)(a0, a1), eve::pow(a0, a1)*eve::log(a0), 2); diff --git a/test/unit/module/real/math/rempio2.cpp b/test/unit/module/real/math/rempio2.cpp index ded145c6fe..4b0ca5dded 100644 --- a/test/unit/module/real/math/rempio2.cpp +++ b/test/unit/module/real/math/rempio2.cpp @@ -32,17 +32,17 @@ EVE_TEST_TYPES( "Check return types of cos" //================================================================================================== // cos tests //================================================================================================== -auto mrest = [](eve::as const & tgt){ return -eve::pio_4(tgt); }; -auto rest = [](eve::as const & tgt){ return eve::pio_4(tgt); }; -auto msmall = [](eve::as const & tgt){ return -eve::pio_2(tgt); }; -auto small = [](eve::as const & tgt){ return eve::pio_2(tgt); }; +auto mhalf_c = [](eve::as const & tgt){ return -eve::pio_4(tgt); }; +auto half_c = [](eve::as const & tgt){ return eve::pio_4(tgt); }; +auto mhalf_c = [](eve::as const & tgt){ return -eve::pio_2(tgt); }; +auto half_c = [](eve::as const & tgt){ return eve::pio_2(tgt); }; auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::medium_type(), tgt); }; auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::medium_type(), tgt); }; EVE_TEST( "Check behavior of cos on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) @@ -57,53 +57,21 @@ EVE_TEST( "Check behavior of cos on wide" auto [sn2, sx2, sdx2] = eve::rem_pio2(a2); auto [sn3, sx3, sdx3] = eve::rem_pio2(a3); { - auto [n0, x0, dx0] = eve::restricted(rempio2)(a0); + auto [n0, x0, dx0] = eve::quarter_circle(rempio2)(a0); TTS_ULP_EQUAL(n0 , sn0, 2); TTS_ULP_EQUAL(x0 , sx0, 2); TTS_ULP_EQUAL(dx0 , sdx0, 2); } { - auto [n0, x0, dx0] = eve::small(rempio2)(a0); + auto [n0, x0, dx0] = eve::half_circle(rempio2)(a0); TTS_ULP_EQUAL(n0 , sn0, 2); TTS_ULP_EQUAL(x0 , sx0, 2); TTS_ULP_EQUAL(dx0 , sdx0, 2); - auto [n1, x1, dx1] = eve::small(rempio2)(a1); + auto [n1, x1, dx1] = eve::half_circle(rempio2)(a1); TTS_ULP_EQUAL(n1 , sn1, 2); TTS_ULP_EQUAL(x1 , sx1, 2); TTS_ULP_EQUAL(dx1 , sdx1, 2); } - { - auto [n0, x0, dx0] = eve::medium(rempio2)(a0); - TTS_ULP_EQUAL(n0 , sn0, 2); - TTS_ULP_EQUAL(x0 , sx0, 2); - TTS_ULP_EQUAL(dx0 , sdx0, 2); - auto [n1, x1, dx1] = eve::medium(rempio2)(a1); - TTS_ULP_EQUAL(n1 , sn1, 2); - TTS_ULP_EQUAL(x1 , sx1, 2); - TTS_ULP_EQUAL(dx1 , sdx1, 2); - auto [n2, x2, dx2] = eve::medium(rempio2)(a2); - TTS_ULP_EQUAL(n2 , sn2, 2); - TTS_ULP_EQUAL(x2 , sx2, 2); - TTS_ULP_EQUAL(dx2 , sdx2, 2); - } - { - auto [n0, x0, dx0] = eve::big(rempio2)(a0); - TTS_ULP_EQUAL(n0 , sn0, 2); - TTS_ULP_EQUAL(x0 , sx0, 2); - TTS_ULP_EQUAL(dx0 , sdx0, 2); - auto [n1, x1, dx1] = eve::big(rempio2)(a1); - TTS_ULP_EQUAL(n1 , sn1, 2); - TTS_ULP_EQUAL(x1 , sx1, 2); - TTS_ULP_EQUAL(dx1 , sdx1, 2); - auto [n2, x2, dx2] = eve::big(rempio2)(a2); - TTS_ULP_EQUAL(n2 , sn2, 2); - TTS_ULP_EQUAL(x2 , sx2, 2); - TTS_ULP_EQUAL(dx2 , sdx2, 2); - auto [n3, x3, dx3] = eve::big(rempio2)(a3); - TTS_ULP_EQUAL(n3 , sn3, 2); - TTS_ULP_EQUAL(x3 , sx3, 2); - TTS_ULP_EQUAL(dx3 , sdx3, 2); - } { auto [n0, x0, dx0] = eve::rempio2(a0); TTS_ULP_EQUAL(n0 , sn0, 2); diff --git a/test/unit/module/real/math/sec.cpp b/test/unit/module/real/math/sec.cpp index 164df79ae6..8bbdf553d3 100644 --- a/test/unit/module/real/math/sec.cpp +++ b/test/unit/module/real/math/sec.cpp @@ -34,17 +34,17 @@ EVE_TEST_TYPES( "Check return types of sec" //================================================================================================== // sec tests //================================================================================================== -auto mrest = [](eve::as const & tgt){ return -eve::pio_4(tgt); }; -auto rest = [](eve::as const & tgt){ return eve::pio_4(tgt); }; -auto msmall = [](eve::as const & tgt){ return -eve::pio_2(tgt); }; -auto small = [](eve::as const & tgt){ return eve::pio_2(tgt); }; -auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::medium_type(), tgt); }; -auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::medium_type(), tgt); }; +auto mquarter_c = [](eve::as const & tgt){ return -eve::pio_4(tgt); }; +auto quarter_c = [](eve::as const & tgt){ return eve::pio_4(tgt); }; +auto mhalf_c = [](eve::as const & tgt){ return -eve::pio_2(tgt); }; +auto half_c = [](eve::as const & tgt){ return eve::pio_2(tgt); }; +auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt); }; +auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt); }; EVE_TEST( "Check behavior of sec on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) @@ -55,16 +55,9 @@ EVE_TEST( "Check behavior of sec on wide" using eve::diff; using v_t = eve::element_type_t; auto ref = [](auto e) -> v_t { return 1/std::cos(e); }; - TTS_ULP_EQUAL(eve::restricted(sec)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(sec)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(sec)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(sec)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(sec)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(sec)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(sec)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(sec)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::big(sec)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(sec)(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(eve::quarter_circle(sec)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(sec)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(sec)(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(sec(a0) , map(ref, a0), 2); TTS_ULP_EQUAL(sec(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(sec(a2) , map(ref, a2), 2); diff --git a/test/unit/module/real/math/secd.cpp b/test/unit/module/real/math/secd.cpp index b169f469dd..35a4b70611 100644 --- a/test/unit/module/real/math/secd.cpp +++ b/test/unit/module/real/math/secd.cpp @@ -36,17 +36,17 @@ EVE_TEST_TYPES( "Check return types of secd" //================================================================================================== // secd tests //================================================================================================== -auto mrest = [](eve::as const & ){ return T(-45); }; -auto rest = [](eve::as const & ){ return T( 45); }; -auto msmall = [](eve::as const & ){ return T(-90 ); }; -auto small = [](eve::as const & ){ return T( 90 ); }; +auto mquarter_c = [](eve::as const & ){ return T(-45); }; +auto quarter_c = [](eve::as const & ){ return T( 45); }; +auto mhalf_c = [](eve::as const & ){ return T(-90 ); }; +auto half_c = [](eve::as const & ){ return T( 90 ); }; auto mmed = [](eve::as const & ){ return -5000; }; auto med = [](eve::as const & ){ return 5000; }; EVE_TEST( "Check behavior of secd on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) , eve::test::randoms(mmed, med)) ) (T const& a0, T const& a1, T const& a2) @@ -58,15 +58,9 @@ EVE_TEST( "Check behavior of secd on wide" using v_t = eve::element_type_t; auto ref = [](auto e) -> v_t { return 1.0l/boost::math::cos_pi(e/180.0l); }; - TTS_ULP_EQUAL(eve::restricted(secd)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(secd)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(secd)(a1) , map(ref, a1), 50); - TTS_ULP_EQUAL(eve::medium(secd)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(secd)(a1) , map(ref, a1), 50); - TTS_ULP_EQUAL(eve::medium(secd)(a2) , map(ref, a2), 500); - TTS_ULP_EQUAL(eve::big(secd)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(secd)(a1) , map(ref, a1), 50); - TTS_ULP_EQUAL(eve::big(secd)(a2) , map(ref, a2), 500); + TTS_ULP_EQUAL(eve::quarter_circle(secd)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(secd)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(secd)(a1) , map(ref, a1), 50); TTS_ULP_EQUAL(secd(a0) , map(ref, a0), 2); TTS_ULP_EQUAL(secd(a1) , map(ref, a1), 50); TTS_ULP_EQUAL(secd(a2) , map(ref, a2), 500); @@ -82,26 +76,12 @@ EVE_TEST_TYPES( "Check return types of secd" { if constexpr( eve::platform::supports_invalids ) { - TTS_IEEE_EQUAL(eve::medium(eve::secd)(eve::nan(eve::as())) , eve::nan(eve::as()) ); - TTS_IEEE_EQUAL(eve::medium(eve::secd)(eve::inf(eve::as())) , eve::nan(eve::as()) ); - TTS_IEEE_EQUAL(eve::medium(eve::secd)(eve::minf(eve::as())) , eve::nan(eve::as()) ); + TTS_IEEE_EQUAL(eve::secd(eve::nan(eve::as())) , eve::nan(eve::as()) ); + TTS_IEEE_EQUAL(eve::secd(eve::inf(eve::as())) , eve::nan(eve::as()) ); + TTS_IEEE_EQUAL(eve::secd(eve::minf(eve::as())) , eve::nan(eve::as()) ); } - TTS_IEEE_EQUAL(eve::medium(eve::secd)(T( 0 )) , T(1)); - TTS_IEEE_EQUAL(eve::medium(eve::secd)(T(-0.)) , T(1)); + TTS_IEEE_EQUAL(eve::secd(T( 0 )) , T(1)); + TTS_IEEE_EQUAL(eve::secd(T(-0.)) , T(1)); - TTS_ULP_EQUAL(eve::medium(eve::secd)( T( 1) ) , T(1.00015232804390766542842643421257380147891180422143) , 3); - TTS_ULP_EQUAL(eve::medium(eve::secd)(-T( 1) ) , T(1.00015232804390766542842643421257380147891180422143) , 3); - TTS_ULP_EQUAL(eve::medium(eve::secd)( T( 45.0)) , T(1.41421356237309504880168872420969807856967187537694) , 5); - TTS_ULP_EQUAL(eve::medium(eve::secd)(-T( 45.0)) , T(1.41421356237309504880168872420969807856967187537694) , 5); - TTS_ULP_EQUAL(eve::medium(eve::secd)( T(500.0)) , T(-1.30540728933227860459313349292274081599849729126374) , 3); - TTS_ULP_EQUAL(eve::medium(eve::secd)(-T(500.0)) , T(-1.30540728933227860459313349292274081599849729126374) , 3); - TTS_ULP_EQUAL(eve::big(eve::secd)( T( 1) ) , T(1.00015232804390766542842643421257380147891180422143) , 3); - TTS_ULP_EQUAL(eve::big(eve::secd)(-T( 1) ) , T(1.00015232804390766542842643421257380147891180422143) , 3); - TTS_ULP_EQUAL(eve::big(eve::secd)( T( 45.0)) , T(1.41421356237309504880168872420969807856967187537694) , 5); - TTS_ULP_EQUAL(eve::big(eve::secd)(-T( 45.0)) , T(1.41421356237309504880168872420969807856967187537694) , 5); - TTS_ULP_EQUAL(eve::big(eve::secd)( T(500.0)) , T(-1.30540728933227860459313349292274081599849729126374) , 3); - TTS_ULP_EQUAL(eve::big(eve::secd)(-T(500.0)) , T(-1.30540728933227860459313349292274081599849729126374) , 3); - auto z = eve::maxflint(eve::as())*180; - TTS_ULP_EQUAL(eve::big(eve::secd)(z) , T(1) , 0.5); }; diff --git a/test/unit/module/real/math/secpi.cpp b/test/unit/module/real/math/secpi.cpp index 387712c73f..621e7cec07 100644 --- a/test/unit/module/real/math/secpi.cpp +++ b/test/unit/module/real/math/secpi.cpp @@ -38,17 +38,17 @@ EVE_TEST_TYPES( "Check return types of secpi" //================================================================================================== // secpi tests //================================================================================================== -auto mrest = [](eve::as const & ){ return T(-0.25); }; -auto rest = [](eve::as const & ){ return T( 0.25); }; -auto msmall = [](eve::as const & ){ return T(-0.5 ); }; -auto small = [](eve::as const & ){ return T( 0.5 ); }; -auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::medium_type(), tgt)*eve::invpi(tgt); }; -auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::medium_type(), tgt)*eve::invpi(tgt); }; +auto mquarter_c = [](eve::as const & ){ return T(-0.25); }; +auto quarter_c = [](eve::as const & ){ return T( 0.25); }; +auto mhalf_c = [](eve::as const & ){ return T(-0.5 ); }; +auto half_c = [](eve::as const & ){ return T( 0.5 ); }; +auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt)*eve::invpi(tgt); }; +auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt)*eve::invpi(tgt); }; EVE_TEST( "Check behavior of secpi on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) @@ -62,16 +62,9 @@ EVE_TEST( "Check behavior of secpi on wide" using v_t = eve::element_type_t; long double ldpi = 3.1415926535897932384626433832795028841971693993751; auto ref = [](auto e) -> v_t { auto c = boost::math::cos_pi(e); return c ? 1.0/boost::math::cos_pi(e) : eve::nan(eve::as(e)); }; - TTS_ULP_EQUAL(eve::restricted(secpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(secpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(secpi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(secpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(secpi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(secpi)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(secpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(secpi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::big(secpi)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(secpi)(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(eve::quarter_circle(secpi)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(secpi)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(secpi)(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(secpi(a0) , map(ref, a0), 2); TTS_ULP_EQUAL(secpi(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(secpi(a2) , map(ref, a2), 2); diff --git a/test/unit/module/real/math/sin.cpp b/test/unit/module/real/math/sin.cpp index 6458aa8d09..824fc6289e 100644 --- a/test/unit/module/real/math/sin.cpp +++ b/test/unit/module/real/math/sin.cpp @@ -33,40 +33,40 @@ EVE_TEST_TYPES( "Check return types of sin" //================================================================================================== // sin tests //================================================================================================== -auto mrest = [](eve::as const & tgt){ return -eve::pio_4(tgt); }; -auto rest = [](eve::as const & tgt){ return eve::pio_4(tgt); }; -auto msmall = [](eve::as const & tgt){ return -eve::pio_2(tgt); }; -auto small = [](eve::as const & tgt){ return eve::pio_2(tgt); }; -auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::medium_type(), tgt); }; -auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::medium_type(), tgt); }; +auto mquarter_c = [](eve::as const & tgt){ return -eve::pio_4(tgt); }; +auto quarter_c = [](eve::as const & tgt){ return eve::pio_4(tgt); }; +auto mhalf_c = [](eve::as const & tgt){ return -eve::pio_2(tgt); }; +auto half_c = [](eve::as const & tgt){ return eve::pio_2(tgt); }; +auto mfull_c =[](eve::as const & tgt){ return -eve::pi(tgt); }; +auto full_c =[](eve::as const & tgt){ return eve::pi(tgt); }; +auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt); }; +auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt); }; EVE_TEST( "Check behavior of sin on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) + , eve::test::randoms(mfull_c ,full_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) -(T const& a0, T const& a1, T const& a2, T const& a3) +(T const& a0, T const& a1, T const& a2, T const& a3, T const& a4) { using eve::detail::map; using eve::sin; using eve::diff; using v_t = eve::element_type_t; auto ref = [](auto e) -> v_t { return std::sin(e); }; - TTS_ULP_EQUAL(eve::restricted(sin)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(sin)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(sin)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(sin)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(sin)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(sin)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(sin)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(sin)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::big(sin)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(sin)(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(eve::quarter_circle(sin)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(sin)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(sin)(a1) , map(ref, a1), 2); + TTS_ULP_EQUAL(eve::full_circle(sin)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::full_circle(sin)(a1) , map(ref, a1), 2); + TTS_ULP_EQUAL(eve::full_circle(sin)(a2) , map(ref, a2), 2); TTS_ULP_EQUAL(sin(a0) , map(ref, a0), 2); TTS_ULP_EQUAL(sin(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(sin(a2) , map(ref, a2), 2); TTS_ULP_EQUAL(sin(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(sin(a4) , map(ref, a4), 2); TTS_ULP_EQUAL(diff(sin)(a0), map([](auto e) -> v_t { return std::cos(e); }, a0), 2); }; diff --git a/test/unit/module/real/math/sincos.cpp b/test/unit/module/real/math/sincos.cpp index b8d91a3777..96d1fd85cb 100644 --- a/test/unit/module/real/math/sincos.cpp +++ b/test/unit/module/real/math/sincos.cpp @@ -35,21 +35,24 @@ EVE_TEST_TYPES( "Check return types of cos" //================================================================================================== // cos tests //================================================================================================== -auto mrest = [](eve::as const & tgt){ return -eve::pio_4(tgt); }; -auto rest = [](eve::as const & tgt){ return eve::pio_4(tgt); }; -auto msmall = [](eve::as const & tgt){ return -eve::pio_2(tgt); }; -auto small = [](eve::as const & tgt){ return eve::pio_2(tgt); }; -auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::medium_type(), tgt); }; -auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::medium_type(), tgt); }; +auto mquarter_c = [](eve::as const & tgt){ return -eve::pio_4(tgt); }; +auto quarter_c = [](eve::as const & tgt){ return eve::pio_4(tgt); }; +auto mhalf_c = [](eve::as const & tgt){ return -eve::pio_2(tgt); }; +auto half_c = [](eve::as const & tgt){ return eve::pio_2(tgt); }; +auto mfull_c =[](eve::as const & tgt){ return -eve::pi(tgt); }; +auto full_c =[](eve::as const & tgt){ return eve::pi(tgt); }; +auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt); }; +auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt); }; EVE_TEST( "Check behavior of cos on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) + , eve::test::randoms(mfull_c ,full_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) -(T const& a0, T const& a1, T const& a2, T const& a3) +(T const& a0, T const& a1, T const& a2, T const& a3, T const& a4) { using eve::detail::map; using eve::sincos; @@ -58,43 +61,29 @@ EVE_TEST( "Check behavior of cos on wide" auto refc = [](auto e) -> v_t { return std::cos(e); }; auto refs = [](auto e) -> v_t { return std::sin(e); }; { - auto [s, c] = eve::restricted(sincos)(a0); + auto [s, c] = eve::quarter_circle(sincos)(a0); TTS_ULP_EQUAL(s , map(refs, a0), 2); TTS_ULP_EQUAL(c , map(refc, a0), 2); } { - auto [s, c] = eve::small(sincos)(a0); + auto [s, c] = eve::half_circle(sincos)(a0); TTS_ULP_EQUAL(s , map(refs, a0), 2); TTS_ULP_EQUAL(c , map(refc, a0), 2); - auto [s1, c1] = eve::small(sincos)(a1); + auto [s1, c1] = eve::half_circle(sincos)(a1); TTS_ULP_EQUAL(s1 , map(refs, a1), 2); TTS_ULP_EQUAL(c1 , map(refc, a1), 2); } { - auto [s, c] = eve::medium(sincos)(a0); + auto [s, c] = eve::full_circle(sincos)(a0); TTS_ULP_EQUAL(s , map(refs, a0), 2); TTS_ULP_EQUAL(c , map(refc, a0), 2); - auto [s1, c1] = eve::medium(sincos)(a1); + auto [s1, c1] = eve::full_circle(sincos)(a1); TTS_ULP_EQUAL(s1 , map(refs, a1), 2); TTS_ULP_EQUAL(c1 , map(refc, a1), 2); - auto [s2, c2] = eve::medium(sincos)(a2); + auto [s2, c2] = eve::full_circle(sincos)(a2); TTS_ULP_EQUAL(s2 , map(refs, a2), 2); TTS_ULP_EQUAL(c2 , map(refc, a2), 2); } - { - auto [s, c] = eve::big(sincos)(a0); - TTS_ULP_EQUAL(s , map(refs, a0), 2); - TTS_ULP_EQUAL(c , map(refc, a0), 2); - auto [s1, c1] = eve::big(sincos)(a1); - TTS_ULP_EQUAL(s1 , map(refs, a1), 2); - TTS_ULP_EQUAL(c1 , map(refc, a1), 2); - auto [s2, c2] = eve::big(sincos)(a2); - TTS_ULP_EQUAL(s2 , map(refs, a2), 2); - TTS_ULP_EQUAL(c2 , map(refc, a2), 2); - auto [s3, c3] = eve::big(sincos)(a3); - TTS_ULP_EQUAL(s3 , map(refs, a3), 2); - TTS_ULP_EQUAL(c3 , map(refc, a3), 2); - } { auto [s, c] = sincos(a0); TTS_ULP_EQUAL(s , map(refs, a0), 2); @@ -108,5 +97,8 @@ EVE_TEST( "Check behavior of cos on wide" auto [s3, c3] = sincos(a3); TTS_ULP_EQUAL(s3 , map(refs, a3), 2); TTS_ULP_EQUAL(c3 , map(refc, a3), 2); + auto [s4, c4] = sincos(a4); + TTS_ULP_EQUAL(s4 , map(refs, a4), 2); + TTS_ULP_EQUAL(c4 , map(refc, a4), 2); } }; diff --git a/test/unit/module/real/math/sind.cpp b/test/unit/module/real/math/sind.cpp index 5b8a7c5e83..ee7a356882 100644 --- a/test/unit/module/real/math/sind.cpp +++ b/test/unit/module/real/math/sind.cpp @@ -35,17 +35,17 @@ EVE_TEST_TYPES( "Check return types of sind" //================================================================================================== // sind tests //================================================================================================== -auto mrest = [](eve::as const & ){ return T(-45); }; -auto rest = [](eve::as const & ){ return T( 45); }; -auto msmall = [](eve::as const & ){ return T(-90 ); }; -auto small = [](eve::as const & ){ return T( 90 ); }; +auto mquarter_c = [](eve::as const & ){ return T(-45); }; +auto quarter_c = [](eve::as const & ){ return T( 45); }; +auto mhalf_c = [](eve::as const & ){ return T(-90 ); }; +auto half_c = [](eve::as const & ){ return T( 90 ); }; auto mmed = [](eve::as const & ){ return -5000; }; auto med = [](eve::as const & ){ return 5000; }; EVE_TEST( "Check behavior of sind on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) , eve::test::randoms(mmed, med)) ) (T const& a0, T const& a1, T const& a2) @@ -57,18 +57,12 @@ EVE_TEST( "Check behavior of sind on wide" using v_t = eve::element_type_t; auto ref = [](auto e) -> v_t { return boost::math::sin_pi(e/180.0l); }; - TTS_ULP_EQUAL(eve::restricted(sind)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(sind)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(sind)(a1) , map(ref, a1), 30); - TTS_ULP_EQUAL(eve::medium(sind)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(sind)(a1) , map(ref, a1), 30); - TTS_ULP_EQUAL(eve::medium(sind)(a2) , map(ref, a2), 300); - TTS_ULP_EQUAL(eve::big(sind)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(sind)(a1) , map(ref, a1), 30); - TTS_ULP_EQUAL(eve::big(sind)(a2) , map(ref, a2), 300); + TTS_ULP_EQUAL(eve::quarter_circle(sind)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(sind)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(sind)(a1) , map(ref, a1), 30); TTS_ULP_EQUAL(sind(a0) , map(ref, a0), 2); TTS_ULP_EQUAL(sind(a1) , map(ref, a1), 30); - TTS_ULP_EQUAL(sind(a2) , map(ref, a2), 300); + TTS_ULP_EQUAL(sind(a2) , map(ref, a2), 1024); auto dinr = 1.7453292519943295769236907684886127134428718885417e-2l; TTS_ULP_EQUAL(diff(sind)(a0), map([dinr](auto e) -> v_t { return dinr*boost::math::cos_pi(e/180.0l); }, a0), 2); @@ -79,12 +73,6 @@ EVE_TEST_TYPES( "Check return types of sind" ) (eve::as) { - TTS_ULP_EQUAL(eve::big(eve::sind)( T(1) ) , T(1.745240643728351281941897851631619247225272030714e-2) , 4.0); - TTS_ULP_EQUAL(eve::big(eve::sind)(-T(1) ) , T(-1.745240643728351281941897851631619247225272030714e-2) , 4.0); - TTS_ULP_EQUAL(eve::big(eve::sind)( T(45.0) ) , T(0.70710678118654752440084436210484903928483593768847) , 4.0); - TTS_ULP_EQUAL(eve::big(eve::sind)(-T(45.0) ) , T(-0.70710678118654752440084436210484903928483593768847) , 4.0); - TTS_ULP_EQUAL(eve::big(eve::sind)( T(500.0)) , T(0.64278760968653932632264340990726343290755988420567) , 4.0); - TTS_ULP_EQUAL(eve::big(eve::sind)(-T(500.0)) , T(-0.64278760968653932632264340990726343290755988420567) , 4.0); TTS_ULP_EQUAL(eve::sind( T(1) ) , T(1.745240643728351281941897851631619247225272030714e-2) , 4.0); TTS_ULP_EQUAL(eve::sind(-T(1) ) , T(-1.745240643728351281941897851631619247225272030714e-2) , 4.0); TTS_ULP_EQUAL(eve::sind( T(45.0) ) , T(0.70710678118654752440084436210484903928483593768847) , 4.0); diff --git a/test/unit/module/real/math/sindcosd.cpp b/test/unit/module/real/math/sindcosd.cpp index 2f447e50c5..853c95fef0 100644 --- a/test/unit/module/real/math/sindcosd.cpp +++ b/test/unit/module/real/math/sindcosd.cpp @@ -20,7 +20,7 @@ //================================================================================================== // Types tests //================================================================================================== -EVE_TEST_TYPES( "Check return types of cos" +EVE_TEST_TYPES( "Check return types of sindcosd" , eve::test::simd::ieee_reals ) (eve::as) @@ -32,19 +32,19 @@ EVE_TEST_TYPES( "Check return types of cos" }; //================================================================================================== -// cos tests +// sindcosd tests //================================================================================================== -auto mrest = [](eve::as const & ){ return T(-45); }; -auto rest = [](eve::as const & ){ return T( 45); }; -auto msmall = [](eve::as const & ){ return T(-90 ); }; -auto small = [](eve::as const & ){ return T( 90 ); }; -auto mmed = [](eve::as const & ){ return -5000; }; -auto med = [](eve::as const & ){ return 5000; }; +auto mquarter_c = [](eve::as const & ){ return T(-45); }; +auto quarter_c = [](eve::as const & ){ return T( 45); }; +auto mhalf_c = [](eve::as const & ){ return T(-90 ); }; +auto half_c = [](eve::as const & ){ return T( 90 ); }; +auto mmed = [](eve::as const & ){ return T(-360); }; +auto med = [](eve::as const & ){ return T( 360); }; -EVE_TEST( "Check behavior of cos on wide" +EVE_TEST( "Check behavior of sindcosd on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) @@ -57,43 +57,18 @@ EVE_TEST( "Check behavior of cos on wide" auto refc = [](auto e) -> v_t { return eve::cosd(e); }; auto refs = [](auto e) -> v_t { return eve::sind(e); }; { - auto [s, c] = eve::restricted(sindcosd)(a0); + auto [s, c] = eve::quarter_circle(sindcosd)(a0); TTS_ULP_EQUAL(s , map(refs, a0), 2); TTS_ULP_EQUAL(c , map(refc, a0), 2); } { - auto [s, c] = eve::small(sindcosd)(a0); + auto [s, c] = eve::half_circle(sindcosd)(a0); TTS_ULP_EQUAL(s , map(refs, a0), 2); TTS_ULP_EQUAL(c , map(refc, a0), 2); - auto [s1, c1] = eve::small(sindcosd)(a1); + auto [s1, c1] = eve::half_circle(sindcosd)(a1); TTS_ULP_EQUAL(s1 , map(refs, a1), 2); TTS_ULP_EQUAL(c1 , map(refc, a1), 30); } - { - auto [s, c] = eve::medium(sindcosd)(a0); - TTS_ULP_EQUAL(s , map(refs, a0), 2); - TTS_ULP_EQUAL(c , map(refc, a0), 2); - auto [s1, c1] = eve::medium(sindcosd)(a1); - TTS_ULP_EQUAL(s1 , map(refs, a1), 2); - TTS_ULP_EQUAL(c1 , map(refc, a1), 30); - auto [s2, c2] = eve::medium(sindcosd)(a2); - TTS_ULP_EQUAL(s2 , map(refs, a2), 2); - TTS_ULP_EQUAL(c2 , map(refc, a2), 2); - } - { - auto [s, c] = eve::big(sindcosd)(a0); - TTS_ULP_EQUAL(s , map(refs, a0), 2); - TTS_ULP_EQUAL(c , map(refc, a0), 2); - auto [s1, c1] = eve::big(sindcosd)(a1); - TTS_ULP_EQUAL(s1 , map(refs, a1), 2); - TTS_ULP_EQUAL(c1 , map(refc, a1), 30); - auto [s2, c2] = eve::big(sindcosd)(a2); - TTS_ULP_EQUAL(s2 , map(refs, a2), 2); - TTS_ULP_EQUAL(c2 , map(refc, a2), 2); - auto [s3, c3] = eve::big(sindcosd)(a3); - TTS_ULP_EQUAL(s3 , map(refs, a3), 2); - TTS_ULP_EQUAL(c3 , map(refc, a3), 2); - } { auto [s, c] = sindcosd(a0); TTS_ULP_EQUAL(s , map(refs, a0), 2); @@ -102,8 +77,8 @@ EVE_TEST( "Check behavior of cos on wide" TTS_ULP_EQUAL(s1 , map(refs, a1), 2); TTS_ULP_EQUAL(c1 , map(refc, a1), 30); auto [s2, c2] = sindcosd(a2); - TTS_ULP_EQUAL(s2 , map(refs, a2), 2); - TTS_ULP_EQUAL(c2 , map(refc, a2), 2); + TTS_ULP_EQUAL(s2 , map(refs, a2), 51); + TTS_ULP_EQUAL(c2 , map(refc, a2), 51); auto [s3, c3] = sindcosd(a3); TTS_ULP_EQUAL(s3 , map(refs, a3), 2); TTS_ULP_EQUAL(c3 , map(refc, a3), 2); diff --git a/test/unit/module/real/math/sinpi.cpp b/test/unit/module/real/math/sinpi.cpp index a7c61ffcec..27e8b4cf86 100644 --- a/test/unit/module/real/math/sinpi.cpp +++ b/test/unit/module/real/math/sinpi.cpp @@ -36,17 +36,17 @@ EVE_TEST_TYPES( "Check return types of sinpi" //================================================================================================== // sinpi tests //================================================================================================== -auto mrest = [](eve::as const & ){ return T(-0.25); }; -auto rest = [](eve::as const & ){ return T( 0.25); }; -auto msmall = [](eve::as const & ){ return T(-0.5 ); }; -auto small = [](eve::as const & ){ return T( 0.5 ); }; -auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::medium_type(), tgt)*eve::invpi(tgt); }; -auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::medium_type(), tgt)*eve::invpi(tgt); }; +auto mquarter_c = [](eve::as const & ){ return T(-0.25); }; +auto quarter_c = [](eve::as const & ){ return T( 0.25); }; +auto mhalf_c = [](eve::as const & ){ return T(-0.5 ); }; +auto half_c = [](eve::as const & ){ return T( 0.5 ); }; +auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt)*eve::invpi(tgt); }; +auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt)*eve::invpi(tgt); }; EVE_TEST( "Check behavior of sinpi on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) @@ -60,16 +60,9 @@ EVE_TEST( "Check behavior of sinpi on wide" using v_t = eve::element_type_t; long double ldpi = 3.1415926535897932384626433832795028841971693993751; auto ref = [](auto e) -> v_t { return boost::math::sin_pi(e); }; - TTS_ULP_EQUAL(eve::restricted(sinpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(sinpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(sinpi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(sinpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(sinpi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(sinpi)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(sinpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(sinpi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::big(sinpi)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(sinpi)(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(eve::quarter_circle(sinpi)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(sinpi)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(sinpi)(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(sinpi(a0) , map(ref, a0), 2); TTS_ULP_EQUAL(sinpi(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(sinpi(a2) , map(ref, a2), 2); diff --git a/test/unit/module/real/math/sinpicospi.cpp b/test/unit/module/real/math/sinpicospi.cpp index 2edf702e04..6d2ed876a6 100644 --- a/test/unit/module/real/math/sinpicospi.cpp +++ b/test/unit/module/real/math/sinpicospi.cpp @@ -33,17 +33,17 @@ EVE_TEST_TYPES( "Check return types of cos" //================================================================================================== // cos tests //================================================================================================== -auto mrest = [](eve::as const & ){ return T(-0.25); }; -auto rest = [](eve::as const & ){ return T( 0.25); }; -auto msmall = [](eve::as const & ){ return T(-0.5 ); }; -auto small = [](eve::as const & ){ return T( 0.5 ); }; -auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::medium_type(), tgt)*eve::invpi(tgt); }; -auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::medium_type(), tgt)*eve::invpi(tgt); }; +auto mquarter_c = [](eve::as const & ){ return T(-0.25); }; +auto quarter_c = [](eve::as const & ){ return T( 0.25); }; +auto mhalf_c = [](eve::as const & ){ return T(-0.5 ); }; +auto half_c = [](eve::as const & ){ return T( 0.5 ); }; +auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt)*eve::invpi(tgt); }; +auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt)*eve::invpi(tgt); }; EVE_TEST( "Check behavior of cos on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) @@ -56,43 +56,18 @@ EVE_TEST( "Check behavior of cos on wide" auto refc = [](auto e) -> v_t { return eve::cospi(e); }; auto refs = [](auto e) -> v_t { return eve::sinpi(e); }; { - auto [s, c] = eve::restricted(sinpicospi)(a0); + auto [s, c] = eve::quarter_circle(sinpicospi)(a0); TTS_ULP_EQUAL(s , map(refs, a0), 2); TTS_ULP_EQUAL(c , map(refc, a0), 2); } { - auto [s, c] = eve::small(sinpicospi)(a0); + auto [s, c] = eve::half_circle(sinpicospi)(a0); TTS_ULP_EQUAL(s , map(refs, a0), 2); TTS_ULP_EQUAL(c , map(refc, a0), 2); - auto [s1, c1] = eve::small(sinpicospi)(a1); + auto [s1, c1] = eve::half_circle(sinpicospi)(a1); TTS_ULP_EQUAL(s1 , map(refs, a1), 2); TTS_ULP_EQUAL(c1 , map(refc, a1), 2); } - { - auto [s, c] = eve::medium(sinpicospi)(a0); - TTS_ULP_EQUAL(s , map(refs, a0), 2); - TTS_ULP_EQUAL(c , map(refc, a0), 2); - auto [s1, c1] = eve::medium(sinpicospi)(a1); - TTS_ULP_EQUAL(s1 , map(refs, a1), 2); - TTS_ULP_EQUAL(c1 , map(refc, a1), 2); - auto [s2, c2] = eve::medium(sinpicospi)(a2); - TTS_ULP_EQUAL(s2 , map(refs, a2), 2); - TTS_ULP_EQUAL(c2 , map(refc, a2), 2); - } - { - auto [s, c] = eve::big(sinpicospi)(a0); - TTS_ULP_EQUAL(s , map(refs, a0), 2); - TTS_ULP_EQUAL(c , map(refc, a0), 2); - auto [s1, c1] = eve::big(sinpicospi)(a1); - TTS_ULP_EQUAL(s1 , map(refs, a1), 2); - TTS_ULP_EQUAL(c1 , map(refc, a1), 2); - auto [s2, c2] = eve::big(sinpicospi)(a2); - TTS_ULP_EQUAL(s2 , map(refs, a2), 2); - TTS_ULP_EQUAL(c2 , map(refc, a2), 2); - auto [s3, c3] = eve::big(sinpicospi)(a3); - TTS_ULP_EQUAL(s3 , map(refs, a3), 2); - TTS_ULP_EQUAL(c3 , map(refc, a3), 2); - } { auto [s, c] = sinpicospi(a0); TTS_ULP_EQUAL(s , map(refs, a0), 2); diff --git a/test/unit/module/real/math/tan.cpp b/test/unit/module/real/math/tan.cpp index e7a98ee48b..fd35b0065e 100644 --- a/test/unit/module/real/math/tan.cpp +++ b/test/unit/module/real/math/tan.cpp @@ -37,40 +37,40 @@ EVE_TEST_TYPES( "Check return types of tan" //================================================================================================== // tan tests //================================================================================================== -auto mrest = [](eve::as const & tgt){ return -eve::pio_4(tgt); }; -auto rest = [](eve::as const & tgt){ return eve::pio_4(tgt); }; -auto msmall = [](eve::as const & tgt){ return -eve::pio_2(tgt); }; -auto small = [](eve::as const & tgt){ return eve::pio_2(tgt); }; -auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::medium_type(), tgt); }; -auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::medium_type(), tgt); }; +auto mquarter_c = [](eve::as const & tgt){ return -eve::pio_4(tgt); }; +auto quarter_c = [](eve::as const & tgt){ return eve::pio_4(tgt); }; +auto mhalf_c = [](eve::as const & tgt){ return -eve::pio_2(tgt); }; +auto half_c = [](eve::as const & tgt){ return eve::pio_2(tgt); }; +auto mfull_c =[](eve::as const & tgt){ return -eve::pi(tgt); }; +auto full_c =[](eve::as const & tgt){ return eve::pi(tgt); }; +auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt); }; +auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt); }; EVE_TEST( "Check behavior of tan on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) + , eve::test::randoms(mfull_c ,full_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) -(T const& a0, T const& a1, T const& a2, T const& a3) +(T const& a0, T const& a1, T const& a2, T const& a3, T const& a4) { using eve::detail::map; using eve::tan; using eve::diff; using v_t = eve::element_type_t; auto ref = [](auto e) -> v_t { return std::tan(double(e)); }; - TTS_ULP_EQUAL(eve::restricted(tan)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(tan)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(tan)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(tan)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(tan)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(tan)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(tan)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(tan)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::big(tan)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(tan)(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(eve::quarter_circle(tan)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(tan)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(tan)(a1) , map(ref, a1), 2); + TTS_ULP_EQUAL(eve::full_circle(tan)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::full_circle(tan)(a1) , map(ref, a1), 2); + TTS_ULP_EQUAL(eve::full_circle(tan)(a2) , map(ref, a2), 2); TTS_ULP_EQUAL(tan(a0) , map(ref, a0), 2); TTS_ULP_EQUAL(tan(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(tan(a2) , map(ref, a2), 2); TTS_ULP_EQUAL(tan(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(tan(a4) , map(ref, a4), 2); TTS_ULP_EQUAL(diff(tan)(a0), map([](auto e) -> v_t { return eve::sqr(eve::sec(e)); }, a0), 2); }; diff --git a/test/unit/module/real/math/tand.cpp b/test/unit/module/real/math/tand.cpp index dedbe9cd24..fc6321f9c3 100644 --- a/test/unit/module/real/math/tand.cpp +++ b/test/unit/module/real/math/tand.cpp @@ -41,17 +41,17 @@ EVE_TEST_TYPES( "Check return types of tand" //================================================================================================== // tand tests //================================================================================================== -auto mrest = [](eve::as const & ){ return T(-45); }; -auto rest = [](eve::as const & ){ return T( 45); }; -auto msmall = [](eve::as const & ){ return T(-90 ); }; -auto small = [](eve::as const & ){ return T( 90 ); }; +auto mquarter_c = [](eve::as const & ){ return T(-45); }; +auto quarter_c = [](eve::as const & ){ return T( 45); }; +auto mhalf_c = [](eve::as const & ){ return T(-90 ); }; +auto half_c = [](eve::as const & ){ return T( 90 ); }; auto mmed = [](eve::as const & ){ return -5000; }; auto med = [](eve::as const & ){ return 5000; }; EVE_TEST( "Check behavior of tand on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) @@ -63,46 +63,14 @@ EVE_TEST( "Check behavior of tand on wide" using eve::deginrad; using v_t = eve::element_type_t; auto ref = [](auto e) -> v_t { auto d = eve::cosd(e); return d ? eve::sind(e)/d: eve::nan(eve::as(e)); }; - TTS_ULP_EQUAL(eve::restricted(tand)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(tand)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(tand)(a1) , map(ref, a1), 50); - TTS_ULP_EQUAL(eve::medium(tand)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(tand)(a1) , map(ref, a1), 50); - TTS_ULP_EQUAL(eve::medium(tand)(a2) , map(ref, a2), 300); - TTS_ULP_EQUAL(eve::big(tand)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(tand)(a1) , map(ref, a1), 50); - TTS_ULP_EQUAL(eve::big(tand)(a2) , map(ref, a2), 300); - TTS_ULP_EQUAL(eve::big(tand)(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(eve::quarter_circle(tand)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(tand)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(tand)(a1) , map(ref, a1), 50); TTS_ULP_EQUAL(tand(a0) , map(ref, a0), 2); TTS_ULP_EQUAL(tand(a1) , map(ref, a1), 50); - TTS_ULP_EQUAL(tand(a2) , map(ref, a2), 300); + TTS_ULP_EQUAL(tand(a2) , map(ref, a2), 1024); TTS_ULP_EQUAL(tand(a3) , map(ref, a3), 2); auto dinr = 1.7453292519943295769236907684886127134428718885417e-2l; TTS_ULP_EQUAL(diff(tand)(a0), map([dinr](auto e) -> v_t { return dinr*eve::sqr(eve::secd(e)); }, a0), 2); }; - -EVE_TEST_TYPES( "Check return types of tand" - , eve::test::simd::ieee_reals - ) -(eve::as) -{ - using eve::tand; - TTS_ULP_EQUAL(eve::big(eve::tand)( T( 1)) , T(1.74550649282175857651288952197278243141015888398755e-2) , 3 ); - TTS_ULP_EQUAL(eve::big(eve::tand)(-T( 1)) , T(-1.74550649282175857651288952197278243141015888398755e-2) , 3 ); - TTS_ULP_EQUAL(eve::big(eve::tand)( T( 45)) , T(1) , 3 ); - TTS_ULP_EQUAL(eve::big(eve::tand)(-T( 45)) , T(-1) , 3 ); - TTS_ULP_EQUAL(eve::big(eve::tand)( T(500)) , T(-0.83909963117728001176312729812318136468743428301234) , 10 ); - TTS_ULP_EQUAL(eve::big(eve::tand)(-T(500)) , T(0.83909963117728001176312729812318136468743428301234) , 10 ); - auto z = eve::maxflint(eve::as())*180; - TTS_ULP_EQUAL(eve::big(eve::tand)(z) , T(0) , 0.5); - - TTS_ULP_EQUAL(eve::medium(eve::tand)( T( 1)) , T(1.74550649282175857651288952197278243141015888398755e-2) , 3 ); - TTS_ULP_EQUAL(eve::medium(eve::tand)(-T( 1)) , T(-1.74550649282175857651288952197278243141015888398755e-2) , 3 ); - TTS_ULP_EQUAL(eve::medium(eve::tand)( T( 45)) , T(1) , 3 ); - TTS_ULP_EQUAL(eve::medium(eve::tand)(-T( 45)) , T(-1) , 3 ); - TTS_ULP_EQUAL(eve::medium(eve::tand)( T(500)) , T(-0.83909963117728001176312729812318136468743428301234) , 10 ); - TTS_ULP_EQUAL(eve::medium(eve::tand)(-T(500)) , T(0.83909963117728001176312729812318136468743428301234) , 10 ); - TTS_ULP_EQUAL(eve::medium(eve::tand)(z) , T(0) , 0.5); - -}; diff --git a/test/unit/module/real/math/tanpi.cpp b/test/unit/module/real/math/tanpi.cpp index 192c9393c0..331e03dfd1 100644 --- a/test/unit/module/real/math/tanpi.cpp +++ b/test/unit/module/real/math/tanpi.cpp @@ -38,17 +38,17 @@ EVE_TEST_TYPES( "Check return types of tanpi" //================================================================================================== // tanpi tests //================================================================================================== -auto mrest = [](eve::as const & ){ return T(-0.25); }; -auto rest = [](eve::as const & ){ return T( 0.25); }; -auto msmall = [](eve::as const & ){ return T(-0.5 ); }; -auto small = [](eve::as const & ){ return T( 0.5 ); }; -auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::medium_type(), tgt)*eve::invpi(tgt); }; -auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::medium_type(), tgt)*eve::invpi(tgt); }; +auto mquarter_c = [](eve::as const & ){ return T(-0.25); }; +auto quarter_c = [](eve::as const & ){ return T( 0.25); }; +auto mhalf_c = [](eve::as const & ){ return T(-0.5 ); }; +auto half_c = [](eve::as const & ){ return T( 0.5 ); }; +auto mmed = [](eve::as const & tgt){ return -eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt)*eve::invpi(tgt); }; +auto med = [](eve::as const & tgt){ return eve::detail::Rempio2_limit(eve::detail::medium_type(), tgt)*eve::invpi(tgt); }; EVE_TEST( "Check behavior of tanpi on wide" , eve::test::simd::ieee_reals - , eve::test::generate( eve::test::randoms(mrest, rest) - , eve::test::randoms(msmall, small) + , eve::test::generate( eve::test::randoms(mquarter_c, quarter_c) + , eve::test::randoms(mhalf_c, half_c) , eve::test::randoms(mmed, med) , eve::test::randoms(eve::valmin, eve::valmax)) ) @@ -62,16 +62,9 @@ EVE_TEST( "Check behavior of tanpi on wide" using v_t = eve::element_type_t; long double ldpi = 3.1415926535897932384626433832795028841971693993751; auto ref = [](auto e) -> v_t { auto d = boost::math::cos_pi(e); return d ? boost::math::sin_pi(e)/d : eve::nan(eve::as(e)); }; - TTS_ULP_EQUAL(eve::restricted(tanpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(tanpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::small(tanpi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(tanpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::medium(tanpi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::medium(tanpi)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(tanpi)(a0) , map(ref, a0), 2); - TTS_ULP_EQUAL(eve::big(tanpi)(a1) , map(ref, a1), 2); - TTS_ULP_EQUAL(eve::big(tanpi)(a2) , map(ref, a2), 2); - TTS_ULP_EQUAL(eve::big(tanpi)(a3) , map(ref, a3), 2); + TTS_ULP_EQUAL(eve::quarter_circle(tanpi)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(tanpi)(a0) , map(ref, a0), 2); + TTS_ULP_EQUAL(eve::half_circle(tanpi)(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(tanpi(a0) , map(ref, a0), 2); TTS_ULP_EQUAL(tanpi(a1) , map(ref, a1), 2); TTS_ULP_EQUAL(tanpi(a2) , map(ref, a2), 2); diff --git a/test/unit/module/real/polynomial/gegenbauer.cpp b/test/unit/module/real/polynomial/gegenbauer.cpp index 3ee9dd2ead..0a5173168e 100644 --- a/test/unit/module/real/polynomial/gegenbauer.cpp +++ b/test/unit/module/real/polynomial/gegenbauer.cpp @@ -43,20 +43,20 @@ EVE_TEST( "Check behavior of gegenbauer on wide" for(unsigned int n=0; n < 5; ++n) { auto boost_gegenbauer = [&](auto i, auto) { return boost::math::gegenbauer(n, l, a0.get(i)); }; - TTS_ULP_EQUAL(eve__gegenbauerv(n, a0), T(boost_gegenbauer), 180); + TTS_ULP_EQUAL(eve__gegenbauerv(n, a0), T(boost_gegenbauer), 256); } auto boost_gegenbauerv = [&](auto i, auto) { return boost::math::gegenbauer(i0.get(i), l, a0.get(i)); }; - TTS_ULP_EQUAL(eve__gegenbauerv(i0 , a0), T(boost_gegenbauerv), 180); + TTS_ULP_EQUAL(eve__gegenbauerv(i0 , a0), T(boost_gegenbauerv), 256); for(unsigned int j=0; j < eve::cardinal_v; ++j) { auto boost_gegenbauer2 = [&](auto i, auto) { return boost::math::gegenbauer(i0.get(i), l, a0.get(j)); }; - TTS_ULP_EQUAL(eve__gegenbauerv(i0 , a0.get(j)), T(boost_gegenbauer2), 180); + TTS_ULP_EQUAL(eve__gegenbauerv(i0 , a0.get(j)), T(boost_gegenbauer2), 256); } for(unsigned int j=0; j < eve::cardinal_v; ++j) { for(unsigned int n=0; n < eve::cardinal_v; ++n) { - TTS_ULP_EQUAL(eve__gegenbauerv(i0.get(j) , a0.get(n)), v_t(boost::math::gegenbauer(i0.get(j), l, a0.get(n))), 180); + TTS_ULP_EQUAL(eve__gegenbauerv(i0.get(j) , a0.get(n)), v_t(boost::math::gegenbauer(i0.get(j), l, a0.get(n))), 256); } } }; @@ -77,20 +77,20 @@ EVE_TEST( "Check behavior of gegenbauer diff on wide" for(unsigned int n=0; n < 5; ++n) { auto boost_gegenbauer = [&](auto i, auto) { return boost::math::gegenbauer_derivative(n, l, a0.get(i), 1u); }; - TTS_ULP_EQUAL(eve__gegenbauerv(n, a0), T(boost_gegenbauer), 180); + TTS_ULP_EQUAL(eve__gegenbauerv(n, a0), T(boost_gegenbauer), 256); } auto boost_gegenbauerv = [&](auto i, auto) { return boost::math::gegenbauer_derivative(i0.get(i), l, a0.get(i), 1u); }; - TTS_ULP_EQUAL(eve__gegenbauerv(i0 , a0), T(boost_gegenbauerv), 180); + TTS_ULP_EQUAL(eve__gegenbauerv(i0 , a0), T(boost_gegenbauerv), 256); for(unsigned int j=0; j < eve::cardinal_v; ++j) { auto boost_gegenbauer2 = [&](auto i, auto) { return boost::math::gegenbauer_derivative(i0.get(i), l, a0.get(j), 1u); }; - TTS_ULP_EQUAL(eve__gegenbauerv(i0 , a0.get(j)), T(boost_gegenbauer2), 180); + TTS_ULP_EQUAL(eve__gegenbauerv(i0 , a0.get(j)), T(boost_gegenbauer2), 256); } for(unsigned int j=0; j < eve::cardinal_v; ++j) { for(unsigned int n=0; n < eve::cardinal_v; ++n) { - TTS_ULP_EQUAL(eve__gegenbauerv(i0.get(j) , a0.get(n)), v_t(boost::math::gegenbauer_derivative(i0.get(j), l, a0.get(n), 1u)), 180); + TTS_ULP_EQUAL(eve__gegenbauerv(i0.get(j) , a0.get(n)), v_t(boost::math::gegenbauer_derivative(i0.get(j), l, a0.get(n), 1u)), 256); } } }; diff --git a/test/unit/module/real/polynomial/hermite.cpp b/test/unit/module/real/polynomial/hermite.cpp index 991b2a8a7c..a09af8241e 100644 --- a/test/unit/module/real/polynomial/hermite.cpp +++ b/test/unit/module/real/polynomial/hermite.cpp @@ -50,13 +50,13 @@ EVE_TEST( "Check behavior of hermite on wide" for(unsigned int j=0; j < eve::cardinal_v; ++j) { auto boost_hermite2 = [&](auto i, auto) { return boost::math::hermite(i0.get(i), a0.get(j)); }; - TTS_ULP_EQUAL(eve__hermitev(i0 , a0.get(j)), T(boost_hermite2), 16); + TTS_ULP_EQUAL(eve__hermitev(i0 , a0.get(j)), T(boost_hermite2), 32); } for(unsigned int j=0; j < eve::cardinal_v; ++j) { for(unsigned int n=0; n < eve::cardinal_v; ++n) { - TTS_ULP_EQUAL(eve__hermitev(i0.get(j) , a0.get(n)), v_t(boost::math::hermite(i0.get(j), a0.get(n))), 16); + TTS_ULP_EQUAL(eve__hermitev(i0.get(j) , a0.get(n)), v_t(boost::math::hermite(i0.get(j), a0.get(n))), 32); } } }; @@ -85,7 +85,7 @@ EVE_TEST( "Check behavior of diff hermite on wide" for(unsigned int j=0; j < eve::cardinal_v; ++j) { auto boost_hermite2 = [&](auto i, auto) { return boost_hermderiv(i0.get(i), a0.get(j)); }; - TTS_ULP_EQUAL(eve__hermitev(i0 , a0.get(j)), T(boost_hermite2), 32); + TTS_ULP_EQUAL(eve__hermitev(i0 , a0.get(j)), T(boost_hermite2), 48); } for(unsigned int j=0; j < eve::cardinal_v; ++j) { diff --git a/test/unit/module/real/polynomial/laguerre.cpp b/test/unit/module/real/polynomial/laguerre.cpp index a880e0e0d3..8fa87d88e6 100644 --- a/test/unit/module/real/polynomial/laguerre.cpp +++ b/test/unit/module/real/polynomial/laguerre.cpp @@ -43,20 +43,20 @@ EVE_TEST( "Check behavior of laguerre on wide" for(unsigned int n=0; n < 5; ++n) { auto boost_laguerre = [&](auto i, auto) { return boost::math::laguerre(n, a0.get(i)); }; - TTS_ULP_EQUAL(eve__laguerrev(n, a0), T(boost_laguerre), 150); + TTS_ULP_EQUAL(eve__laguerrev(n, a0), T(boost_laguerre), 1024); } auto boost_laguerrev = [&](auto i, auto) { return boost::math::laguerre(i0.get(i), a0.get(i)); }; - TTS_ULP_EQUAL(eve__laguerrev(i0 , a0), T(boost_laguerrev), 150); + TTS_RELATIVE_EQUAL(eve__laguerrev(i0 , a0), T(boost_laguerrev), 0.01); for(unsigned int j=0; j < eve::cardinal_v; ++j) { auto boost_laguerre2 = [&](auto i, auto) { return boost::math::laguerre(i0.get(i), a0.get(j)); }; - TTS_ULP_EQUAL(eve__laguerrev(i0 , a0.get(j)), T(boost_laguerre2), 150); + TTS_RELATIVE_EQUAL(eve__laguerrev(i0 , a0.get(j)), T(boost_laguerre2), 0.01); } for(unsigned int j=0; j < eve::cardinal_v; ++j) { for(unsigned int n=0; n < eve::cardinal_v; ++n) { - TTS_ULP_EQUAL(eve__laguerrev(i0.get(j) , a0.get(n)), v_t(boost::math::laguerre(i0.get(j), a0.get(n))), 150); + TTS_RELATIVE_EQUAL(eve__laguerrev(i0.get(j) , a0.get(n)), v_t(boost::math::laguerre(i0.get(j), a0.get(n))), 0.01); } } }; diff --git a/test/unit/module/real/polynomial/legendre.cpp b/test/unit/module/real/polynomial/legendre.cpp index a6b67defde..e5478e4634 100644 --- a/test/unit/module/real/polynomial/legendre.cpp +++ b/test/unit/module/real/polynomial/legendre.cpp @@ -53,13 +53,13 @@ for(unsigned int j=0; j < eve::cardinal_v; ++j) { auto boost_legendre2 = [&](auto i, auto) { return boost::math::legendre_p(i0.get(i), a0.get(j)); }; - TTS_ULP_EQUAL(eve__legendrev(i0 , a0.get(j)), T(boost_legendre2), 100); + TTS_RELATIVE_EQUAL(eve__legendrev(i0 , a0.get(j)), T(boost_legendre2), 0.01); } for(unsigned int j=0; j < eve::cardinal_v; ++j) { for(unsigned int n=0; n < eve::cardinal_v; ++n) { - TTS_ULP_EQUAL(eve__legendrev(i0.get(j) , a0.get(n)), v_t(boost::math::legendre_p(i0.get(j), a0.get(n))), 100); + TTS_RELATIVE_EQUAL(eve__legendrev(i0.get(j) , a0.get(n)), v_t(boost::math::legendre_p(i0.get(j), a0.get(n))), 0.01); } } }; @@ -86,14 +86,14 @@ for(unsigned int j=0; j < eve::cardinal_v; ++j) { auto boost_legendre2 = [&](auto i, auto) { return boost::math::legendre_q(i0.get(i), a0.get(j)); }; - TTS_ULP_EQUAL(eve__legendrev(i0 , a0.get(j)), T(boost_legendre2), 100); + TTS_RELATIVE_EQUAL(eve__legendrev(i0 , a0.get(j)), T(boost_legendre2), 0.01); } for(unsigned int j=0; j < eve::cardinal_v; ++j) { for(unsigned int n=0; n < eve::cardinal_v; ++n) { - TTS_ULP_EQUAL(eve__legendrev(i0.get(j) , a0.get(n)), v_t(boost::math::legendre_q(i0.get(j), a0.get(n))), 100); + TTS_RELATIVE_EQUAL(eve__legendrev(i0.get(j) , a0.get(n)), v_t(boost::math::legendre_q(i0.get(j), a0.get(n))), 0.01); } } }; @@ -118,14 +118,14 @@ for(unsigned int j=0; j < eve::cardinal_v; ++j) { auto boost_legendre2 = [i0, a0, j](auto i, auto) { return boost::math::legendre_p_prime(i0.get(i), a0.get(j)); }; - TTS_ULP_EQUAL(eve__legendrev(i0 , a0.get(j)), T(boost_legendre2), 100); + TTS_RELATIVE_EQUAL(eve__legendrev(i0 , a0.get(j)), T(boost_legendre2), 0.01); } for(unsigned int j=0; j < eve::cardinal_v; ++j) { for(unsigned int n=0; n < eve::cardinal_v; ++n) { - TTS_ULP_EQUAL(eve__legendrev(i0.get(j) , a0.get(n)), v_t(boost::math::legendre_p_prime(i0.get(j), a0.get(n))), 100); + TTS_RELATIVE_EQUAL(eve__legendrev(i0.get(j) , a0.get(n)), v_t(boost::math::legendre_p_prime(i0.get(j), a0.get(n))), 0.01); } } }; @@ -139,6 +139,7 @@ EVE_TEST( "Check behavior of associated legendre p on wide" ) (T a0, I i0, I j0) { +// using v_t = eve::element_type_t; auto eve__legendrev = [](auto m, auto n, auto x) { return eve::legendre(m, n, x); }; auto cse__legendrev = [](auto m, auto n, auto x) { return eve::condon_shortey(eve::legendre)(m, n, x); }; auto boost_legendrev = [](auto m, auto n, auto x) { return boost::math::legendre_p(m, n, x); }; @@ -150,7 +151,7 @@ EVE_TEST( "Check behavior of associated legendre p on wide" for(unsigned int p=0; p < eve::cardinal_v < I > ; ++p) { TTS_ULP_EQUAL(eve__legendrev(n, p, a0.get(k)), std_assoc(n, p, a0.get(k)), 100); - TTS_ULP_EQUAL(cse__legendrev(n, p, a0.get(k)), boost_legendrev(n, p, a0.get(k)), 100); + TTS_RELATIVE_EQUAL(cse__legendrev(n, p, a0.get(k)), boost_legendrev(n, p, a0.get(k)), 0.01); } } } diff --git a/test/unit/module/real/special/beta.cpp b/test/unit/module/real/special/beta.cpp index c2ccb1b4e8..b264349808 100644 --- a/test/unit/module/real/special/beta.cpp +++ b/test/unit/module/real/special/beta.cpp @@ -51,7 +51,7 @@ EVE_TEST( "Check behavior of beta on wide" using eve::as; using elt_t = eve::element_type_t; #if defined(__cpp_lib_math_special_functions) - TTS_ULP_EQUAL( eve::beta(a0, a1), map([&](auto e, auto f) -> elt_t{ return std::beta(e, f); }, a0, a1), 22); + TTS_ULP_EQUAL( eve::beta(a0, a1), map([&](auto e, auto f) -> elt_t{ return std::beta(e, f); }, a0, a1), 32); auto db = [](auto x, auto y){ return eve::fnma(eve::digamma(x), std::beta(x, y), eve::digamma(x + y));}; TTS_ULP_EQUAL( eve::diff_1st(eve::beta)(a0, a1), map(db, a0, a1), 2); TTS_ULP_EQUAL( eve::diff_2nd(eve::beta)(a0, a1), map(db, a1, a0), 2); diff --git a/test/unit/module/real/special/digamma.cpp b/test/unit/module/real/special/digamma.cpp index 3e251ceb6c..d4d1aeff32 100644 --- a/test/unit/module/real/special/digamma.cpp +++ b/test/unit/module/real/special/digamma.cpp @@ -40,7 +40,7 @@ EVE_TEST_TYPES( "Check return types of digamma" // digamma tests //================================================================================================== EVE_TEST_TYPES( "Check behavior of digamma on wide" - , eve::test::simd::ieee_reals + , eve::test::simd::ieee_floats ) (eve::as ) { @@ -63,6 +63,8 @@ EVE_TEST_TYPES( "Check behavior of digamma on wide" TTS_ULP_EQUAL(digamma(T(22)), T(3.0681430398611966699248760264450329818421699570581L), ulp); TTS_ULP_EQUAL(digamma(T(50)), T(3.9019896734278921969539597028823666609284424880275L), ulp); TTS_ULP_EQUAL(digamma(T(500)), T(6.2136077650889917423827750552855712637776544784569L), ulp); + TTS_ULP_EQUAL(digamma(T(3.193317413330078125)), T(digamma(3.193317413330078125)), ulp); + TTS_ULP_EQUAL(digamma(T(3.193317413330078125)), T(9.963879482071649e-01), ulp); // // negative values: // @@ -71,3 +73,12 @@ EVE_TEST_TYPES( "Check behavior of digamma on wide" TTS_ULP_EQUAL(digamma(T(-10.875)), T(-5.1527360383841562620205965901515879492020193154231L), ulp); TTS_ULP_EQUAL(digamma(T(-1.5)), T(0.70315664064524318722569033366791109947350706200623L), ulp); }; + +EVE_TEST( "Check behavior of digamma on wide" + , eve::test::simd::ieee_floats + , eve::test::generate(eve::test::randoms(0.4, 4.0)) + ) +(T const& a0) +{ + TTS_ULP_EQUAL(eve::digamma(a0), T(map(eve::digamma, a0)), 2); +}; diff --git a/test/unit/module/real/special/erfcx.cpp b/test/unit/module/real/special/erfcx.cpp index 475c9e74a6..b9a79e85eb 100644 --- a/test/unit/module/real/special/erfcx.cpp +++ b/test/unit/module/real/special/erfcx.cpp @@ -49,7 +49,7 @@ EVE_TEST( "Check behavior of erfcx on wide" using v_t = eve::element_type_t; using eve::erfcx; using eve::as; - TTS_ULP_EQUAL( erfcx(a0), map([&](auto e) -> v_t{ return std::exp(e*e)*std::erfc(e); }, a0), 4); + TTS_ULP_EQUAL( erfcx(a0), map([&](auto e) -> v_t{ return std::exp(e*e)*std::erfc(e); }, a0), 8); auto derfcx = [](auto e){return eve::fms(2*e, erfcx(e), v_t(1.1283791670955125738961589));}; TTS_ULP_EQUAL( eve::diff(erfcx)(a0), map(derfcx, a0), 13); TTS_ULP_EQUAL(erfcx(T(-0.0)), T(1), 0); @@ -65,12 +65,12 @@ EVE_TEST( "Check behavior of erfcx on wide" TTS_ULP_EQUAL(erfcx(T(5)), T(0.110704637733068626370212086492), 0.5); // 1.5); TTS_ULP_EQUAL(erfcx(T(27)), T(0.0208816079904209406740944901929), 0.5); // 4); TTS_ULP_EQUAL(erfcx(T(100)), T(0.00564161378298943290355645700695), 0.5); // 36.5); - auto big = [](auto x){ return eve::rsqrt(eve::pi(as()))/x;}; + auto asympt = [](auto x){ return eve::rsqrt(eve::pi(as()))/x;}; - TTS_ULP_EQUAL(erfcx(eve::valmax(as())) ,big(eve::valmax(as())), 0.5); - TTS_ULP_EQUAL(erfcx(eve::prev(eve::valmax(as()), 3)) ,big(eve::prev(eve::valmax(as()), 3)), 0.5); - TTS_ULP_EQUAL(erfcx(eve::prev(eve::valmax(as()), 2)) ,big(eve::prev(eve::valmax(as()), 2)), 0.5); - TTS_ULP_EQUAL(erfcx(eve::prev(eve::valmax(as()), 1)) ,big(eve::prev(eve::valmax(as()), 1)), 0.5); + TTS_ULP_EQUAL(erfcx(eve::valmax(as())) ,asympt(eve::valmax(as())), 0.5); + TTS_ULP_EQUAL(erfcx(eve::prev(eve::valmax(as()), 3)) ,asympt(eve::prev(eve::valmax(as()), 3)), 0.5); + TTS_ULP_EQUAL(erfcx(eve::prev(eve::valmax(as()), 2)) ,asympt(eve::prev(eve::valmax(as()), 2)), 0.5); + TTS_ULP_EQUAL(erfcx(eve::prev(eve::valmax(as()), 1)) ,asympt(eve::prev(eve::valmax(as()), 1)), 0.5); TTS_ULP_EQUAL(erfcx(T(1.0E30)), eve::rsqrt(eve::pi(as()))/T(1.0E30), 0.5); TTS_ULP_EQUAL(erfcx(-eve::halfeps(as())), T(1.00000000000000012527525318168), 0.5); TTS_ULP_EQUAL(erfcx(-T(0.25)) , T(1.3586423701047221152100420169489882200138085022721), 0.5); @@ -82,7 +82,7 @@ EVE_TEST( "Check behavior of erfcx on wide" TTS_ULP_EQUAL(erfcx(-T(27)) , eve::inf(as()), 0); TTS_ULP_EQUAL(erfcx(-T(100)) , eve::inf(as()), 0); TTS_ULP_EQUAL(erfcx(-eve::valmax(as())) , eve::inf(as()), 0); - TTS_ULP_EQUAL(erfcx(eve::valmax(as())/2) ,big(eve::valmax(as())/2), 0.5); + TTS_ULP_EQUAL(erfcx(eve::valmax(as())/2) ,asympt(eve::valmax(as())/2), 0.5); if constexpr( eve::platform::supports_invalids ) { diff --git a/test/unit/module/real/special/tgamma.cpp b/test/unit/module/real/special/tgamma.cpp index 27218760e1..b42f023b97 100644 --- a/test/unit/module/real/special/tgamma.cpp +++ b/test/unit/module/real/special/tgamma.cpp @@ -43,7 +43,7 @@ EVE_TEST( "Check behavior of tgamma on wide" using v_t = eve::element_type_t; using eve::tgamma; #if defined(__cpp_lib_math_special_functions) - TTS_ULP_EQUAL( tgamma(a0), map([&](auto e) -> v_t{ return std::tgamma(e); }, a0), 2); + TTS_ULP_EQUAL( tgamma(a0), map([&](auto e) -> v_t{ return std::tgamma(e); }, a0), 4); #endif // __cpp_lib_math_special_functions if constexpr( eve::platform::supports_invalids )