From 5a562a685664efce1dacffbdcb53e5758351a000 Mon Sep 17 00:00:00 2001 From: jtlap Date: Tue, 26 Sep 2023 17:37:23 +0200 Subject: [PATCH] Inverse trigonometrics and more * between -> randoms in unit tests * inv hyp trigo quaternion tests * displacing invtrig and polishing its doc * displacing pi inverse trigo * inv trig pi * Doxyfile index.md as main page * arg was flawed * asinh * ulps for avx2 * ulps * ulps * some cleaning of spurious files and some ulps * is_pure is_imag to_polar * from_polar * unit test for to/from_polar * pow * pow bad constexpr * ulp for zeta macosx * span correction and kyosu::align --- doc/Doxyfile | 2 + doc/index.md | 116 ++++++++ include/kyosu/complex/acos.hpp | 97 ------- include/kyosu/complex/acsh.hpp | 96 ------- include/kyosu/complex/impl/arithmetic.hpp | 19 -- include/kyosu/complex/impl/predicates.hpp | 19 -- include/kyosu/complex/impl/special.hpp | 251 ------------------ include/kyosu/functions.hpp | 46 ++-- include/kyosu/functions/abs.hpp | 3 +- include/kyosu/functions/acos.hpp | 14 +- .../kyosu/{complex => functions}/acosh.hpp | 10 +- .../kyosu/{complex => functions}/acospi.hpp | 6 +- include/kyosu/{complex => functions}/acot.hpp | 16 +- .../kyosu/{complex => functions}/acoth.hpp | 14 +- .../kyosu/{complex => functions}/acotpi.hpp | 6 +- include/kyosu/{complex => functions}/acsc.hpp | 10 +- .../kyosu/{complex => functions}/acsch.hpp | 7 +- .../kyosu/{complex => functions}/acscpi.hpp | 6 +- .../{complex/asin.hpp => functions/acsh.hpp} | 28 +- include/kyosu/functions/align.hpp | 119 +++++++++ include/kyosu/{complex => functions}/arg.hpp | 11 +- include/kyosu/{complex => functions}/asec.hpp | 10 +- .../kyosu/{complex => functions}/asech.hpp | 0 .../kyosu/{complex => functions}/asecpi.hpp | 6 +- include/kyosu/functions/asin.hpp | 20 +- .../kyosu/{complex => functions}/asinh.hpp | 14 +- .../kyosu/{complex => functions}/asinpi.hpp | 6 +- include/kyosu/{complex => functions}/atan.hpp | 11 +- .../kyosu/{complex => functions}/atanh.hpp | 9 +- .../kyosu/{complex => functions}/atanpi.hpp | 6 +- include/kyosu/functions/from_angle_axis.hpp | 10 +- include/kyosu/functions/from_polar.hpp | 23 +- include/kyosu/functions/is_imag.hpp | 50 ++++ .../is_imag.hpp => functions/is_pure.hpp} | 24 +- include/kyosu/functions/to_polar.hpp | 17 +- include/kyosu/types/cayley_dickson.hpp | 3 +- include/kyosu/types/impl/arithmetic.hpp | 29 ++ .../kyosu/types/impl/complex/arithmetic.hpp | 28 -- include/kyosu/types/impl/math.hpp | 10 +- include/kyosu/types/impl/predicates.hpp | 7 + .../kyosu/types/impl/quaternion/specific.hpp | 10 +- include/kyosu/types/impl/trigo.hpp | 12 +- include/kyosu/types/impl/trigo_pi.hpp | 41 +++ test/doc/from_polar.cpp | 6 +- test/doc/is_pure.cpp | 21 ++ test/doc/to_polar.cpp | 66 +++-- test/unit/complex/acos.cpp | 4 +- test/unit/complex/acosh.cpp | 4 +- test/unit/complex/acospi.cpp | 4 +- test/unit/complex/arg.cpp | 5 +- test/unit/complex/asin.cpp | 6 +- test/unit/complex/asinh.cpp | 6 +- test/unit/complex/asinpi.cpp | 4 +- test/unit/complex/atanh.cpp | 4 +- test/unit/complex/cos.cpp | 4 +- test/unit/complex/cosh.cpp | 4 +- test/unit/complex/cot.cpp | 4 +- test/unit/complex/coth.cpp | 4 +- test/unit/complex/csc.cpp | 4 +- test/unit/complex/exp.cpp | 4 +- test/unit/complex/exp_i.cpp | 4 +- test/unit/complex/exp_ipi.cpp | 4 +- test/unit/complex/expm1.cpp | 4 +- test/unit/complex/is_imag.cpp | 4 +- test/unit/complex/log.cpp | 4 +- test/unit/complex/log10.cpp | 4 +- test/unit/complex/log1p.cpp | 6 +- test/unit/complex/log2.cpp | 4 +- test/unit/complex/sec.cpp | 4 +- test/unit/complex/sin.cpp | 4 +- test/unit/complex/sincos.cpp | 4 +- test/unit/complex/sinh.cpp | 4 +- test/unit/complex/sinhcosh.cpp | 4 +- test/unit/complex/sqrt.cpp | 4 +- test/unit/complex/tan.cpp | 6 +- test/unit/complex/tanh.cpp | 6 +- test/unit/complex/zeta.cpp | 4 +- test/unit/function/abs.cpp | 8 +- test/unit/function/acos.cpp | 32 +++ test/unit/function/acosh.cpp | 32 +++ test/unit/function/acot.cpp | 32 +++ test/unit/function/acoth.cpp | 32 +++ test/unit/function/acsc.cpp | 32 +++ test/unit/function/acsch.cpp | 32 +++ test/unit/function/asec.cpp | 32 +++ test/unit/function/asech.cpp | 32 +++ test/unit/function/asin.cpp | 32 +++ test/unit/function/asinh.cpp | 32 +++ test/unit/function/atan.cpp | 32 +++ test/unit/function/atanh.cpp | 32 +++ test/unit/function/average.cpp | 16 +- test/unit/function/ceil.cpp | 16 +- test/unit/function/conj.cpp | 8 +- test/unit/function/cos.cpp | 6 +- test/unit/function/cosh.cpp | 6 +- test/unit/function/cospi.cpp | 4 +- test/unit/function/cot.cpp | 6 +- test/unit/function/coth.cpp | 6 +- test/unit/function/cotpi.cpp | 4 +- test/unit/function/csc.cpp | 6 +- test/unit/function/csch.cpp | 6 +- test/unit/function/cscpi.cpp | 4 +- test/unit/function/dec.cpp | 8 +- test/unit/function/dist.cpp | 16 +- test/unit/function/dot.cpp | 16 +- test/unit/function/exp.cpp | 6 +- test/unit/function/exp10.cpp | 6 +- test/unit/function/exp2.cpp | 6 +- test/unit/function/exp_i.cpp | 4 +- test/unit/function/exp_ipi.cpp | 4 +- test/unit/function/expm1.cpp | 6 +- test/unit/function/expmx2.cpp | 4 +- test/unit/function/expx2.cpp | 4 +- test/unit/function/floor.cpp | 16 +- test/unit/function/frac.cpp | 16 +- test/unit/function/hypot.cpp | 16 +- test/unit/function/inc.cpp | 8 +- test/unit/function/ipart.cpp | 16 +- test/unit/function/is_denormal.cpp | 16 +- test/unit/function/is_equal.cpp | 16 +- test/unit/function/is_eqz.cpp | 16 +- test/unit/function/is_finite.cpp | 16 +- test/unit/function/is_infinite.cpp | 16 +- test/unit/function/is_nan.cpp | 16 +- test/unit/function/is_nez.cpp | 16 +- test/unit/function/is_not_denormal.cpp | 16 +- test/unit/function/is_not_equal.cpp | 16 +- test/unit/function/is_not_finite.cpp | 16 +- test/unit/function/is_not_infinite.cpp | 16 +- test/unit/function/is_not_nan.cpp | 16 +- test/unit/function/is_not_real.cpp | 16 +- test/unit/function/is_real.cpp | 16 +- test/unit/function/is_unitary.cpp | 16 +- test/unit/function/jpart.cpp | 16 +- test/unit/function/kpart.cpp | 16 +- test/unit/function/ldiv.cpp | 18 +- test/unit/function/lerp.cpp | 22 +- test/unit/function/log.cpp | 6 +- test/unit/function/log10.cpp | 6 +- test/unit/function/log1p.cpp | 4 +- test/unit/function/log2.cpp | 6 +- test/unit/function/log_abs.cpp | 10 +- test/unit/function/lpnorm.cpp | 22 +- test/unit/function/manhattan.cpp | 16 +- test/unit/function/minus.cpp | 8 +- test/unit/function/nearest.cpp | 16 +- test/unit/function/oneminus.cpp | 8 +- test/unit/function/pow.cpp | 24 +- test/unit/function/pow1p.cpp | 27 +- test/unit/function/pow_abs.cpp | 16 +- test/unit/function/powm1.cpp | 18 +- test/unit/function/pure.cpp | 16 +- test/unit/function/real.cpp | 16 +- test/unit/function/rec.cpp | 6 +- test/unit/function/reldist.cpp | 16 +- test/unit/function/sec.cpp | 6 +- test/unit/function/sech.cpp | 6 +- test/unit/function/secpi.cpp | 6 +- test/unit/function/sign.cpp | 6 +- test/unit/function/sin.cpp | 6 +- test/unit/function/sinc.cpp | 6 +- test/unit/function/sincos.cpp | 4 +- test/unit/function/sinh.cpp | 6 +- test/unit/function/sinhcosh.cpp | 4 +- test/unit/function/sinpi.cpp | 4 +- test/unit/function/sqr.cpp | 10 +- test/unit/function/sqr_abs.cpp | 10 +- test/unit/function/sqrt.cpp | 10 +- test/unit/function/tan.cpp | 6 +- test/unit/function/tanh.cpp | 6 +- test/unit/function/tanpi.cpp | 6 +- test/unit/{complex => function}/to_polar.cpp | 10 +- test/unit/function/trunc.cpp | 16 +- test/unit/quaternion/align.cpp | 38 +++ 174 files changed, 1616 insertions(+), 1205 deletions(-) create mode 100644 doc/index.md delete mode 100644 include/kyosu/complex/acos.hpp delete mode 100644 include/kyosu/complex/acsh.hpp delete mode 100644 include/kyosu/complex/impl/arithmetic.hpp delete mode 100644 include/kyosu/complex/impl/predicates.hpp delete mode 100644 include/kyosu/complex/impl/special.hpp rename include/kyosu/{complex => functions}/acosh.hpp (87%) rename include/kyosu/{complex => functions}/acospi.hpp (89%) rename include/kyosu/{complex => functions}/acot.hpp (74%) rename include/kyosu/{complex => functions}/acoth.hpp (76%) rename include/kyosu/{complex => functions}/acotpi.hpp (89%) rename include/kyosu/{complex => functions}/acsc.hpp (86%) rename include/kyosu/{complex => functions}/acsch.hpp (87%) rename include/kyosu/{complex => functions}/acscpi.hpp (89%) rename include/kyosu/{complex/asin.hpp => functions/acsh.hpp} (65%) create mode 100644 include/kyosu/functions/align.hpp rename include/kyosu/{complex => functions}/arg.hpp (75%) rename include/kyosu/{complex => functions}/asec.hpp (86%) rename include/kyosu/{complex => functions}/asech.hpp (100%) rename include/kyosu/{complex => functions}/asecpi.hpp (89%) rename include/kyosu/{complex => functions}/asinh.hpp (86%) rename include/kyosu/{complex => functions}/asinpi.hpp (89%) rename include/kyosu/{complex => functions}/atan.hpp (77%) rename include/kyosu/{complex => functions}/atanh.hpp (88%) rename include/kyosu/{complex => functions}/atanpi.hpp (89%) create mode 100644 include/kyosu/functions/is_imag.hpp rename include/kyosu/{complex/is_imag.hpp => functions/is_pure.hpp} (76%) delete mode 100644 include/kyosu/types/impl/complex/arithmetic.hpp create mode 100644 test/doc/is_pure.cpp create mode 100644 test/unit/function/acos.cpp create mode 100644 test/unit/function/acosh.cpp create mode 100644 test/unit/function/acot.cpp create mode 100644 test/unit/function/acoth.cpp create mode 100644 test/unit/function/acsc.cpp create mode 100644 test/unit/function/acsch.cpp create mode 100644 test/unit/function/asec.cpp create mode 100644 test/unit/function/asech.cpp create mode 100644 test/unit/function/asin.cpp create mode 100644 test/unit/function/asinh.cpp create mode 100644 test/unit/function/atan.cpp create mode 100644 test/unit/function/atanh.cpp rename test/unit/{complex => function}/to_polar.cpp (72%) create mode 100644 test/unit/quaternion/align.cpp diff --git a/doc/Doxyfile b/doc/Doxyfile index e1d9f148..91253f0a 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -37,6 +37,8 @@ EXAMPLE_PATH = ../test/doc \ ../examples \ . +USE_MDFILE_AS_MAINPAGE = ./index.md + SEPARATE_MEMBER_PAGES = YES TAB_SIZE = 2 diff --git a/doc/index.md b/doc/index.md new file mode 100644 index 00000000..647805bf --- /dev/null +++ b/doc/index.md @@ -0,0 +1,116 @@ +Kyosu +===== + +**KYOSU** is an unified implementation of the complex, quaternions, octonions and more generally all +\f$\mathbb{R}\f$-Cayley-Dickson algebras in an SIMD aware context provided by **EVE** + +The Cayley-Dickson construction scheme defines a new algebra as a Cartesian product of an algebra with itself, + with multiplication defined in a specific way (different from the componentwise multiplication) + and an involution known as conjugation. + +We currently only implement the Cayley-Dickson algebras based on the IEEE float and double + representations of real numbers. + +Kyosu proper usable objects are all in the namespace `kyosu`. + +Cayley-Dickson algebras +======================= + +These are algebras over the real numbers with an involution named conjugation. +The product of an element by its conjugate is 'real' and its positive square root is a norm on the +vector space defined by the algebra. + +Starting from the real numbers (supported by type T float or double) we define: + + - complex numbers (dimension 2) + - quaternion (dimension 4) + - octonion (dimension 8) + + - and more generally for any integral power of 2: N, the cayley_dickson algebra of dimension N + +Let \f$\mathbb{K}\f$ be a Cayley-Dickson algebra of dimension N its elements can be mathematically written + +\f$\displaystyle z=\sum_0^{N-1} z_i\;e_i\f$ + +where \f$e_0=1\f$ and \f$(e_i)_{i>1}\f$ satisfy \f$e_i^2 = -1\f$ and a proper multiplication table relating them. + +@note Up to octonions these \f$(e_i)_{i<8}\f$ have (non indicial) standard names, namely : i, j, k, l, li, lj, lk. +And \f$e_0\f$ is 1 and so is generally omitted. + +In the documentation we will sometimes use the following notations: + + * \f$|z|\f$ is the absolute value (or modulus) of \f$z\f$, i.e. \f$\sqrt{\sum_0^{N-1} |z_i|^2}\f$. + * \f$z_0\f$ is the real part of \f$z\f$. + * \f$\underline{z}\f$ is the pure part of \f$z\f$ i.e. \f$\sum_1^{N-1} z_i\;e_i\f$. + * If \f$I_z\f$ denotes \f$\pm\underline{z}/|\underline{z}|\f$ (with \f$\pm\f$ chosen to be the sign of \f$z_1\f$), + the polar form of \f$z\f$ is \f$\rho e^{\theta\;I_z} = \rho(\cos\theta + I_z\sin\theta)\f$, + \f$ \rho\f$ being the norm of \f$z\f$ and \f$\theta\f$ its argument. (Note the similarity with complex numbers: + it is easy to see that \f$I_z^2=-1\f$). + +These datas with different dimensions can be freely mixed with the obvious semantic that if N will be considered as having its components from N to M-1, null as an element of cayley_dickson + + +Higher are the dimensions weirder are these algebras + + - real numbers is a commutative ordered field + - complex is a commutative field with no multiplication-compatible order + - quaternion is a non-commutative field + - octonion is a non associative (but alternative) division algebra + +Greater dimensions are not even alternative but keep power-associativity which allows +to define most elementary functions. + + +What does this implementation provide +====================================== + +All operators and functions implemented can receive a mix of scalar or simd of cayley-dickson and reals of various +dimensionnality and are defined in the namespace kyosu. + +Of course the algebra operation +, -, * and / are provided, but as \ is not an usable **C++** +character as an operator, the left division a\b is provided as the call ldiv(a,b). + +Constructors +------------ + +complex and quaternion can be constructed using callables facilities `complex` and `quaternion`. + +complex can also be constructed from their polar representation +quaternion from various parametrizations of \f$\mathbb{R}^4\f$ or from \f$\mathbb{R}^3\f$ rotations: + + * angle and axis + * cylindrical + * cylindricospherical + * euler + * multipolar + * rotation_matrix + * semipolar + * spherical + +TODO cayley_dickson + +Functions +--------- + +Most **KYOSU** callables are usable with all cayley_dickson types. The exception being mainly special + complex functions and rotation related quaternion usage. + +@warning: **EVE** callables that correspond to mathematical functions that + are only defined on a proper part of the real axis as, for example, `acos` DOES NOT ever provide the same result + if called in **EVE** or **KYOSU** context. + + eve::acos(2.0) wil returns a NaN value, but kyosu::acos(2.0) will return the pure imaginary + complex number \f$i\;\log(2+\sqrt{3})\f$ + + All these kinds of functions called with a floating value in the kyosu namespace will return a complex value. + + * callables usable with all cayley_dickson types + + Most **EVE** arithmetic functions are provided. + + * callables usable with complex only + + * callables usable with quaternion (and complex) only + +Most **EVE** arithmetic functions are provided. diff --git a/include/kyosu/complex/acos.hpp b/include/kyosu/complex/acos.hpp deleted file mode 100644 index e579de9d..00000000 --- a/include/kyosu/complex/acos.hpp +++ /dev/null @@ -1,97 +0,0 @@ -//====================================================================================================================== -/* - Kyosu - Complex Without Complexes - Copyright : KYOSU Contributors & Maintainers - SPDX-License-Identifier: BSL-1.0 -*/ -//====================================================================================================================== -#pragma once - -#include -#include - -namespace kyosu::tags -{ - struct callable_acos : eve::elementwise - { - using callable_tag_type = callable_acos; - - KYOSU_DEFERS_CALLABLE(acos_); - - template - static KYOSU_FORCEINLINE auto deferred_call(auto, T const& v) noexcept - { - auto fn = callable_acos{}; - return fn(complex(v)); - } - - template - KYOSU_FORCEINLINE auto operator()(T const& target) const noexcept -> decltype(eve::tag_invoke(*this, target)) - { - return eve::tag_invoke(*this, target); - } - - template - eve::unsupported_call operator()(T&&... x) const - requires(!requires { eve::tag_invoke(*this, KYOSU_FWD(x)...); }) = delete; - }; -} - -namespace kyosu -{ -//====================================================================================================================== -//! @addtogroup functions -//! @{ -//! @var acos -//! @brief Computes the acosine of the argument. -//! -//! **Defined in Header** -//! -//! @code -//! #include -//! @endcode -//! -//! @groupheader{Callable Signatures} -//! -//! @code -//! namespace kyosu -//! { -//! template constexpr auto acos(T z) noexcept; //1 -//! template constexpr auto acos(T z) noexcept; //2 -//! } -//! @endcode -//! -//! **Parameters** -//! -//! * `z` : Value to process. -//! -//! **Return value** -//! -//! 1. a real input z is treated as if complex(z) was entered. -//! -//! 2. Returns elementwise the complex principal value -//! of the arc cosine of the input. -//! Branch cuts exist outside the interval \f$[-1, +1]\f$ along the real axis. -//! -//! * for every z: eve::acos(eve::conj(z)) == eve::conj(std::acos(z)) -//! * If z is \f$\pm0\f$, the result is \f$\pi/2\f$ -//! * If z is \f$i NaN\f$, the result is \f$\pi/2+ i NaN\f$ -//! * If z is \f$x+i\infty\f$ (for any finite x), the result is \f$\pi/2-i\infty\f$ -//! * If z is \f$x+i NaN\f$ (for any nonzero finite x), the result is \f$NaN+i NaN\f$. -//! * If z is \f$-\infty+i y\f$ (for any positive finite y), the result is \f$\pi-i\infty\f$ -//! * If z is \f$+\infty+i y\f$ (for any positive finite y), the result is \f$+0-i\infty\f$ -//! * If z is \f$-\infty+i +\infty\f$, the result is \f$3\pi/4-i\infty\f$ -//! * If z is \f$\infty+i +\infty\f$, the result is \f$\pi/4-i\infty\f$ -//! * If z is \f$\pm\infty+i NaN\f$, the result is \f$NaN \pm i\infty\f$ (the sign -//! of the imaginary part is unspecified) -//! * If z is \f$NaN+i y\f$ (for any finite y), the result is \f$NaN+i NaN\f$ -//! * If z is \f$NaN+i\infty\f$, the result is \f$NaN-i\infty\f$ -//! * If z is \f$NaN+i NaN\f$, the result is \f$NaN+i NaN\f$ -//! -//! @groupheader{Example} -//! -//! @godbolt{doc/acos.cpp} -//! @} -//====================================================================================================================== -inline constexpr tags::callable_acos acos = {}; -} diff --git a/include/kyosu/complex/acsh.hpp b/include/kyosu/complex/acsh.hpp deleted file mode 100644 index fadd08d4..00000000 --- a/include/kyosu/complex/acsh.hpp +++ /dev/null @@ -1,96 +0,0 @@ -//====================================================================================================================== -/* - Kyosu - Complex Without Complexes - Copyright : KYOSU Contributors & Maintainers - SPDX-License-Identifier: BSL-1.0 -*/ -//====================================================================================================================== -#pragma once - -#include -#include - -namespace kyosu::tags -{ - struct callable_atanh : eve::elementwise - { - using callable_tag_type = callable_atanh; - - KYOSU_DEFERS_CALLABLE(atanh_); - - template - static KYOSU_FORCEINLINE auto deferred_call(auto, T const& v) noexcept - { - auto fn = callable_atanh{}; - return fn(complex(v)); - } - - template - KYOSU_FORCEINLINE auto operator()(T const& target) const noexcept -> decltype(eve::tag_invoke(*this, target)) - { - return eve::tag_invoke(*this, target); - } - - template - eve::unsupported_call operator()(T&&... x) const - requires(!requires { eve::tag_invoke(*this, KYOSU_FWD(x)...); }) = delete; - }; -} - -namespace kyosu -{ -//====================================================================================================================== -//! @addtogroup functions -//! @{ -//! @var atanh -//! @brief Computes the atanhine of the argument. -//! -//! **Defined in Header** -//! -//! @code -//! #include -//! @endcode -//! -//! @groupheader{Callable Signatures} -//! -//! @code -//! namespace kyosu -//! { -//! template constexpr auto atanh(T z) noexcept; //1 -//! template constexpr auto atanh(T z) noexcept; //2 -//! } -//! @endcode -//! -//! **Parameters** -//! -//! * `z` : Value to process. -//! -//! **Return value** -//! -//! 1. a real input z is treated as if complex(z) was entered. -//! -//! 2. Returns the complex arc hyperbolic sine of z, in the range of a half-strip mathematically -//! unbounded along the real axis and in the interval \f$i\times[-\pi/2, \pi/2]\f$ along -//! the imaginary axis. -//! -//! * for every z: eve::atanh(eve::conj(z)) == eve::conj(std::atanh(z)) -//! * for every z: eve::atanh(-z) == -eve::atanh(z) -//! * If z is \f$+0\f$, the result is \f$+0\f$ -//! * If z is \f$NaN\f$, the result is \f$NaN\f$ -//! * If z is \f$+1\f$, the result is \f$+\infty\f$ -//! * If z is \f$x+i \infty\f$ (for any finite positive x), the result is \f$+0,\pi/2\f$ -//! * If z is \f$x+i NaN\f$ (for any finite nonzero x), the result is \f$NaN+i NaN\f$ -//! * If z is \f$+\infty+i y\f$ (for any finite positive y), the result is \f$i \pi/2\f$ -//! * If z is \f$+\infty+i \infty\f$, the result is \f$i \pi/2\f$ -//! * If z is \f$+\infty+i NaN\f$, the result is \f$i NaN\f$ -//! * If z is \f$NaN+i y\f$ (for any finite y), the result is \f$NaN+i NaN\f$ -//! * If z is \f$NaN+i \infty\f$, the result is \f$i \pi/2\f$ (the sign of the real part is unspecified) -//! * If z is \f$NaN+i NaN\f$, the result is \f$NaN+i NaN\f$ -//! -//! @groupheader{Example} -//! -//! @godbolt{doc/atanh.cpp} -//! @} -//====================================================================================================================== -inline constexpr tags::callable_atanh atanh = {}; -} diff --git a/include/kyosu/complex/impl/arithmetic.hpp b/include/kyosu/complex/impl/arithmetic.hpp deleted file mode 100644 index c070dfd9..00000000 --- a/include/kyosu/complex/impl/arithmetic.hpp +++ /dev/null @@ -1,19 +0,0 @@ -//====================================================================================================================== -/* - Kyosu - Complex Without Complexes - Copyright : KYOSU Contributors & Maintainers - SPDX-License-Identifier: BSL-1.0 -*/ -//====================================================================================================================== -#pragma once -#include - -namespace kyosu::_ -{ - template - KYOSU_FORCEINLINE constexpr - auto dispatch(eve::tag_of const&, C const& c) noexcept - { - return eve::pedantic(eve::atan2(kyosu::imag(c), kyosu::real(c)); - } -} diff --git a/include/kyosu/complex/impl/predicates.hpp b/include/kyosu/complex/impl/predicates.hpp deleted file mode 100644 index 5667c272..00000000 --- a/include/kyosu/complex/impl/predicates.hpp +++ /dev/null @@ -1,19 +0,0 @@ -//====================================================================================================================== -/* - Kyosu - Complex Without Complexes - Copyright : KYOSU Contributors & Maintainers - SPDX-License-Identifier: BSL-1.0 -*/ -//====================================================================================================================== -#pragma once -#include - -namespace kyosu::_ -{ - template - KYOSU_FORCEINLINE constexpr - auto dispatch(eve::tag_of const&, C const& c) noexcept - { - return is_eqz(kyosu::real(c)); - } -} diff --git a/include/kyosu/complex/impl/special.hpp b/include/kyosu/complex/impl/special.hpp deleted file mode 100644 index d5ae357d..00000000 --- a/include/kyosu/complex/impl/special.hpp +++ /dev/null @@ -1,251 +0,0 @@ -//====================================================================================================================== -/* - Kyosu - Complex Without Complexes - Copyright : KYOSU Contributors & Maintainers - SPDX-License-Identifier: BSL-1.0 -*/ -//====================================================================================================================== -#pragma once -#include - -namespace kyosu::_ -{ - template - KYOSU_FORCEINLINE constexpr - auto dispatch(eve::tag_of const&, C const& c) noexcept - { - return eve::pedantic(eve::atan2(kyosu::imag(c), kyosu::real(c))); - } - - //===------------------------------------------------------------------------------------------- - // Unary functions : tgamma - //===------------------------------------------------------------------------------------------- - template - auto dispatch(eve::tag_of, Z const& a0) noexcept - { - // 15 sig. digits for 0<=real(z)<=171 - // coeffs should sum to about g*g/2+23/24 - // - using r_t = eve::element_type_t>; - auto g=r_t(607)/r_t(128); - // best results when 4<=g<=5 - constexpr int N = 15; - std::array c = - { 0.99999999999999709182, - 57.156235665862923517, - -59.597960355475491248, - 14.136097974741747174, - -0.49191381609762019978, - .33994649984811888699e-4, - .46523628927048575665e-4, - -.98374475304879564677e-4, - .15808870322491248884e-3, - -.21026444172410488319e-3, - .21743961811521264320e-3, - -.16431810653676389022e-3, - .84418223983852743293e-4, - -.26190838401581408670e-4, - .36899182659531622704e-5 - }; - - //Num Recipes used g=5 with 7 terms - //for a less effective approximation - - auto negra0 = eve::is_negative(real(a0)); - auto z = if_else(negra0, -a0, a0); - z = dec(z); - auto zh = z+half(as()); - auto zgh=zh+g; - //trick for avoiding FP overflow above z=141 - auto zp=pow(zgh,(zh*eve::half(as()))); - auto ss = Z{0, 0}; - for(int pp = N-1; pp >= 1; --pp){ - ss+= c[pp]/(z+pp); - } - auto sq2pi = r_t(2.5066282746310005024157652848110); - auto f=(sq2pi*(c[0]+ss))*((zp*exp(-zgh))*zp); - auto o = one(as()); - f = if_else(is_eqz(z) || z == o, o, f); - //adjust for negative real parts - auto reala0 = is_real(a0); - if(eve::any(negra0)) - { - f = if_else(negra0, rec(-eve::inv_pi(as(real(a0)))*a0*f*sinpi(a0)), eve::zero); - f = if_else (negra0 && reala0 && is_flint(real(a0)), Z{nan(as(sq2pi)), eve::inf(as(sq2pi))}, f); - } - f = if_else(eve::is_gtz(real(a0)) && eve::is_flint(real(a0)) && reala0, complex(nearest(real(f))), f); - f = if_else (is_eqz(a0), complex(inf(as(g))*pedantic(signnz)(real(a0))), f); - return f; - } - - // //===------------------------------------------------------------------------------------------- -// // Unary functions : log_gamma -// //===------------------------------------------------------------------------------------------- -// template -// EVE_FORCEINLINE auto dispatch(eve::tag_of, Z const& a0) noexcept -// { -// return log_abs(tgamma(a0)); -// } - -// template -// auto dispatch(eve::tag_of, Z const& a0) noexcept -// { -// // 15 sig. digits for 0<=real(z)<=171 -// // coeffs should sum to about g*g/2+23/24 -// // -// using r_t = eve::element_type_t>; -// auto g=r_t(607)/r_t(128); -// // best results when 4<=g<=5 -// constexpr int N = 15; -// std::array c = -// { 0.99999999999999709182, -// 57.156235665862923517, -// -59.597960355475491248, -// 14.136097974741747174, -// -0.49191381609762019978, -// .33994649984811888699e-4, -// .46523628927048575665e-4, -// -.98374475304879564677e-4, -// .15808870322491248884e-3, -// -.21026444172410488319e-3, -// .21743961811521264320e-3, -// -.16431810653676389022e-3, -// .84418223983852743293e-4, -// -.26190838401581408670e-4, -// .36899182659531622704e-5 -// }; - -// //Num Recipes used g=5 with 7 terms -// //for a less effective approximation - -// auto negra0 = is_negative(real(a0)); -// auto z = if_else(negra0, -a0, a0); -// auto ss = Z{0, 0}; -// for(int pp = N-1; pp >= 1; --pp){ -// ss += c[pp]*rec(z+dec(pp)); -// } -// auto zg = z+g-half(as(g)); -// auto lsq2pi = r_t(0.9189385332046727417803297); -// auto f=(lsq2pi + log(c[0]+ss)) - zg + (z-half(as()))*log(zg); -// auto zer = Z{0, 0}; -// auto o = Z{1, 0}; -// auto t = Z{2, 0}; -// f = if_else(z == t|| z == o, zer, f); -// //adjust for negative real parts -// if(any(negra0)) -// { -// auto lpi = Z{1.14472988584940017414342735, pi(as(g))}; -// auto reala0 = is_real(a0); -// f = if_else(negra0, lpi-log(a0)-f-log(sinpi(a0)), f); -// f = if_else (negra0 && reala0 && is_flint(real(a0)), Z{nan(as(g)), inf(as(g))}, f); -// } -// return f; -// } - -// //===------------------------------------------------------------------------------------------- -// // Unary functions : digamma -// //===------------------------------------------------------------------------------------------- -// template -// auto dispatch(eve::tag_of, Z const& a0) noexcept -// { -// // 15 sig. digits for 0<=real(z)<=171 -// // coeffs should sum to about g*g/2+23/24 -// // -// using r_t = eve::element_type_t>; -// auto g=r_t(607)/r_t(128); -// // best results when 4<=g<=5 -// constexpr int N = 15; -// std::array c = -// { 0.99999999999999709182, -// 57.156235665862923517, -// -59.597960355475491248, -// 14.136097974741747174, -// -0.49191381609762019978, -// .33994649984811888699e-4, -// .46523628927048575665e-4, -// -.98374475304879564677e-4, -// .15808870322491248884e-3, -// -.21026444172410488319e-3, -// .21743961811521264320e-3, -// -.16431810653676389022e-3, -// .84418223983852743293e-4, -// -.26190838401581408670e-4, -// .36899182659531622704e-5 -// }; - -// //Num Recipes used g=5 with 7 terms -// //for a less effective approximation - -// auto reflection = real(a0) < half(as(real(a0))); -// auto z = if_else(reflection, oneminus(a0), a0); - -// auto d = Z{0, 0}; -// auto n = d; -// for(int pp = N-1; pp >= 1; --pp){ -// auto dz = rec(z+dec(pp)); -// auto dd = c[pp]*dz; -// d += dd; -// n -= dd*dz; -// } -// d+= c[0]; -// auto zg = z+g-half(as(g)); -// auto f = log(zg) + (n/d - g/zg); - -// if(any(reflection)) -// { -// f = if_else(reflection, f-pi(as(g))*cotpi(a0), f); -// f = if_else (reflection && is_real(a0) && is_flint(real(a0)), Z{nan(as(g)), inf(as(g))}, f); -// } -// return f; -// } - -// //===------------------------------------------------------------------------------------------- -// // Unary functions : zeta -// //===------------------------------------------------------------------------------------------- -// template -// EVE_FORCEINLINE auto dispatch(eve::tag_of, Z const& z) noexcept -// { -// auto zz=exp2(z); -// auto k = zz/(zz-2); -// return if_else(z == one(as(z)), Z(inf(as(real(z))), 0), k*eta(z)); -// } - -// //===------------------------------------------------------------------------------------------- -// // Binary functions : rising_factorial, lrising_factorial, lbeta, beta -// //===------------------------------------------------------------------------------------------- -// template -// EVE_FORCEINLINE auto complex_binary_dispatch( eve::tag::rising_factorial> -// , Z1 const& a0, Z2 const& a1) noexcept -// { -// return if_else(is_eqz(a1), one, pedantic(div)(tgamma(a0+a1),tgamma(a0))); -// } - -// template -// EVE_FORCEINLINE auto complex_binary_dispatch( eve::tag::lrising_factorial_ -// , Z1 const& a0, Z2 const& a1) noexcept -// { -// return if_else(is_eqz(a1), zero, log( pedantic(div)(tgamma(a0+a1),tgamma(a0)))); -// } - -// template -// EVE_FORCEINLINE auto complex_binary_dispatch( eve::tag::lbeta_ -// , Z1 const& a0, Z2 const& a1) noexcept -// { -// return log(beta(a0, a1)); -// } - -// template -// EVE_FORCEINLINE auto complex_binary_dispatch( eve::tag::beta_ -// , Z1 const& a0, Z2 const& a1) noexcept -// { -// auto y = a0 + a1; -// return tgamma(a0)*tgamma(a1)/tgamma(y); -// } - - -// } - -// #include -// #include - -} diff --git a/include/kyosu/functions.hpp b/include/kyosu/functions.hpp index 8d54da1e..2d8e23b7 100644 --- a/include/kyosu/functions.hpp +++ b/include/kyosu/functions.hpp @@ -12,6 +12,25 @@ //! @brief Functions performing computations over all caylet-dickson types complex, quaternions, octonions... //====================================================================================================================== #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -38,6 +57,7 @@ #include #include #include +#include #include #include #include @@ -47,6 +67,7 @@ #include #include #include +#include #include #include #include @@ -55,6 +76,7 @@ #include #include #include +#include #include #include #include @@ -99,31 +121,13 @@ #include #include #include +#include #include //====================================================================================================================== //! @brief Functions performing computations over complex or real elements only. //====================================================================================================================== -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include #include @@ -132,8 +136,6 @@ #include #include #include -#include -#include #include #include #include @@ -141,7 +143,6 @@ #include #include #include -#include #include //====================================================================================================================== @@ -149,6 +150,7 @@ //====================================================================================================================== +#include #include #include #include diff --git a/include/kyosu/functions/abs.hpp b/include/kyosu/functions/abs.hpp index fbbbcc64..80966659 100644 --- a/include/kyosu/functions/abs.hpp +++ b/include/kyosu/functions/abs.hpp @@ -62,7 +62,8 @@ namespace kyosu //! //! **Return value** //! -//! Returns the modulus of its argument. +//! * Returns the modulus of its argument which always is a floating ordered value. +//! The modulus is the square root of the square of the absolute values of the components. //! //! @groupheader{Example} //! diff --git a/include/kyosu/functions/acos.hpp b/include/kyosu/functions/acos.hpp index 6772558b..4aaba088 100644 --- a/include/kyosu/functions/acos.hpp +++ b/include/kyosu/functions/acos.hpp @@ -9,6 +9,7 @@ #include #include +#include namespace kyosu::tags { @@ -19,7 +20,10 @@ namespace kyosu::tags KYOSU_DEFERS_CALLABLE(acos_); template - static KYOSU_FORCEINLINE auto deferred_call(auto, T const& v) noexcept { return eve::acos(v); } + static KYOSU_FORCEINLINE auto deferred_call(auto, T const& v) noexcept { + auto fn = callable_acos{}; + return fn(complex(v)); + } template KYOSU_FORCEINLINE auto operator()(T const& target) const noexcept -> decltype(eve::tag_invoke(*this, target)) @@ -52,8 +56,9 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto acos(T z) noexcept; //1 -//! template constexpr auto acos(T z) noexcept; //2 +//! template constexpr auto acos(T z) noexcept; //1 +//! template constexpr auto atan(T z) noexcept; //2 +//! template constexpr auto acos(T z) noexcept; //3 //! } //! @endcode //! @@ -84,6 +89,9 @@ namespace kyosu //! * If z is \f$NaN+i\infty\f$, the result is \f$NaN-i\infty\f$ //! * If z is \f$NaN+i NaN\f$, the result is \f$NaN+i NaN\f$ //! +//! 3. Returns \f$I_z \mathrm{acosh}(z)\f$ where \f$I_z = \frac{\underline{z}}{|\underline{z}|}\f$ and +//! \f$\underline{z}\f$ is the pure part of \f$z\f$. +//! //! @groupheader{Example} //! //! @godbolt{doc/acos.cpp} diff --git a/include/kyosu/complex/acosh.hpp b/include/kyosu/functions/acosh.hpp similarity index 87% rename from include/kyosu/complex/acosh.hpp rename to include/kyosu/functions/acosh.hpp index 5e10f7a4..f19c5c3e 100644 --- a/include/kyosu/complex/acosh.hpp +++ b/include/kyosu/functions/acosh.hpp @@ -9,6 +9,7 @@ #include #include +#include namespace kyosu::tags { @@ -43,7 +44,7 @@ namespace kyosu //! @addtogroup functions //! @{ //! @var acosh -//! @brief Computes the acoshine of the argument. +//! @brief Computes the inverse hyperbolic cosine of the argument. //! //! **Defined in Header** //! @@ -56,8 +57,9 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto acosh(T z) noexcept; //1 -//! template constexpr auto acosh(T z) noexcept; //2 +//! template constexpr auto acosh(T z) noexcept; //1 +//! template constexpr auto acosh(T z) noexcept; //2 +//! template constexpr auto acosh(T z) noexcept; //3 //! } //! @endcode //! @@ -87,6 +89,8 @@ namespace kyosu //! * If z is \f$NaN+i \infty\f$, the result is \f$i \pi/2\f$ (the sign of the real part is unspecified) //! * If z is \f$NaN+i NaN\f$, the result is \f$NaN+i NaN\f$ //! +//! 3. Returns \f$\log(z+\sqrt{z+1}\sqrt{z-1})\f$. +//! //! @groupheader{Example} //! //! @godbolt{doc/acosh.cpp} diff --git a/include/kyosu/complex/acospi.hpp b/include/kyosu/functions/acospi.hpp similarity index 89% rename from include/kyosu/complex/acospi.hpp rename to include/kyosu/functions/acospi.hpp index 6f90b2de..dae7d1af 100644 --- a/include/kyosu/complex/acospi.hpp +++ b/include/kyosu/functions/acospi.hpp @@ -56,8 +56,8 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto acospi(T z) noexcept; //1 -//! template constexpr auto acospi(T z) noexcept; //2 +//! template constexpr auto acospi(T z) noexcept; //1 +//! template constexpr auto acospi(T z) noexcept; //2 //! } //! @endcode //! @@ -69,7 +69,7 @@ namespace kyosu //! //! 1. a real input z is treated as if complex(z) was entered. //! -//! 2. Returns `pi(as(z))*acos(z)` +//! 2. Returns `invpi(as(z))*acos(z)` //! //! @groupheader{Example} //! diff --git a/include/kyosu/complex/acot.hpp b/include/kyosu/functions/acot.hpp similarity index 74% rename from include/kyosu/complex/acot.hpp rename to include/kyosu/functions/acot.hpp index aa4c8472..364207c8 100644 --- a/include/kyosu/complex/acot.hpp +++ b/include/kyosu/functions/acot.hpp @@ -9,6 +9,7 @@ #include #include +#include namespace kyosu::tags { @@ -21,8 +22,7 @@ namespace kyosu::tags template static KYOSU_FORCEINLINE auto deferred_call(auto, T const& v) noexcept { - auto fn = callable_acot{}; - return fn(complex(v)); + return eve::acot(v); } template @@ -43,7 +43,7 @@ namespace kyosu //! @addtogroup functions //! @{ //! @var acot -//! @brief Computes the acotine of the argument. +//! @brief Computes the arc cotangent of the argument. //! //! **Defined in Header** //! @@ -56,8 +56,9 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto acot(T z) noexcept; //1 -//! template constexpr auto acot(T z) noexcept; //2 +//! template constexpr auto acot(T z) noexcept; //1 +//! template constexpr auto acot(T z) noexcept; //2 +//! template constexpr auto acot(T z) noexcept; //3 //! } //! @endcode //! @@ -67,11 +68,14 @@ namespace kyosu //! //! **Return value** //! -//! 1. a real input z is treated as if complex(z) was entered. +//! 1. A real type input z calls eve::acot(z); and so returns the same type as input. //! //! 2. Returns elementwise the complex principal value //! of the arc cotangent of the input as the arc tangent of the inverse of the input. //! +//! 3. Returns \f$I_z \mathrm{acoth}(z I_z)\f$ where \f$I_z = \frac{\underline{z}}{|\underline{z}|}\f$ and +//! \f$\underline{z}\f$ is the pure part of \f$z\f$. +//! //! @groupheader{Example} //! //! @godbolt{doc/acot.cpp} diff --git a/include/kyosu/complex/acoth.hpp b/include/kyosu/functions/acoth.hpp similarity index 76% rename from include/kyosu/complex/acoth.hpp rename to include/kyosu/functions/acoth.hpp index 83336805..73fc65fa 100644 --- a/include/kyosu/complex/acoth.hpp +++ b/include/kyosu/functions/acoth.hpp @@ -9,6 +9,7 @@ #include #include +#include namespace kyosu::tags { @@ -43,7 +44,7 @@ namespace kyosu //! @addtogroup functions //! @{ //! @var acoth -//! @brief Computes the acothine of the argument. +//! @brief Computes the inverse hyperbolic cotangent of the argument. //! //! **Defined in Header** //! @@ -56,8 +57,9 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto acoth(T z) noexcept; //1 -//! template constexpr auto acoth(T z) noexcept; //2 +//! template constexpr auto acoth(T z) noexcept; //1 +//! template constexpr auto acoth(T z) noexcept; //2 +//! template constexpr auto acoth(T z) noexcept; //3 //! } //! @endcode //! @@ -69,9 +71,11 @@ namespace kyosu //! //! 1. a real input z is treated as if complex(z) was entered. //! -//! 2. Returns the complex arc hyperbolic cotangent of z, computed as \f$\mathop{\mathrm{atanh}}(1/z)\f$. +//! 2. Returns the complex inverse hyperbolic cotangent of z, computed as \f$\mathop{\mathrm{atanh}}(1/z)\f$. //! -//! @groupheader{Example} +//! 3. Returns \f$(\log(z+1)-\log(z-1))/2 \f$. +//! +///! @groupheader{Example} //! //! @godbolt{doc/acoth.cpp} //! @} diff --git a/include/kyosu/complex/acotpi.hpp b/include/kyosu/functions/acotpi.hpp similarity index 89% rename from include/kyosu/complex/acotpi.hpp rename to include/kyosu/functions/acotpi.hpp index 1b228045..9fa52a1b 100644 --- a/include/kyosu/complex/acotpi.hpp +++ b/include/kyosu/functions/acotpi.hpp @@ -56,8 +56,8 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto acotpi(T z) noexcept; //1 -//! template constexpr auto acotpi(T z) noexcept; //2 +//! template constexpr auto acotpi(T z) noexcept; //1 +//! template constexpr auto acotpi(T z) noexcept; //2 //! } //! @endcode //! @@ -69,7 +69,7 @@ namespace kyosu //! //! 1. a real input z is treated as if complex(z) was entered. //! -//! 2. Returns `pi(as(z))*acot(z)` +//! 2. Returns `invpi(as(z))*acot(z)` //! //! @groupheader{Example} //! diff --git a/include/kyosu/complex/acsc.hpp b/include/kyosu/functions/acsc.hpp similarity index 86% rename from include/kyosu/complex/acsc.hpp rename to include/kyosu/functions/acsc.hpp index 6df94c2b..37653ff1 100644 --- a/include/kyosu/complex/acsc.hpp +++ b/include/kyosu/functions/acsc.hpp @@ -9,6 +9,7 @@ #include #include +#include namespace kyosu::tags { @@ -19,7 +20,10 @@ namespace kyosu::tags KYOSU_DEFERS_CALLABLE(acsc_); template - static KYOSU_FORCEINLINE auto deferred_call(auto, T const& v) noexcept { return eve::acsc(v); } + static KYOSU_FORCEINLINE auto deferred_call(auto, T const& v) noexcept { + auto fn = callable_acsc{}; + return fn(complex(v)); + } template KYOSU_FORCEINLINE auto operator()(T const& target) const noexcept -> decltype(eve::tag_invoke(*this, target)) @@ -52,8 +56,8 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto acsc(T z) noexcept; //1 -//! template constexpr auto acsc(T z) noexcept; //2 +//! template constexpr auto acsc(T z) noexcept; //1 +//! template constexpr auto acsc(T z) noexcept; //2 //! } //! @endcode //! diff --git a/include/kyosu/complex/acsch.hpp b/include/kyosu/functions/acsch.hpp similarity index 87% rename from include/kyosu/complex/acsch.hpp rename to include/kyosu/functions/acsch.hpp index 9f890931..aff78fc3 100644 --- a/include/kyosu/complex/acsch.hpp +++ b/include/kyosu/functions/acsch.hpp @@ -9,6 +9,7 @@ #include #include +#include namespace kyosu::tags { @@ -43,7 +44,7 @@ namespace kyosu //! @addtogroup functions //! @{ //! @var acsch -//! @brief Computes the hyperbolic arccosecant of the argument. +//! @brief Computes the inverse hyperbolic cosecant of the argument. //! //! **Defined in Header** //! @@ -56,8 +57,8 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto acsch(T z) noexcept; //1 -//! template constexpr auto acsch(T z) noexcept; //2 +//! template constexpr auto acsch(T z) noexcept; //1 +//! template constexpr auto acsch(T z) noexcept; //2 //! } //! @endcode //! diff --git a/include/kyosu/complex/acscpi.hpp b/include/kyosu/functions/acscpi.hpp similarity index 89% rename from include/kyosu/complex/acscpi.hpp rename to include/kyosu/functions/acscpi.hpp index 5cbd3592..b958bd74 100644 --- a/include/kyosu/complex/acscpi.hpp +++ b/include/kyosu/functions/acscpi.hpp @@ -56,8 +56,8 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto acscpi(T z) noexcept; //1 -//! template constexpr auto acscpi(T z) noexcept; //2 +//! template constexpr auto acscpi(T z) noexcept; //1 +//! template constexpr auto acscpi(T z) noexcept; //2 //! } //! @endcode //! @@ -69,7 +69,7 @@ namespace kyosu //! //! 1. a real input z is treated as if complex(z) was entered. //! -//! 2. Returns `pi(as(z))*acsc(z)` +//! 2. Returns `invpi(as(z))*acsc(z)` //! //! @groupheader{Example} //! diff --git a/include/kyosu/complex/asin.hpp b/include/kyosu/functions/acsh.hpp similarity index 65% rename from include/kyosu/complex/asin.hpp rename to include/kyosu/functions/acsh.hpp index 47f73bcc..cb42992c 100644 --- a/include/kyosu/complex/asin.hpp +++ b/include/kyosu/functions/acsh.hpp @@ -12,16 +12,16 @@ namespace kyosu::tags { - struct callable_asin : eve::elementwise + struct callable_acsch : eve::elementwise { - using callable_tag_type = callable_asin; + using callable_tag_type = callable_acsch; - KYOSU_DEFERS_CALLABLE(asin_); + KYOSU_DEFERS_CALLABLE(acsch_); template static KYOSU_FORCEINLINE auto deferred_call(auto, T const& v) noexcept { - auto fn = callable_asin{}; + auto fn = callable_acsch{}; return fn(complex(v)); } @@ -32,7 +32,7 @@ namespace kyosu::tags } template - eve::unsupported_call operator()(T&&... x) const + eve::unsupported_call operator()(T&&... x) const requires(!requires { eve::tag_invoke(*this, KYOSU_FWD(x)...); }) = delete; }; } @@ -42,8 +42,8 @@ namespace kyosu //====================================================================================================================== //! @addtogroup functions //! @{ -//! @var asin -//! @brief Computes the asinine of the argument. +//! @var acsch +//! @brief Computes the acschine of the argument. //! //! **Defined in Header** //! @@ -56,8 +56,8 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto asin(T z) noexcept; //1 -//! template constexpr auto asin(T z) noexcept; //2 +//! template constexpr auto acsch(T z) noexcept; //1 +//! template constexpr auto acsch(T z) noexcept; //2 //! } //! @endcode //! @@ -69,16 +69,12 @@ namespace kyosu //! //! 1. a real input z is treated as if complex(z) was entered. //! -//! 2. Returns the elementwise the complex principal value -//! of the arc sine of the input in the range of a strip unbounded along the imaginary axis -//! and in the interval \f$[-\pi/2, \pi/2]\f$ along the real axis. -//! -//! special cases are handled as if the operation was implemented by \f$-i \mathrm{asinh}(i z)\f$ +//! 2. Returns elementwise asinh(1/z). //! //! @groupheader{Example} //! -//! @godbolt{doc/asin.cpp} +//! @godbolt{doc/acsch.cpp} //! @} //====================================================================================================================== -inline constexpr tags::callable_asin asin = {}; +inline constexpr tags::callable_acsch acsch = {}; } diff --git a/include/kyosu/functions/align.hpp b/include/kyosu/functions/align.hpp new file mode 100644 index 00000000..1c831a9e --- /dev/null +++ b/include/kyosu/functions/align.hpp @@ -0,0 +1,119 @@ +//================================================================================================== +/* + KYOSU - Expressive Vector Engine + Copyright : KYOSU Project Contributors + SPDX-License-Identifier: BSL-1.0 +*/ +//================================================================================================== +#pragma once + +#include +#include +#include + +namespace kyosu::tags +{ + struct callable_align : eve::elementwise + { + using callable_tag_type = callable_align; + + KYOSU_DEFERS_CALLABLE(align_); + + template + static KYOSU_FORCEINLINE auto deferred_call(auto + , V v0 + , U v1 + , _::norming) noexcept + { + auto qv0 = quaternion(eve::zero(eve::as(v0[0])), v0[0], v0[1], v0[2]); + auto qv1 = quaternion(eve::zero(eve::as(v1[0])), v1[0], v1[1], v1[2]); + auto v1v0 = qv1*qv0; + if constexpr(normalize) + { + return sign(oneminus(sign(v1v0))); + } + else + { + return sign(oneminus(v1v0)); + } + } + + template + static KYOSU_FORCEINLINE auto deferred_call(auto + , V v0 + , U v1) noexcept + { + auto fn = callable_align{}; + return fn(v0, v1, normalize); + } + + template + KYOSU_FORCEINLINE auto operator()(T0 target0, + T1 target1 + ) const noexcept + -> decltype(eve::tag_invoke(*this, target0, target1)) + { + return eve::tag_invoke(*this, target0, target1); + } + + template + KYOSU_FORCEINLINE auto operator()( T0 const& target0 + , T1 const& target1 + , _::norming) const noexcept + -> decltype(eve::tag_invoke(*this, target0, target1, _::norming())) + { + return eve::tag_invoke(*this, target0, target1, _::norming()); + } + + template + eve::unsupported_call operator()(T&&... x) const + requires(!requires { eve::tag_invoke(*this, KYOSU_FWD(x)...); }) = delete; + }; +} + +namespace kyosu +{ + //================================================================================================ + //! @addtogroup quaternion + //! @{ + //! @var align + //! + //! @brief Callable object computing a quaternion from its angle_axis representation. + //! + //! This function build an unitary quaternion from an angle value and a 3 dimensionnal axis vector + //! + //! **Defined in header** + //! + //! @code + //! #include kyosu/module/quaternion.hpp>` + //! @endcode + //! + //! @groupheader{Callable Signatures} + //! + //! @code + //! namespace kyosu + //! { + //! auto align(auto angle, auto axis, auto norming = normalize) const noexcept; + //! } + //! @endcode + //! + //! **Parameters** + //! + //! * `v0` : span of 3 elements + //! * `v1` : span of 3 elements + //! * normalize : can be assume_normalized or normalize. In the second case axis is normalized. + //! if axis is already normalized use assume_normalized is more efficient. + //! + //! **Return value** + //! + //! An unitaryquaternion value representing a rotation that align v0 to v1. + //! + //! If v0 or v1 is a nullvector the result is UB + //! + //! @groupheader{Example} + //! + //! @godbolt{doc/align.cpp} + //! @} + //================================================================================================ + inline constexpr tags::callable_align align = {}; +} diff --git a/include/kyosu/complex/arg.hpp b/include/kyosu/functions/arg.hpp similarity index 75% rename from include/kyosu/complex/arg.hpp rename to include/kyosu/functions/arg.hpp index 1e0d2df1..0ea7e4b7 100644 --- a/include/kyosu/complex/arg.hpp +++ b/include/kyosu/functions/arg.hpp @@ -53,8 +53,9 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto arg(T z) noexcept; -//! template constexpr auto arg(T z) noexcept; +//! template constexpr auto arg(T z) noexcept; //1 +//! template constexpr auto arg(T z) noexcept; //2 +//! template constexpr auto arg(T z) noexcept; //3 //! } //! @endcode //! @@ -64,7 +65,11 @@ namespace kyosu //! //! **Return value** //! -//! Returns elementwise true the argument of the complex number i.e. `atan2(imag(z), real(z))`. +//! 1. Returns 0 or pi acording to the non negativity of z. +//! 2. Returns elementwise the argument of the complex number i.e. `atan2(imag(z), real(z))`. +//! 3. Returns \f$\mathrm{atan2}(|\underline{z}|, z_0)\f$ where \f$z_0\f$ is the real part of \f$z\f$ and +//! \f$\underline{z}\f$ is the pure part of \f$z\f$. + //! //! @groupheader{Example} //! diff --git a/include/kyosu/complex/asec.hpp b/include/kyosu/functions/asec.hpp similarity index 86% rename from include/kyosu/complex/asec.hpp rename to include/kyosu/functions/asec.hpp index 2590c021..3c9ac812 100644 --- a/include/kyosu/complex/asec.hpp +++ b/include/kyosu/functions/asec.hpp @@ -9,6 +9,7 @@ #include #include +#include namespace kyosu::tags { @@ -19,7 +20,10 @@ namespace kyosu::tags KYOSU_DEFERS_CALLABLE(asec_); template - static KYOSU_FORCEINLINE auto deferred_call(auto, T const& v) noexcept { return eve::asec(v); } + static KYOSU_FORCEINLINE auto deferred_call(auto, T const& v) noexcept { + auto fn = callable_asec{}; + return fn(complex(v)); + } template KYOSU_FORCEINLINE auto operator()(T const& target) const noexcept -> decltype(eve::tag_invoke(*this, target)) @@ -52,8 +56,8 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto asec(T z) noexcept; //1 -//! template constexpr auto asec(T z) noexcept; //2 +//! template constexpr auto asec(T z) noexcept; //1 +//! template constexpr auto asec(T z) noexcept; //2 //! } //! @endcode //! diff --git a/include/kyosu/complex/asech.hpp b/include/kyosu/functions/asech.hpp similarity index 100% rename from include/kyosu/complex/asech.hpp rename to include/kyosu/functions/asech.hpp diff --git a/include/kyosu/complex/asecpi.hpp b/include/kyosu/functions/asecpi.hpp similarity index 89% rename from include/kyosu/complex/asecpi.hpp rename to include/kyosu/functions/asecpi.hpp index 69c85337..b016f2d2 100644 --- a/include/kyosu/complex/asecpi.hpp +++ b/include/kyosu/functions/asecpi.hpp @@ -56,8 +56,8 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto asecpi(T z) noexcept; //1 -//! template constexpr auto asecpi(T z) noexcept; //2 +//! template constexpr auto asecpi(T z) noexcept; //1 +//! template constexpr auto asecpi(T z) noexcept; //2 //! } //! @endcode //! @@ -69,7 +69,7 @@ namespace kyosu //! //! 1. a real input z is treated as if complex(z) was entered. //! -//! 2. Returns `pi(as(z))*asec(z)` +//! 2. Returns `invpi(as(z))*asec(z)` //! //! @groupheader{Example} //! diff --git a/include/kyosu/functions/asin.hpp b/include/kyosu/functions/asin.hpp index d4b3cad1..2cb68dfe 100644 --- a/include/kyosu/functions/asin.hpp +++ b/include/kyosu/functions/asin.hpp @@ -19,7 +19,11 @@ namespace kyosu::tags KYOSU_DEFERS_CALLABLE(asin_); template - static KYOSU_FORCEINLINE auto deferred_call(auto, T const& v) noexcept { return eve::asin(v); } + static KYOSU_FORCEINLINE auto deferred_call(auto, T const& v) noexcept + { + auto fn = callable_asin{}; + return fn(complex(v)); + } template KYOSU_FORCEINLINE auto operator()(T const& target) const noexcept -> decltype(eve::tag_invoke(*this, target)) @@ -39,7 +43,7 @@ namespace kyosu //! @addtogroup functions //! @{ //! @var asin -//! @brief Computes the asinine of the argument. +//! @brief Computes the arcsine of the argument. //! //! **Defined in Header** //! @@ -52,8 +56,9 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto asin(T z) noexcept; //1 -//! template constexpr auto asin(T z) noexcept; //2 +//! template constexpr auto asin(T z) noexcept; //1 +//! template constexpr auto asin(T z) noexcept; //2 +//! template constexpr auto acos(T z) noexcept; //3 //! } //! @endcode //! @@ -65,11 +70,14 @@ namespace kyosu //! //! 1. a real input z is treated as if complex(z) was entered. //! -//! 2. Returns elementwise the complex principal value +//! 2. Returns the elementwise the complex principal value //! of the arc sine of the input in the range of a strip unbounded along the imaginary axis //! and in the interval \f$[-\pi/2, \pi/2]\f$ along the real axis. //! -//! special cases are handled as if the operation was implemented by \f$-i \mathrm{asinh}(i z)\f$ +//! special cases are handled as if the operation was implemented by \f$-i\; \mathrm{asinh}(z\; i)\f$ +//! +//! 3. Returns \f$-I_z \mathrm{asinh}(z I_z)\f$ where \f$I_z = \frac{\underline{z}}{|\underline{z}|}\f$ and +//! \f$\underline{z}\f$ is the pure part of \f$z\f$. //! //! @groupheader{Example} //! diff --git a/include/kyosu/complex/asinh.hpp b/include/kyosu/functions/asinh.hpp similarity index 86% rename from include/kyosu/complex/asinh.hpp rename to include/kyosu/functions/asinh.hpp index d507ff66..696f3834 100644 --- a/include/kyosu/complex/asinh.hpp +++ b/include/kyosu/functions/asinh.hpp @@ -21,8 +21,7 @@ namespace kyosu::tags template static KYOSU_FORCEINLINE auto deferred_call(auto, T const& v) noexcept { - auto fn = callable_asinh{}; - return fn(complex(v)); + return eve::asinh(v); } template @@ -56,8 +55,9 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto asinh(T z) noexcept; //1 -//! template constexpr auto asinh(T z) noexcept; //2 +//! template constexpr auto asinh(T z) noexcept; //1 +//! template constexpr auto asinh(T z) noexcept; //2 +//! template constexpr auto asinh(T z) noexcept; //3 //! } //! @endcode //! @@ -67,8 +67,8 @@ namespace kyosu //! //! **Return value** //! -//! 1. a real input z is treated as if complex(z) was entered. -//! +//! 1. A real type input z calls eve::asinh(z); and so returns the same type as input. +//! //! 2. Returns the complex arc hyperbolic sine of z, with branch cuts outside the interval //! \f$i\times[-\pi/2, \pi/2]\f$ along the imaginary axis. //! @@ -85,6 +85,8 @@ namespace kyosu //! * If z is \f$NaN+i \infty\f$, the result is \f$\pm \infty+ iNaN\f$ (the sign of the real part is unspecified) //! * If z is \f$NaN+ iNaN\f$, the result is \f$NaN+ iNaN\f$ //! +//! 3. Returns \f$\log(z+\sqrt{1+z^2})\f$. +//! //! @groupheader{Example} //! //! @godbolt{doc/asinh.cpp} diff --git a/include/kyosu/complex/asinpi.hpp b/include/kyosu/functions/asinpi.hpp similarity index 89% rename from include/kyosu/complex/asinpi.hpp rename to include/kyosu/functions/asinpi.hpp index 2a250fce..56432daf 100644 --- a/include/kyosu/complex/asinpi.hpp +++ b/include/kyosu/functions/asinpi.hpp @@ -56,8 +56,8 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto asinpi(T z) noexcept; //1 -//! template constexpr auto asinpi(T z) noexcept; //2 +//! template constexpr auto asinpi(T z) noexcept; //1 +//! template constexpr auto asinpi(T z) noexcept; //2 //! } //! @endcode //! @@ -69,7 +69,7 @@ namespace kyosu //! //! 1. a real input z is treated as if complex(z) was entered. //! -//! 2. Returns `pi(as(z))*asin(z)` +//! 2. Returns `invpi(as(z))*asin(z)` //! //! @groupheader{Example} //! diff --git a/include/kyosu/complex/atan.hpp b/include/kyosu/functions/atan.hpp similarity index 77% rename from include/kyosu/complex/atan.hpp rename to include/kyosu/functions/atan.hpp index 1b0188d4..0b3d365e 100644 --- a/include/kyosu/complex/atan.hpp +++ b/include/kyosu/functions/atan.hpp @@ -43,7 +43,7 @@ namespace kyosu //! @addtogroup functions //! @{ //! @var atan -//! @brief Computes the atanine of the argument. +//! @brief Computes the inverse hyperbolic tangent of the argument. //! //! **Defined in Header** //! @@ -56,8 +56,9 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto atan(T z) noexcept; //1 -//! template constexpr auto atan(T z) noexcept; //2 +//! template constexpr auto atan(T z) noexcept; //1 +//! template constexpr auto atan(T z) noexcept; //2 +//! template constexpr auto atan(T z) noexcept; //3 //! } //! @endcode //! @@ -72,8 +73,10 @@ namespace kyosu //! 2. Returns the elementwise the complex principal value //! of the arc tangent of the input in the range of a strip unbounded along the imaginary axis //! and in the interval \f$[-\pi/2, \pi/2]\f$ along the real axis. +//! Special cases are handled as if the operation was implemented by \f$-i\; \mathrm{atanh}(z\; i)\f$. //! -//! special cases are handled as if the operation was implemented by \f$-i \mathrm{atanh}(i z)\f$ +//! 3. Returns \f$ -I_z \mathrm{atanh}(z I_z)\f$ where \f$I_z = \frac{\underline{z}}{|\underline{z}|}\f$ and +//! \f$\underline{z}\f$ is the pure part of \f$z\f$. //! //! @groupheader{Example} //! diff --git a/include/kyosu/complex/atanh.hpp b/include/kyosu/functions/atanh.hpp similarity index 88% rename from include/kyosu/complex/atanh.hpp rename to include/kyosu/functions/atanh.hpp index fadd08d4..ce0d576c 100644 --- a/include/kyosu/complex/atanh.hpp +++ b/include/kyosu/functions/atanh.hpp @@ -43,7 +43,7 @@ namespace kyosu //! @addtogroup functions //! @{ //! @var atanh -//! @brief Computes the atanhine of the argument. +//! @brief Computes the inverse hyperbolic tangent of the argument. //! //! **Defined in Header** //! @@ -56,8 +56,9 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto atanh(T z) noexcept; //1 -//! template constexpr auto atanh(T z) noexcept; //2 +//! template constexpr auto atanh(T z) noexcept; //1 +//! template constexpr auto atanh(T z) noexcept; //2 +//! template constexpr auto atanh(T z) noexcept; //3 //! } //! @endcode //! @@ -87,6 +88,8 @@ namespace kyosu //! * If z is \f$NaN+i \infty\f$, the result is \f$i \pi/2\f$ (the sign of the real part is unspecified) //! * If z is \f$NaN+i NaN\f$, the result is \f$NaN+i NaN\f$ //! +//! 3. Returns \f$(\log(1+z)-\log(1-z))/2\f$. +//! //! @groupheader{Example} //! //! @godbolt{doc/atanh.cpp} diff --git a/include/kyosu/complex/atanpi.hpp b/include/kyosu/functions/atanpi.hpp similarity index 89% rename from include/kyosu/complex/atanpi.hpp rename to include/kyosu/functions/atanpi.hpp index 076872ec..1744d34b 100644 --- a/include/kyosu/complex/atanpi.hpp +++ b/include/kyosu/functions/atanpi.hpp @@ -56,8 +56,8 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto atanpi(T z) noexcept; //1 -//! template constexpr auto atanpi(T z) noexcept; //2 +//! template constexpr auto atanpi(T z) noexcept; //1 +//! template constexpr auto atanpi(T z) noexcept; //2 //! } //! @endcode //! @@ -69,7 +69,7 @@ namespace kyosu //! //! 1. a real input z is treated as if complex(z) was entered. //! -//! 2. Returns `pi(as(z))*atan(z)` +//! 2. Returns `invpi(as(z))*atan(z)` //! //! @groupheader{Example} //! diff --git a/include/kyosu/functions/from_angle_axis.hpp b/include/kyosu/functions/from_angle_axis.hpp index 368bb229..04eeade9 100644 --- a/include/kyosu/functions/from_angle_axis.hpp +++ b/include/kyosu/functions/from_angle_axis.hpp @@ -39,9 +39,9 @@ namespace kyosu::tags return eve::tag_invoke(*this, target0, target1); } -// template -// eve::unsupported_call operator()(T&&... x) const -// requires(!requires { eve::tag_invoke(*this, KYOSU_FWD(x)...); }) = delete; + template + eve::unsupported_call operator()(T&&... x) const + requires(!requires { eve::tag_invoke(*this, KYOSU_FWD(x)...); }) = delete; }; } @@ -75,8 +75,8 @@ namespace kyosu //! //! * `angle` : rotation angle in radian //! * `axis`` : rotation axis given by an std::span of dimension 3. - //! * normalize : can be assume_normalized or normalize in the second case axis is normalized. - //! if axis is already normalized use assume_normalized. + //! * normalize : can be assume_normalized or normalize. In the second case axis is normalized. + //! if axis is already normalized use assume_normalized is more efficient. //! //! **Return value** //! diff --git a/include/kyosu/functions/from_polar.hpp b/include/kyosu/functions/from_polar.hpp index c44f6948..ed8c89e5 100644 --- a/include/kyosu/functions/from_polar.hpp +++ b/include/kyosu/functions/from_polar.hpp @@ -37,6 +37,14 @@ namespace kyosu::tags return eve::tag_invoke(*this, target0, target1); } + template + KYOSU_FORCEINLINE auto operator()(T0 const& target0, T1 const& target1, T2 const& target2 + ) const noexcept + -> decltype(eve::tag_invoke(*this, target0, target1, target2)) + { + return eve::tag_invoke(*this, target0, target1, target2); + } + template eve::unsupported_call operator()(T&&... x) const requires(!requires { eve::tag_invoke(*this, KYOSU_FWD(x)...); }) = delete; @@ -65,22 +73,25 @@ namespace kyosu //! @code //! namespace eve //! { - //! auto from_polar( auto rho, auto theta) const noexcept; + //! template, + //! auto from_polar( T0 rho, T1 theta) const noexcept; // 1 + //! template, + //! auto from_polar( T0 rho, T1 theta, C iz) const noexcept; // 2 //! } //! @endcode //! //! **Parameters** //! - //! `rho` : modulus - //! `rho` : argument. + //! `rho` : modulus. + //! `theta` : argument. + //! `iz' : unitary cayley dickson value. //! //! **Return value** //! - //! the complex number associated. + //! 1. the complex number `rho*exp(i*theta)`. + //! 2. the cayley_dickson value `rho*exp(iz*theta)`. //! - //! @note : a negative rho is not an error but is treated as {-rho, theta+pi}. //! - //! --- //! //! #### Example //! diff --git a/include/kyosu/functions/is_imag.hpp b/include/kyosu/functions/is_imag.hpp new file mode 100644 index 00000000..97f779e9 --- /dev/null +++ b/include/kyosu/functions/is_imag.hpp @@ -0,0 +1,50 @@ +//====================================================================================================================== +/* + Kyosu - Complex Without Complexes + Copyright : KYOSU Contributors & Maintainers + SPDX-License-Identifier: BSL-1.0 +*/ +//====================================================================================================================== +#pragma once + +#include + +namespace kyosu +{ +//====================================================================================================================== +//! @addtogroup functions +//! @{ +//! @var is_imag +//! @brief test if the parameter real part is zero. +//! +//! **Defined in Header** +//! +//! @code +//! #include +//! @endcode +//! +//! @groupheader{Callable Signatures} +//! +//! @code +//! namespace kyosu +//! { +//! template constexpr auto is_imag(T z) noexcept; +//! template constexpr auto is_imag(T z) noexcept; +//! } +//! @endcode +//! +//! **Parameters** +//! +//! * `z` : Value to process. +//! +//! **Return value** +//! +//! Returns elementwise true the real part of the argument is zero. +//! is_imag is an alias of is_pure. +//! +//! @groupheader{Example} +//! +//! @godbolt{doc/is_imag.cpp} +//! @} +//====================================================================================================================== +} diff --git a/include/kyosu/complex/is_imag.hpp b/include/kyosu/functions/is_pure.hpp similarity index 76% rename from include/kyosu/complex/is_imag.hpp rename to include/kyosu/functions/is_pure.hpp index f6dd8a39..3eff780b 100644 --- a/include/kyosu/complex/is_imag.hpp +++ b/include/kyosu/functions/is_pure.hpp @@ -11,11 +11,11 @@ namespace kyosu::tags { - struct callable_is_imag : eve::elementwise + struct callable_is_pure : eve::elementwise { - using callable_tag_type = callable_is_imag; + using callable_tag_type = callable_is_pure; - KYOSU_DEFERS_CALLABLE(is_imag_); + KYOSU_DEFERS_CALLABLE(is_pure_); template static KYOSU_FORCEINLINE auto deferred_call(auto, T const& v) noexcept { return eve::is_eqz(v); } @@ -27,7 +27,7 @@ namespace kyosu::tags } template - eve::unsupported_call operator()(T&&... x) const + eve::unsupported_call operator()(T&&... x) const requires(!requires { eve::tag_invoke(*this, KYOSU_FWD(x)...); }) = delete; }; } @@ -37,8 +37,8 @@ namespace kyosu //====================================================================================================================== //! @addtogroup functions //! @{ -//! @var is_imag -//! @brief test if the parameter is imag. +//! @var is_pure +//! @brief test if the parameter is pure. //! //! **Defined in Header** //! @@ -51,8 +51,8 @@ namespace kyosu //! @code //! namespace kyosu //! { -//! template constexpr auto is_imag(T z) noexcept; -//! template constexpr auto is_imag(T z) noexcept; +//! template constexpr auto is_pure(T z) noexcept; +//! template constexpr auto is_pure(T z) noexcept; //! } //! @endcode //! @@ -62,13 +62,13 @@ namespace kyosu //! //! **Return value** //! -//! Returns elementwise true the real part of the argument is zero. -//! For Caley-Dickson types of dimension greater than 2 use is_pure. +//! Returns elementwise true if the real part of the argument is zero. //! //! @groupheader{Example} //! -//! @godbolt{doc/is_imag.cpp} +//! @godbolt{doc/is_pure.cpp} //! @} //====================================================================================================================== -inline constexpr tags::callable_is_imag is_imag = {}; +inline constexpr tags::callable_is_pure is_pure = {}; +inline constexpr tags::callable_is_pure is_imag = {}; } diff --git a/include/kyosu/functions/to_polar.hpp b/include/kyosu/functions/to_polar.hpp index ade8ce12..72b0b81d 100644 --- a/include/kyosu/functions/to_polar.hpp +++ b/include/kyosu/functions/to_polar.hpp @@ -62,18 +62,27 @@ namespace kyosu //! @code //! namespace eve //! { - //! auto to_polar( auto q) const noexcept; + //! template constexpr auto arg(T z) noexcept; //1 + //! template constexpr auto atan(T z) noexcept; //2 + //! template constexpr auto argy(T z) noexcept; //3 //! } //! @endcode //! //! **Parameters** //! - //! `q` : quaternion + //! `q` : cayley dickson value //! //! **Return value** //! - //! a tuple containing in this order `rho`, 'theta': the modulus - //! and the argument in radian of the complex input + //! 1. a tuple containing `rho`, 'theta': the absolute value + //! and the argument in radian of the real input (\f$0\f$ or\f$\pi\f$). + //! + //! 2. a tuple containing `rho`, 'theta': the modulus + //! and the argument in radian of the complex input. + //! + //! 3. a tuple containing `rho`, 'theta' the modulus + //! and the argument in radian of the cayley input and a square root of -1 iz such + //! that `z = rho*exp(iz*theta). The leading coefficient of ìz` is chosen non-negative.` //! //! --- //! diff --git a/include/kyosu/types/cayley_dickson.hpp b/include/kyosu/types/cayley_dickson.hpp index d527872d..78f95cd7 100644 --- a/include/kyosu/types/cayley_dickson.hpp +++ b/include/kyosu/types/cayley_dickson.hpp @@ -16,8 +16,7 @@ #include #include #include -#include -#include +//#include #include #include #include diff --git a/include/kyosu/types/impl/arithmetic.hpp b/include/kyosu/types/impl/arithmetic.hpp index f035268a..494b5651 100644 --- a/include/kyosu/types/impl/arithmetic.hpp +++ b/include/kyosu/types/impl/arithmetic.hpp @@ -25,6 +25,16 @@ namespace kyosu::_ return kumi::apply(eve::hypot, c); } + template + KYOSU_FORCEINLINE constexpr + auto dispatch(eve::tag_of const&, C const& z) noexcept + { + if constexpr(kyosu::concepts::complex) + return eve::pedantic(eve::atan2)(kyosu::imag(z), real(z)); + else + return eve::pedantic(eve::atan2)(sign(ipart(z))*kyosu::abs(pure(z)), real(z)); + } + template KYOSU_FORCEINLINE constexpr auto dispatch(eve::tag_of const&, C const& c) noexcept @@ -282,4 +292,23 @@ namespace kyosu::_ return rec(c0)*c1; } + template + KYOSU_FORCEINLINE constexpr + auto dispatch(eve::tag_of const&, C const& c) noexcept + { + if constexpr(kyosu::concepts::complex) + return kumi::tuple{kyosu::abs(c), kyosu::arg(c)}; + else + return kumi::tuple{kyosu::abs(c), kyosu::arg(c), sign(ipart(c))*sign(pure(c))}; + } + + template + KYOSU_FORCEINLINE constexpr + auto dispatch(eve::tag_of const& + , T0 const& rho + , T1 const& theta + , C const& iz) noexcept + { + return rho*kyosu::exp(theta*iz); + } } diff --git a/include/kyosu/types/impl/complex/arithmetic.hpp b/include/kyosu/types/impl/complex/arithmetic.hpp deleted file mode 100644 index ab4b829a..00000000 --- a/include/kyosu/types/impl/complex/arithmetic.hpp +++ /dev/null @@ -1,28 +0,0 @@ -//====================================================================================================================== -/* - Kyosu - Complex Without Complexes - Copyright : KYOSU Contributors & Maintainers - SPDX-License-Identifier: BSL-1.0 -*/ -//====================================================================================================================== -#pragma once - -#include - -namespace kyosu::_ -{ - template - KYOSU_FORCEINLINE constexpr - auto dispatch(eve::tag_of const&, C const& c) noexcept - { - return eve::pedantic(eve::atan2)(kyosu::imag(c), kyosu::real(c)); - } - - template - KYOSU_FORCEINLINE constexpr - auto dispatch(eve::tag_of const&, C const& c) noexcept - { - return kumi::tuple{kyosu::abs(c), kyosu::arg(c)}; - } - -} diff --git a/include/kyosu/types/impl/math.hpp b/include/kyosu/types/impl/math.hpp index 6a6751e1..ccdd7200 100644 --- a/include/kyosu/types/impl/math.hpp +++ b/include/kyosu/types/impl/math.hpp @@ -379,7 +379,7 @@ namespace kyosu::_ return kyosu::if_else(eve::is_ltz(c1), kyosu::rec(tmp), tmp); } } - else if constexpr(kyosu::concepts::complex && kyosu::concepts::complex) + else if constexpr((dimension_v <= 2) && (dimension_v <= 2)) { r_t r; if constexpr(eve::floating_value && kyosu::concepts::complex) // c1 is complex c0 is real @@ -388,7 +388,7 @@ namespace kyosu::_ auto lgac0 = eve::log_abs(c0); auto ang = eve::if_else(kyosu::is_real(c1), eve::zero, ic1*lgac0); auto mod = eve::pow(c0, rc1); - auto r1 = kyosu::to_polar(mod, ang); + auto r1 = kyosu::from_polar(mod, ang); auto isposc0 = eve::is_positive(c0); if (eve::all(isposc0)) { @@ -412,7 +412,9 @@ namespace kyosu::_ } else if constexpr( kyosu::concepts::complex)// c0 and c1 are complex { - auto [rc1, ic1] = c1; +// auto rc1 = real(c1); +// auto ic1 = imag(c1); + auto [rc1, ic1] = c1; auto lc0 = kyosu::log_abs(c0); auto argc0 = kyosu::arg(c0); auto rho = eve::exp(eve::pedantic(eve::diff_of_prod)(lc0, rc1, ic1, argc0)); @@ -421,7 +423,7 @@ namespace kyosu::_ auto realc0 = is_real(c0); if(eve::any(realc0)) { - auto rr = complex(kyosu::pow(real(c0), c1)); + auto rr = kyosu::pow(real(c0), c1); r = kyosu::if_else(realc0, rr, r); } } diff --git a/include/kyosu/types/impl/predicates.hpp b/include/kyosu/types/impl/predicates.hpp index d2209f97..7995325f 100644 --- a/include/kyosu/types/impl/predicates.hpp +++ b/include/kyosu/types/impl/predicates.hpp @@ -12,6 +12,13 @@ namespace kyosu::_ { + template + KYOSU_FORCEINLINE constexpr + auto dispatch(eve::tag_of const&, C c) noexcept + { + return is_eqz(real(c)); + } + template KYOSU_FORCEINLINE constexpr auto dispatch(eve::tag_of const&, C c) noexcept diff --git a/include/kyosu/types/impl/quaternion/specific.hpp b/include/kyosu/types/impl/quaternion/specific.hpp index c3a830eb..b71a3d65 100644 --- a/include/kyosu/types/impl/quaternion/specific.hpp +++ b/include/kyosu/types/impl/quaternion/specific.hpp @@ -266,15 +266,15 @@ namespace kyosu::_ } } - template + template KYOSU_FORCEINLINE constexpr auto dispatch(eve::tag_of const& , Z const & q - , std::span const & v + , M const & v , _::norming) noexcept { using e_t = std::decay_t; - using v_t = decltype(T()+e_t()); + using v_t = decltype(v[0]+e_t()); if constexpr (!normalize) EVE_ASSERT(eve::all(eve::pedantic(kyosu::is_unitary)(q)), "some quaternions are not unitary"); std::array w, wp; using a_t = decltype(kyosu::abs(q)); @@ -291,11 +291,11 @@ namespace kyosu::_ return wp; } - template + template KYOSU_FORCEINLINE constexpr auto dispatch(eve::tag_of const& , Z const & q - , std::span const & v) noexcept + , M const & v) noexcept { return rotate_vec(q, v, _::norming{}); } diff --git a/include/kyosu/types/impl/trigo.hpp b/include/kyosu/types/impl/trigo.hpp index 9883b24c..2fba01c5 100644 --- a/include/kyosu/types/impl/trigo.hpp +++ b/include/kyosu/types/impl/trigo.hpp @@ -286,14 +286,14 @@ namespace kyosu::_ KYOSU_FORCEINLINE constexpr auto dispatch(eve::tag_of const&, C const& z) noexcept { - return eve::half(as(real(z)))*(log((inc(z))-log(dec(z)))); + return eve::half(eve::as(real(z)))*(log(inc(z))-log(oneminus(z))); } template KYOSU_FORCEINLINE constexpr auto dispatch(eve::tag_of const&, C const& z) noexcept { - return eve::half(as(real(z)))*(log((dec(z)-log(inc(z))))); + return eve::half(eve::as(real(z)))*(log(inc(z))-log(dec(z))); } template @@ -326,15 +326,15 @@ namespace kyosu::_ template KYOSU_FORCEINLINE constexpr - auto dispatch(eve::tag_of const&, C const& z) noexcept + auto dispatch(eve::tag_of const&, C const& z) noexcept { auto s = sign(pure(z)); - return s*asinh(z*s); + return -s*asinh(z*s); } template KYOSU_FORCEINLINE constexpr - auto dispatch(eve::tag_of const&, C const& z) noexcept + auto dispatch(eve::tag_of const&, C const& z) noexcept { return sign(pure(z))*acosh(z); } @@ -344,7 +344,7 @@ namespace kyosu::_ auto dispatch(eve::tag_of const&, C const& z) noexcept { auto s = sign(pure(z)); - return s*atanh(z*s); + return -s*atanh(z*s); } template diff --git a/include/kyosu/types/impl/trigo_pi.hpp b/include/kyosu/types/impl/trigo_pi.hpp index 6d3e2d6d..473845f8 100644 --- a/include/kyosu/types/impl/trigo_pi.hpp +++ b/include/kyosu/types/impl/trigo_pi.hpp @@ -195,5 +195,46 @@ namespace kyosu::_ } } + template + KYOSU_FORCEINLINE constexpr + auto dispatch(eve::tag_of const&, C const& z) noexcept + { + return radinpi(asin(z)); + } + + template + KYOSU_FORCEINLINE constexpr + auto dispatch(eve::tag_of const&, C const& z) noexcept + { + return radinpi(acos(z)); + } + + template + KYOSU_FORCEINLINE constexpr + auto dispatch(eve::tag_of const&, C const& z) noexcept + { + return radinpi(atan(z)); + } + + template + KYOSU_FORCEINLINE constexpr + auto dispatch(eve::tag_of const&, C const& z) noexcept + { + return radinpi(acot(z)); + } + + template + KYOSU_FORCEINLINE constexpr + auto dispatch(eve::tag_of const&, C const& z) noexcept + { + return radinpi(asec(z)); + } + + template + KYOSU_FORCEINLINE constexpr + auto dispatch(eve::tag_of const&, C const& z) noexcept + { + return radinpi(acsc(z)); + } } diff --git a/test/doc/from_polar.cpp b/test/doc/from_polar.cpp index 1d1bd3df..ed2279a8 100644 --- a/test/doc/from_polar.cpp +++ b/test/doc/from_polar.cpp @@ -12,10 +12,14 @@ int main() auto theta = eve::pio_3(eve::as()); auto rho = 3.0; + auto iz0 = kyosu::sign(kyosu::quaternion(0., 1.)); + auto iz1 = kyosu::sign(kyosu::quaternion(0., 1., 2., 3.)); std::cout << " <- theta = " << theta << std::endl; std::cout << " <- rho = " << rho << std::endl; - std::cout << " -> " << kyosu::from_polar(theta, rho) << "\n"; + std::cout << " -> " << from_polar(theta, rho) << "\n"; + std::cout << " -> " << from_polar(theta, rho, iz0) << "\n"; + std::cout << " -> " << from_polar(theta, rho, iz1) << "\n"; return 0; } diff --git a/test/doc/is_pure.cpp b/test/doc/is_pure.cpp new file mode 100644 index 00000000..c3bc8fcf --- /dev/null +++ b/test/doc/is_pure.cpp @@ -0,0 +1,21 @@ +#include +#include +#include + +int main() +{ + + using wide_ft = eve::wide >; + wide_ft ref1 = { 3.0f, 0.0f, 1.0f, 0.5f}; + wide_ft imf1 = { 2.0f , -1.0, -5.0, 0.0}; + wide_ft ref2 = { 0.0, 1.0, 2.0, 3.0}; + auto zc = kyosu::complex_t(ref1, imf1); + + std::cout + << "---- simd" << std::endl + << "<- zc = " << zc << std::endl + << "-> is_imag(zc) = " << kyosu::is_imag(zc)<< std::endl + << "-> is_imag(ref2) = " << kyosu::is_imag(ref2) << std::endl; + + return 0; +} diff --git a/test/doc/to_polar.cpp b/test/doc/to_polar.cpp index e4b2eda3..6942ddba 100644 --- a/test/doc/to_polar.cpp +++ b/test/doc/to_polar.cpp @@ -9,24 +9,58 @@ int main() using kyosu::quaternion_t; using e_t = float; using c_t = kyosu::complex_t; + using q_t = kyosu::quaternion_t; using we_t = eve::wide>; using wc_t = eve::wide, eve::fixed<2>>; + using wq_t = eve::wide, eve::fixed<2>>; + using wq_t = eve::wide, eve::fixed<2>>; - std::cout << "Real: "<< "\n"; - e_t e0(1); - e_t e1(-2); - std::cout << e0 << " -> " << to_polar(e0) << "\n"; - std::cout << e1 << " -> " << to_polar(e1) << "\n"; - we_t we0(e0); - we_t we1(e1); - std::cout << we0 << " -> " << to_polar(we0) << "\n"; - std::cout << we1 << " -> " << to_polar(we1) << "\n"; - - std::cout << "Complex: "<< "\n"; - c_t c0(3, -4); - std::cout << c0 << " -> " << to_polar(c0) << "\n"; - wc_t wc0(c0); - std::cout << wc0 << " -> " << to_polar(wc0) << "\n"; - + { + std::cout << "Real: "<< "\n"; + e_t e0(1); + e_t e1(-2); + auto [r0, t0] = to_polar(e0); + std::cout << e0 << " -> r0 = " << r0 << ", t0 = " << t0 << "\n"; + auto [r1, t1] = to_polar(e1); + std::cout << e1 << " -> r0 = " << r1 << ", t1 = " << t0 << "\n"; + we_t we0(e0); + we_t we1(e1); + auto [wr0, wt0] = to_polar(we0); + std::cout << we0 << " -> r0 = " << wr0 << ", wt0 = " << wt0 << "\n"; + auto [wr1, wt1] = to_polar(we1); + std::cout << we1 << " -> wr0 = " << wr1 << ", wt1 = " << wt0 << "\n"; + } + { + std::cout << "Complex: "<< "\n"; + c_t c0(3, -4); + c_t c1(1, 2); + auto [r0, t0] = to_polar(c0); + std::cout << c0 << " -> r0 = " << r0 << ", t0 = " << t0 << "\n"; + auto [r1, t1] = to_polar(c1); + std::cout << c1 << " -> r0 = " << r1 << ", t1 = " << t0 << "\n"; + wc_t wc0(c0, kyosu::sqr(c0)); + wc_t wc1(c1, c0); + auto [wr0, wt0] = to_polar(wc0); + std::cout << wc0 << " -> r0 = " << wr0 << ", wt0 = " << wt0 << "\n"; + auto [wr1, wt1] = to_polar(wc1); + std::cout << wc1 << " -> wr0 = " << wr1 << ", wt1 = " << wt0 << "\n"; + } + { + std::cout << "Quaternion: "<< "\n"; + q_t q0(3, -4, 2, -1); + auto [r, t, i] = to_polar(q0); + std::cout << "q0= " << q0<< std::endl; + std::cout << "r = " << r << std::endl; + std::cout << "t = " << t << std::endl; + std::cout << "i = " << i << std::endl; + std::cout << "r*exp(i*t) = " << r*kyosu::exp(i*t) << std::endl; + wq_t wq0(q0, q0*(1.0-q0)); + auto [wr, wt, wi] = to_polar(wq0); + std::cout << "wq0= " << wq0<< std::endl; + std::cout << "wr = " << wr << std::endl; + std::cout << "wt = " << wt << std::endl; + std::cout << "wi = " << wi << std::endl; + std::cout << "wr*exp(wi*wt) = " << wr*kyosu::exp(wi*wt) << std::endl; + } return 0; } diff --git a/test/unit/complex/acos.cpp b/test/unit/complex/acos.cpp index 43e954fe..791f10ed 100644 --- a/test/unit/complex/acos.cpp +++ b/test/unit/complex/acos.cpp @@ -35,8 +35,8 @@ TTS_CASE_WITH( "Check behavior of acos on scalar" TTS_CASE_WITH( "Check behavior of acos on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/acosh.cpp b/test/unit/complex/acosh.cpp index 8aed7b60..35ef8189 100644 --- a/test/unit/complex/acosh.cpp +++ b/test/unit/complex/acosh.cpp @@ -35,8 +35,8 @@ TTS_CASE_WITH( "Check behavior of acosh on scalar" TTS_CASE_WITH( "Check behavior of acosh on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/acospi.cpp b/test/unit/complex/acospi.cpp index 14e8932e..066195ec 100644 --- a/test/unit/complex/acospi.cpp +++ b/test/unit/complex/acospi.cpp @@ -28,8 +28,8 @@ TTS_CASE_WITH( "Check behavior of acospi on scalar" TTS_CASE_WITH( "Check behavior of acospi on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/arg.cpp b/test/unit/complex/arg.cpp index ce490267..6d8b7171 100644 --- a/test/unit/complex/arg.cpp +++ b/test/unit/complex/arg.cpp @@ -27,10 +27,11 @@ TTS_CASE_WITH( "Check behavior of arg on scalar" TTS_CASE_WITH( "Check behavior of arg on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { TTS_RELATIVE_EQUAL(kyosu::arg(kyosu::complex(a0,a1)), eve::atan2(a1, a0), 1.0e-6); + TTS_RELATIVE_EQUAL(kyosu::arg(kyosu::complex(a0,a1)),kyosu::arg(kyosu::quaternion(a0,a1)), 1.0e-6); }; diff --git a/test/unit/complex/asin.cpp b/test/unit/complex/asin.cpp index accb40cb..7e684245 100644 --- a/test/unit/complex/asin.cpp +++ b/test/unit/complex/asin.cpp @@ -35,8 +35,8 @@ TTS_CASE_WITH( "Check behavior of asin on scalar" TTS_CASE_WITH( "Check behavior of asin on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { @@ -44,7 +44,7 @@ TTS_CASE_WITH( "Check behavior of asin on wide" using ke_t = kyosu::complex_t; using c_t = std::complex>; ke_t e([&](auto i, auto){return cv(std::asin(c_t(a0.get(i), a1.get(i)))); }); - TTS_RELATIVE_EQUAL(kyosu::asin(ke_t{a0,a1}), e, 1.0e-6); + TTS_RELATIVE_EQUAL(kyosu::asin(ke_t{a0,a1}), e, 1.0e-3); }; diff --git a/test/unit/complex/asinh.cpp b/test/unit/complex/asinh.cpp index 7dc5d331..2a2773ee 100644 --- a/test/unit/complex/asinh.cpp +++ b/test/unit/complex/asinh.cpp @@ -35,8 +35,8 @@ TTS_CASE_WITH( "Check behavior of asinh on scalar" TTS_CASE_WITH( "Check behavior of asinh on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { @@ -44,7 +44,7 @@ TTS_CASE_WITH( "Check behavior of asinh on wide" using ke_t = kyosu::complex_t; using c_t = std::complex>; ke_t e([&](auto i, auto){return cv(std::asinh(c_t(a0.get(i), a1.get(i)))); }); - TTS_RELATIVE_EQUAL(kyosu::asinh(ke_t{a0,a1}), e, 1.0e-5); + TTS_RELATIVE_EQUAL(kyosu::asinh(ke_t{a0,a1}), e, 5.0e-4); }; TTS_CASE_TPL( "Check asinh lilits", kyosu::real_types) diff --git a/test/unit/complex/asinpi.cpp b/test/unit/complex/asinpi.cpp index eb202118..3a6eca49 100644 --- a/test/unit/complex/asinpi.cpp +++ b/test/unit/complex/asinpi.cpp @@ -28,8 +28,8 @@ TTS_CASE_WITH( "Check behavior of asinpi on scalar" TTS_CASE_WITH( "Check behavior of asinpi on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/atanh.cpp b/test/unit/complex/atanh.cpp index 7de7ba90..a5ca3064 100644 --- a/test/unit/complex/atanh.cpp +++ b/test/unit/complex/atanh.cpp @@ -35,8 +35,8 @@ TTS_CASE_WITH( "Check behavior of atanh on scalar" TTS_CASE_WITH( "Check behavior of atanh on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/cos.cpp b/test/unit/complex/cos.cpp index 6871d676..8b96aba0 100644 --- a/test/unit/complex/cos.cpp +++ b/test/unit/complex/cos.cpp @@ -35,8 +35,8 @@ TTS_CASE_WITH( "Check behavior of cos on scalar" TTS_CASE_WITH( "Check behavior of cos on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/cosh.cpp b/test/unit/complex/cosh.cpp index 339b1d1e..7d624806 100644 --- a/test/unit/complex/cosh.cpp +++ b/test/unit/complex/cosh.cpp @@ -35,8 +35,8 @@ TTS_CASE_WITH( "Check behavior of cosh on scalar" TTS_CASE_WITH( "Check behavior of cosh on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/cot.cpp b/test/unit/complex/cot.cpp index 0dc10a28..9a789b2d 100644 --- a/test/unit/complex/cot.cpp +++ b/test/unit/complex/cot.cpp @@ -34,8 +34,8 @@ TTS_CASE_WITH( "Check behavior of cot on scalar" TTS_CASE_WITH( "Check behavior of cot on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/coth.cpp b/test/unit/complex/coth.cpp index 8cc625d4..c1f6615f 100644 --- a/test/unit/complex/coth.cpp +++ b/test/unit/complex/coth.cpp @@ -34,8 +34,8 @@ TTS_CASE_WITH( "Check behavior of coth on scalar" TTS_CASE_WITH( "Check behavior of coth on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/csc.cpp b/test/unit/complex/csc.cpp index 8612ac4d..1b4a0d32 100644 --- a/test/unit/complex/csc.cpp +++ b/test/unit/complex/csc.cpp @@ -34,8 +34,8 @@ TTS_CASE_WITH( "Check behavior of csc on scalar" TTS_CASE_WITH( "Check behavior of csc on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/exp.cpp b/test/unit/complex/exp.cpp index c11a0e39..ca9db612 100644 --- a/test/unit/complex/exp.cpp +++ b/test/unit/complex/exp.cpp @@ -34,8 +34,8 @@ TTS_CASE_WITH( "Check behavior of exp on scalar" TTS_CASE_WITH( "Check behavior of exp on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/exp_i.cpp b/test/unit/complex/exp_i.cpp index 78ea9903..7916c2fb 100644 --- a/test/unit/complex/exp_i.cpp +++ b/test/unit/complex/exp_i.cpp @@ -34,8 +34,8 @@ TTS_CASE_WITH( "Check behavior of exp_i on scalar" TTS_CASE_WITH( "Check behavior of exp_i on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/exp_ipi.cpp b/test/unit/complex/exp_ipi.cpp index 46727e69..c8581fea 100644 --- a/test/unit/complex/exp_ipi.cpp +++ b/test/unit/complex/exp_ipi.cpp @@ -35,8 +35,8 @@ TTS_CASE_WITH( "Check behavior of exp_ipi on scalar" TTS_CASE_WITH( "Check behavior of exp_ipi on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/expm1.cpp b/test/unit/complex/expm1.cpp index 464456fc..ce011e7f 100644 --- a/test/unit/complex/expm1.cpp +++ b/test/unit/complex/expm1.cpp @@ -34,8 +34,8 @@ TTS_CASE_WITH( "Check behavior of exp on scalar" TTS_CASE_WITH( "Check behavior of exp on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/is_imag.cpp b/test/unit/complex/is_imag.cpp index 4edd85f9..7a84c4b8 100644 --- a/test/unit/complex/is_imag.cpp +++ b/test/unit/complex/is_imag.cpp @@ -34,8 +34,8 @@ TTS_CASE_WITH( "Check behavior of cos on scalar" TTS_CASE_WITH( "Check behavior of cos on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/log.cpp b/test/unit/complex/log.cpp index 6a7df0d8..7b999cce 100644 --- a/test/unit/complex/log.cpp +++ b/test/unit/complex/log.cpp @@ -34,8 +34,8 @@ TTS_CASE_WITH( "Check behavior of log on scalar" TTS_CASE_WITH( "Check behavior of log on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/log10.cpp b/test/unit/complex/log10.cpp index 295bb3f5..262eae6b 100644 --- a/test/unit/complex/log10.cpp +++ b/test/unit/complex/log10.cpp @@ -34,8 +34,8 @@ TTS_CASE_WITH( "Check behavior of log10 on scalar" TTS_CASE_WITH( "Check behavior of log10 on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/log1p.cpp b/test/unit/complex/log1p.cpp index a81d95cd..a65e0c97 100644 --- a/test/unit/complex/log1p.cpp +++ b/test/unit/complex/log1p.cpp @@ -35,8 +35,8 @@ TTS_CASE_WITH( "Check behavior of log1p on scalar" TTS_CASE_WITH( "Check behavior of log1p on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { @@ -44,5 +44,5 @@ TTS_CASE_WITH( "Check behavior of log1p on wide" using ke_t = kyosu::complex_t; using c_t = std::complex>; ke_t e([&](auto i, auto){return cv(std::log(c_t(eve::inc(a0.get(i)), a1.get(i)))); }); - TTS_RELATIVE_EQUAL(kyosu::log1p(ke_t{a0,a1}), e, 1.0e-6); + TTS_RELATIVE_EQUAL(kyosu::log1p(ke_t{a0,a1}), e, 1.0e-4); }; diff --git a/test/unit/complex/log2.cpp b/test/unit/complex/log2.cpp index 24df8ee7..6c1f2dd0 100644 --- a/test/unit/complex/log2.cpp +++ b/test/unit/complex/log2.cpp @@ -36,8 +36,8 @@ TTS_CASE_WITH( "Check behavior of log2 on scalar" TTS_CASE_WITH( "Check behavior of log2 on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/sec.cpp b/test/unit/complex/sec.cpp index ebee60ae..cc82e26a 100644 --- a/test/unit/complex/sec.cpp +++ b/test/unit/complex/sec.cpp @@ -34,8 +34,8 @@ TTS_CASE_WITH( "Check behavior of sec on scalar" TTS_CASE_WITH( "Check behavior of sec on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/sin.cpp b/test/unit/complex/sin.cpp index 153a15dd..9b4f1643 100644 --- a/test/unit/complex/sin.cpp +++ b/test/unit/complex/sin.cpp @@ -35,8 +35,8 @@ TTS_CASE_WITH( "Check behavior of sin on scalar" TTS_CASE_WITH( "Check behavior of sin on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/sincos.cpp b/test/unit/complex/sincos.cpp index 4ad1d8ce..f3b28bad 100644 --- a/test/unit/complex/sincos.cpp +++ b/test/unit/complex/sincos.cpp @@ -29,8 +29,8 @@ TTS_CASE_WITH( "Check behavior of sincos on scalar" TTS_CASE_WITH( "Check behavior of sincos on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/sinh.cpp b/test/unit/complex/sinh.cpp index 20166316..1367fe49 100644 --- a/test/unit/complex/sinh.cpp +++ b/test/unit/complex/sinh.cpp @@ -35,8 +35,8 @@ TTS_CASE_WITH( "Check behavior of sinh on scalar" TTS_CASE_WITH( "Check behavior of sinh on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/sinhcosh.cpp b/test/unit/complex/sinhcosh.cpp index 78aa6fdd..0cc8534d 100644 --- a/test/unit/complex/sinhcosh.cpp +++ b/test/unit/complex/sinhcosh.cpp @@ -29,8 +29,8 @@ TTS_CASE_WITH( "Check behavior of sinhcosh on scalar" TTS_CASE_WITH( "Check behavior of sinhcosh on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/sqrt.cpp b/test/unit/complex/sqrt.cpp index 3747e2a0..c6285514 100644 --- a/test/unit/complex/sqrt.cpp +++ b/test/unit/complex/sqrt.cpp @@ -35,8 +35,8 @@ TTS_CASE_WITH( "Check behavior of sqrt on scalar" TTS_CASE_WITH( "Check behavior of sqrt on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { diff --git a/test/unit/complex/tan.cpp b/test/unit/complex/tan.cpp index 69d9ce56..312e7c6d 100644 --- a/test/unit/complex/tan.cpp +++ b/test/unit/complex/tan.cpp @@ -35,8 +35,8 @@ TTS_CASE_WITH( "Check behavior of tan on scalar" TTS_CASE_WITH( "Check behavior of tan on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { @@ -44,5 +44,5 @@ TTS_CASE_WITH( "Check behavior of tan on wide" using ke_t = kyosu::complex_t; using c_t = std::complex>; ke_t e([&](auto i, auto){return cv(std::tan(c_t(a0.get(i), a1.get(i)))); }); - TTS_RELATIVE_EQUAL(kyosu::tan(ke_t{a0,a1}), e, 1.0e-6); + TTS_RELATIVE_EQUAL(kyosu::tan(ke_t{a0,a1}), e, 1.0e-4); }; diff --git a/test/unit/complex/tanh.cpp b/test/unit/complex/tanh.cpp index 2be37202..3c6326cd 100644 --- a/test/unit/complex/tanh.cpp +++ b/test/unit/complex/tanh.cpp @@ -35,8 +35,8 @@ TTS_CASE_WITH( "Check behavior of tanh on scalar" TTS_CASE_WITH( "Check behavior of tanh on wide" , kyosu::simd_real_types - , tts::generate( tts::between(-10, 10) - , tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10) + , tts::randoms(-10, 10)) ) (T const& a0, T const& a1 ) { @@ -44,5 +44,5 @@ TTS_CASE_WITH( "Check behavior of tanh on wide" using ke_t = kyosu::complex_t; using c_t = std::complex>; ke_t e([&](auto i, auto){return cv(std::tanh(c_t(a0.get(i), a1.get(i)))); }); - TTS_RELATIVE_EQUAL(kyosu::tanh(ke_t{a0,a1}), e, 1.0e-6); + TTS_RELATIVE_EQUAL(kyosu::tanh(ke_t{a0,a1}), e, 1.0e-4); }; diff --git a/test/unit/complex/zeta.cpp b/test/unit/complex/zeta.cpp index 9a2ead1f..ba295ebe 100644 --- a/test/unit/complex/zeta.cpp +++ b/test/unit/complex/zeta.cpp @@ -12,7 +12,7 @@ TTS_CASE_WITH("Check behavior of zeta on wide" , kyosu::scalar_real_types - , tts::generate( tts::between(-10, 10)) + , tts::generate( tts::randoms(-10, 10)) ) ([[maybe_unused]] T const& a0) { @@ -25,7 +25,7 @@ TTS_CASE_WITH("Check behavior of zeta on wide" // TTS_RELATIVE_EQUAL(real(zeta(a0)), map([](auto e) -> v_t { return std::riemann_zeta(v_t(e)); }, a0), 01.0e-4); TTS_ULP_EQUAL(real(zeta(T(0))), T(std::riemann_zeta(v_t(0))), 0.5); TTS_ULP_EQUAL(real(zeta(T(-0.0))), T(std::riemann_zeta(v_t(-0.0))), 0.5); - TTS_ULP_EQUAL(real(zeta(T(1.5))), T(std::riemann_zeta(v_t(1.5))), 1.5); + TTS_ULP_EQUAL(real(zeta(T(1.5))), T(std::riemann_zeta(v_t(1.5))), 2.5); TTS_ULP_EQUAL(real(zeta(T(-1.5))), T(std::riemann_zeta(v_t(-1.5))), 3.5); TTS_ULP_EQUAL(real(zeta(T(14))), T(std::riemann_zeta(v_t(14))), 0.5); TTS_ULP_EQUAL(real(zeta(T(-14))), T(std::riemann_zeta(v_t(-14))), 0.5); diff --git a/test/unit/function/abs.cpp b/test/unit/function/abs.cpp index 05edc6d4..d347552a 100644 --- a/test/unit/function/abs.cpp +++ b/test/unit/function/abs.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::abs over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::abs over real" TTS_CASE_WITH ( "Check kyosu::abs over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -28,8 +28,8 @@ TTS_CASE_WITH ( "Check kyosu::abs over complex" TTS_CASE_WITH ( "Check kyosu::abs over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/acos.cpp b/test/unit/function/acos.cpp new file mode 100644 index 00000000..e03a0bf6 --- /dev/null +++ b/test/unit/function/acos.cpp @@ -0,0 +1,32 @@ +//====================================================================================================================== +/* + Kyosu - Complex Without Complexes + Copyright : KYOSU Contributors & Maintainers + SPDX-License-Identifier: BSL-1.0 +*/ +//====================================================================================================================== +#include +#include + +TTS_CASE_WITH ( "Check kyosu::acos over quaternion" + , kyosu::scalar_real_types + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + ) + ) +(T a0, T a1, T a2, T a3) +{ + using ce_t = kyosu::complex_t; + using qe_t = kyosu::quaternion_t; + + auto r = T(a0); + auto c = ce_t(a0,a1); + auto q = qe_t(a0,a1,a2,a3); + + auto lr = kyosu::acos(r); + auto lc = kyosu::acos(c); + auto lq = kyosu::acos(q); + TTS_RELATIVE_EQUAL(kyosu::cos(lr), kyosu::complex(r), 1e-5); + TTS_RELATIVE_EQUAL(kyosu::cos(lc), c, 1e-3); + TTS_RELATIVE_EQUAL(kyosu::cos(lq), q, 1e-3); +}; diff --git a/test/unit/function/acosh.cpp b/test/unit/function/acosh.cpp new file mode 100644 index 00000000..da1bc16a --- /dev/null +++ b/test/unit/function/acosh.cpp @@ -0,0 +1,32 @@ +//====================================================================================================================== +/* + Kyosu - Complex Without Complexes + Copyright : KYOSU Contributors & Maintainers + SPDX-License-Identifier: BSL-1.0 +*/ +//====================================================================================================================== +#include +#include + +TTS_CASE_WITH ( "Check kyosu::acosh over quaternion" + , kyosu::simd_real_types + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + ) + ) +(T a0, T a1, T a2, T a3) +{ + using ce_t = kyosu::complex_t; + using qe_t = kyosu::quaternion_t; + + auto r = T(a0); + auto c = ce_t(a0,a1); + auto q = qe_t(a0,a1,a2,a3); + + auto lr = kyosu::acosh(r); + auto lc = kyosu::acosh(c); + auto lq = kyosu::acosh(q); + TTS_RELATIVE_EQUAL(kyosu::cosh(lr), kyosu::complex(r), 1e-5); + TTS_RELATIVE_EQUAL(kyosu::cosh(lc), c, 1e-3); + TTS_RELATIVE_EQUAL(kyosu::cosh(lq), q, 1e-3); +}; diff --git a/test/unit/function/acot.cpp b/test/unit/function/acot.cpp new file mode 100644 index 00000000..06a97655 --- /dev/null +++ b/test/unit/function/acot.cpp @@ -0,0 +1,32 @@ +//====================================================================================================================== +/* + Kyosu - Complex Without Complexes + Copyright : KYOSU Contributors & Maintainers + SPDX-License-Identifier: BSL-1.0 +*/ +//====================================================================================================================== +#include +#include + +TTS_CASE_WITH ( "Check kyosu::acot over quaternion" + , kyosu::simd_real_types + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + ) + ) +(T a0, T a1, T a2, T a3) +{ + using ce_t = kyosu::complex_t; + using qe_t = kyosu::quaternion_t; + + auto r = T(a0); + auto c = ce_t(a0,a1); + auto q = qe_t(a0,a1,a2,a3); + + auto lr = kyosu::acot(r); + auto lc = kyosu::acot(c); + auto lq = kyosu::acot(q); + TTS_RELATIVE_EQUAL(kyosu::cot(lr), r, 1e-3); + TTS_RELATIVE_EQUAL(kyosu::cot(lc), c, 1e-3); + TTS_RELATIVE_EQUAL(kyosu::cot(lq), q, 2e-2); +}; diff --git a/test/unit/function/acoth.cpp b/test/unit/function/acoth.cpp new file mode 100644 index 00000000..ace2a9d2 --- /dev/null +++ b/test/unit/function/acoth.cpp @@ -0,0 +1,32 @@ +//====================================================================================================================== +/* + Kyosu - Complex Without Complexes + Copyright : KYOSU Contributors & Maintainers + SPDX-License-Identifier: BSL-1.0 +*/ +//====================================================================================================================== +#include +#include + +TTS_CASE_WITH ( "Check kyosu::acoth over quaternion" + , kyosu::simd_real_types + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + ) + ) +(T a0, T a1, T a2, T a3) +{ + using ce_t = kyosu::complex_t; + using qe_t = kyosu::quaternion_t; + + auto r = T(a0); + auto c = ce_t(a0,a1); + auto q = qe_t(a0,a1,a2,a3); + + auto lr = kyosu::acoth(r); + auto lc = kyosu::acoth(c); + auto lq = kyosu::acoth(q); + TTS_RELATIVE_EQUAL(kyosu::coth(lr), kyosu::complex(r), 1e-3); + TTS_RELATIVE_EQUAL(kyosu::coth(lc), c, 1e-3); + TTS_RELATIVE_EQUAL(kyosu::coth(lq), q, 1e-3); +}; diff --git a/test/unit/function/acsc.cpp b/test/unit/function/acsc.cpp new file mode 100644 index 00000000..3c8b542e --- /dev/null +++ b/test/unit/function/acsc.cpp @@ -0,0 +1,32 @@ +//====================================================================================================================== +/* + Kyosu - Complex Without Complexes + Copyright : KYOSU Contributors & Maintainers + SPDX-License-Identifier: BSL-1.0 +*/ +//====================================================================================================================== +#include +#include + +TTS_CASE_WITH ( "Check kyosu::acsc over quaternion" + , kyosu::scalar_real_types + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + ) + ) +(T a0, T a1, T a2, T a3) +{ + using ce_t = kyosu::complex_t; + using qe_t = kyosu::quaternion_t; + + auto r = T(a0); + auto c = ce_t(a0,a1); + auto q = qe_t(a0,a1,a2,a3); + + auto lr = kyosu::acsc(r); + auto lc = kyosu::acsc(c); + auto lq = kyosu::acsc(q); + TTS_RELATIVE_EQUAL(kyosu::csc(lr), kyosu::complex(r), 1e-3); + TTS_RELATIVE_EQUAL(kyosu::csc(lc), c, 1e-3); + TTS_RELATIVE_EQUAL(kyosu::csc(lq), q, 1e-3); +}; diff --git a/test/unit/function/acsch.cpp b/test/unit/function/acsch.cpp new file mode 100644 index 00000000..629debfe --- /dev/null +++ b/test/unit/function/acsch.cpp @@ -0,0 +1,32 @@ +//====================================================================================================================== +/* + Kyosu - Complex Without Complexes + Copyright : KYOSU Contributors & Maintainers + SPDX-License-Identifier: BSL-1.0 +*/ +//====================================================================================================================== +#include +#include + +TTS_CASE_WITH ( "Check kyosu::acsch over quaternion" + , kyosu::simd_real_types + , tts::generate ( tts::randoms(1,10), tts::randoms(1,10) + , tts::randoms(1,10), tts::randoms(1,10) + ) + ) +(T a0, T a1, T a2, T a3) +{ + using ce_t = kyosu::complex_t; + using qe_t = kyosu::quaternion_t; + + auto r = T(a0); + auto c = ce_t(a0,a1); + auto q = qe_t(a0,a1,a2,a3); + + auto lr = kyosu::acsch(r); + auto lc = kyosu::acsch(c); + auto lq = kyosu::acsch(q); + TTS_RELATIVE_EQUAL(kyosu::csch(lr), kyosu::complex(r), 1e-5); + TTS_RELATIVE_EQUAL(kyosu::csch(lc), c, 1e-3); + TTS_RELATIVE_EQUAL(kyosu::csch(lq), q, 5e-2); +}; diff --git a/test/unit/function/asec.cpp b/test/unit/function/asec.cpp new file mode 100644 index 00000000..d3f38056 --- /dev/null +++ b/test/unit/function/asec.cpp @@ -0,0 +1,32 @@ +//====================================================================================================================== +/* + Kyosu - Complex Without Complexes + Copyright : KYOSU Contributors & Maintainers + SPDX-License-Identifier: BSL-1.0 +*/ +//====================================================================================================================== +#include +#include + +TTS_CASE_WITH ( "Check kyosu::asec over quaternion" + , kyosu::scalar_real_types + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + ) + ) +(T a0, T a1, T a2, T a3) +{ + using ce_t = kyosu::complex_t; + using qe_t = kyosu::quaternion_t; + + auto r = T(a0); + auto c = ce_t(a0,a1); + auto q = qe_t(a0,a1,a2,a3); + + auto lr = kyosu::asec(r); + auto lc = kyosu::asec(c); + auto lq = kyosu::asec(q); + TTS_RELATIVE_EQUAL(kyosu::sec(lr), kyosu::complex(r), 1e-3); + TTS_RELATIVE_EQUAL(kyosu::sec(lc), c, 1e-3); + TTS_RELATIVE_EQUAL(kyosu::sec(lq), q, 1e-3); +}; diff --git a/test/unit/function/asech.cpp b/test/unit/function/asech.cpp new file mode 100644 index 00000000..1229448d --- /dev/null +++ b/test/unit/function/asech.cpp @@ -0,0 +1,32 @@ +//====================================================================================================================== +/* + Kyosu - Complex Without Complexes + Copyright : KYOSU Contributors & Maintainers + SPDX-License-Identifier: BSL-1.0 +*/ +//====================================================================================================================== +#include +#include + +TTS_CASE_WITH ( "Check kyosu::asech over quaternion" + , kyosu::simd_real_types + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + ) + ) +(T a0, T a1, T a2, T a3) +{ + using ce_t = kyosu::complex_t; + using qe_t = kyosu::quaternion_t; + + auto r = T(a0); + auto c = ce_t(a0,a1); + auto q = qe_t(a0,a1,a2,a3); + + auto lr = kyosu::asech(r); + auto lc = kyosu::asech(c); + auto lq = kyosu::asech(q); + TTS_RELATIVE_EQUAL(kyosu::sech(lr), kyosu::complex(r), 1e-5); + TTS_RELATIVE_EQUAL(kyosu::sech(lc), c, 1e-3); + TTS_RELATIVE_EQUAL(kyosu::sech(lq), q, 1e-3); +}; diff --git a/test/unit/function/asin.cpp b/test/unit/function/asin.cpp new file mode 100644 index 00000000..3680cf6d --- /dev/null +++ b/test/unit/function/asin.cpp @@ -0,0 +1,32 @@ +//====================================================================================================================== +/* + Kyosu - Complex Without Complexes + Copyright : KYOSU Contributors & Maintainers + SPDX-License-Identifier: BSL-1.0 +*/ +//====================================================================================================================== +#include +#include + +TTS_CASE_WITH ( "Check kyosu::asin over quaternion" + , kyosu::scalar_real_types + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + ) + ) +(T a0, T a1, T a2, T a3) +{ + using ce_t = kyosu::complex_t; + using qe_t = kyosu::quaternion_t; + + auto r = T(a0); + auto c = ce_t(a0,a1); + auto q = qe_t(a0,a1,a2,a3); + + auto lr = kyosu::asin(r); + auto lc = kyosu::asin(c); + auto lq = kyosu::asin(q); + TTS_RELATIVE_EQUAL(kyosu::sin(lr), kyosu::complex(r), 1e-3); + TTS_RELATIVE_EQUAL(kyosu::sin(lc), c, 1e-3); + TTS_RELATIVE_EQUAL(kyosu::sin(lq), q, 1e-3); +}; diff --git a/test/unit/function/asinh.cpp b/test/unit/function/asinh.cpp new file mode 100644 index 00000000..07d5d01a --- /dev/null +++ b/test/unit/function/asinh.cpp @@ -0,0 +1,32 @@ +//====================================================================================================================== +/* + Kyosu - Complex Without Complexes + Copyright : KYOSU Contributors & Maintainers + SPDX-License-Identifier: BSL-1.0 +*/ +//====================================================================================================================== +#include +#include + +TTS_CASE_WITH ( "Check kyosu::asinh over quaternion" + , kyosu::simd_real_types + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + ) + ) +(T a0, T a1, T a2, T a3) +{ + using ce_t = kyosu::complex_t; + using qe_t = kyosu::quaternion_t; + + auto r = T(a0); + auto c = ce_t(a0,a1); + auto q = qe_t(a0,a1,a2,a3); + + auto lr = kyosu::asinh(r); + auto lc = kyosu::asinh(c); + auto lq = kyosu::asinh(q); + TTS_RELATIVE_EQUAL(kyosu::sinh(lr), r, 1e-3); + TTS_RELATIVE_EQUAL(kyosu::sinh(lc), c, 1e-3); + TTS_RELATIVE_EQUAL(kyosu::sinh(lq), q, 5e-3); +}; diff --git a/test/unit/function/atan.cpp b/test/unit/function/atan.cpp new file mode 100644 index 00000000..969af4be --- /dev/null +++ b/test/unit/function/atan.cpp @@ -0,0 +1,32 @@ +//====================================================================================================================== +/* + Kyosu - Complex Without Complexes + Copyright : KYOSU Contributors & Maintainers + SPDX-License-Identifier: BSL-1.0 +*/ +//====================================================================================================================== +#include +#include + +TTS_CASE_WITH ( "Check kyosu::atan over quaternion" + , kyosu::simd_real_types + , tts::generate ( tts::randoms(-1,1), tts::randoms(-1,1) + , tts::randoms(-1,1), tts::randoms(-1,1) + ) + ) +(T a0, T a1, T a2, T a3) +{ + using ce_t = kyosu::complex_t; + using qe_t = kyosu::quaternion_t; + + auto r = T(a0); + auto c = ce_t(a0,a1); + auto q = qe_t(a0,a1,a2,a3); + + auto lr = kyosu::atan(r); + auto lc = kyosu::atan(c); + auto lq = kyosu::atan(q); + TTS_RELATIVE_EQUAL(kyosu::tan(lr), kyosu::complex(r), 1e-5); + TTS_RELATIVE_EQUAL(kyosu::tan(lc), c, 1e-3); + TTS_RELATIVE_EQUAL(kyosu::tan(lq), q, 1e-3); +}; diff --git a/test/unit/function/atanh.cpp b/test/unit/function/atanh.cpp new file mode 100644 index 00000000..34a8bc03 --- /dev/null +++ b/test/unit/function/atanh.cpp @@ -0,0 +1,32 @@ +//====================================================================================================================== +/* + Kyosu - Complex Without Complexes + Copyright : KYOSU Contributors & Maintainers + SPDX-License-Identifier: BSL-1.0 +*/ +//====================================================================================================================== +#include +#include + +TTS_CASE_WITH ( "Check kyosu::atanh over quaternion" + , kyosu::simd_real_types + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + ) + ) +(T a0, T a1, T a2, T a3) +{ + using ce_t = kyosu::complex_t; + using qe_t = kyosu::quaternion_t; + + auto r = T(a0); + auto c = ce_t(a0,a1); + auto q = qe_t(a0,a1,a2,a3); + + auto lr = kyosu::atanh(r); + auto lc = kyosu::atanh(c); + auto lq = kyosu::atanh(q); + TTS_RELATIVE_EQUAL(kyosu::tanh(lr), kyosu::complex(r), 1e-5); + TTS_RELATIVE_EQUAL(kyosu::tanh(lc), c, 1e-3); + TTS_RELATIVE_EQUAL(kyosu::tanh(lq), q, 1e-3); +}; diff --git a/test/unit/function/average.cpp b/test/unit/function/average.cpp index a1f470ce..d7a69749 100644 --- a/test/unit/function/average.cpp +++ b/test/unit/function/average.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::average over real" , kyosu::real_types - , tts::generate(tts::between(-10,10) - ,tts::between(-10,10) + , tts::generate(tts::randoms(-10,10) + ,tts::randoms(-10,10) ) ) (auto r0, auto r1) @@ -21,8 +21,8 @@ TTS_CASE_WITH ( "Check kyosu::average over real" TTS_CASE_WITH ( "Check kyosu::average over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10) - ,tts::between(-10,10), tts::between(-10,10) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10) + ,tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r0, T i0, T r1, T i1) @@ -34,10 +34,10 @@ TTS_CASE_WITH ( "Check kyosu::average over complex" TTS_CASE_WITH ( "Check kyosu::average over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r0, T i0, T j0, T k0, T r1, T i1, T j1, T k1) diff --git a/test/unit/function/ceil.cpp b/test/unit/function/ceil.cpp index c05741e8..57d1bff8 100644 --- a/test/unit/function/ceil.cpp +++ b/test/unit/function/ceil.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::ceil over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::ceil over real" TTS_CASE_WITH ( "Check kyosu::ceil over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -28,8 +28,8 @@ TTS_CASE_WITH ( "Check kyosu::ceil over complex" TTS_CASE_WITH ( "Check kyosu::ceil over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -40,10 +40,10 @@ TTS_CASE_WITH ( "Check kyosu::ceil over quaternion" TTS_CASE_WITH ( "Check kyosu::ceil over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/conj.cpp b/test/unit/function/conj.cpp index 74abd1bc..0c25345b 100644 --- a/test/unit/function/conj.cpp +++ b/test/unit/function/conj.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::conj over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::conj over real" TTS_CASE_WITH ( "Check kyosu::conj over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -30,8 +30,8 @@ TTS_CASE_WITH ( "Check kyosu::conj over complex" TTS_CASE_WITH ( "Check kyosu::conj over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/cos.cpp b/test/unit/function/cos.cpp index f38953ce..4d4f465d 100644 --- a/test/unit/function/cos.cpp +++ b/test/unit/function/cos.cpp @@ -15,7 +15,7 @@ TTS_CASE_WITH ( "Check kyosu::cos over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -33,8 +33,8 @@ auto cv(boost::math::quaternion const &bq) TTS_CASE_WITH ( "Check kyosu::cos over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/cosh.cpp b/test/unit/function/cosh.cpp index fd3c23e7..20411eed 100644 --- a/test/unit/function/cosh.cpp +++ b/test/unit/function/cosh.cpp @@ -15,7 +15,7 @@ TTS_CASE_WITH ( "Check kyosu::cosh over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -33,8 +33,8 @@ auto cv(boost::math::quaternion const &bq) TTS_CASE_WITH ( "Check kyosu::cosh over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/cospi.cpp b/test/unit/function/cospi.cpp index ec81b874..f773e06a 100644 --- a/test/unit/function/cospi.cpp +++ b/test/unit/function/cospi.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::cospi over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/cot.cpp b/test/unit/function/cot.cpp index b94ebfa0..a1f5ae2a 100644 --- a/test/unit/function/cot.cpp +++ b/test/unit/function/cot.cpp @@ -15,7 +15,7 @@ TTS_CASE_WITH ( "Check kyosu::cot over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -33,8 +33,8 @@ auto cv(boost::math::quaternion const &bq) TTS_CASE_WITH ( "Check kyosu::cot over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/coth.cpp b/test/unit/function/coth.cpp index bfca0ef5..5650e0c2 100644 --- a/test/unit/function/coth.cpp +++ b/test/unit/function/coth.cpp @@ -15,7 +15,7 @@ TTS_CASE_WITH ( "Check kyosu::coth over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -33,8 +33,8 @@ auto cv(boost::math::quaternion const &bq) TTS_CASE_WITH ( "Check kyosu::coth over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/cotpi.cpp b/test/unit/function/cotpi.cpp index b0d2cd1a..e5ae1709 100644 --- a/test/unit/function/cotpi.cpp +++ b/test/unit/function/cotpi.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::cotpi over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/csc.cpp b/test/unit/function/csc.cpp index f727247f..6aa3f354 100644 --- a/test/unit/function/csc.cpp +++ b/test/unit/function/csc.cpp @@ -15,7 +15,7 @@ TTS_CASE_WITH ( "Check kyosu::csc over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -33,8 +33,8 @@ auto cv(boost::math::quaternion const &bq) TTS_CASE_WITH ( "Check kyosu::csc over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/csch.cpp b/test/unit/function/csch.cpp index fa32a06f..39b98c0c 100644 --- a/test/unit/function/csch.cpp +++ b/test/unit/function/csch.cpp @@ -15,7 +15,7 @@ TTS_CASE_WITH ( "Check kyosu::csch over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -33,8 +33,8 @@ auto cv(boost::math::quaternion const &bq) TTS_CASE_WITH ( "Check kyosu::csch over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/cscpi.cpp b/test/unit/function/cscpi.cpp index cb84d2fc..00e84728 100644 --- a/test/unit/function/cscpi.cpp +++ b/test/unit/function/cscpi.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::cscpi over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/dec.cpp b/test/unit/function/dec.cpp index 9e707204..d7ca107f 100644 --- a/test/unit/function/dec.cpp +++ b/test/unit/function/dec.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::dec over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::dec over real" TTS_CASE_WITH ( "Check kyosu::dec over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (T r, T i) { @@ -29,8 +29,8 @@ TTS_CASE_WITH ( "Check kyosu::dec over complex" TTS_CASE_WITH ( "Check kyosu::dec over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/dist.cpp b/test/unit/function/dist.cpp index c3497ea8..859f64de 100644 --- a/test/unit/function/dist.cpp +++ b/test/unit/function/dist.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::dist over real" , kyosu::real_types - , tts::generate(tts::between(-10,10) - ,tts::between(-10,10) + , tts::generate(tts::randoms(-10,10) + ,tts::randoms(-10,10) ) ) (auto r0, auto r1) @@ -21,8 +21,8 @@ TTS_CASE_WITH ( "Check kyosu::dist over real" TTS_CASE_WITH ( "Check kyosu::dist over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10) - ,tts::between(-10,10), tts::between(-10,10) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10) + ,tts::randoms(-10,10), tts::randoms(-10,10) ) ) (auto r0, auto i0, auto r1, auto i1) @@ -34,10 +34,10 @@ TTS_CASE_WITH ( "Check kyosu::dist over complex" TTS_CASE_WITH ( "Check kyosu::dist over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r0, T i0, T j0, T k0, T r1, T i1, T j1, T k1) diff --git a/test/unit/function/dot.cpp b/test/unit/function/dot.cpp index c2070f54..0a5e997d 100644 --- a/test/unit/function/dot.cpp +++ b/test/unit/function/dot.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::dot over real" , kyosu::real_types - , tts::generate(tts::between(-10,10) - ,tts::between(-10,10) + , tts::generate(tts::randoms(-10,10) + ,tts::randoms(-10,10) ) ) (auto r0, auto r1) @@ -21,8 +21,8 @@ TTS_CASE_WITH ( "Check kyosu::dot over real" TTS_CASE_WITH ( "Check kyosu::dot over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10) - ,tts::between(-10,10), tts::between(-10,10) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10) + ,tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r0, T i0, T r1, T i1) @@ -35,10 +35,10 @@ TTS_CASE_WITH ( "Check kyosu::dot over complex" TTS_CASE_WITH ( "Check kyosu::dot over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r0, T i0, T j0, T k0, T r1, T i1, T j1, T k1) diff --git a/test/unit/function/exp.cpp b/test/unit/function/exp.cpp index a54e9125..03acd7d0 100644 --- a/test/unit/function/exp.cpp +++ b/test/unit/function/exp.cpp @@ -15,7 +15,7 @@ TTS_CASE_WITH ( "Check kyosu::exp over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -33,8 +33,8 @@ auto cv(boost::math::quaternion const &bq) TTS_CASE_WITH ( "Check kyosu::exp over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/exp10.cpp b/test/unit/function/exp10.cpp index 4a1301ac..6fd6ec0c 100644 --- a/test/unit/function/exp10.cpp +++ b/test/unit/function/exp10.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::exp10 over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,8 +19,8 @@ TTS_CASE_WITH ( "Check kyosu::exp10 over real" TTS_CASE_WITH ( "Check kyosu::exp10 over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/exp2.cpp b/test/unit/function/exp2.cpp index 6b1091a1..10422fc8 100644 --- a/test/unit/function/exp2.cpp +++ b/test/unit/function/exp2.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::exp2 over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,8 +19,8 @@ TTS_CASE_WITH ( "Check kyosu::exp2 over real" TTS_CASE_WITH ( "Check kyosu::exp2 over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/exp_i.cpp b/test/unit/function/exp_i.cpp index 89ca334d..0d67511c 100644 --- a/test/unit/function/exp_i.cpp +++ b/test/unit/function/exp_i.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::exp_i over quaternion" , kyosu::real_types - , tts::generate ( tts::between(0.5,2.0), tts::between(0.5,2.0) - , tts::between(0.5,2.0), tts::between(0.5,2.0) + , tts::generate ( tts::randoms(0.5,2.0), tts::randoms(0.5,2.0) + , tts::randoms(0.5,2.0), tts::randoms(0.5,2.0) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/exp_ipi.cpp b/test/unit/function/exp_ipi.cpp index e1de6889..5a4cb7b1 100644 --- a/test/unit/function/exp_ipi.cpp +++ b/test/unit/function/exp_ipi.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::exp_ipi over quaternion" , kyosu::real_types - , tts::generate ( tts::between(0.5,2.0), tts::between(0.5,2.0) - , tts::between(0.5,2.0), tts::between(0.5,2.0) + , tts::generate ( tts::randoms(0.5,2.0), tts::randoms(0.5,2.0) + , tts::randoms(0.5,2.0), tts::randoms(0.5,2.0) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/expm1.cpp b/test/unit/function/expm1.cpp index ffbdadfd..c4a77079 100644 --- a/test/unit/function/expm1.cpp +++ b/test/unit/function/expm1.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::expm1 over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,8 +19,8 @@ TTS_CASE_WITH ( "Check kyosu::expm1 over real" TTS_CASE_WITH ( "Check kyosu::expm1 over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/expmx2.cpp b/test/unit/function/expmx2.cpp index c0a3da5b..c61f98a7 100644 --- a/test/unit/function/expmx2.cpp +++ b/test/unit/function/expmx2.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::expmx2 over quaternion" , kyosu::real_types - , tts::generate ( tts::between(0.5,2.0), tts::between(0.5,2.0) - , tts::between(0.5,2.0), tts::between(0.5,2.0) + , tts::generate ( tts::randoms(0.5,2.0), tts::randoms(0.5,2.0) + , tts::randoms(0.5,2.0), tts::randoms(0.5,2.0) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/expx2.cpp b/test/unit/function/expx2.cpp index 89095f66..ab9f7ddf 100644 --- a/test/unit/function/expx2.cpp +++ b/test/unit/function/expx2.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::expx2 over quaternion" , kyosu::real_types - , tts::generate ( tts::between(0.5,2.0), tts::between(0.5,2.0) - , tts::between(0.5,2.0), tts::between(0.5,2.0) + , tts::generate ( tts::randoms(0.5,2.0), tts::randoms(0.5,2.0) + , tts::randoms(0.5,2.0), tts::randoms(0.5,2.0) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/floor.cpp b/test/unit/function/floor.cpp index ad57980e..84c470a8 100644 --- a/test/unit/function/floor.cpp +++ b/test/unit/function/floor.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::floor over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::floor over real" TTS_CASE_WITH ( "Check kyosu::floor over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -28,8 +28,8 @@ TTS_CASE_WITH ( "Check kyosu::floor over complex" TTS_CASE_WITH ( "Check kyosu::floor over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -40,10 +40,10 @@ TTS_CASE_WITH ( "Check kyosu::floor over quaternion" TTS_CASE_WITH ( "Check kyosu::floor over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/frac.cpp b/test/unit/function/frac.cpp index 3ac6471d..aa414dcb 100644 --- a/test/unit/function/frac.cpp +++ b/test/unit/function/frac.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::frac over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::frac over real" TTS_CASE_WITH ( "Check kyosu::frac over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -28,8 +28,8 @@ TTS_CASE_WITH ( "Check kyosu::frac over complex" TTS_CASE_WITH ( "Check kyosu::frac over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -40,10 +40,10 @@ TTS_CASE_WITH ( "Check kyosu::frac over quaternion" TTS_CASE_WITH ( "Check kyosu::frac over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/hypot.cpp b/test/unit/function/hypot.cpp index 1fc725cd..a82bf35c 100644 --- a/test/unit/function/hypot.cpp +++ b/test/unit/function/hypot.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::hypot over real" , kyosu::real_types - , tts::generate(tts::between(-10,10) - ,tts::between(-10,10) + , tts::generate(tts::randoms(-10,10) + ,tts::randoms(-10,10) ) ) (auto r0, auto r1) @@ -21,8 +21,8 @@ TTS_CASE_WITH ( "Check kyosu::hypot over real" TTS_CASE_WITH ( "Check kyosu::hypot over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10) - ,tts::between(-10,10), tts::between(-10,10) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10) + ,tts::randoms(-10,10), tts::randoms(-10,10) ) ) (auto r0, auto i0, auto r1, auto i1) @@ -34,10 +34,10 @@ TTS_CASE_WITH ( "Check kyosu::hypot over complex" TTS_CASE_WITH ( "Check kyosu::hypot over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r0, T i0, T j0, T k0, T r1, T i1, T j1, T k1) diff --git a/test/unit/function/inc.cpp b/test/unit/function/inc.cpp index 42aee9b8..01468286 100644 --- a/test/unit/function/inc.cpp +++ b/test/unit/function/inc.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::inc over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::inc over real" TTS_CASE_WITH ( "Check kyosu::inc over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (T r, T i) { @@ -29,8 +29,8 @@ TTS_CASE_WITH ( "Check kyosu::inc over complex" TTS_CASE_WITH ( "Check kyosu::inc over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/ipart.cpp b/test/unit/function/ipart.cpp index 208c3648..d79b19ee 100644 --- a/test/unit/function/ipart.cpp +++ b/test/unit/function/ipart.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::ipart over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::ipart over real" TTS_CASE_WITH ( "Check kyosu::ipart over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -28,8 +28,8 @@ TTS_CASE_WITH ( "Check kyosu::ipart over complex" TTS_CASE_WITH ( "Check kyosu::ipart over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -40,10 +40,10 @@ TTS_CASE_WITH ( "Check kyosu::ipart over quaternion" TTS_CASE_WITH ( "Check kyosu::ipart over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/is_denormal.cpp b/test/unit/function/is_denormal.cpp index 4092b6a7..365ef227 100644 --- a/test/unit/function/is_denormal.cpp +++ b/test/unit/function/is_denormal.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::is_denormal over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::is_denormal over real" TTS_CASE_WITH ( "Check kyosu::is_denormal over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -30,8 +30,8 @@ TTS_CASE_WITH ( "Check kyosu::is_denormal over complex" TTS_CASE_WITH ( "Check kyosu::is_denormal over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -44,10 +44,10 @@ TTS_CASE_WITH ( "Check kyosu::is_denormal over quaternion" TTS_CASE_WITH ( "Check kyosu::is_denormal over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/is_equal.cpp b/test/unit/function/is_equal.cpp index 64a3fff8..fd49c84c 100644 --- a/test/unit/function/is_equal.cpp +++ b/test/unit/function/is_equal.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::is_equal over real" , kyosu::real_types - , tts::generate(tts::between(-10,10) - ,tts::between(-10,10) + , tts::generate(tts::randoms(-10,10) + ,tts::randoms(-10,10) ) ) (auto r0, auto r1) @@ -21,8 +21,8 @@ TTS_CASE_WITH ( "Check kyosu::is_equal over real" TTS_CASE_WITH ( "Check kyosu::is_equal over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10) - ,tts::between(-10,10), tts::between(-10,10) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10) + ,tts::randoms(-10,10), tts::randoms(-10,10) ) ) (auto r0, auto i0, auto r1, auto i1) @@ -35,10 +35,10 @@ TTS_CASE_WITH ( "Check kyosu::is_equal over complex" TTS_CASE_WITH ( "Check kyosu::is_equal over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r0, T i0, T j0, T k0, T r1, T i1, T j1, T k1) diff --git a/test/unit/function/is_eqz.cpp b/test/unit/function/is_eqz.cpp index 8d6f687f..77b943e3 100644 --- a/test/unit/function/is_eqz.cpp +++ b/test/unit/function/is_eqz.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::is_eqz over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::is_eqz over real" TTS_CASE_WITH ( "Check kyosu::is_eqz over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -30,8 +30,8 @@ TTS_CASE_WITH ( "Check kyosu::is_eqz over complex" TTS_CASE_WITH ( "Check kyosu::is_eqz over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -44,10 +44,10 @@ TTS_CASE_WITH ( "Check kyosu::is_eqz over quaternion" TTS_CASE_WITH ( "Check kyosu::is_eqz over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/is_finite.cpp b/test/unit/function/is_finite.cpp index 69172b08..ff13e655 100644 --- a/test/unit/function/is_finite.cpp +++ b/test/unit/function/is_finite.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::is_finite over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::is_finite over real" TTS_CASE_WITH ( "Check kyosu::is_finite over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -30,8 +30,8 @@ TTS_CASE_WITH ( "Check kyosu::is_finite over complex" TTS_CASE_WITH ( "Check kyosu::is_finite over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -44,10 +44,10 @@ TTS_CASE_WITH ( "Check kyosu::is_finite over quaternion" TTS_CASE_WITH ( "Check kyosu::is_finite over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/is_infinite.cpp b/test/unit/function/is_infinite.cpp index b6c917ce..01f786d9 100644 --- a/test/unit/function/is_infinite.cpp +++ b/test/unit/function/is_infinite.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::is_infinite over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::is_infinite over real" TTS_CASE_WITH ( "Check kyosu::is_infinite over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -30,8 +30,8 @@ TTS_CASE_WITH ( "Check kyosu::is_infinite over complex" TTS_CASE_WITH ( "Check kyosu::is_infinite over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -44,10 +44,10 @@ TTS_CASE_WITH ( "Check kyosu::is_infinite over quaternion" TTS_CASE_WITH ( "Check kyosu::is_infinite over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/is_nan.cpp b/test/unit/function/is_nan.cpp index 4c1cfad9..ae631e42 100644 --- a/test/unit/function/is_nan.cpp +++ b/test/unit/function/is_nan.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::is_nan over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::is_nan over real" TTS_CASE_WITH ( "Check kyosu::is_nan over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -30,8 +30,8 @@ TTS_CASE_WITH ( "Check kyosu::is_nan over complex" TTS_CASE_WITH ( "Check kyosu::is_nan over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -44,10 +44,10 @@ TTS_CASE_WITH ( "Check kyosu::is_nan over quaternion" TTS_CASE_WITH ( "Check kyosu::is_nan over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/is_nez.cpp b/test/unit/function/is_nez.cpp index 50cc607a..8a2535ba 100644 --- a/test/unit/function/is_nez.cpp +++ b/test/unit/function/is_nez.cpp @@ -11,7 +11,7 @@ TTS_CASE_WITH ( "Check kyosu::is_nez over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -20,7 +20,7 @@ TTS_CASE_WITH ( "Check kyosu::is_nez over real" TTS_CASE_WITH ( "Check kyosu::is_nez over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -31,8 +31,8 @@ TTS_CASE_WITH ( "Check kyosu::is_nez over complex" TTS_CASE_WITH ( "Check kyosu::is_nez over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -45,10 +45,10 @@ TTS_CASE_WITH ( "Check kyosu::is_nez over quaternion" TTS_CASE_WITH ( "Check kyosu::is_nez over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/is_not_denormal.cpp b/test/unit/function/is_not_denormal.cpp index 32125275..3494f955 100644 --- a/test/unit/function/is_not_denormal.cpp +++ b/test/unit/function/is_not_denormal.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::is_not_denormal over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::is_not_denormal over real" TTS_CASE_WITH ( "Check kyosu::is_not_denormal over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -30,8 +30,8 @@ TTS_CASE_WITH ( "Check kyosu::is_not_denormal over complex" TTS_CASE_WITH ( "Check kyosu::is_not_denormal over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -44,10 +44,10 @@ TTS_CASE_WITH ( "Check kyosu::is_not_denormal over quaternion" TTS_CASE_WITH ( "Check kyosu::is_not_denormal over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/is_not_equal.cpp b/test/unit/function/is_not_equal.cpp index 29d3da3d..f5629c13 100644 --- a/test/unit/function/is_not_equal.cpp +++ b/test/unit/function/is_not_equal.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::is_not_equal over real" , kyosu::real_types - , tts::generate(tts::between(-10,10) - ,tts::between(-10,10) + , tts::generate(tts::randoms(-10,10) + ,tts::randoms(-10,10) ) ) (auto r0, auto r1) @@ -21,8 +21,8 @@ TTS_CASE_WITH ( "Check kyosu::is_not_equal over real" TTS_CASE_WITH ( "Check kyosu::is_not_equal over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10) - ,tts::between(-10,10), tts::between(-10,10) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10) + ,tts::randoms(-10,10), tts::randoms(-10,10) ) ) (auto r0, auto i0, auto r1, auto i1) @@ -35,10 +35,10 @@ TTS_CASE_WITH ( "Check kyosu::is_not_equal over complex" TTS_CASE_WITH ( "Check kyosu::is_not_equal over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r0, T i0, T j0, T k0, T r1, T i1, T j1, T k1) diff --git a/test/unit/function/is_not_finite.cpp b/test/unit/function/is_not_finite.cpp index cf54262e..3e257632 100644 --- a/test/unit/function/is_not_finite.cpp +++ b/test/unit/function/is_not_finite.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::is_not_finite over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::is_not_finite over real" TTS_CASE_WITH ( "Check kyosu::is_not_finite over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -30,8 +30,8 @@ TTS_CASE_WITH ( "Check kyosu::is_not_finite over complex" TTS_CASE_WITH ( "Check kyosu::is_not_finite over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -44,10 +44,10 @@ TTS_CASE_WITH ( "Check kyosu::is_not_finite over quaternion" TTS_CASE_WITH ( "Check kyosu::is_not_finite over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/is_not_infinite.cpp b/test/unit/function/is_not_infinite.cpp index 3738309c..8bf74599 100644 --- a/test/unit/function/is_not_infinite.cpp +++ b/test/unit/function/is_not_infinite.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::is_not_infinite over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::is_not_infinite over real" TTS_CASE_WITH ( "Check kyosu::is_not_infinite over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -30,8 +30,8 @@ TTS_CASE_WITH ( "Check kyosu::is_not_infinite over complex" TTS_CASE_WITH ( "Check kyosu::is_not_infinite over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -44,10 +44,10 @@ TTS_CASE_WITH ( "Check kyosu::is_not_infinite over quaternion" TTS_CASE_WITH ( "Check kyosu::is_not_infinite over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/is_not_nan.cpp b/test/unit/function/is_not_nan.cpp index a6008092..26e5b85a 100644 --- a/test/unit/function/is_not_nan.cpp +++ b/test/unit/function/is_not_nan.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::is_not_nan over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::is_not_nan over real" TTS_CASE_WITH ( "Check kyosu::is_not_nan over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -30,8 +30,8 @@ TTS_CASE_WITH ( "Check kyosu::is_not_nan over complex" TTS_CASE_WITH ( "Check kyosu::is_not_nan over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -44,10 +44,10 @@ TTS_CASE_WITH ( "Check kyosu::is_not_nan over quaternion" TTS_CASE_WITH ( "Check kyosu::is_not_nan over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/is_not_real.cpp b/test/unit/function/is_not_real.cpp index 13905765..be8b43e7 100644 --- a/test/unit/function/is_not_real.cpp +++ b/test/unit/function/is_not_real.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::is_not_real over not_real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::is_not_real over not_real" TTS_CASE_WITH ( "Check kyosu::is_not_real over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -29,8 +29,8 @@ TTS_CASE_WITH ( "Check kyosu::is_not_real over complex" TTS_CASE_WITH ( "Check kyosu::is_not_real over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -42,10 +42,10 @@ TTS_CASE_WITH ( "Check kyosu::is_not_real over quaternion" TTS_CASE_WITH ( "Check kyosu::is_not_real over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/is_real.cpp b/test/unit/function/is_real.cpp index da3f9049..45ad4cd8 100644 --- a/test/unit/function/is_real.cpp +++ b/test/unit/function/is_real.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::is_real over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::is_real over real" TTS_CASE_WITH ( "Check kyosu::is_real over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -29,8 +29,8 @@ TTS_CASE_WITH ( "Check kyosu::is_real over complex" TTS_CASE_WITH ( "Check kyosu::is_real over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -42,10 +42,10 @@ TTS_CASE_WITH ( "Check kyosu::is_real over quaternion" TTS_CASE_WITH ( "Check kyosu::is_real over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/is_unitary.cpp b/test/unit/function/is_unitary.cpp index 56f9f09d..f4811c67 100644 --- a/test/unit/function/is_unitary.cpp +++ b/test/unit/function/is_unitary.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::is_unitary over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -20,7 +20,7 @@ TTS_CASE_WITH ( "Check kyosu::is_unitary over real" TTS_CASE_WITH ( "Check kyosu::is_unitary over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -32,8 +32,8 @@ TTS_CASE_WITH ( "Check kyosu::is_unitary over complex" TTS_CASE_WITH ( "Check kyosu::is_unitary over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -47,10 +47,10 @@ TTS_CASE_WITH ( "Check kyosu::is_unitary over quaternion" TTS_CASE_WITH ( "Check kyosu::is_unitary over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/jpart.cpp b/test/unit/function/jpart.cpp index 468fd6ce..4166406a 100644 --- a/test/unit/function/jpart.cpp +++ b/test/unit/function/jpart.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::jpart over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::jpart over real" TTS_CASE_WITH ( "Check kyosu::jpart over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -28,8 +28,8 @@ TTS_CASE_WITH ( "Check kyosu::jpart over complex" TTS_CASE_WITH ( "Check kyosu::jpart over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -40,10 +40,10 @@ TTS_CASE_WITH ( "Check kyosu::jpart over quaternion" TTS_CASE_WITH ( "Check kyosu::jpart over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/kpart.cpp b/test/unit/function/kpart.cpp index 09731ae0..b6315660 100644 --- a/test/unit/function/kpart.cpp +++ b/test/unit/function/kpart.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::kpart over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::kpart over real" TTS_CASE_WITH ( "Check kyosu::kpart over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -28,8 +28,8 @@ TTS_CASE_WITH ( "Check kyosu::kpart over complex" TTS_CASE_WITH ( "Check kyosu::kpart over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -40,10 +40,10 @@ TTS_CASE_WITH ( "Check kyosu::kpart over quaternion" TTS_CASE_WITH ( "Check kyosu::kpart over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/ldiv.cpp b/test/unit/function/ldiv.cpp index ea0a94c3..6adfa3ae 100644 --- a/test/unit/function/ldiv.cpp +++ b/test/unit/function/ldiv.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::ldiv over real" , kyosu::real_types - , tts::generate(tts::between(-10,10) - ,tts::between(-10,10) + , tts::generate(tts::randoms(-10,10) + ,tts::randoms(-10,10) ) ) (auto r0, auto r1) @@ -21,8 +21,8 @@ TTS_CASE_WITH ( "Check kyosu::ldiv over real" TTS_CASE_WITH ( "Check kyosu::ldiv over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10) - ,tts::between(-10,10), tts::between(-10,10) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10) + ,tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r0, T i0, T r1, T i1) @@ -34,10 +34,10 @@ TTS_CASE_WITH ( "Check kyosu::ldiv over complex" TTS_CASE_WITH ( "Check kyosu::ldiv over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r0, T i0, T j0, T k0, T r1, T i1, T j1, T k1) @@ -45,5 +45,5 @@ TTS_CASE_WITH ( "Check kyosu::ldiv over quaternion" using type = kyosu::quaternion_t; auto q0 = type(r0,i0,j0,k0); auto q1 = type(r1,i1,j1,k1); - TTS_RELATIVE_EQUAL(kyosu::ldiv(q0, q1), kyosu::conj(q0)*q1/kyosu::sqr_abs(q0) , 1e-7); + TTS_RELATIVE_EQUAL(kyosu::ldiv(q0, q1), kyosu::conj(q0)*q1/kyosu::sqr_abs(q0) , 1e-6); }; diff --git a/test/unit/function/lerp.cpp b/test/unit/function/lerp.cpp index 444b6244..067c4b88 100644 --- a/test/unit/function/lerp.cpp +++ b/test/unit/function/lerp.cpp @@ -10,9 +10,9 @@ TTS_CASE_WITH ( "Check kyosu::lerp over real" , kyosu::real_types - , tts::generate(tts::between(-10,10) - ,tts::between(-10,10) - ,tts::between(0, 1) + , tts::generate(tts::randoms(-10,10) + ,tts::randoms(-10,10) + ,tts::randoms(0, 1) ) ) (auto r0, auto r1, auto t) @@ -22,9 +22,9 @@ TTS_CASE_WITH ( "Check kyosu::lerp over real" TTS_CASE_WITH ( "Check kyosu::lerp over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10) - ,tts::between(-10,10), tts::between(-10,10) - ,tts::between(0, 1) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10) + ,tts::randoms(-10,10), tts::randoms(-10,10) + ,tts::randoms(0, 1) ) ) (auto r0, auto i0, auto r1, auto i1, auto t) @@ -36,11 +36,11 @@ TTS_CASE_WITH ( "Check kyosu::lerp over complex" TTS_CASE_WITH ( "Check kyosu::lerp over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - ,tts::between(0, 1) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + ,tts::randoms(0, 1) ) ) (T r0, T i0, T j0, T k0, T r1, T i1, T j1, T k1, auto t) diff --git a/test/unit/function/log.cpp b/test/unit/function/log.cpp index 18032cf5..c1727be4 100644 --- a/test/unit/function/log.cpp +++ b/test/unit/function/log.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::exp over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T a0, T a1, T a2, T a3) @@ -28,5 +28,5 @@ TTS_CASE_WITH ( "Check kyosu::exp over quaternion" auto lq = kyosu::log(q); TTS_RELATIVE_EQUAL(kyosu::exp(lr), kyosu::complex(r), 1e-5); TTS_RELATIVE_EQUAL(kyosu::exp(lc), c, 1e-5); - TTS_RELATIVE_EQUAL(kyosu::exp(lq), q, 1e-5); + TTS_RELATIVE_EQUAL(kyosu::exp(lq), q, 2e-4); }; diff --git a/test/unit/function/log10.cpp b/test/unit/function/log10.cpp index aed783d2..f2744f34 100644 --- a/test/unit/function/log10.cpp +++ b/test/unit/function/log10.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::exp over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T a0, T a1, T a2, T a3) @@ -28,5 +28,5 @@ TTS_CASE_WITH ( "Check kyosu::exp over quaternion" auto lq = kyosu::log10(q); TTS_RELATIVE_EQUAL(kyosu::exp10(lr), kyosu::complex(r), 1e-5); TTS_RELATIVE_EQUAL(kyosu::exp10(lc), c, 1e-5); - TTS_RELATIVE_EQUAL(kyosu::exp10(lq), q, 1e-5); + TTS_RELATIVE_EQUAL(kyosu::exp10(lq), q, 2e-4); }; diff --git a/test/unit/function/log1p.cpp b/test/unit/function/log1p.cpp index 433e027a..205ff3a8 100644 --- a/test/unit/function/log1p.cpp +++ b/test/unit/function/log1p.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::exp over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T a0, T a1, T a2, T a3) diff --git a/test/unit/function/log2.cpp b/test/unit/function/log2.cpp index ce833fdb..51bcf5ec 100644 --- a/test/unit/function/log2.cpp +++ b/test/unit/function/log2.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::exp over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T a0, T a1, T a2, T a3) @@ -28,5 +28,5 @@ TTS_CASE_WITH ( "Check kyosu::exp over quaternion" auto lq = kyosu::log2(q); TTS_RELATIVE_EQUAL(kyosu::exp2(lr), kyosu::complex(r), 1e-5); TTS_RELATIVE_EQUAL(kyosu::exp2(lc), c, 1e-5); - TTS_RELATIVE_EQUAL(kyosu::exp2(lq), q, 1e-5); + TTS_RELATIVE_EQUAL(kyosu::exp2(lq), q, 2e-4); }; diff --git a/test/unit/function/log_abs.cpp b/test/unit/function/log_abs.cpp index b659e49e..f5e0f0f4 100644 --- a/test/unit/function/log_abs.cpp +++ b/test/unit/function/log_abs.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::exp over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T a0, T a1, T a2, T a3) @@ -26,7 +26,7 @@ TTS_CASE_WITH ( "Check kyosu::exp over quaternion" auto lr = kyosu::log_abs(r); auto lc = kyosu::log_abs(c); auto lq = kyosu::log_abs(q); - TTS_RELATIVE_EQUAL(lr, eve::log(kyosu::abs(r)), 1e-5); - TTS_RELATIVE_EQUAL(lc, eve::log(kyosu::abs(c)), 1e-5); - TTS_RELATIVE_EQUAL(lq, eve::log(kyosu::abs(q)), 1e-5); + TTS_RELATIVE_EQUAL(lr, eve::log(kyosu::abs(r)), 1e-4); + TTS_RELATIVE_EQUAL(lc, eve::log(kyosu::abs(c)), 1e-4); + TTS_RELATIVE_EQUAL(lq, eve::log(kyosu::abs(q)), 1e-4); }; diff --git a/test/unit/function/lpnorm.cpp b/test/unit/function/lpnorm.cpp index 235fcd58..faa29649 100644 --- a/test/unit/function/lpnorm.cpp +++ b/test/unit/function/lpnorm.cpp @@ -10,9 +10,9 @@ TTS_CASE_WITH ( "Check kyosu::lpnorm over real" , kyosu::real_types - , tts::generate(tts::between(-10,10) - ,tts::between(-10,10) - ,tts::between(1, 3) + , tts::generate(tts::randoms(-10,10) + ,tts::randoms(-10,10) + ,tts::randoms(1, 3) ) ) (auto r0, auto r1, auto p) @@ -22,9 +22,9 @@ TTS_CASE_WITH ( "Check kyosu::lpnorm over real" TTS_CASE_WITH ( "Check kyosu::lpnorm over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10) - ,tts::between(-10,10), tts::between(-10,10) - ,tts::between(1, 3) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10) + ,tts::randoms(-10,10), tts::randoms(-10,10) + ,tts::randoms(1, 3) ) ) (auto r0, auto i0, auto r1, auto i1, auto p) @@ -36,11 +36,11 @@ TTS_CASE_WITH ( "Check kyosu::lpnorm over complex" TTS_CASE_WITH ( "Check kyosu::lpnorm over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - ,tts::between(1, 3) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + ,tts::randoms(1, 3) ) ) (T r0, T i0, T j0, T k0, T r1, T i1, T j1, T k1, T p) diff --git a/test/unit/function/manhattan.cpp b/test/unit/function/manhattan.cpp index 31a70b47..fb19473f 100644 --- a/test/unit/function/manhattan.cpp +++ b/test/unit/function/manhattan.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::manhattan over real" , kyosu::real_types - , tts::generate(tts::between(-10,10) - ,tts::between(-10,10) + , tts::generate(tts::randoms(-10,10) + ,tts::randoms(-10,10) ) ) (auto r0, auto r1) @@ -21,8 +21,8 @@ TTS_CASE_WITH ( "Check kyosu::manhattan over real" TTS_CASE_WITH ( "Check kyosu::manhattan over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10) - ,tts::between(-10,10), tts::between(-10,10) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10) + ,tts::randoms(-10,10), tts::randoms(-10,10) ) ) (auto r0, auto i0, auto r1, auto i1) @@ -34,10 +34,10 @@ TTS_CASE_WITH ( "Check kyosu::manhattan over complex" TTS_CASE_WITH ( "Check kyosu::manhattan over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r0, T i0, T j0, T k0, T r1, T i1, T j1, T k1) diff --git a/test/unit/function/minus.cpp b/test/unit/function/minus.cpp index 16163a9c..9ef978e9 100644 --- a/test/unit/function/minus.cpp +++ b/test/unit/function/minus.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::minus over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::minus over real" TTS_CASE_WITH ( "Check kyosu::minus over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -28,8 +28,8 @@ TTS_CASE_WITH ( "Check kyosu::minus over complex" TTS_CASE_WITH ( "Check kyosu::minus over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/nearest.cpp b/test/unit/function/nearest.cpp index e237ae1c..231424a8 100644 --- a/test/unit/function/nearest.cpp +++ b/test/unit/function/nearest.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::nearest over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::nearest over real" TTS_CASE_WITH ( "Check kyosu::nearest over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -28,8 +28,8 @@ TTS_CASE_WITH ( "Check kyosu::nearest over complex" TTS_CASE_WITH ( "Check kyosu::nearest over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -40,10 +40,10 @@ TTS_CASE_WITH ( "Check kyosu::nearest over quaternion" TTS_CASE_WITH ( "Check kyosu::nearest over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/oneminus.cpp b/test/unit/function/oneminus.cpp index e1a6f118..d9672cb1 100644 --- a/test/unit/function/oneminus.cpp +++ b/test/unit/function/oneminus.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::oneminus over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::oneminus over real" TTS_CASE_WITH ( "Check kyosu::oneminus over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (T r, T i) { @@ -30,8 +30,8 @@ TTS_CASE_WITH ( "Check kyosu::oneminus over complex" TTS_CASE_WITH ( "Check kyosu::oneminus over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-5,5), tts::between(-5,5) - , tts::between(-5,5), tts::between(-5,5) + , tts::generate ( tts::randoms(-5,5), tts::randoms(-5,5) + , tts::randoms(-5,5), tts::randoms(-5,5) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/pow.cpp b/test/unit/function/pow.cpp index b46de6af..39489095 100644 --- a/test/unit/function/pow.cpp +++ b/test/unit/function/pow.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::pow over real" , kyosu::real_types - , tts::generate(tts::between(-10,10) - ,tts::between(-10,10) + , tts::generate(tts::randoms(-10,10) + ,tts::randoms(-10,10) ) ) (auto r0, auto r1) @@ -22,25 +22,25 @@ TTS_CASE_WITH ( "Check kyosu::pow over real" TTS_CASE_WITH ( "Check kyosu::pow over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10) - ,tts::between(-10,10), tts::between(-10,10) + , tts::generate(tts::randoms(-1,1), tts::randoms(-1,1) + ,tts::randoms(-1,1), tts::randoms(-1,1) ) ) (auto r0, auto i0, auto r1, auto i1) { auto c0 = kyosu::complex(r0,i0); auto c1 = kyosu::complex(r1,i1); - TTS_RELATIVE_EQUAL(kyosu::pow(c0, c1), kyosu::exp(c1*kyosu::log(c0)), 1e-5); - TTS_RELATIVE_EQUAL(kyosu::pow(r0, c1), kyosu::exp(c1*kyosu::log(r0)), 1e-5); - TTS_RELATIVE_EQUAL(kyosu::pow(c0, r1), kyosu::exp(r1*kyosu::log(c0)), 1e-5); + TTS_RELATIVE_EQUAL(kyosu::pow(c0, c1), kyosu::exp(kyosu::log(c0)*c1), 1e-3); + TTS_RELATIVE_EQUAL(kyosu::pow(r0, c1), kyosu::exp(kyosu::log(r0)*c1), 1e-3); + TTS_RELATIVE_EQUAL(kyosu::pow(c0, r1), kyosu::exp(kyosu::log(c0)*r1), 1e-3); }; TTS_CASE_WITH ( "Check kyosu::pow over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r0, T i0, T j0, T k0, T r1, T i1, T j1, T k1) @@ -48,5 +48,5 @@ TTS_CASE_WITH ( "Check kyosu::pow over quaternion" using type = kyosu::quaternion_t; auto q0 = type(r0,i0,j0,k0); auto q1 = type(r1,i1,j1,k1); - TTS_RELATIVE_EQUAL(kyosu::pow(q0, q1), kyosu::exp(q1*kyosu::log(q0)), 1e-5); + TTS_RELATIVE_EQUAL(kyosu::pow(q0, q1), kyosu::exp(kyosu::log(q0)*q1), 1e-5); }; diff --git a/test/unit/function/pow1p.cpp b/test/unit/function/pow1p.cpp index 3ac1b35f..b1293d71 100644 --- a/test/unit/function/pow1p.cpp +++ b/test/unit/function/pow1p.cpp @@ -10,38 +10,36 @@ TTS_CASE_WITH ( "Check kyosu::pow1p over real" , kyosu::real_types - , tts::generate(tts::between(-10,10) - ,tts::between(-10,10) + , tts::generate(tts::randoms(-10,10) + ,tts::randoms(-10,10) ) ) (auto r0, auto r1) { TTS_EQUAL(kyosu::pow1p(r0, r1), eve::pow1p(r0, r1)); -// TTS_RELATIVE_EQUAL(kyosu::pow1p(r0, 4), kyosu::sqr(kyosu::sqr(eve::inc(r0))), 1.0e-5); }; TTS_CASE_WITH ( "Check kyosu::pow1p over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10) - ,tts::between(-10,10), tts::between(-10,10) + , tts::generate(tts::randoms(-1,1), tts::randoms(-1,1) + ,tts::randoms(-1,1), tts::randoms(-1,1) ) ) (auto r0, auto i0, auto r1, auto i1) { auto c0 = kyosu::complex(r0,i0); auto c1 = kyosu::complex(r1,i1); - TTS_RELATIVE_EQUAL(kyosu::pow1p(c0, c1), kyosu::exp(c1*kyosu::log(kyosu::inc(c0))), 1e-5); - TTS_RELATIVE_EQUAL(kyosu::pow1p(r0, c1), kyosu::exp(c1*kyosu::log(kyosu::inc(r0))), 1e-5); - TTS_RELATIVE_EQUAL(kyosu::pow1p(c0, r1), kyosu::exp(r1*kyosu::log(kyosu::inc(c0))), 1e-5); -// TTS_RELATIVE_EQUAL(kyosu::pow1p(c0, 4u), kyosu::dec(c0*kyosu::sqr(kyosu::sqr(c0)), 1.0e-5); + TTS_RELATIVE_EQUAL(kyosu::pow1p(c0, c1), kyosu::exp(c1*kyosu::log(kyosu::inc(c0))), 1e-3); + TTS_RELATIVE_EQUAL(kyosu::pow1p(r0, c1), kyosu::exp(c1*kyosu::log(kyosu::inc(r0))), 1e-3); + TTS_RELATIVE_EQUAL(kyosu::pow1p(c0, r1), kyosu::exp(r1*kyosu::log(kyosu::inc(c0))), 1e-3); }; TTS_CASE_WITH ( "Check kyosu::pow1p over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r0, T i0, T j0, T k0, T r1, T i1, T j1, T k1) @@ -49,6 +47,5 @@ TTS_CASE_WITH ( "Check kyosu::pow1p over quaternion" using type = kyosu::quaternion_t; auto q0 = type(r0,i0,j0,k0); auto q1 = type(r1,i1,j1,k1); - TTS_RELATIVE_EQUAL(kyosu::pow1p(q0, q1), kyosu::exp(q1*kyosu::log(kyosu::inc(q0))), 1e-5); -// TTS_RELATIVE_EQUAL(kyosu::pow1p(q0, 4), kyosu::sqr(kyosu::sqr(q0)), 1.0e-5); + TTS_RELATIVE_EQUAL(kyosu::pow1p(q0, q1), kyosu::exp(kyosu::log(kyosu::inc(q0))*q1), 1e-5); }; diff --git a/test/unit/function/pow_abs.cpp b/test/unit/function/pow_abs.cpp index 65e37f99..c7a0a044 100644 --- a/test/unit/function/pow_abs.cpp +++ b/test/unit/function/pow_abs.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::pow_abs over real" , kyosu::real_types - , tts::generate(tts::between(-10,10) - ,tts::between(-10,10) + , tts::generate(tts::randoms(-10,10) + ,tts::randoms(-10,10) ) ) (auto r0, auto r1) @@ -22,8 +22,8 @@ TTS_CASE_WITH ( "Check kyosu::pow_abs over real" TTS_CASE_WITH ( "Check kyosu::pow_abs over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10) - ,tts::between(-10,10), tts::between(-10,10) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10) + ,tts::randoms(-10,10), tts::randoms(-10,10) ) ) (auto r0, auto i0, auto r1, auto i1) @@ -37,10 +37,10 @@ TTS_CASE_WITH ( "Check kyosu::pow_abs over complex" TTS_CASE_WITH ( "Check kyosu::pow_abs over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r0, T i0, T j0, T k0, T r1, T i1, T j1, T k1) diff --git a/test/unit/function/powm1.cpp b/test/unit/function/powm1.cpp index 62f46bd5..41d79d00 100644 --- a/test/unit/function/powm1.cpp +++ b/test/unit/function/powm1.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::powm1 over real" , kyosu::real_types - , tts::generate(tts::between(-10,10) - ,tts::between(-10,10) + , tts::generate(tts::randoms(-10,10) + ,tts::randoms(-10,10) ) ) (auto r0, auto r1) @@ -22,8 +22,8 @@ TTS_CASE_WITH ( "Check kyosu::powm1 over real" TTS_CASE_WITH ( "Check kyosu::powm1 over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10) - ,tts::between(-10,10), tts::between(-10,10) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10) + ,tts::randoms(-10,10), tts::randoms(-10,10) ) ) (auto r0, auto i0, auto r1, auto i1) @@ -37,10 +37,10 @@ TTS_CASE_WITH ( "Check kyosu::powm1 over complex" TTS_CASE_WITH ( "Check kyosu::powm1 over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r0, T i0, T j0, T k0, T r1, T i1, T j1, T k1) @@ -48,5 +48,5 @@ TTS_CASE_WITH ( "Check kyosu::powm1 over quaternion" using type = kyosu::quaternion_t; auto q0 = type(r0,i0,j0,k0); auto q1 = type(r1,i1,j1,k1); - TTS_RELATIVE_EQUAL(kyosu::powm1(q0, q1), kyosu::dec(kyosu::exp(q1*kyosu::log((q0)))), 1e-5); + TTS_RELATIVE_EQUAL(kyosu::powm1(q0, q1), kyosu::dec(kyosu::exp(kyosu::log(q0)*q1)), 1e-5); }; diff --git a/test/unit/function/pure.cpp b/test/unit/function/pure.cpp index 7f897c95..02493eb8 100644 --- a/test/unit/function/pure.cpp +++ b/test/unit/function/pure.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::pure over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::pure over real" TTS_CASE_WITH ( "Check kyosu::pure over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (T r, T i) { @@ -28,8 +28,8 @@ TTS_CASE_WITH ( "Check kyosu::pure over complex" TTS_CASE_WITH ( "Check kyosu::pure over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -40,10 +40,10 @@ TTS_CASE_WITH ( "Check kyosu::pure over quaternion" TTS_CASE_WITH ( "Check kyosu::pure over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/real.cpp b/test/unit/function/real.cpp index 636f5d4c..bc22b449 100644 --- a/test/unit/function/real.cpp +++ b/test/unit/function/real.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::real over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::real over real" TTS_CASE_WITH ( "Check kyosu::real over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -28,8 +28,8 @@ TTS_CASE_WITH ( "Check kyosu::real over complex" TTS_CASE_WITH ( "Check kyosu::real over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -40,10 +40,10 @@ TTS_CASE_WITH ( "Check kyosu::real over quaternion" TTS_CASE_WITH ( "Check kyosu::real over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/function/rec.cpp b/test/unit/function/rec.cpp index 78d139ca..16170e99 100644 --- a/test/unit/function/rec.cpp +++ b/test/unit/function/rec.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::rec over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -20,8 +20,8 @@ TTS_CASE_WITH ( "Check kyosu::rec over real" TTS_CASE_WITH ( "Check kyosu::rec over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/reldist.cpp b/test/unit/function/reldist.cpp index 1d5cf465..dd1ba7f1 100644 --- a/test/unit/function/reldist.cpp +++ b/test/unit/function/reldist.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::reldist over real" , kyosu::real_types - , tts::generate(tts::between(-10,10) - ,tts::between(-10,10) + , tts::generate(tts::randoms(-10,10) + ,tts::randoms(-10,10) ) ) (auto r0, auto r1) @@ -21,8 +21,8 @@ TTS_CASE_WITH ( "Check kyosu::reldist over real" TTS_CASE_WITH ( "Check kyosu::reldist over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10) - ,tts::between(-10,10), tts::between(-10,10) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10) + ,tts::randoms(-10,10), tts::randoms(-10,10) ) ) (auto r0, auto i0, auto r1, auto i1) @@ -36,10 +36,10 @@ TTS_CASE_WITH ( "Check kyosu::reldist over complex" TTS_CASE_WITH ( "Check kyosu::reldist over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r0, T i0, T j0, T k0, T r1, T i1, T j1, T k1) diff --git a/test/unit/function/sec.cpp b/test/unit/function/sec.cpp index 8b0c4e97..ebbc139d 100644 --- a/test/unit/function/sec.cpp +++ b/test/unit/function/sec.cpp @@ -15,7 +15,7 @@ TTS_CASE_WITH ( "Check kyosu::sec over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -33,8 +33,8 @@ auto cv(boost::math::quaternion const &bq) TTS_CASE_WITH ( "Check kyosu::sec over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/sech.cpp b/test/unit/function/sech.cpp index fcc9d6f0..a5e69f3b 100644 --- a/test/unit/function/sech.cpp +++ b/test/unit/function/sech.cpp @@ -15,7 +15,7 @@ TTS_CASE_WITH ( "Check kyosu::sech over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -33,8 +33,8 @@ auto cv(boost::math::quaternion const &bq) TTS_CASE_WITH ( "Check kyosu::sech over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/secpi.cpp b/test/unit/function/secpi.cpp index 71294519..a99854f8 100644 --- a/test/unit/function/secpi.cpp +++ b/test/unit/function/secpi.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::secpi over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -20,5 +20,5 @@ TTS_CASE_WITH ( "Check kyosu::secpi over quaternion" using u_t = eve::underlying_type_t; auto pi = eve::pi(eve::as()); auto q = ke_t(r,i,j,k); - TTS_RELATIVE_EQUAL(kyosu::secpi(q), kyosu::sec(pi*q), 1e-5); + TTS_RELATIVE_EQUAL(kyosu::secpi(q), kyosu::sec(pi*q), 1e-4); }; diff --git a/test/unit/function/sign.cpp b/test/unit/function/sign.cpp index 396331cc..997af5cc 100644 --- a/test/unit/function/sign.cpp +++ b/test/unit/function/sign.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::sign over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -20,8 +20,8 @@ TTS_CASE_WITH ( "Check kyosu::sign over real" TTS_CASE_WITH ( "Check kyosu::sign over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/sin.cpp b/test/unit/function/sin.cpp index 17cf431c..5c7cc585 100644 --- a/test/unit/function/sin.cpp +++ b/test/unit/function/sin.cpp @@ -15,7 +15,7 @@ TTS_CASE_WITH ( "Check kyosu::sin over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -33,8 +33,8 @@ auto cv(boost::math::quaternion const &bq) TTS_CASE_WITH ( "Check kyosu::sin over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/sinc.cpp b/test/unit/function/sinc.cpp index 58c4be80..bfe62cba 100644 --- a/test/unit/function/sinc.cpp +++ b/test/unit/function/sinc.cpp @@ -15,7 +15,7 @@ TTS_CASE_WITH ( "Check kyosu::sinc over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -33,8 +33,8 @@ auto cv(boost::math::quaternion const &bq) TTS_CASE_WITH ( "Check kyosu::sinc over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/sincos.cpp b/test/unit/function/sincos.cpp index df54abaf..b2500e20 100644 --- a/test/unit/function/sincos.cpp +++ b/test/unit/function/sincos.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::sin over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/sinh.cpp b/test/unit/function/sinh.cpp index 88b2b6db..fa9fa5a2 100644 --- a/test/unit/function/sinh.cpp +++ b/test/unit/function/sinh.cpp @@ -15,7 +15,7 @@ TTS_CASE_WITH ( "Check kyosu::sinh over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -33,8 +33,8 @@ auto cv(boost::math::quaternion const &bq) TTS_CASE_WITH ( "Check kyosu::sinh over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/sinhcosh.cpp b/test/unit/function/sinhcosh.cpp index db6fc486..f068cdbb 100644 --- a/test/unit/function/sinhcosh.cpp +++ b/test/unit/function/sinhcosh.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::sinh over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/sinpi.cpp b/test/unit/function/sinpi.cpp index 042e7b92..6d98dbdd 100644 --- a/test/unit/function/sinpi.cpp +++ b/test/unit/function/sinpi.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::sinpi over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/sqr.cpp b/test/unit/function/sqr.cpp index 54397cf7..7a89e690 100644 --- a/test/unit/function/sqr.cpp +++ b/test/unit/function/sqr.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::sqr over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::sqr over real" TTS_CASE_WITH ( "Check kyosu::sqr over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -29,13 +29,13 @@ TTS_CASE_WITH ( "Check kyosu::sqr over complex" TTS_CASE_WITH ( "Check kyosu::sqr over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) { using type = kyosu::quaternion_t; auto q = type(r,i,j,k); - TTS_RELATIVE_EQUAL(kyosu::sqr(q), q*q, 1e-7); + TTS_RELATIVE_EQUAL(kyosu::sqr(q), q*q, 1e-6); }; diff --git a/test/unit/function/sqr_abs.cpp b/test/unit/function/sqr_abs.cpp index 3e403d75..286324ea 100644 --- a/test/unit/function/sqr_abs.cpp +++ b/test/unit/function/sqr_abs.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::sqr_abs over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::sqr_abs over real" TTS_CASE_WITH ( "Check kyosu::sqr_abs over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -28,12 +28,12 @@ TTS_CASE_WITH ( "Check kyosu::sqr_abs over complex" TTS_CASE_WITH ( "Check kyosu::sqr_abs over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) { using type = kyosu::quaternion_t; - TTS_ULP_EQUAL(kyosu::sqr_abs(type(r,i,j,k)), r*r+i*i+j*j+k*k, 0.5); + TTS_ULP_EQUAL(kyosu::sqr_abs(type(r,i,j,k)), r*r+i*i+j*j+k*k, 2.0); }; diff --git a/test/unit/function/sqrt.cpp b/test/unit/function/sqrt.cpp index e26d8c5a..d83832b8 100644 --- a/test/unit/function/sqrt.cpp +++ b/test/unit/function/sqrt.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::sqrt over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (T v) { @@ -22,7 +22,7 @@ TTS_CASE_WITH ( "Check kyosu::sqrt over real" TTS_CASE_WITH ( "Check kyosu::sqrt over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -32,13 +32,13 @@ TTS_CASE_WITH ( "Check kyosu::sqrt over complex" TTS_CASE_WITH ( "Check kyosu::sqrt over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) { using type = kyosu::quaternion_t; auto q = type(r,i,j,k); - TTS_RELATIVE_EQUAL(kyosu::sqr((kyosu::sqrt(q))), q, 1e-5); + TTS_RELATIVE_EQUAL(kyosu::sqr((kyosu::sqrt(q))), q, 1e-4); }; diff --git a/test/unit/function/tan.cpp b/test/unit/function/tan.cpp index 50fcb66a..eae450f7 100644 --- a/test/unit/function/tan.cpp +++ b/test/unit/function/tan.cpp @@ -15,7 +15,7 @@ TTS_CASE_WITH ( "Check kyosu::tan over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -33,8 +33,8 @@ auto cv(boost::math::quaternion const &bq) TTS_CASE_WITH ( "Check kyosu::tan over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/tanh.cpp b/test/unit/function/tanh.cpp index 5dad2911..33862600 100644 --- a/test/unit/function/tanh.cpp +++ b/test/unit/function/tanh.cpp @@ -15,7 +15,7 @@ TTS_CASE_WITH ( "Check kyosu::tanh over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -33,8 +33,8 @@ auto cv(boost::math::quaternion const &bq) TTS_CASE_WITH ( "Check kyosu::tanh over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) diff --git a/test/unit/function/tanpi.cpp b/test/unit/function/tanpi.cpp index 69c5e196..8a840e00 100644 --- a/test/unit/function/tanpi.cpp +++ b/test/unit/function/tanpi.cpp @@ -10,8 +10,8 @@ TTS_CASE_WITH ( "Check kyosu::tanpi over quaternion" , kyosu::simd_real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -20,5 +20,5 @@ TTS_CASE_WITH ( "Check kyosu::tanpi over quaternion" using u_t = eve::underlying_type_t; auto pi = eve::pi(eve::as()); auto q = ke_t(r,i,j,k); - TTS_RELATIVE_EQUAL(kyosu::tanpi(q), kyosu::tan(pi*q), 1e-5); + TTS_RELATIVE_EQUAL(kyosu::tanpi(q), kyosu::tan(pi*q), 1e-4); }; diff --git a/test/unit/complex/to_polar.cpp b/test/unit/function/to_polar.cpp similarity index 72% rename from test/unit/complex/to_polar.cpp rename to test/unit/function/to_polar.cpp index c4ab6408..c20598b1 100644 --- a/test/unit/complex/to_polar.cpp +++ b/test/unit/function/to_polar.cpp @@ -11,11 +11,19 @@ TTS_CASE_WITH ( "Check behavior of from_polar on wide" , kyosu::real_types , tts::generate( tts::randoms(-1.0, +1.0) + , tts::randoms(-1.0, +1.0) + , tts::randoms(-1.0, +1.0) , tts::randoms(-1.0, +1.0) ) ) - (T const& a0, T const& a1) + (T const& a0, T const& a1, T const& a2, T const& a3) { + { + auto q = kyosu::quaternion(a0, a1, a2, a3); + auto [r, t, iz] = kyosu::to_polar(q); + auto q1 = kyosu::from_polar(r, t, iz); + TTS_RELATIVE_EQUAL(q, q1, 1.0e-5); + } { auto c = kyosu::complex(a0, a1); auto [r1, t1] = kyosu::to_polar(c); diff --git a/test/unit/function/trunc.cpp b/test/unit/function/trunc.cpp index 15a434db..6e3ef85f 100644 --- a/test/unit/function/trunc.cpp +++ b/test/unit/function/trunc.cpp @@ -10,7 +10,7 @@ TTS_CASE_WITH ( "Check kyosu::trunc over real" , kyosu::real_types - , tts::generate(tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10)) ) (auto data) { @@ -19,7 +19,7 @@ TTS_CASE_WITH ( "Check kyosu::trunc over real" TTS_CASE_WITH ( "Check kyosu::trunc over complex" , kyosu::real_types - , tts::generate(tts::between(-10,10), tts::between(-10,10)) + , tts::generate(tts::randoms(-10,10), tts::randoms(-10,10)) ) (auto r, auto i) { @@ -28,8 +28,8 @@ TTS_CASE_WITH ( "Check kyosu::trunc over complex" TTS_CASE_WITH ( "Check kyosu::trunc over quaternion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k) @@ -40,10 +40,10 @@ TTS_CASE_WITH ( "Check kyosu::trunc over quaternion" TTS_CASE_WITH ( "Check kyosu::trunc over octonion" , kyosu::real_types - , tts::generate ( tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) - , tts::between(-10,10), tts::between(-10,10) ) + , tts::generate ( tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) + , tts::randoms(-10,10), tts::randoms(-10,10) ) ) (T r, T i, T j, T k, T l, T li, T lj, T lk) { diff --git a/test/unit/quaternion/align.cpp b/test/unit/quaternion/align.cpp new file mode 100644 index 00000000..47be0d32 --- /dev/null +++ b/test/unit/quaternion/align.cpp @@ -0,0 +1,38 @@ +//================================================================================================== +/** + EVE - Expressive Vector Engine + Copyright : EVE Project Contributors + SPDX-License-Identifier: BSL-1.0 +**/ +//================================================================================================== +#include "test.hpp" +#include + + +TTS_CASE_WITH ( "Check behavior of align on wide" + , kyosu::scalar_real_types + , tts::generate( tts::randoms(0.25, +0.75) + , tts::randoms(0.25, +0.75) + , tts::randoms(0.25, +0.75) + , tts::randoms(0.25, +0.75) + ) + ) + (T const& a0, T const& a1, T const& a2, T const& a3) +{ + using kyosu::quaternion; + using kyosu::sign; + auto norm = [](auto &v){ + auto n = eve::hypot(v[0], v[1], v[2]); + for(int i=0; i <= 2; ++i) v[i]/= n; + }; + std::array v0{a0, a1, a2}; + std::array v1{a3, a1, -a2}; + + auto q = kyosu::align(v0, v1); + norm(v0); + norm(v1); + auto qv0 = kyosu::rotate_vec(q, v0); + TTS_RELATIVE_EQUAL(qv0[0], v1[0], 1.0e-4); + TTS_RELATIVE_EQUAL(qv0[1], v1[1], 1.0e-4); + TTS_RELATIVE_EQUAL(qv0[2], v1[2], 1.0e-4); +};