diff options
author | Joe Ramsay <Joe.Ramsay@arm.com> | 2022-12-15 13:28:06 +0000 |
---|---|---|
committer | Joe Ramsay <joe.ramsay@arm.com> | 2022-12-15 13:28:06 +0000 |
commit | 202e46317ee8983516b6413066a57bd624ffa044 (patch) | |
tree | 70f04af3596ff1fbaeaf926a4dfbf3e4d57d8de9 | |
parent | d748e1520dd2ff5ad3574bd0827cdd882bf6bed8 (diff) | |
download | arm-optimized-routines-202e46317ee8983516b6413066a57bd624ffa044.tar.gz |
pl/math: Move test intervals to routine source files
To conclude the work on simplifying the runulp.sh script, a new macro
has been introduced to specify the intervals in which a routine should
be tested in the routine source. This is eventually consumed by
runulp.sh.
70 files changed, 416 insertions, 693 deletions
diff --git a/pl/math/Dir.mk b/pl/math/Dir.mk index b27bcee..1433b7b 100644 --- a/pl/math/Dir.mk +++ b/pl/math/Dir.mk @@ -148,10 +148,11 @@ ulp-input-dir=$(B)/test/inputs math-lib-lims = $(patsubst $(PLM)/%,$(ulp-input-dir)/%.ulp,$(basename $(math-lib-srcs))) math-lib-aliases = $(patsubst $(PLM)/%,$(ulp-input-dir)/%.alias,$(basename $(math-lib-srcs))) math-lib-fenvs = $(patsubst $(PLM)/%,$(ulp-input-dir)/%.fenv,$(basename $(math-lib-srcs))) +math-lib-itvs = $(patsubst $(PLM)/%,$(ulp-input-dir)/%.itv,$(basename $(math-lib-srcs))) -$(math-lib-lims): CFLAGS_PL += -I$(PLM) -I$(PLM)/include $(math-cflags) -$(math-lib-aliases): CFLAGS_PL += -I$(PLM) -I$(PLM)/include $(math-cflags) -$(math-lib-fenvs): CFLAGS_PL += -I$(PLM) -I$(PLM)/include $(math-cflags) +ulp-inputs = $(math-lib-lims) $(math-lib-aliases) $(math-lib-fenvs) $(math-lib-itvs) + +$(ulp-inputs): CFLAGS_PL += -I$(PLM) -I$(PLM)/include $(math-cflags) $(ulp-input-dir)/%.ulp: $(PLM)/%.c mkdir -p $(@D) @@ -165,6 +166,10 @@ $(ulp-input-dir)/%.fenv: $(PLM)/%.c mkdir -p $(@D) $(CC) -I$(PLM)/test $(CFLAGS_PL) $< -o - -E | { grep -o "PL_TEST_EXPECT_FENV_ENABLED [^ ]*" || true; } > $@ +$(ulp-input-dir)/%.itv: $(PLM)/%.c + mkdir -p $(dir $@) + $(CC) -I$(PLM)/test $(CFLAGS_PL) $< -o - -E | { grep "PL_TEST_INTERVAL " || true; } | sed "s/ PL_TEST_INTERVAL/\nPL_TEST_INTERVAL/g" > $@ + ulp-lims := $(ulp-input-dir)/limits $(ulp-lims): $(math-lib-lims) cat $^ | sed "s/PL_TEST_ULP //g;s/^ *//g" > $@ @@ -177,12 +182,30 @@ fenv-exps := $(ulp-input-dir)/fenv $(fenv-exps): $(math-lib-fenvs) cat $^ | sed "s/PL_TEST_EXPECT_FENV_ENABLED //g;s/^ *//g" > $@ -check-pl/math-ulp: $(math-tools) $(ulp-lims) $(ulp-aliases) $(fenv-exps) +ulp-itvs-noalias := $(ulp-input-dir)/itvs_noalias +$(ulp-itvs-noalias): $(math-lib-itvs) + cat $^ > $@ + +rename-aliases := $(ulp-input-dir)/rename_alias.sed +$(rename-aliases): $(ulp-aliases) + # Build sed script for replacing aliases from generated alias file + cat $< | awk '{ print "s/ " $$1 " / " $$2 " /g" }' > $@ + +ulp-itvs-alias := $(ulp-input-dir)/itvs_alias +$(ulp-itvs-alias): $(ulp-itvs-noalias) $(rename-aliases) + cat $< | sed -f $(rename-aliases) > $@ + +ulp-itvs := $(ulp-input-dir)/intervals +$(ulp-itvs): $(ulp-itvs-alias) $(ulp-itvs-noalias) + cat $^ | sort -u | sed "s/PL_TEST_INTERVAL //g" > $@ + +check-pl/math-ulp: $(math-tools) $(ulp-lims) $(ulp-aliases) $(fenv-exps) $(ulp-itvs) WANT_ERRNO=$(WANT_ERRNO) \ WANT_SVE_MATH=$(WANT_SVE_MATH) \ ULPFLAGS="$(math-ulpflags)" \ LIMITS=../../../$(ulp-lims) \ ALIASES=../../../$(ulp-aliases) \ + INTERVALS=../../../$(ulp-itvs) \ FENV=../../../$(fenv-exps) \ build/pl/bin/runulp.sh $(EMULATOR) diff --git a/pl/math/acosh_3u.c b/pl/math/acosh_3u.c index f135b5d..d2c195f 100644 --- a/pl/math/acosh_3u.c +++ b/pl/math/acosh_3u.c @@ -58,3 +58,8 @@ acosh (double x) PL_SIG (S, D, 1, acosh, 1.0, 10.0) PL_TEST_ULP (acosh, 2.19) +PL_TEST_INTERVAL (acosh, 0, 1, 10000) +PL_TEST_INTERVAL (acosh, 1, 2, 100000) +PL_TEST_INTERVAL (acosh, 2, 0x1p511, 100000) +PL_TEST_INTERVAL (acosh, 0x1p511, inf, 100000) +PL_TEST_INTERVAL (acosh, -0, -inf, 10000) diff --git a/pl/math/acoshf_2u8.c b/pl/math/acoshf_2u8.c index 0f9824d..bd9c561 100644 --- a/pl/math/acoshf_2u8.c +++ b/pl/math/acoshf_2u8.c @@ -55,3 +55,8 @@ acoshf (float x) PL_SIG (S, F, 1, acosh, 1.0, 10.0) PL_TEST_ULP (acoshf, 2.30) +PL_TEST_INTERVAL (acoshf, 0, 1, 100) +PL_TEST_INTERVAL (acoshf, 1, 2, 10000) +PL_TEST_INTERVAL (acoshf, 2, 0x1p64, 100000) +PL_TEST_INTERVAL (acoshf, 0x1p64, inf, 100000) +PL_TEST_INTERVAL (acoshf, -0, -inf, 10000) diff --git a/pl/math/asinh_2u5.c b/pl/math/asinh_2u5.c index 44435be..064d81e 100644 --- a/pl/math/asinh_2u5.c +++ b/pl/math/asinh_2u5.c @@ -77,3 +77,10 @@ asinh (double x) PL_SIG (S, D, 1, asinh, -10.0, 10.0) PL_TEST_ULP (asinh, 1.54) +PL_TEST_INTERVAL (asinh, -0x1p-26, 0x1p-26, 50000) +PL_TEST_INTERVAL (asinh, 0x1p-26, 1.0, 40000) +PL_TEST_INTERVAL (asinh, -0x1p-26, -1.0, 10000) +PL_TEST_INTERVAL (asinh, 1.0, 100.0, 40000) +PL_TEST_INTERVAL (asinh, -1.0, -100.0, 10000) +PL_TEST_INTERVAL (asinh, 100.0, inf, 50000) +PL_TEST_INTERVAL (asinh, -100.0, -inf, 10000) diff --git a/pl/math/asinhf_3u5.c b/pl/math/asinhf_3u5.c index 36c332d..2429e82 100644 --- a/pl/math/asinhf_3u5.c +++ b/pl/math/asinhf_3u5.c @@ -71,3 +71,7 @@ asinhf (float x) PL_SIG (S, F, 1, asinh, -10.0, 10.0) PL_TEST_ULP (asinhf, 2.9) +PL_TEST_INTERVAL (asinhf, 0, 0x1p-12, 5000) +PL_TEST_INTERVAL (asinhf, 0x1p-12, 1.0, 50000) +PL_TEST_INTERVAL (asinhf, 1.0, 0x1p11, 50000) +PL_TEST_INTERVAL (asinhf, 0x1p11, 0x1p127, 20000) diff --git a/pl/math/atan2_2u5.c b/pl/math/atan2_2u5.c index fb5ced4..ba39d9a 100644 --- a/pl/math/atan2_2u5.c +++ b/pl/math/atan2_2u5.c @@ -152,3 +152,8 @@ atan2 (double y, double x) /* Arity of 2 means no mathbench entry emitted. See test/mathbench_funcs.h. */ PL_SIG (S, D, 2, atan2) PL_TEST_ULP (atan2, 1.78) +PL_TEST_INTERVAL (atan2, -10.0, 10.0, 50000) +PL_TEST_INTERVAL (atan2, -1.0, 1.0, 40000) +PL_TEST_INTERVAL (atan2, 0.0, 1.0, 40000) +PL_TEST_INTERVAL (atan2, 1.0, 100.0, 40000) +PL_TEST_INTERVAL (atan2, 1e6, 1e32, 40000) diff --git a/pl/math/atan2f_3u.c b/pl/math/atan2f_3u.c index 0a3e975..e84ea0b 100644 --- a/pl/math/atan2f_3u.c +++ b/pl/math/atan2f_3u.c @@ -160,3 +160,8 @@ atan2f (float y, float x) /* Arity of 2 means no mathbench entry emitted. See test/mathbench_funcs.h. */ PL_SIG (S, F, 2, atan2) PL_TEST_ULP (atan2f, 2.4) +PL_TEST_INTERVAL (atan2f, -10.0, 10.0, 50000) +PL_TEST_INTERVAL (atan2f, -1.0, 1.0, 40000) +PL_TEST_INTERVAL (atan2f, 0.0, 1.0, 40000) +PL_TEST_INTERVAL (atan2f, 1.0, 100.0, 40000) +PL_TEST_INTERVAL (atan2f, 1e6, 1e32, 40000) diff --git a/pl/math/atanhf_3u1.c b/pl/math/atanhf_3u1.c index 47b9486..c7f80b0 100644 --- a/pl/math/atanhf_3u1.c +++ b/pl/math/atanhf_3u1.c @@ -79,3 +79,9 @@ atanhf (float x) PL_SIG (S, F, 1, atanh, -1.0, 1.0) PL_TEST_ULP (atanhf, 2.59) +PL_TEST_INTERVAL (atanhf, 0, 0x1p-12, 500) +PL_TEST_INTERVAL (atanhf, 0x1p-12, 1, 200000) +PL_TEST_INTERVAL (atanhf, 1, inf, 1000) +PL_TEST_INTERVAL (atanhf, -0, -0x1p-12, 500) +PL_TEST_INTERVAL (atanhf, -0x1p-12, -1, 200000) +PL_TEST_INTERVAL (atanhf, -1, -inf, 1000) diff --git a/pl/math/cbrtf_1u5.c b/pl/math/cbrtf_1u5.c index c6d1de9..86a6088 100644 --- a/pl/math/cbrtf_1u5.c +++ b/pl/math/cbrtf_1u5.c @@ -63,3 +63,5 @@ cbrtf (float x) PL_SIG (S, F, 1, cbrt, -10.0, 10.0) PL_TEST_ULP (cbrtf, 1.03) +PL_TEST_INTERVAL (cbrtf, 0, inf, 1000000) +PL_TEST_INTERVAL (cbrtf, -0, -inf, 1000000) diff --git a/pl/math/cosh_2u.c b/pl/math/cosh_2u.c index 9e137ff..5ec3b77 100644 --- a/pl/math/cosh_2u.c +++ b/pl/math/cosh_2u.c @@ -58,3 +58,9 @@ cosh (double x) PL_SIG (S, D, 1, cosh, -10.0, 10.0) PL_TEST_ULP (cosh, 1.43) +PL_TEST_INTERVAL (cosh, 0, 0x1.61da04cbafe44p+9, 100000) +PL_TEST_INTERVAL (cosh, -0, -0x1.61da04cbafe44p+9, 100000) +PL_TEST_INTERVAL (cosh, 0x1.61da04cbafe44p+9, 0x1p10, 1000) +PL_TEST_INTERVAL (cosh, -0x1.61da04cbafe44p+9, -0x1p10, 1000) +PL_TEST_INTERVAL (cosh, 0x1p10, inf, 100) +PL_TEST_INTERVAL (cosh, -0x1p10, -inf, 100) diff --git a/pl/math/coshf_1u9.c b/pl/math/coshf_1u9.c index 0e7b30f..2f93f1c 100644 --- a/pl/math/coshf_1u9.c +++ b/pl/math/coshf_1u9.c @@ -63,3 +63,9 @@ coshf (float x) PL_SIG (S, F, 1, cosh, -10.0, 10.0) PL_TEST_ULP (coshf, 1.89) +PL_TEST_INTERVAL (coshf, 0, 0x1p-63, 100) +PL_TEST_INTERVAL (coshf, 0, 0x1.5a92d8p+6, 80000) +PL_TEST_INTERVAL (coshf, 0x1.5a92d8p+6, inf, 2000) +PL_TEST_INTERVAL (coshf, -0, -0x1p-63, 100) +PL_TEST_INTERVAL (coshf, -0, -0x1.5a92d8p+6, 80000) +PL_TEST_INTERVAL (coshf, -0x1.5a92d8p+6, -inf, 2000) diff --git a/pl/math/erfc_4u5.c b/pl/math/erfc_4u5.c index 8394e48..6d4a29a 100644 --- a/pl/math/erfc_4u5.c +++ b/pl/math/erfc_4u5.c @@ -147,3 +147,9 @@ erfc (double x) PL_SIG (S, D, 1, erfc, -6.0, 28.0) PL_TEST_ULP (erfc, 3.56) +PL_TEST_INTERVAL (erfc, 0, 0xffff0000, 10000) +PL_TEST_INTERVAL (erfc, 0x1p-1022, 0x1p-26, 40000) +PL_TEST_INTERVAL (erfc, -0x1p-1022, -0x1p-26, 40000) +PL_TEST_INTERVAL (erfc, 0x1p-26, 0x1p5, 40000) +PL_TEST_INTERVAL (erfc, -0x1p-26, -0x1p3, 40000) +PL_TEST_INTERVAL (erfc, 0, inf, 40000) diff --git a/pl/math/erfcf_2u.c b/pl/math/erfcf_2u.c index f76a11a..7a55000 100644 --- a/pl/math/erfcf_2u.c +++ b/pl/math/erfcf_2u.c @@ -125,3 +125,9 @@ erfcf (float x) PL_SIG (S, F, 1, erfc, -4.0, 10.0) PL_TEST_ULP (erfcf, 1.5) +PL_TEST_INTERVAL (erfcf, 0, 0xffff0000, 10000) +PL_TEST_INTERVAL (erfcf, 0x1p-127, 0x1p-26, 40000) +PL_TEST_INTERVAL (erfcf, -0x1p-127, -0x1p-26, 40000) +PL_TEST_INTERVAL (erfcf, 0x1p-26, 0x1p5, 40000) +PL_TEST_INTERVAL (erfcf, -0x1p-26, -0x1p3, 40000) +PL_TEST_INTERVAL (erfcf, 0, inf, 40000) diff --git a/pl/math/erff_1u5.c b/pl/math/erff_1u5.c index fa1e55f..3d8cfee 100644 --- a/pl/math/erff_1u5.c +++ b/pl/math/erff_1u5.c @@ -100,3 +100,9 @@ erff (float x) PL_SIG (S, F, 1, erf, -4.0, 4.0) PL_TEST_ULP (erff, 0.6) +PL_TEST_INTERVAL (erff, 0, 0xffff0000, 10000) +PL_TEST_INTERVAL (erff, 0x1p-127, 0x1p-26, 40000) +PL_TEST_INTERVAL (erff, -0x1p-127, -0x1p-26, 40000) +PL_TEST_INTERVAL (erff, 0x1p-26, 0x1p3, 40000) +PL_TEST_INTERVAL (erff, -0x1p-26, -0x1p3, 40000) +PL_TEST_INTERVAL (erff, 0, inf, 40000) diff --git a/pl/math/expm1_2u5.c b/pl/math/expm1_2u5.c index cfde806..60a556e 100644 --- a/pl/math/expm1_2u5.c +++ b/pl/math/expm1_2u5.c @@ -78,3 +78,9 @@ expm1 (double x) PL_SIG (S, D, 1, expm1, -9.9, 9.9) PL_TEST_ULP (expm1, 1.68) +PL_TEST_INTERVAL (expm1, 0, 0x1p-51, 1000) +PL_TEST_INTERVAL (expm1, -0, -0x1p-51, 1000) +PL_TEST_INTERVAL (expm1, 0x1p-51, 0x1.63108c75a1937p+9, 100000) +PL_TEST_INTERVAL (expm1, -0x1p-51, -0x1.740bf7c0d927dp+9, 100000) +PL_TEST_INTERVAL (expm1, 0x1.63108c75a1937p+9, inf, 100) +PL_TEST_INTERVAL (expm1, -0x1.740bf7c0d927dp+9, -inf, 100) diff --git a/pl/math/expm1f_1u6.c b/pl/math/expm1f_1u6.c index 82dc28d..5138865 100644 --- a/pl/math/expm1f_1u6.c +++ b/pl/math/expm1f_1u6.c @@ -74,3 +74,7 @@ expm1f (float x) PL_SIG (S, F, 1, expm1, -9.9, 9.9) PL_TEST_ULP (expm1f, 1.02) +PL_TEST_INTERVAL (expm1f, 0, 0x1p-23, 1000) +PL_TEST_INTERVAL (expm1f, -0, -0x1p-23, 1000) +PL_TEST_INTERVAL (expm1f, 0x1p-23, 0x1.644716p6, 100000) +PL_TEST_INTERVAL (expm1f, -0x1p-23, -0x1.9bbabcp+6, 100000) diff --git a/pl/math/include/pl_test.h b/pl/math/include/pl_test.h index 8999efa..e578a0d 100644 --- a/pl/math/include/pl_test.h +++ b/pl/math/include/pl_test.h @@ -20,3 +20,6 @@ build flags - defer expansion by one pass to allow those flags to be expanded properly. */ #define PL_TEST_EXPECT_FENV(f, e) + +#define PL_TEST_INTERVAL(f, lo, hi, n) +#define PL_TEST_INTERVAL_C(f, lo, hi, n, c) diff --git a/pl/math/log10_2u.c b/pl/math/log10_2u.c index 1827bb9..81f73a8 100644 --- a/pl/math/log10_2u.c +++ b/pl/math/log10_2u.c @@ -145,3 +145,6 @@ log10l (long double x) PL_SIG (S, D, 1, log10, 0.01, 11.1) PL_TEST_ULP (log10, 1.11) +PL_TEST_INTERVAL (log10, 0, 0xffff000000000000, 10000) +PL_TEST_INTERVAL (log10, 0x1p-4, 0x1p4, 40000) +PL_TEST_INTERVAL (log10, 0, inf, 40000) diff --git a/pl/math/log10f.c b/pl/math/log10f.c index 84db420..32de42f 100644 --- a/pl/math/log10f.c +++ b/pl/math/log10f.c @@ -90,3 +90,8 @@ log10f (float x) PL_SIG (S, F, 1, log10, 0.01, 11.1) PL_TEST_ULP (log10f, 0.30) +PL_TEST_INTERVAL (log10f, 0, 0xffff0000, 10000) +PL_TEST_INTERVAL (log10f, 0x1p-127, 0x1p-26, 50000) +PL_TEST_INTERVAL (log10f, 0x1p-26, 0x1p3, 50000) +PL_TEST_INTERVAL (log10f, 0x1p-4, 0x1p4, 50000) +PL_TEST_INTERVAL (log10f, 0, inf, 50000) diff --git a/pl/math/log1p_2u.c b/pl/math/log1p_2u.c index 5a6f798..519df42 100644 --- a/pl/math/log1p_2u.c +++ b/pl/math/log1p_2u.c @@ -125,3 +125,11 @@ log1p (double x) PL_SIG (S, D, 1, log1p, -0.9, 10.0) PL_TEST_ULP (log1p, 1.26) +PL_TEST_INTERVAL (log1p, -10.0, 10.0, 10000) +PL_TEST_INTERVAL (log1p, 0.0, 0x1p-23, 50000) +PL_TEST_INTERVAL (log1p, 0x1p-23, 0.001, 50000) +PL_TEST_INTERVAL (log1p, 0.001, 1.0, 50000) +PL_TEST_INTERVAL (log1p, 0.0, -0x1p-23, 50000) +PL_TEST_INTERVAL (log1p, -0x1p-23, -0.001, 50000) +PL_TEST_INTERVAL (log1p, -0.001, -1.0, 50000) +PL_TEST_INTERVAL (log1p, -1.0, inf, 5000) diff --git a/pl/math/log1pf_2u1.c b/pl/math/log1pf_2u1.c index f791105..cb1d4bc 100644 --- a/pl/math/log1pf_2u1.c +++ b/pl/math/log1pf_2u1.c @@ -154,3 +154,11 @@ log1pf (float x) PL_SIG (S, F, 1, log1p, -0.9, 10.0) PL_TEST_ULP (log1pf, 1.52) +PL_TEST_INTERVAL (log1pf, -10.0, 10.0, 10000) +PL_TEST_INTERVAL (log1pf, 0.0, 0x1p-23, 50000) +PL_TEST_INTERVAL (log1pf, 0x1p-23, 0.001, 50000) +PL_TEST_INTERVAL (log1pf, 0.001, 1.0, 50000) +PL_TEST_INTERVAL (log1pf, 0.0, -0x1p-23, 50000) +PL_TEST_INTERVAL (log1pf, -0x1p-23, -0.001, 50000) +PL_TEST_INTERVAL (log1pf, -0.001, -1.0, 50000) +PL_TEST_INTERVAL (log1pf, -1.0, inf, 5000) diff --git a/pl/math/sinh_3u.c b/pl/math/sinh_3u.c index 86f00a1..52ca156 100644 --- a/pl/math/sinh_3u.c +++ b/pl/math/sinh_3u.c @@ -58,3 +58,9 @@ sinh (double x) PL_SIG (S, D, 1, sinh, -10.0, 10.0) PL_TEST_ULP (sinh, 2.08) +PL_TEST_INTERVAL (sinh, 0, 0x1p-51, 100) +PL_TEST_INTERVAL (sinh, -0, -0x1p-51, 100) +PL_TEST_INTERVAL (sinh, 0x1p-51, 0x1.62e42fefa39fp+9, 100000) +PL_TEST_INTERVAL (sinh, -0x1p-51, -0x1.62e42fefa39fp+9, 100000) +PL_TEST_INTERVAL (sinh, 0x1.62e42fefa39fp+9, inf, 1000) +PL_TEST_INTERVAL (sinh, -0x1.62e42fefa39fp+9, -inf, 1000) diff --git a/pl/math/sinhf_2u3.c b/pl/math/sinhf_2u3.c index 15786d9..38f59b0 100644 --- a/pl/math/sinhf_2u3.c +++ b/pl/math/sinhf_2u3.c @@ -68,3 +68,9 @@ sinhf (float x) PL_SIG (S, F, 1, sinh, -10.0, 10.0) PL_TEST_ULP (sinhf, 1.76) +PL_TEST_INTERVAL (sinhf, 0, 0x1.62e43p+6, 100000) +PL_TEST_INTERVAL (sinhf, -0, -0x1.62e43p+6, 100000) +PL_TEST_INTERVAL (sinhf, 0x1.62e43p+6, 0x1.65a9fap+6, 100) +PL_TEST_INTERVAL (sinhf, -0x1.62e43p+6, -0x1.65a9fap+6, 100) +PL_TEST_INTERVAL (sinhf, 0x1.65a9fap+6, inf, 100) +PL_TEST_INTERVAL (sinhf, -0x1.65a9fap+6, -inf, 100) diff --git a/pl/math/sv_atan2_2u5.c b/pl/math/sv_atan2_2u5.c index 4ab2fea..b230b36 100644 --- a/pl/math/sv_atan2_2u5.c +++ b/pl/math/sv_atan2_2u5.c @@ -85,4 +85,9 @@ PL_ALIAS (__sv_atan2_x, _ZGVsMxvv_atan2) /* Arity of 2 means no mathbench entry emitted. See test/mathbench_funcs.h. */ PL_SIG (SV, D, 2, atan2) PL_TEST_ULP (__sv_atan2, 1.78) +PL_TEST_INTERVAL (__sv_atan2, -10.0, 10.0, 50000) +PL_TEST_INTERVAL (__sv_atan2, -1.0, 1.0, 40000) +PL_TEST_INTERVAL (__sv_atan2, 0.0, 1.0, 40000) +PL_TEST_INTERVAL (__sv_atan2, 1.0, 100.0, 40000) +PL_TEST_INTERVAL (__sv_atan2, 1e6, 1e32, 40000) #endif diff --git a/pl/math/sv_atan2f_3u.c b/pl/math/sv_atan2f_3u.c index 90656f0..5e9d59b 100644 --- a/pl/math/sv_atan2f_3u.c +++ b/pl/math/sv_atan2f_3u.c @@ -86,4 +86,9 @@ PL_ALIAS (__sv_atan2f_x, _ZGVsMxvv_atan2f) /* Arity of 2 means no mathbench entry emitted. See test/mathbench_funcs.h. */ PL_SIG (SV, F, 2, atan2) PL_TEST_ULP (__sv_atan2f, 2.45) +PL_TEST_INTERVAL (__sv_atan2f, -10.0, 10.0, 50000) +PL_TEST_INTERVAL (__sv_atan2f, -1.0, 1.0, 40000) +PL_TEST_INTERVAL (__sv_atan2f, 0.0, 1.0, 40000) +PL_TEST_INTERVAL (__sv_atan2f, 1.0, 100.0, 40000) +PL_TEST_INTERVAL (__sv_atan2f, 1e6, 1e32, 40000) #endif diff --git a/pl/math/sv_atan_2u5.c b/pl/math/sv_atan_2u5.c index 93b39b1..16430a2 100644 --- a/pl/math/sv_atan_2u5.c +++ b/pl/math/sv_atan_2u5.c @@ -54,4 +54,9 @@ PL_ALIAS (__sv_atan_x, _ZGVsMxv_atan) PL_SIG (SV, D, 1, atan, -3.1, 3.1) PL_TEST_ULP (__sv_atan, 1.78) +PL_TEST_INTERVAL (__sv_atan, -10.0, 10.0, 50000) +PL_TEST_INTERVAL (__sv_atan, -1.0, 1.0, 40000) +PL_TEST_INTERVAL (__sv_atan, 0.0, 1.0, 40000) +PL_TEST_INTERVAL (__sv_atan, 1.0, 100.0, 40000) +PL_TEST_INTERVAL (__sv_atan, 1e6, 1e32, 40000) #endif diff --git a/pl/math/sv_atanf_2u9.c b/pl/math/sv_atanf_2u9.c index 386c28e..41f99e5 100644 --- a/pl/math/sv_atanf_2u9.c +++ b/pl/math/sv_atanf_2u9.c @@ -51,4 +51,9 @@ PL_ALIAS (__sv_atanf_x, _ZGVsMxv_atanf) PL_SIG (SV, F, 1, atan, -3.1, 3.1) PL_TEST_ULP (__sv_atanf, 2.9) +PL_TEST_INTERVAL (__sv_atanf, -10.0, 10.0, 50000) +PL_TEST_INTERVAL (__sv_atanf, -1.0, 1.0, 40000) +PL_TEST_INTERVAL (__sv_atanf, 0.0, 1.0, 40000) +PL_TEST_INTERVAL (__sv_atanf, 1.0, 100.0, 40000) +PL_TEST_INTERVAL (__sv_atanf, 1e6, 1e32, 40000) #endif diff --git a/pl/math/sv_cos_2u5.c b/pl/math/sv_cos_2u5.c index 146ca22..a06ab9a 100644 --- a/pl/math/sv_cos_2u5.c +++ b/pl/math/sv_cos_2u5.c @@ -79,4 +79,6 @@ PL_ALIAS (__sv_cos_x, _ZGVsMxv_cos) PL_SIG (SV, D, 1, cos, -3.1, 3.1) PL_TEST_ULP (__sv_cos, 1.61) +PL_TEST_INTERVAL (__sv_cos, 0, 0xffff0000, 10000) +PL_TEST_INTERVAL (__sv_cos, 0x1p-4, 0x1p4, 500000) #endif diff --git a/pl/math/sv_cosf_2u1.c b/pl/math/sv_cosf_2u1.c index fdc4b1e..b8ec846 100644 --- a/pl/math/sv_cosf_2u1.c +++ b/pl/math/sv_cosf_2u1.c @@ -77,4 +77,6 @@ PL_ALIAS (__sv_cosf_x, _ZGVsMxv_cosf) PL_SIG (SV, F, 1, cos, -3.1, 3.1) PL_TEST_ULP (__sv_cosf, 1.57) +PL_TEST_INTERVAL (__sv_cosf, 0, 0xffff0000, 10000) +PL_TEST_INTERVAL (__sv_cosf, 0x1p-4, 0x1p4, 500000) #endif diff --git a/pl/math/sv_erf_2u5.c b/pl/math/sv_erf_2u5.c index f91aa41..b4c9186 100644 --- a/pl/math/sv_erf_2u5.c +++ b/pl/math/sv_erf_2u5.c @@ -92,4 +92,12 @@ PL_ALIAS (__sv_erf_x, _ZGVsMxv_erf) PL_SIG (SV, D, 1, erf, -4.0, 4.0) PL_TEST_ULP (__sv_erf, 1.97) +PL_TEST_INTERVAL (__sv_erf, 0, 0x1p-28, 20000) +PL_TEST_INTERVAL (__sv_erf, 0x1p-28, 1, 60000) +PL_TEST_INTERVAL (__sv_erf, 1, 0x1p28, 60000) +PL_TEST_INTERVAL (__sv_erf, 0x1p28, inf, 20000) +PL_TEST_INTERVAL (__sv_erf, -0, -0x1p-28, 20000) +PL_TEST_INTERVAL (__sv_erf, -0x1p-28, -1, 60000) +PL_TEST_INTERVAL (__sv_erf, -1, -0x1p28, 60000) +PL_TEST_INTERVAL (__sv_erf, -0x1p28, -inf, 20000) #endif diff --git a/pl/math/sv_erfc_4u.c b/pl/math/sv_erfc_4u.c index d426fa9..5b2fc18 100644 --- a/pl/math/sv_erfc_4u.c +++ b/pl/math/sv_erfc_4u.c @@ -137,4 +137,10 @@ PL_ALIAS (__sv_erfc_x, _ZGVsMxv_erfc) PL_SIG (SV, D, 1, erfc, -4.0, 10.0) PL_TEST_ULP (__sv_erfc, 3.15) +PL_TEST_INTERVAL (__sv_erfc, 0, 0xffff0000, 10000) +PL_TEST_INTERVAL (__sv_erfc, 0x1p-127, 0x1p-26, 40000) +PL_TEST_INTERVAL (__sv_erfc, -0x1p-127, -0x1p-26, 40000) +PL_TEST_INTERVAL (__sv_erfc, 0x1p-26, 0x1p5, 40000) +PL_TEST_INTERVAL (__sv_erfc, -0x1p-26, -0x1p3, 40000) +PL_TEST_INTERVAL (__sv_erfc, 0, inf, 40000) #endif diff --git a/pl/math/sv_erff_1u3.c b/pl/math/sv_erff_1u3.c index 9589fb3..fb1bef8 100644 --- a/pl/math/sv_erff_1u3.c +++ b/pl/math/sv_erff_1u3.c @@ -93,4 +93,12 @@ PL_ALIAS (__sv_erff_x, _ZGVsMxv_erff) PL_SIG (SV, F, 1, erf, -4.0, 4.0) PL_TEST_ULP (__sv_erff, 0.76) +PL_TEST_INTERVAL (__sv_erff, 0, 0x1p-28, 20000) +PL_TEST_INTERVAL (__sv_erff, 0x1p-28, 1, 60000) +PL_TEST_INTERVAL (__sv_erff, 1, 0x1p28, 60000) +PL_TEST_INTERVAL (__sv_erff, 0x1p28, inf, 20000) +PL_TEST_INTERVAL (__sv_erff, -0, -0x1p-28, 20000) +PL_TEST_INTERVAL (__sv_erff, -0x1p-28, -1, 60000) +PL_TEST_INTERVAL (__sv_erff, -1, -0x1p28, 60000) +PL_TEST_INTERVAL (__sv_erff, -0x1p28, -inf, 20000) #endif diff --git a/pl/math/sv_expf_2u.c b/pl/math/sv_expf_2u.c index f97a762..30a6c62 100644 --- a/pl/math/sv_expf_2u.c +++ b/pl/math/sv_expf_2u.c @@ -145,4 +145,12 @@ PL_ALIAS (__sv_expf_x, _ZGVsMxv_expf) PL_SIG (SV, F, 1, exp, -9.9, 9.9) PL_TEST_ULP (__sv_expf, 1.46) +PL_TEST_INTERVAL (__sv_expf, 0, 0x1p-23, 40000) +PL_TEST_INTERVAL (__sv_expf, 0x1p-23, 1, 50000) +PL_TEST_INTERVAL (__sv_expf, 1, 0x1p23, 50000) +PL_TEST_INTERVAL (__sv_expf, 0x1p23, inf, 50000) +PL_TEST_INTERVAL (__sv_expf, -0, -0x1p-23, 40000) +PL_TEST_INTERVAL (__sv_expf, -0x1p-23, -1, 50000) +PL_TEST_INTERVAL (__sv_expf, -1, -0x1p23, 50000) +PL_TEST_INTERVAL (__sv_expf, -0x1p23, -inf, 50000) #endif // SV_SUPPORTED diff --git a/pl/math/sv_log10_2u5.c b/pl/math/sv_log10_2u5.c index a9b002b..770b964 100644 --- a/pl/math/sv_log10_2u5.c +++ b/pl/math/sv_log10_2u5.c @@ -80,4 +80,10 @@ PL_ALIAS (__sv_log10_x, _ZGVsMxv_log10) PL_SIG (SV, D, 1, log10, 0.01, 11.1) PL_TEST_ULP (__sv_log10, 1.97) +PL_TEST_INTERVAL (__sv_log10, -0.0, -0x1p126, 100) +PL_TEST_INTERVAL (__sv_log10, 0x1p-149, 0x1p-126, 4000) +PL_TEST_INTERVAL (__sv_log10, 0x1p-126, 0x1p-23, 50000) +PL_TEST_INTERVAL (__sv_log10, 0x1p-23, 1.0, 50000) +PL_TEST_INTERVAL (__sv_log10, 1.0, 100, 50000) +PL_TEST_INTERVAL (__sv_log10, 100, inf, 50000) #endif diff --git a/pl/math/sv_log10f_3u5.c b/pl/math/sv_log10f_3u5.c index b29ee80..06c0908 100644 --- a/pl/math/sv_log10f_3u5.c +++ b/pl/math/sv_log10f_3u5.c @@ -79,4 +79,10 @@ PL_ALIAS (__sv_log10f_x, _ZGVsMxv_log10f) PL_SIG (SV, F, 1, log10, 0.01, 11.1) PL_TEST_ULP (__sv_log10f, 2.82) +PL_TEST_INTERVAL (__sv_log10f, -0.0, -0x1p126, 100) +PL_TEST_INTERVAL (__sv_log10f, 0x1p-149, 0x1p-126, 4000) +PL_TEST_INTERVAL (__sv_log10f, 0x1p-126, 0x1p-23, 50000) +PL_TEST_INTERVAL (__sv_log10f, 0x1p-23, 1.0, 50000) +PL_TEST_INTERVAL (__sv_log10f, 1.0, 100, 50000) +PL_TEST_INTERVAL (__sv_log10f, 100, inf, 50000) #endif diff --git a/pl/math/sv_log_2u5.c b/pl/math/sv_log_2u5.c index 8477739..7eeb206 100644 --- a/pl/math/sv_log_2u5.c +++ b/pl/math/sv_log_2u5.c @@ -76,4 +76,10 @@ PL_ALIAS (__sv_log_x, _ZGVsMxv_log) PL_SIG (SV, D, 1, log, 0.01, 11.1) PL_TEST_ULP (__sv_log, 1.68) +PL_TEST_INTERVAL (__sv_log, -0.0, -0x1p126, 100) +PL_TEST_INTERVAL (__sv_log, 0x1p-149, 0x1p-126, 4000) +PL_TEST_INTERVAL (__sv_log, 0x1p-126, 0x1p-23, 50000) +PL_TEST_INTERVAL (__sv_log, 0x1p-23, 1.0, 50000) +PL_TEST_INTERVAL (__sv_log, 1.0, 100, 50000) +PL_TEST_INTERVAL (__sv_log, 100, inf, 50000) #endif // SV_SUPPORTED diff --git a/pl/math/sv_logf_3u4.c b/pl/math/sv_logf_3u4.c index 8fea406..4ca1ead 100644 --- a/pl/math/sv_logf_3u4.c +++ b/pl/math/sv_logf_3u4.c @@ -68,4 +68,10 @@ PL_ALIAS (__sv_logf_x, _ZGVsMxv_logf) PL_SIG (SV, F, 1, log, 0.01, 11.1) PL_TEST_ULP (__sv_logf, 2.85) +PL_TEST_INTERVAL (__sv_logf, -0.0, -0x1p126, 100) +PL_TEST_INTERVAL (__sv_logf, 0x1p-149, 0x1p-126, 4000) +PL_TEST_INTERVAL (__sv_logf, 0x1p-126, 0x1p-23, 50000) +PL_TEST_INTERVAL (__sv_logf, 0x1p-23, 1.0, 50000) +PL_TEST_INTERVAL (__sv_logf, 1.0, 100, 50000) +PL_TEST_INTERVAL (__sv_logf, 100, inf, 50000) #endif // SV_SUPPORTED diff --git a/pl/math/sv_sin_3u.c b/pl/math/sv_sin_3u.c index 5637ebe..9072ef4 100644 --- a/pl/math/sv_sin_3u.c +++ b/pl/math/sv_sin_3u.c @@ -84,4 +84,6 @@ PL_ALIAS (__sv_sin_x, _ZGVsMxv_sin) PL_SIG (SV, D, 1, sin, -3.1, 3.1) PL_TEST_ULP (__sv_sin, 2.03) +PL_TEST_INTERVAL (__sv_sin, 0, 0xffff0000, 10000) +PL_TEST_INTERVAL (__sv_sin, 0x1p-4, 0x1p4, 500000) #endif diff --git a/pl/math/sv_sinf_1u9.c b/pl/math/sv_sinf_1u9.c index ca26e92..576baea 100644 --- a/pl/math/sv_sinf_1u9.c +++ b/pl/math/sv_sinf_1u9.c @@ -79,4 +79,6 @@ PL_ALIAS (__sv_sinf_x, _ZGVsMxv_sinf) PL_SIG (SV, F, 1, sin, -3.1, 3.1) PL_TEST_ULP (__sv_sinf, 1.40) +PL_TEST_INTERVAL (__sv_sinf, 0, 0xffff0000, 10000) +PL_TEST_INTERVAL (__sv_sinf, 0x1p-4, 0x1p4, 500000) #endif diff --git a/pl/math/sv_tanf_3u2.c b/pl/math/sv_tanf_3u2.c index 8629b05..ca5c5de 100644 --- a/pl/math/sv_tanf_3u2.c +++ b/pl/math/sv_tanf_3u2.c @@ -103,4 +103,12 @@ PL_ALIAS (__sv_tanf_x, _ZGVsMxv_tanf) PL_SIG (SV, F, 1, tan, -3.1, 3.1) PL_TEST_ULP (__sv_tanf, 2.7) +PL_TEST_INTERVAL (__sv_tanf, -0.0, -0x1p126, 100) +PL_TEST_INTERVAL (__sv_tanf, 0x1p-149, 0x1p-126, 4000) +PL_TEST_INTERVAL (__sv_tanf, 0x1p-126, 0x1p-23, 50000) +PL_TEST_INTERVAL (__sv_tanf, 0x1p-23, 0.7, 50000) +PL_TEST_INTERVAL (__sv_tanf, 0.7, 1.5, 50000) +PL_TEST_INTERVAL (__sv_tanf, 1.5, 100, 50000) +PL_TEST_INTERVAL (__sv_tanf, 100, 0x1p17, 50000) +PL_TEST_INTERVAL (__sv_tanf, 0x1p17, inf, 50000) #endif diff --git a/pl/math/tanf_3u3.c b/pl/math/tanf_3u3.c index e8784d8..f6673f5 100644 --- a/pl/math/tanf_3u3.c +++ b/pl/math/tanf_3u3.c @@ -195,3 +195,16 @@ tanf (float x) PL_SIG (S, F, 1, tan, -3.1, 3.1) PL_TEST_ULP (tanf, 2.80) +PL_TEST_INTERVAL (tanf, 0, 0xffff0000, 10000) +PL_TEST_INTERVAL (tanf, 0x1p-127, 0x1p-14, 50000) +PL_TEST_INTERVAL (tanf, -0x1p-127, -0x1p-14, 50000) +PL_TEST_INTERVAL (tanf, 0x1p-14, 0.7, 50000) +PL_TEST_INTERVAL (tanf, -0x1p-14, -0.7, 50000) +PL_TEST_INTERVAL (tanf, 0.7, 1.5, 50000) +PL_TEST_INTERVAL (tanf, -0.7, -1.5, 50000) +PL_TEST_INTERVAL (tanf, 1.5, 0x1p17, 50000) +PL_TEST_INTERVAL (tanf, -1.5, -0x1p17, 50000) +PL_TEST_INTERVAL (tanf, 0x1p17, 0x1p54, 50000) +PL_TEST_INTERVAL (tanf, -0x1p17, -0x1p54, 50000) +PL_TEST_INTERVAL (tanf, 0x1p54, inf, 50000) +PL_TEST_INTERVAL (tanf, -0x1p54, -inf, 50000) diff --git a/pl/math/tanhf_2u6.c b/pl/math/tanhf_2u6.c index e6cbbd0..745e5e3 100644 --- a/pl/math/tanhf_2u6.c +++ b/pl/math/tanhf_2u6.c @@ -83,3 +83,9 @@ tanhf (float x) PL_SIG (S, F, 1, tanh, -10.0, 10.0) PL_TEST_ULP (tanhf, 2.09) +PL_TEST_INTERVAL (tanhf, 0, 0x1p-23, 1000) +PL_TEST_INTERVAL (tanhf, -0, -0x1p-23, 1000) +PL_TEST_INTERVAL (tanhf, 0x1p-23, 0x1.205966p+3, 100000) +PL_TEST_INTERVAL (tanhf, -0x1p-23, -0x1.205966p+3, 100000) +PL_TEST_INTERVAL (tanhf, 0x1.205966p+3, inf, 100) +PL_TEST_INTERVAL (tanhf, -0x1.205966p+3, -inf, 100) diff --git a/pl/math/test/pl_test.h b/pl/math/test/pl_test.h index 66dc73a..9bbcaf1 100644 --- a/pl/math/test/pl_test.h +++ b/pl/math/test/pl_test.h @@ -27,3 +27,6 @@ #define PL_TEST_EXPECT_FENV(f, e) PL_TEST_EXPECT_FENV_ (f, e) #define PL_TEST_EXPECT_FENV_(f, e) PL_TEST_EXPECT_FENV_##e (f) #define PL_TEST_EXPECT_FENV_1(f) PL_TEST_EXPECT_FENV_ENABLED f + +#define PL_TEST_INTERVAL(f, lo, hi, n) PL_TEST_INTERVAL f lo hi n +#define PL_TEST_INTERVAL_C(f, lo, hi, n, c) PL_TEST_INTERVAL f lo hi n c diff --git a/pl/math/test/runulp.sh b/pl/math/test/runulp.sh index d6c3196..7fa4058 100755 --- a/pl/math/test/runulp.sh +++ b/pl/math/test/runulp.sh @@ -24,7 +24,8 @@ t() { key=$(cat $ALIASES | { grep " $1$" || echo $1; } | awk '{print $1}') L=$(cat $LIMITS | grep "^$key " | awk '{print $2}') [[ $L =~ ^[0-9]+\.[0-9]+$ ]] - extra_flags="${5:-}" + extra_flags="" + [[ -z "${5:-}" ]] || extra_flags="$extra_flags -c $5" grep -q "^$key$" $FENV || extra_flags="$extra_flags -f" $emu ./ulp -e $L $flags ${extra_flags} $1 $2 $3 $4 && PASS=$((PASS+1)) || FAIL=$((FAIL+1)) } @@ -33,167 +34,11 @@ check() { $emu ./ulp -f -q "$@" #>/dev/null } -t erff 0 0xffff0000 10000 -t erff 0x1p-127 0x1p-26 40000 -t erff -0x1p-127 -0x1p-26 40000 -t erff 0x1p-26 0x1p3 40000 -t erff -0x1p-26 -0x1p3 40000 -t erff 0 inf 40000 - -t log10f 0 0xffff0000 10000 -t log10f 0x1p-127 0x1p-26 50000 -t log10f 0x1p-26 0x1p3 50000 -t log10f 0x1p-4 0x1p4 50000 -t log10f 0 inf 50000 - -t log10 0 0xffff000000000000 10000 -t log10 0x1p-4 0x1p4 40000 -t log10 0 inf 40000 - -t erfc 0 0xffff0000 10000 -t erfc 0x1p-1022 0x1p-26 40000 -t erfc -0x1p-1022 -0x1p-26 40000 -t erfc 0x1p-26 0x1p5 40000 -t erfc -0x1p-26 -0x1p3 40000 -t erfc 0 inf 40000 - -t erfcf 0 0xffff0000 10000 -t erfcf 0x1p-127 0x1p-26 40000 -t erfcf -0x1p-127 -0x1p-26 40000 -t erfcf 0x1p-26 0x1p5 40000 -t erfcf -0x1p-26 -0x1p3 40000 -t erfcf 0 inf 40000 - -t atan2 -10.0 10.0 50000 -t atan2 -1.0 1.0 40000 -t atan2 0.0 1.0 40000 -t atan2 1.0 100.0 40000 -t atan2 1e6 1e32 40000 +# Regression-test for correct NaN handling in atan2 check atan2 0x1p-1022 0x1p-1000 x 0 0x1p-1022 40000 -# Regression-test for correct NaN handling check atan2 0x1.7887a0a717aefp+1017 0x1.7887a0a717aefp+1017 x -nan -nan check atan2 nan nan x -nan -nan -t atan2f -10.0 10.0 50000 -t atan2f -1.0 1.0 40000 -t atan2f 0.0 1.0 40000 -t atan2f 1.0 100.0 40000 -t atan2f 1e6 1e32 40000 - -t asinhf 0 0x1p-12 5000 -t asinhf 0x1p-12 1.0 50000 -t asinhf 1.0 0x1p11 50000 -t asinhf 0x1p11 0x1p127 20000 - -t asinh -0x1p-26 0x1p-26 50000 -t asinh 0x1p-26 1.0 40000 -t asinh -0x1p-26 -1.0 10000 -t asinh 1.0 100.0 40000 -t asinh -1.0 -100.0 10000 -t asinh 100.0 inf 50000 -t asinh -100.0 -inf 10000 - -t log1p -10.0 10.0 10000 -t log1p 0.0 0x1p-23 50000 -t log1p 0x1p-23 0.001 50000 -t log1p 0.001 1.0 50000 -t log1p 0.0 -0x1p-23 50000 -t log1p -0x1p-23 -0.001 50000 -t log1p -0.001 -1.0 50000 -t log1p -1.0 inf 5000 - -t log1pf -10.0 10.0 10000 -t log1pf 0.0 0x1p-23 50000 -t log1pf 0x1p-23 0.001 50000 -t log1pf 0.001 1.0 50000 -t log1pf 0.0 -0x1p-23 50000 -t log1pf -0x1p-23 -0.001 50000 -t log1pf -0.001 -1.0 50000 -t log1pf -1.0 inf 5000 - -t tanf 0 0xffff0000 10000 -t tanf 0x1p-127 0x1p-14 50000 -t tanf -0x1p-127 -0x1p-14 50000 -t tanf 0x1p-14 0.7 50000 -t tanf -0x1p-14 -0.7 50000 -t tanf 0.7 1.5 50000 -t tanf -0.7 -1.5 50000 -t tanf 1.5 0x1p17 50000 -t tanf -1.5 -0x1p17 50000 -t tanf 0x1p17 0x1p54 50000 -t tanf -0x1p17 -0x1p54 50000 -t tanf 0x1p54 inf 50000 -t tanf -0x1p54 -inf 50000 - -t acoshf 0 1 100 -t acoshf 1 2 10000 -t acoshf 2 0x1p64 100000 -t acoshf 0x1p64 inf 100000 -t acoshf -0 -inf 10000 - -t acosh 0 1 10000 -t acosh 1 2 100000 -t acosh 2 0x1p511 100000 -t acosh 0x1p511 inf 100000 -t acosh -0 -inf 10000 - -t expm1f 0 0x1p-23 1000 -t expm1f -0 -0x1p-23 1000 -t expm1f 0x1p-23 0x1.644716p6 100000 -t expm1f -0x1p-23 -0x1.9bbabcp+6 100000 - -t sinhf 0 0x1.62e43p+6 100000 -t sinhf -0 -0x1.62e43p+6 100000 -t sinhf 0x1.62e43p+6 0x1.65a9fap+6 100 -t sinhf -0x1.62e43p+6 -0x1.65a9fap+6 100 -t sinhf 0x1.65a9fap+6 inf 100 -t sinhf -0x1.65a9fap+6 -inf 100 - -t coshf 0 0x1p-63 100 -t coshf 0 0x1.5a92d8p+6 80000 -t coshf 0x1.5a92d8p+6 inf 2000 -t coshf -0 -0x1p-63 100 -t coshf -0 -0x1.5a92d8p+6 80000 -t coshf -0x1.5a92d8p+6 -inf 2000 - -t expm1 0 0x1p-51 1000 -t expm1 -0 -0x1p-51 1000 -t expm1 0x1p-51 0x1.63108c75a1937p+9 100000 -t expm1 -0x1p-51 -0x1.740bf7c0d927dp+9 100000 -t expm1 0x1.63108c75a1937p+9 inf 100 -t expm1 -0x1.740bf7c0d927dp+9 -inf 100 - -t sinh 0 0x1p-51 100 -t sinh -0 -0x1p-51 100 -t sinh 0x1p-51 0x1.62e42fefa39fp+9 100000 -t sinh -0x1p-51 -0x1.62e42fefa39fp+9 100000 -t sinh 0x1.62e42fefa39fp+9 inf 1000 -t sinh -0x1.62e42fefa39fp+9 -inf 1000 - -t cosh 0 0x1.61da04cbafe44p+9 100000 -t cosh -0 -0x1.61da04cbafe44p+9 100000 -t cosh 0x1.61da04cbafe44p+9 0x1p10 1000 -t cosh -0x1.61da04cbafe44p+9 -0x1p10 1000 -t cosh 0x1p10 inf 100 -t cosh -0x1p10 -inf 100 - -t atanhf 0 0x1p-12 500 -t atanhf 0x1p-12 1 200000 -t atanhf 1 inf 1000 -t atanhf -0 -0x1p-12 500 -t atanhf -0x1p-12 -1 200000 -t atanhf -1 -inf 1000 - -t cbrtf 0 inf 1000000 -t cbrtf -0 -inf 1000000 - -t tanhf 0 0x1p-23 1000 -t tanhf -0 -0x1p-23 1000 -t tanhf 0x1p-23 0x1.205966p+3 100000 -t tanhf -0x1p-23 -0x1.205966p+3 100000 -t tanhf 0x1.205966p+3 inf 100 -t tanhf -0x1.205966p+3 -inf 100 - # vector functions flags="${ULPFLAGS:--q}" runs= @@ -220,538 +65,10 @@ check -q -f -e 0 __sv_powi 0 inf x -0 -1000 100000 && runsv=1 check -q -f -e 0 __sv_powi -0 -inf x -0 -1000 100000 && runsv=1 fi -range_erfc=' - 0 0xffff0000 10000 - 0x1p-1022 0x1p-26 40000 - -0x1p-1022 -0x1p-26 40000 - 0x1p-26 0x1p5 40000 - -0x1p-26 -0x1p3 40000 - 0 inf 40000 -' - -range_erfcf=' - 0 0xffff0000 10000 - 0x1p-127 0x1p-26 40000 - -0x1p-127 -0x1p-26 40000 - 0x1p-26 0x1p5 40000 - -0x1p-26 -0x1p3 40000 - 0 inf 40000 -' - -range_log10=' - 0 0xffff000000000000 10000 - 0x1p-4 0x1p4 400000 - 0 inf 400000 -' - -range_log10f=' - 0 0xffff0000 10000 - 0x1p-4 0x1p4 500000 -' - -range_erf=' - 0 0xffff0000 10000 - 0x1p-127 0x1p-26 40000 --0x1p-127 -0x1p-26 40000 - 0x1p-26 0x1p3 40000 --0x1p-26 -0x1p3 40000 - 0 inf 40000 -' - -range_erff=' - 0 0xffff0000 10000 - 0x1p-127 0x1p-26 40000 --0x1p-127 -0x1p-26 40000 - 0x1p-26 0x1p3 40000 --0x1p-26 -0x1p3 40000 - 0 inf 40000 -' - -range_atan2=' - -10.0 10.0 50000 - -1.0 1.0 40000 - 0.0 1.0 40000 - 1.0 100.0 40000 - 1e6 1e32 40000 -' - -range_atan=' - -10.0 10.0 50000 - -1.0 1.0 40000 - 0.0 1.0 40000 - 1.0 100.0 40000 - 1e6 1e32 40000 -' - -range_atan2f=' - -10.0 10.0 50000 - -1.0 1.0 40000 - 0.0 1.0 40000 - 1.0 100.0 40000 - 1e6 1e32 40000 -' - -range_atanf=' - -10.0 10.0 50000 - -1.0 1.0 40000 - 0.0 1.0 40000 - 1.0 100.0 40000 - 1e6 1e32 40000 -' - -range_log1pf=' - -10.0 10.0 10000 - 0.0 0x1p-23 30000 - 0x1p-23 0.001 50000 - 0.001 1.0 50000 - 0.0 -0x1p-23 30000 - -0x1p-23 -0.001 30000 - -0.001 -1.0 50000 - -1.0 inf 1000 -' - -range_asinhf=' - 0 0x1p-12 40000 - 0x1p-12 1.0 40000 - 1.0 0x1p11 40000 - 0x1p11 inf 40000 - 0 -0x1p-12 20000 - -0x1p-12 -1.0 20000 - -1.0 -0x1p11 20000 - -0x1p11 -inf 20000 -' - -range_log2f=' - -0.0 -0x1p126 100 - 0x1p-149 0x1p-126 4000 - 0x1p-126 0x1p-23 50000 - 0x1p-23 1.0 50000 - 1.0 100 50000 - 100 inf 50000 -' - -range_log2=' - -0.0 -0x1p126 100 - 0x1p-149 0x1p-126 4000 - 0x1p-126 0x1p-23 50000 - 0x1p-23 1.0 50000 - 1.0 100 50000 - 100 inf 50000 -' - -range_tanf=' - -0.0 -0x1p126 100 - 0x1p-149 0x1p-126 4000 - 0x1p-126 0x1p-23 50000 - 0x1p-23 0.7 50000 - 0.7 1.5 50000 - 1.5 100 50000 - 100 0x1p17 50000 - 0x1p17 inf 50000 -' - -range_log1p=' - -10.0 10.0 10000 - 0.0 0x1p-23 50000 - 0x1p-23 0.001 50000 - 0.001 1.0 50000 - 0.0 -0x1p-23 50000 - -0x1p-23 -0.001 50000 - -0.001 -1.0 50000 - -1.0 inf 5000 -' - -range_expm1f=' - 0 0x1p-23 1000 - -0 -0x1p-23 1000 - 0x1p-23 0x1.644716p6 1000000 - -0x1p-23 -0x1.9bbabcp+6 1000000 -' - -range_sinhf=' - 0 0x1.62e43p+6 100000 - -0 -0x1.62e43p+6 100000 - 0x1.62e43p+6 0x1.65a9fap+6 100 - -0x1.62e43p+6 -0x1.65a9fap+6 100 - 0x1.65a9fap+6 inf 100 - -0x1.65a9fap+6 -inf 100 -' - -range_coshf=' - 0 0x1p-63 100 - 0 0x1.5a92d8p+6 80000 - 0x1.5a92d8p+6 inf 2000 - -0 -0x1p-63 100 - -0 -0x1.5a92d8p+6 80000 - -0x1.5a92d8p+6 -inf 2000 -' - -range_expm1=' - 0 0x1p-51 1000 - -0 -0x1p-51 1000 - 0x1p-51 0x1.63108c75a1937p+9 100000 - -0x1p-51 -0x1.740bf7c0d927dp+9 100000 - 0x1.63108c75a1937p+9 inf 100 - -0x1.740bf7c0d927dp+9 -inf 100 -' - -range_sinh=' - 0 0x1p-51 100 - -0 -0x1p-51 100 - 0x1p-51 0x1.62e42fefa39fp+9 100000 - -0x1p-51 -0x1.62e42fefa39fp+9 100000 - 0x1.62e42fefa39fp+9 inf 1000 - -0x1.62e42fefa39fp+9 -inf 1000 -' - -range_cosh=' - 0 0x1.6p9 100000 - -0 -0x1.6p9 100000 - 0x1.6p9 inf 1000 - -0x1.6p9 -inf 1000 -' - -range_atanhf=' - 0 0x1p-12 500 - 0x1p-12 1 200000 - 1 inf 1000 - -0 -0x1p-12 500 - -0x1p-12 -1 200000 - -1 -inf 1000 -' - -range_cbrtf=' - 0 inf 1000000 - -0 -inf 1000000 -' - -range_asinh=' - 0 0x1p-26 50000 - 0x1p-26 1 50000 - 1 0x1p511 50000 - 0x1p511 inf 40000 - -0 -0x1p-26 50000 - -0x1p-26 -1 50000 - -1 -0x1p511 50000 - -0x1p511 -inf 40000 -' - -range_tanhf=' - 0 0x1p-23 1000 - -0 -0x1p-23 1000 - 0x1p-23 0x1.205966p+3 100000 - -0x1p-23 -0x1.205966p+3 100000 - 0x1.205966p+3 inf 100 - -0x1.205966p+3 -inf 100 -' - -range_sve_cosf=' - 0 0xffff0000 10000 - 0x1p-4 0x1p4 500000 -' - -range_sve_cos=' - 0 0xffff0000 10000 - 0x1p-4 0x1p4 500000 -' - -range_sve_sinf=' - 0 0xffff0000 10000 - 0x1p-4 0x1p4 500000 -' - -range_sve_sin=' - 0 0xffff0000 10000 - 0x1p-4 0x1p4 500000 -' - -range_sve_atanf=' - -10.0 10.0 50000 - -1.0 1.0 40000 - 0.0 1.0 40000 - 1.0 100.0 40000 - 1e6 1e32 40000 -' - -range_sve_atan=' - -10.0 10.0 50000 - -1.0 1.0 40000 - 0.0 1.0 40000 - 1.0 100.0 40000 - 1e6 1e32 40000 -' - -range_sve_atan2f=' - -10.0 10.0 50000 - -1.0 1.0 40000 - 0.0 1.0 40000 - 1.0 100.0 40000 - 1e6 1e32 40000 -' - -range_sve_atan2=' - -10.0 10.0 50000 - -1.0 1.0 40000 - 0.0 1.0 40000 - 1.0 100.0 40000 - 1e6 1e32 40000 -' - -range_sve_log10=' - -0.0 -0x1p126 100 - 0x1p-149 0x1p-126 4000 - 0x1p-126 0x1p-23 50000 - 0x1p-23 1.0 50000 - 1.0 100 50000 - 100 inf 50000 -' - -range_sve_log10f=' - -0.0 -0x1p126 100 - 0x1p-149 0x1p-126 4000 - 0x1p-126 0x1p-23 50000 - 0x1p-23 1.0 50000 - 1.0 100 50000 - 100 inf 50000 -' - -range_sve_logf=' - -0.0 -0x1p126 100 - 0x1p-149 0x1p-126 4000 - 0x1p-126 0x1p-23 50000 - 0x1p-23 1.0 50000 - 1.0 100 50000 - 100 inf 50000 -' - -range_sve_log=' - -0.0 -0x1p126 100 - 0x1p-149 0x1p-126 4000 - 0x1p-126 0x1p-23 50000 - 0x1p-23 1.0 50000 - 1.0 100 50000 - 100 inf 50000 -' - -range_sve_expf=' - 0 0x1p-23 40000 - 0x1p-23 1 50000 - 1 0x1p23 50000 - 0x1p23 inf 50000 - -0 -0x1p-23 40000 - -0x1p-23 -1 50000 - -1 -0x1p23 50000 - -0x1p23 -inf 50000 -' - -range_sve_erff=' - 0 0x1p-28 20000 - 0x1p-28 1 60000 - 1 0x1p28 60000 - 0x1p28 inf 20000 - -0 -0x1p-28 20000 - -0x1p-28 -1 60000 - -1 -0x1p28 60000 - -0x1p28 -inf 20000 -' - -range_sve_erf=' - 0 0x1p-28 20000 - 0x1p-28 1 60000 - 1 0x1p28 60000 - 0x1p28 inf 20000 - -0 -0x1p-28 20000 - -0x1p-28 -1 60000 - -1 -0x1p28 60000 - -0x1p28 -inf 20000 -' - -range_sve_tanf=' - -0.0 -0x1p126 100 - 0x1p-149 0x1p-126 4000 - 0x1p-126 0x1p-23 50000 - 0x1p-23 0.7 50000 - 0.7 1.5 50000 - 1.5 100 50000 - 100 0x1p17 50000 - 0x1p17 inf 50000 -' - -range_sve_erfc=' - 0 0xffff0000 10000 - 0x1p-127 0x1p-26 40000 - -0x1p-127 -0x1p-26 40000 - 0x1p-26 0x1p5 40000 - -0x1p-26 -0x1p3 40000 - 0 inf 40000 -' - -while read G F R A +cat $INTERVALS | while read F LO HI N C do - [ "$R" = 1 ] && { [[ $G != sve_* ]] || [ $WANT_SVE_MATH -eq 1 ]; } || continue - case "$G" in \#*) continue ;; esac - eval range="\${range_$G}" - while read X - do - [ -n "$X" ] || continue - case "$X" in \#*) continue ;; esac - t $F $X "$A" - done << EOF -$range -EOF -done << EOF -# group symbol run - -atan __s_atan $runs -atan __v_atan $runv -atan __vn_atan $runvn -atan _ZGVnN2v_atan $runvn -atan2 __s_atan2 $runs -atan2 __v_atan2 $runv -atan2 __vn_atan2 $runvn -atan2 _ZGVnN2vv_atan2 $runvn -erf __s_erf $runs -erf __v_erf $runv -erf __vn_erf $runvn -erf _ZGVnN2v_erf $runvn -erfc __s_erfc $runs -erfc __v_erfc $runv -erfc __vn_erfc $runvn -erfc _ZGVnN2v_erfc $runvn -log10 __s_log10 $runs -log10 __v_log10 $runv -log10 __vn_log10 $runvn -log10 _ZGVnN2v_log10 $runvn -log2 __s_log2 $runs -log2 __v_log2 $runv -log2 __vn_log2 $runvn -log2 _ZGVnN2v_log2 $runvn -expm1 __s_expm1 $runs -expm1 __v_expm1 $runv -expm1 __vn_expm1 $runvn -expm1 _ZGVnN2v_expm1 $runvn -sinh __s_sinh $runs -sinh __v_sinh $runv -sinh __vn_sinh $runvn -sinh _ZGVnN2v_sinh $runvn -cosh __s_cosh $runs -cosh __v_cosh $runv -cosh __vn_cosh $runvn -cosh _ZGVnN2v_cosh $runvn - -atanf __s_atanf $runs -atanf __v_atanf $runv -atanf __vn_atanf $runvn -atanf _ZGVnN4v_atanf $runvn -atan2f __s_atan2f $runs -atan2f __v_atan2f $runv -atan2f __vn_atan2f $runvn -atan2f _ZGVnN4vv_atan2f $runvn -erff __s_erff $runs -erff __v_erff $runv -erff __vn_erff $runvn -erff _ZGVnN4v_erff $runvn -erfcf __s_erfcf $runs -erfcf __v_erfcf $runv -erfcf __vn_erfcf $runvn -erfcf _ZGVnN4v_erfcf $runvn -log10f __s_log10f $runs -log10f __v_log10f $runv -log10f __vn_log10f $runvn -log10f _ZGVnN4v_log10f $runvn -log1pf __s_log1pf $runs -log1pf __v_log1pf $runv -log1pf __vn_log1pf $runvn -log1pf _ZGVnN4v_log1pf $runvn -asinhf __s_asinhf $runs -asinhf __v_asinhf $runv -asinhf __vn_asinhf $runvn -asinhf _ZGVnN4v_asinhf $runvn -log2f __s_log2f $runs -log2f __v_log2f $runv -log2f __vn_log2f $runvn -log2f _ZGVnN4v_log2f $runvn -tanf __s_tanf $runs -tanf __v_tanf $runv -tanf __vn_tanf $runvn -tanf _ZGVnN4v_tanf $runvn -log1p __s_log1p $runs -log1p __v_log1p $runv -log1p __vn_log1p $runvn -log1p _ZGVnN2v_log1p $runvn -expm1f __s_expm1f $runs -expm1f __v_expm1f $runv -expm1f __vn_expm1f $runvn -expm1f _ZGVnN4v_expm1f $runvn -sinhf __s_sinhf $runs -sinhf __v_sinhf $runv -sinhf __vn_sinhf $runvn -sinhf _ZGVnN4v_sinhf $runvn -coshf __s_coshf $runs -coshf __v_coshf $runv -coshf __vn_coshf $runvn -coshf _ZGVnN4v_coshf $runvn -atanhf __s_atanhf $runs -c 0 -atanhf __v_atanhf $runv -c 0 -atanhf __vn_atanhf $runvn -c 0 -atanhf _ZGVnN4v_atanhf $runvn -c 0 -cbrtf __s_cbrtf $runs -cbrtf __v_cbrtf $runv -cbrtf __vn_cbrtf $runvn -cbrtf _ZGVnN4v_cbrtf $runvn -asinh __s_asinh $runs -# Test vector asinh 3 times, with control lane < 1, > 1 and special. -# Ensures the v_sel is choosing the right option in all cases. -asinh __v_asinh $runv -c 0.5 -asinh __vn_asinh $runvn -c 0.5 -asinh _ZGVnN2v_asinh $runvn -c 0.5 -asinh __v_asinh $runv -c 2 -asinh __vn_asinh $runvn -c 2 -asinh _ZGVnN2v_asinh $runvn -c 2 -asinh __v_asinh $runv -c 0x1p600 -asinh __vn_asinh $runvn -c 0x1p600 -asinh _ZGVnN2v_asinh $runvn -c 0x1p600 -tanhf __s_tanhf $runs -tanhf __v_tanhf $runv -tanhf __vn_tanhf $runvn -tanhf _ZGVnN4v_tanhf $runvn - -sve_cosf __sv_cosf $runsv -sve_cosf _ZGVsMxv_cosf $runsv -sve_sinf __sv_sinf $runsv -sve_sinf _ZGVsMxv_sinf $runsv -sve_atan2f __sv_atan2f $runsv -sve_atan2f _ZGVsMxvv_atan2f $runsv -sve_atanf __sv_atanf $runsv -sve_atanf _ZGVsMxv_atanf $runsv -sve_log10f __sv_log10f $runsv -sve_log10f _ZGVsMxv_log10f $runsv -sve_logf __sv_logf $runsv -sve_logf _ZGVsMxv_logf $runsv -sve_expf __sv_expf $runsv -sve_expf _ZGVsMxv_expf $runsv -sve_erff __sv_erff $runsv -sve_erff _ZGVsMxv_erff $runsv -sve_tanf __sv_tanf $runsv -sve_tanf _ZGVsMxv_tanf $runsv - -sve_cos __sv_cos $runsv -sve_cos _ZGVsMxv_cos $runsv -sve_sin __sv_sin $runsv -sve_sin _ZGVsMxv_sin $runsv -sve_atan __sv_atan $runsv -sve_atan _ZGVsMxv_atan $runsv -sve_atan2 __sv_atan2 $runsv -sve_atan2 _ZGVsMxvv_atan2 $runsv -sve_log10 __sv_log10 $runsv -sve_log10 _ZGVsMxv_log10 $runsv -sve_log __sv_log $runsv -sve_log _ZGVsMxv_log $runsv -sve_erf __sv_erf $runsv -sve_erf _ZGVsMxv_erf $runsv -sve_erfc __sv_erfc $runsv -sve_erfc _ZGVsMxv_erfc $runsv -EOF + t $F $LO $HI $N $C +done [ 0 -eq $FAIL ] || { echo "FAILED $FAIL PASSED $PASS" diff --git a/pl/math/v_asinh_2u5.c b/pl/math/v_asinh_2u5.c index 23171a1..4eeec4a 100644 --- a/pl/math/v_asinh_2u5.c +++ b/pl/math/v_asinh_2u5.c @@ -157,4 +157,18 @@ VPCS_ALIAS PL_SIG (V, D, 1, asinh, -10.0, 10.0) PL_TEST_ULP (V_NAME (asinh), 1.54) PL_TEST_EXPECT_FENV (V_NAME (asinh), WANT_ERRNO) +/* Test vector asinh 3 times, with control lane < 1, > 1 and special. + Ensures the v_sel is choosing the right option in all cases. */ +#define V_ASINH_INTERVAL(lo, hi, n) \ + PL_TEST_INTERVAL_C (V_NAME (asinh), lo, hi, n, 0.5) \ + PL_TEST_INTERVAL_C (V_NAME (asinh), lo, hi, n, 2) \ + PL_TEST_INTERVAL_C (V_NAME (asinh), lo, hi, n, 0x1p600) +V_ASINH_INTERVAL (0, 0x1p-26, 50000) +V_ASINH_INTERVAL (0x1p-26, 1, 50000) +V_ASINH_INTERVAL (1, 0x1p511, 50000) +V_ASINH_INTERVAL (0x1p511, inf, 40000) +V_ASINH_INTERVAL (-0, -0x1p-26, 50000) +V_ASINH_INTERVAL (-0x1p-26, -1, 50000) +V_ASINH_INTERVAL (-1, -0x1p511, 50000) +V_ASINH_INTERVAL (-0x1p511, -inf, 40000) #endif diff --git a/pl/math/v_asinhf_2u7.c b/pl/math/v_asinhf_2u7.c index 32fe773..79bf80f 100644 --- a/pl/math/v_asinhf_2u7.c +++ b/pl/math/v_asinhf_2u7.c @@ -58,4 +58,12 @@ VPCS_ALIAS PL_SIG (V, F, 1, asinh, -10.0, 10.0) PL_TEST_ULP (V_NAME (asinhf), 2.17) PL_TEST_EXPECT_FENV (V_NAME (asinhf), WANT_ERRNO) +PL_TEST_INTERVAL (V_NAME (asinhf), 0, 0x1p-12, 40000) +PL_TEST_INTERVAL (V_NAME (asinhf), 0x1p-12, 1.0, 40000) +PL_TEST_INTERVAL (V_NAME (asinhf), 1.0, 0x1p11, 40000) +PL_TEST_INTERVAL (V_NAME (asinhf), 0x1p11, inf, 40000) +PL_TEST_INTERVAL (V_NAME (asinhf), 0, -0x1p-12, 20000) +PL_TEST_INTERVAL (V_NAME (asinhf), -0x1p-12, -1.0, 20000) +PL_TEST_INTERVAL (V_NAME (asinhf), -1.0, -0x1p11, 20000) +PL_TEST_INTERVAL (V_NAME (asinhf), -0x1p11, -inf, 20000) #endif diff --git a/pl/math/v_atan2_3u.c b/pl/math/v_atan2_3u.c index 27af80d..b123cfa 100644 --- a/pl/math/v_atan2_3u.c +++ b/pl/math/v_atan2_3u.c @@ -82,4 +82,9 @@ VPCS_ALIAS PL_SIG (V, D, 2, atan2) // TODO tighten this once __v_atan2 is fixed PL_TEST_ULP (V_NAME (atan2), 2.9) +PL_TEST_INTERVAL (V_NAME (atan2), -10.0, 10.0, 50000) +PL_TEST_INTERVAL (V_NAME (atan2), -1.0, 1.0, 40000) +PL_TEST_INTERVAL (V_NAME (atan2), 0.0, 1.0, 40000) +PL_TEST_INTERVAL (V_NAME (atan2), 1.0, 100.0, 40000) +PL_TEST_INTERVAL (V_NAME (atan2), 1e6, 1e32, 40000) #endif diff --git a/pl/math/v_atan2f_3u.c b/pl/math/v_atan2f_3u.c index 3d8f9fc..abf8f5e 100644 --- a/pl/math/v_atan2f_3u.c +++ b/pl/math/v_atan2f_3u.c @@ -81,4 +81,9 @@ VPCS_ALIAS /* Arity of 2 means no mathbench entry emitted. See test/mathbench_funcs.h. */ PL_SIG (V, F, 2, atan2) PL_TEST_ULP (V_NAME (atan2f), 2.46) +PL_TEST_INTERVAL (V_NAME (atan2f), -10.0, 10.0, 50000) +PL_TEST_INTERVAL (V_NAME (atan2f), -1.0, 1.0, 40000) +PL_TEST_INTERVAL (V_NAME (atan2f), 0.0, 1.0, 40000) +PL_TEST_INTERVAL (V_NAME (atan2f), 1.0, 100.0, 40000) +PL_TEST_INTERVAL (V_NAME (atan2f), 1e6, 1e32, 40000) #endif diff --git a/pl/math/v_atan_2u5.c b/pl/math/v_atan_2u5.c index de39fa7..43b4abd 100644 --- a/pl/math/v_atan_2u5.c +++ b/pl/math/v_atan_2u5.c @@ -53,4 +53,9 @@ VPCS_ALIAS PL_SIG (V, D, 1, atan, -10.0, 10.0) PL_TEST_ULP (V_NAME (atan), 1.78) +PL_TEST_INTERVAL (V_NAME (atan), -10.0, 10.0, 50000) +PL_TEST_INTERVAL (V_NAME (atan), -1.0, 1.0, 40000) +PL_TEST_INTERVAL (V_NAME (atan), 0.0, 1.0, 40000) +PL_TEST_INTERVAL (V_NAME (atan), 1.0, 100.0, 40000) +PL_TEST_INTERVAL (V_NAME (atan), 1e6, 1e32, 40000) #endif diff --git a/pl/math/v_atanf_3u.c b/pl/math/v_atanf_3u.c index 8014d65..3cb51b1 100644 --- a/pl/math/v_atanf_3u.c +++ b/pl/math/v_atanf_3u.c @@ -52,4 +52,9 @@ VPCS_ALIAS PL_SIG (V, F, 1, atan, -10.0, 10.0) PL_TEST_ULP (V_NAME (atanf), 2.5) +PL_TEST_INTERVAL (V_NAME (atanf), -10.0, 10.0, 50000) +PL_TEST_INTERVAL (V_NAME (atanf), -1.0, 1.0, 40000) +PL_TEST_INTERVAL (V_NAME (atanf), 0.0, 1.0, 40000) +PL_TEST_INTERVAL (V_NAME (atanf), 1.0, 100.0, 40000) +PL_TEST_INTERVAL (V_NAME (atanf), 1e6, 1e32, 40000) #endif diff --git a/pl/math/v_atanhf_3u1.c b/pl/math/v_atanhf_3u1.c index 4cff1fc..68dbdf6 100644 --- a/pl/math/v_atanhf_3u1.c +++ b/pl/math/v_atanhf_3u1.c @@ -52,4 +52,10 @@ VPCS_ALIAS PL_SIG (V, F, 1, atanh, -1.0, 1.0) PL_TEST_ULP (V_NAME (atanhf), 2.59) PL_TEST_EXPECT_FENV (V_NAME (atanhf), WANT_ERRNO) +PL_TEST_INTERVAL_C (V_NAME (atanhf), 0, 0x1p-12, 500, 0) +PL_TEST_INTERVAL_C (V_NAME (atanhf), 0x1p-12, 1, 200000, 0) +PL_TEST_INTERVAL_C (V_NAME (atanhf), 1, inf, 1000, 0) +PL_TEST_INTERVAL_C (V_NAME (atanhf), -0, -0x1p-12, 500, 0) +PL_TEST_INTERVAL_C (V_NAME (atanhf), -0x1p-12, -1, 200000, 0) +PL_TEST_INTERVAL_C (V_NAME (atanhf), -1, -inf, 1000, 0) #endif diff --git a/pl/math/v_cbrtf_1u5.c b/pl/math/v_cbrtf_1u5.c index 756a468..cffc488 100644 --- a/pl/math/v_cbrtf_1u5.c +++ b/pl/math/v_cbrtf_1u5.c @@ -90,4 +90,6 @@ VPCS_ALIAS PL_SIG (V, F, 1, cbrt, -10.0, 10.0) PL_TEST_ULP (V_NAME (cbrtf), 1.03) PL_TEST_EXPECT_FENV (V_NAME (cbrtf), WANT_ERRNO) +PL_TEST_INTERVAL (V_NAME (cbrtf), 0, inf, 1000000) +PL_TEST_INTERVAL (V_NAME (cbrtf), -0, -inf, 1000000) #endif diff --git a/pl/math/v_cosh_2u.c b/pl/math/v_cosh_2u.c index 63f877e..20d5b38 100644 --- a/pl/math/v_cosh_2u.c +++ b/pl/math/v_cosh_2u.c @@ -88,4 +88,8 @@ VPCS_ALIAS PL_SIG (V, D, 1, cosh, -10.0, 10.0) PL_TEST_ULP (V_NAME (cosh), 1.43) PL_TEST_EXPECT_FENV (V_NAME (cosh), WANT_ERRNO) +PL_TEST_INTERVAL (V_NAME (cosh), 0, 0x1.6p9, 100000) +PL_TEST_INTERVAL (V_NAME (cosh), -0, -0x1.6p9, 100000) +PL_TEST_INTERVAL (V_NAME (cosh), 0x1.6p9, inf, 1000) +PL_TEST_INTERVAL (V_NAME (cosh), -0x1.6p9, -inf, 1000) #endif diff --git a/pl/math/v_coshf_2u4.c b/pl/math/v_coshf_2u4.c index f101681..6ea6eb3 100644 --- a/pl/math/v_coshf_2u4.c +++ b/pl/math/v_coshf_2u4.c @@ -64,4 +64,10 @@ VPCS_ALIAS PL_SIG (V, F, 1, cosh, -10.0, 10.0) PL_TEST_ULP (V_NAME (coshf), 1.89) PL_TEST_EXPECT_FENV (V_NAME (coshf), WANT_ERRNO) +PL_TEST_INTERVAL (V_NAME (coshf), 0, 0x1p-63, 100) +PL_TEST_INTERVAL (V_NAME (coshf), 0, 0x1.5a92d8p+6, 80000) +PL_TEST_INTERVAL (V_NAME (coshf), 0x1.5a92d8p+6, inf, 2000) +PL_TEST_INTERVAL (V_NAME (coshf), -0, -0x1p-63, 100) +PL_TEST_INTERVAL (V_NAME (coshf), -0, -0x1.5a92d8p+6, 80000) +PL_TEST_INTERVAL (V_NAME (coshf), -0x1.5a92d8p+6, -inf, 2000) #endif diff --git a/pl/math/v_erf_2u.c b/pl/math/v_erf_2u.c index e33d405..caec4d8 100644 --- a/pl/math/v_erf_2u.c +++ b/pl/math/v_erf_2u.c @@ -107,4 +107,10 @@ VPCS_ALIAS PL_SIG (V, D, 1, erf, -6.0, 6.0) PL_TEST_ULP (V_NAME (erf), 1.26) +PL_TEST_INTERVAL (V_NAME (erf), 0, 0xffff0000, 10000) +PL_TEST_INTERVAL (V_NAME (erf), 0x1p-127, 0x1p-26, 40000) +PL_TEST_INTERVAL (V_NAME (erf), -0x1p-127, -0x1p-26, 40000) +PL_TEST_INTERVAL (V_NAME (erf), 0x1p-26, 0x1p3, 40000) +PL_TEST_INTERVAL (V_NAME (erf), -0x1p-26, -0x1p3, 40000) +PL_TEST_INTERVAL (V_NAME (erf), 0, inf, 40000) #endif diff --git a/pl/math/v_erfc_4u.c b/pl/math/v_erfc_4u.c index 9b08ead..9247f87 100644 --- a/pl/math/v_erfc_4u.c +++ b/pl/math/v_erfc_4u.c @@ -159,4 +159,10 @@ VPCS_ALIAS PL_SIG (V, D, 1, erfc, -6.0, 28.0) PL_TEST_ULP (V_NAME (erfc), 3.15) +PL_TEST_INTERVAL (V_NAME (erfc), 0, 0xffff0000, 10000) +PL_TEST_INTERVAL (V_NAME (erfc), 0x1p-1022, 0x1p-26, 40000) +PL_TEST_INTERVAL (V_NAME (erfc), -0x1p-1022, -0x1p-26, 40000) +PL_TEST_INTERVAL (V_NAME (erfc), 0x1p-26, 0x1p5, 40000) +PL_TEST_INTERVAL (V_NAME (erfc), -0x1p-26, -0x1p3, 40000) +PL_TEST_INTERVAL (V_NAME (erfc), 0, inf, 40000) #endif diff --git a/pl/math/v_erfcf_1u.c b/pl/math/v_erfcf_1u.c index e39801e..4b495d0 100644 --- a/pl/math/v_erfcf_1u.c +++ b/pl/math/v_erfcf_1u.c @@ -174,4 +174,10 @@ VPCS_ALIAS PL_SIG (V, F, 1, erfc, -6.0, 28.0) PL_TEST_ULP (V_NAME (erfcf), 0.26) +PL_TEST_INTERVAL (V_NAME (erfcf), 0, 0xffff0000, 10000) +PL_TEST_INTERVAL (V_NAME (erfcf), 0x1p-127, 0x1p-26, 40000) +PL_TEST_INTERVAL (V_NAME (erfcf), -0x1p-127, -0x1p-26, 40000) +PL_TEST_INTERVAL (V_NAME (erfcf), 0x1p-26, 0x1p5, 40000) +PL_TEST_INTERVAL (V_NAME (erfcf), -0x1p-26, -0x1p3, 40000) +PL_TEST_INTERVAL (V_NAME (erfcf), 0, inf, 40000) #endif diff --git a/pl/math/v_erff_1u5.c b/pl/math/v_erff_1u5.c index 52f063c..bb9b786 100644 --- a/pl/math/v_erff_1u5.c +++ b/pl/math/v_erff_1u5.c @@ -107,4 +107,10 @@ VPCS_ALIAS PL_SIG (V, F, 1, erf, -4.0, 4.0) PL_TEST_ULP (V_NAME (erff), 0.76) +PL_TEST_INTERVAL (V_NAME (erff), 0, 0xffff0000, 10000) +PL_TEST_INTERVAL (V_NAME (erff), 0x1p-127, 0x1p-26, 40000) +PL_TEST_INTERVAL (V_NAME (erff), -0x1p-127, -0x1p-26, 40000) +PL_TEST_INTERVAL (V_NAME (erff), 0x1p-26, 0x1p3, 40000) +PL_TEST_INTERVAL (V_NAME (erff), -0x1p-26, -0x1p3, 40000) +PL_TEST_INTERVAL (V_NAME (erff), 0, inf, 40000) #endif diff --git a/pl/math/v_expm1_2u5.c b/pl/math/v_expm1_2u5.c index 216bdbc..3f63760 100644 --- a/pl/math/v_expm1_2u5.c +++ b/pl/math/v_expm1_2u5.c @@ -104,4 +104,10 @@ VPCS_ALIAS PL_SIG (V, D, 1, expm1, -9.9, 9.9) PL_TEST_ULP (V_NAME (expm1), 1.68) PL_TEST_EXPECT_FENV (V_NAME (expm1), WANT_ERRNO) +PL_TEST_INTERVAL (V_NAME (expm1), 0, 0x1p-51, 1000) +PL_TEST_INTERVAL (V_NAME (expm1), -0, -0x1p-51, 1000) +PL_TEST_INTERVAL (V_NAME (expm1), 0x1p-51, 0x1.63108c75a1937p+9, 100000) +PL_TEST_INTERVAL (V_NAME (expm1), -0x1p-51, -0x1.740bf7c0d927dp+9, 100000) +PL_TEST_INTERVAL (V_NAME (expm1), 0x1.63108c75a1937p+9, inf, 100) +PL_TEST_INTERVAL (V_NAME (expm1), -0x1.740bf7c0d927dp+9, -inf, 100) #endif diff --git a/pl/math/v_expm1f_1u6.c b/pl/math/v_expm1f_1u6.c index 6e47fac..9977b8e 100644 --- a/pl/math/v_expm1f_1u6.c +++ b/pl/math/v_expm1f_1u6.c @@ -87,4 +87,8 @@ VPCS_ALIAS PL_SIG (V, F, 1, expm1, -9.9, 9.9) PL_TEST_ULP (V_NAME (expm1f), 1.02) PL_TEST_EXPECT_FENV (V_NAME (expm1f), WANT_ERRNO) +PL_TEST_INTERVAL (V_NAME (expm1f), 0, 0x1p-23, 1000) +PL_TEST_INTERVAL (V_NAME (expm1f), -0, -0x1p-23, 1000) +PL_TEST_INTERVAL (V_NAME (expm1f), 0x1p-23, 0x1.644716p6, 1000000) +PL_TEST_INTERVAL (V_NAME (expm1f), -0x1p-23, -0x1.9bbabcp+6, 1000000) #endif diff --git a/pl/math/v_log10_2u5.c b/pl/math/v_log10_2u5.c index 014accc..6fb7447 100644 --- a/pl/math/v_log10_2u5.c +++ b/pl/math/v_log10_2u5.c @@ -103,4 +103,7 @@ VPCS_ALIAS PL_SIG (V, D, 1, log10, 0.01, 11.1) PL_TEST_ULP (V_NAME (log10), 1.97) +PL_TEST_INTERVAL (V_NAME (log10), 0, 0xffff000000000000, 10000) +PL_TEST_INTERVAL (V_NAME (log10), 0x1p-4, 0x1p4, 400000) +PL_TEST_INTERVAL (V_NAME (log10), 0, inf, 400000) #endif diff --git a/pl/math/v_log10f_3u5.c b/pl/math/v_log10f_3u5.c index f25da91..4c22540 100644 --- a/pl/math/v_log10f_3u5.c +++ b/pl/math/v_log10f_3u5.c @@ -76,4 +76,6 @@ VPCS_ALIAS PL_SIG (V, F, 1, log10, 0.01, 11.1) PL_TEST_ULP (V_NAME (log10f), 2.81) +PL_TEST_INTERVAL (V_NAME (log10f), 0, 0xffff0000, 10000) +PL_TEST_INTERVAL (V_NAME (log10f), 0x1p-4, 0x1p4, 500000) #endif diff --git a/pl/math/v_log1p_2u5.c b/pl/math/v_log1p_2u5.c index 7a8c6bf..ccde382 100644 --- a/pl/math/v_log1p_2u5.c +++ b/pl/math/v_log1p_2u5.c @@ -108,4 +108,12 @@ VPCS_ALIAS PL_SIG (V, D, 1, log1p, -0.9, 10.0) PL_TEST_ULP (V_NAME (log1p), 1.97) PL_TEST_EXPECT_FENV (V_NAME (log1p), WANT_ERRNO) +PL_TEST_INTERVAL (V_NAME (log1p), -10.0, 10.0, 10000) +PL_TEST_INTERVAL (V_NAME (log1p), 0.0, 0x1p-23, 50000) +PL_TEST_INTERVAL (V_NAME (log1p), 0x1p-23, 0.001, 50000) +PL_TEST_INTERVAL (V_NAME (log1p), 0.001, 1.0, 50000) +PL_TEST_INTERVAL (V_NAME (log1p), 0.0, -0x1p-23, 50000) +PL_TEST_INTERVAL (V_NAME (log1p), -0x1p-23, -0.001, 50000) +PL_TEST_INTERVAL (V_NAME (log1p), -0.001, -1.0, 50000) +PL_TEST_INTERVAL (V_NAME (log1p), -1.0, inf, 5000) #endif diff --git a/pl/math/v_log1pf_2u1.c b/pl/math/v_log1pf_2u1.c index f351ecd..96ac02d 100644 --- a/pl/math/v_log1pf_2u1.c +++ b/pl/math/v_log1pf_2u1.c @@ -148,4 +148,12 @@ VPCS_ALIAS PL_SIG (V, F, 1, log1p, -0.9, 10.0) PL_TEST_ULP (V_NAME (log1pf), 1.53) PL_TEST_EXPECT_FENV (V_NAME (log1pf), WANT_ERRNO) +PL_TEST_INTERVAL (V_NAME (log1pf), -10.0, 10.0, 10000) +PL_TEST_INTERVAL (V_NAME (log1pf), 0.0, 0x1p-23, 30000) +PL_TEST_INTERVAL (V_NAME (log1pf), 0x1p-23, 0.001, 50000) +PL_TEST_INTERVAL (V_NAME (log1pf), 0.001, 1.0, 50000) +PL_TEST_INTERVAL (V_NAME (log1pf), 0.0, -0x1p-23, 30000) +PL_TEST_INTERVAL (V_NAME (log1pf), -0x1p-23, -0.001, 30000) +PL_TEST_INTERVAL (V_NAME (log1pf), -0.001, -1.0, 50000) +PL_TEST_INTERVAL (V_NAME (log1pf), -1.0, inf, 1000) #endif diff --git a/pl/math/v_log2_3u.c b/pl/math/v_log2_3u.c index 3bdfd2e..7dca684 100644 --- a/pl/math/v_log2_3u.c +++ b/pl/math/v_log2_3u.c @@ -90,4 +90,10 @@ VPCS_ALIAS PL_SIG (V, D, 1, log2, 0.01, 11.1) PL_TEST_ULP (V_NAME (log2), 2.10) +PL_TEST_INTERVAL (V_NAME (log2), -0.0, -0x1p126, 100) +PL_TEST_INTERVAL (V_NAME (log2), 0x1p-149, 0x1p-126, 4000) +PL_TEST_INTERVAL (V_NAME (log2), 0x1p-126, 0x1p-23, 50000) +PL_TEST_INTERVAL (V_NAME (log2), 0x1p-23, 1.0, 50000) +PL_TEST_INTERVAL (V_NAME (log2), 1.0, 100, 50000) +PL_TEST_INTERVAL (V_NAME (log2), 100, inf, 50000) #endif diff --git a/pl/math/v_log2f_2u6.c b/pl/math/v_log2f_2u6.c index a3c9aac..aa011cd 100644 --- a/pl/math/v_log2f_2u6.c +++ b/pl/math/v_log2f_2u6.c @@ -123,4 +123,10 @@ VPCS_ALIAS PL_SIG (V, F, 1, log2, 0.01, 11.1) PL_TEST_ULP (V_NAME (log2f), 2.10) PL_TEST_EXPECT_FENV (V_NAME (log2f), WANT_ERRNO) +PL_TEST_INTERVAL (V_NAME (log2f), -0.0, -0x1p126, 100) +PL_TEST_INTERVAL (V_NAME (log2f), 0x1p-149, 0x1p-126, 4000) +PL_TEST_INTERVAL (V_NAME (log2f), 0x1p-126, 0x1p-23, 50000) +PL_TEST_INTERVAL (V_NAME (log2f), 0x1p-23, 1.0, 50000) +PL_TEST_INTERVAL (V_NAME (log2f), 1.0, 100, 50000) +PL_TEST_INTERVAL (V_NAME (log2f), 100, inf, 50000) #endif diff --git a/pl/math/v_sinh_3u.c b/pl/math/v_sinh_3u.c index bab8896..019cf84 100644 --- a/pl/math/v_sinh_3u.c +++ b/pl/math/v_sinh_3u.c @@ -47,4 +47,10 @@ VPCS_ALIAS PL_SIG (V, D, 1, sinh, -10.0, 10.0) PL_TEST_ULP (V_NAME (sinh), 2.08) PL_TEST_EXPECT_FENV (V_NAME (sinh), WANT_ERRNO) +PL_TEST_INTERVAL (V_NAME (sinh), 0, 0x1p-51, 100) +PL_TEST_INTERVAL (V_NAME (sinh), -0, -0x1p-51, 100) +PL_TEST_INTERVAL (V_NAME (sinh), 0x1p-51, 0x1.62e42fefa39fp+9, 100000) +PL_TEST_INTERVAL (V_NAME (sinh), -0x1p-51, -0x1.62e42fefa39fp+9, 100000) +PL_TEST_INTERVAL (V_NAME (sinh), 0x1.62e42fefa39fp+9, inf, 1000) +PL_TEST_INTERVAL (V_NAME (sinh), -0x1.62e42fefa39fp+9, -inf, 1000) #endif diff --git a/pl/math/v_sinhf_2u3.c b/pl/math/v_sinhf_2u3.c index ecedf55..a8bf5ae 100644 --- a/pl/math/v_sinhf_2u3.c +++ b/pl/math/v_sinhf_2u3.c @@ -46,4 +46,10 @@ VPCS_ALIAS PL_SIG (V, F, 1, sinh, -10.0, 10.0) PL_TEST_ULP (V_NAME (sinhf), 1.76) PL_TEST_EXPECT_FENV (V_NAME (sinhf), WANT_ERRNO) +PL_TEST_INTERVAL (V_NAME (sinhf), 0, 0x1.62e43p+6, 100000) +PL_TEST_INTERVAL (V_NAME (sinhf), -0, -0x1.62e43p+6, 100000) +PL_TEST_INTERVAL (V_NAME (sinhf), 0x1.62e43p+6, 0x1.65a9fap+6, 100) +PL_TEST_INTERVAL (V_NAME (sinhf), -0x1.62e43p+6, -0x1.65a9fap+6, 100) +PL_TEST_INTERVAL (V_NAME (sinhf), 0x1.65a9fap+6, inf, 100) +PL_TEST_INTERVAL (V_NAME (sinhf), -0x1.65a9fap+6, -inf, 100) #endif diff --git a/pl/math/v_tanf_3u2.c b/pl/math/v_tanf_3u2.c index 51ede3c..648690d 100644 --- a/pl/math/v_tanf_3u2.c +++ b/pl/math/v_tanf_3u2.c @@ -120,4 +120,12 @@ VPCS_ALIAS PL_SIG (V, F, 1, tan, -3.1, 3.1) PL_TEST_ULP (V_NAME (tanf), 2.7) PL_TEST_EXPECT_FENV (V_NAME (tanf), WANT_ERRNO) +PL_TEST_INTERVAL (V_NAME (tanf), -0.0, -0x1p126, 100) +PL_TEST_INTERVAL (V_NAME (tanf), 0x1p-149, 0x1p-126, 4000) +PL_TEST_INTERVAL (V_NAME (tanf), 0x1p-126, 0x1p-23, 50000) +PL_TEST_INTERVAL (V_NAME (tanf), 0x1p-23, 0.7, 50000) +PL_TEST_INTERVAL (V_NAME (tanf), 0.7, 1.5, 50000) +PL_TEST_INTERVAL (V_NAME (tanf), 1.5, 100, 50000) +PL_TEST_INTERVAL (V_NAME (tanf), 100, 0x1p17, 50000) +PL_TEST_INTERVAL (V_NAME (tanf), 0x1p17, inf, 50000) #endif diff --git a/pl/math/v_tanhf_2u6.c b/pl/math/v_tanhf_2u6.c index ae87f50..c10be40 100644 --- a/pl/math/v_tanhf_2u6.c +++ b/pl/math/v_tanhf_2u6.c @@ -93,4 +93,10 @@ VPCS_ALIAS PL_SIG (V, F, 1, tanh, -10.0, 10.0) PL_TEST_ULP (V_NAME (tanhf), 2.09) PL_TEST_EXPECT_FENV (V_NAME (tanhf), WANT_ERRNO) +PL_TEST_INTERVAL (V_NAME (tanhf), 0, 0x1p-23, 1000) +PL_TEST_INTERVAL (V_NAME (tanhf), -0, -0x1p-23, 1000) +PL_TEST_INTERVAL (V_NAME (tanhf), 0x1p-23, 0x1.205966p+3, 100000) +PL_TEST_INTERVAL (V_NAME (tanhf), -0x1p-23, -0x1.205966p+3, 100000) +PL_TEST_INTERVAL (V_NAME (tanhf), 0x1.205966p+3, inf, 100) +PL_TEST_INTERVAL (V_NAME (tanhf), -0x1.205966p+3, -inf, 100) #endif |