Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
From 61647ec732c71b0be3711e224c84b44759dfd26b Mon Sep 17 00:00:00 2001
From: Marco Barbone <mbarbone@flatironinstitute.org>
Date: Wed, 29 Apr 2026 13:30:37 -0400
Subject: [PATCH] fix: avoid atan branch cut in complex trigonometric test

The atan_input generator sampled (Re=0, Im=1.5) at i=N/2, which lies on
the branch cut of complex atan at Re=0, |Im|>=1. C99 7.3.4.1 leaves the
sign of Re(catan(+/-0 + i*y)) for |y|>1 implementation-defined: glibc
returns +pi/2, musl returns -pi/2. xsimd matches glibc, so the test
fails on musl-based CI (e.g. void-linux x86_64-musl) with two
mismatches (one per complex<float>/complex<double> batch type).

Shift the real start from -10 to -9.5 so Re=0 occurs at i=19000, where
|Im|~0.975<1 - analytic territory where atan is uniquely defined and
all libcs agree. Negative/positive real coverage is preserved; only
the singular point on a region of unspecified behavior is dropped.
---
test/test_complex_trigonometric.cpp | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/test/test_complex_trigonometric.cpp b/test/test_complex_trigonometric.cpp
index 8a0163be5..16e577ce1 100644
--- a/test/test_complex_trigonometric.cpp
+++ b/test/test_complex_trigonometric.cpp
@@ -43,7 +43,11 @@ struct complex_trigonometric_test
real_value_type(0.1) + i * real_value_type(56.) / nb_input);
ainput[i] = value_type(real_value_type(-1.) + real_value_type(2.) * i / nb_input,
real_value_type(-1.1) + real_value_type(2.1) * i / nb_input);
- atan_input[i] = value_type(real_value_type(-10.) + i * real_value_type(20.) / nb_input,
+ // Avoid sampling the branch cut of complex atan at (Re=0, |Im|>=1):
+ // the sign of Re(catan(+/-0 + i*y)) for |y|>1 is implementation-defined
+ // (C99 7.3.4.1), and glibc and musl disagree there. Starting Re at -9.5
+ // makes Re=0 occur at i=19/40 of the range, where |Im|<1 (analytic).
+ atan_input[i] = value_type(real_value_type(-9.5) + i * real_value_type(20.) / nb_input,
real_value_type(-9.) + i * real_value_type(21.) / nb_input);
}
expected.resize(nb_input);
9 changes: 4 additions & 5 deletions srcpkgs/xsimd/template
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
# Template file for 'xsimd'
pkgname=xsimd
reverts="11.2.0_1"
version=11.1.0
revision=2
version=14.2.0
revision=1
build_style=cmake
short_desc="C++ wrappers for SIMD intrinsics and parallelized, optimized mathematical functions"
Comment thread
jason1987d marked this conversation as resolved.
short_desc="C++ wrappers for SIMD intrinsics and parallel, optimized math functions"
maintainer="John <me@johnnynator.dev>"
license="BSD-3-Clause"
homepage="https://github.com/xtensor-stack/xsimd"
distfiles="https://github.com/xtensor-stack/xsimd/archive/refs/tags/${version}.tar.gz"
checksum=aa54dba8daade472656eba0d27154f072fec06ee3831aefcac69a5f6c7dbbae7
checksum=21e841ab684b05331e81e7f782431753a029ef7b7d9d6d3ddab837e7782a40ee

if [ -z "$CROSS_BUILD" ]; then
configure_args="-DBUILD_TESTS=ON"
Expand Down