commit:     91c13cd00de06d52ab502a5074100b6ab8bf5ded
Author:     Mart Raudsepp <leio <AT> gentoo <DOT> org>
AuthorDate: Fri Aug  9 06:45:29 2019 +0000
Commit:     Mart Raudsepp <leio <AT> gentoo <DOT> org>
CommitDate: Fri Aug  9 06:45:47 2019 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=91c13cd0

dev-lang/orc: fix tests on some platforms (Phenom, ARM)

ARM may have other tests, but this fixes some.
Fixes tests for Phenom 32bit builds.

Closes: https://bugs.gentoo.org/596128
Package-Manager: Portage-2.3.62, Repoman-2.3.12
Signed-off-by: Mart Raudsepp <leio <AT> gentoo.org>

 dev-lang/orc/files/0.4.29-test-rounding.patch | 73 +++++++++++++++++++++++++++
 dev-lang/orc/orc-0.4.29.ebuild                |  6 +++
 2 files changed, 79 insertions(+)

diff --git a/dev-lang/orc/files/0.4.29-test-rounding.patch 
b/dev-lang/orc/files/0.4.29-test-rounding.patch
new file mode 100644
index 00000000000..653132fcb8e
--- /dev/null
+++ b/dev-lang/orc/files/0.4.29-test-rounding.patch
@@ -0,0 +1,73 @@
+From 73986d82e1ae60b224b401143cd4ce2c452bf326 Mon Sep 17 00:00:00 2001
+From: Doug Nazar <naz...@nazar.ca>
+Date: Wed, 7 Aug 2019 00:11:35 -0400
+Subject: [PATCH] orctest: Switch nearby float comparison to ULP method
+
+---
+ orc-test/orcarray.c | 7 ++-----
+ orc-test/orctest.c  | 8 ++++----
+ 2 files changed, 6 insertions(+), 9 deletions(-)
+
+diff --git a/orc-test/orcarray.c b/orc-test/orcarray.c
+index c0666c5..b27a1f9 100644
+--- a/orc-test/orcarray.c
++++ b/orc-test/orcarray.c
+@@ -211,9 +211,6 @@ orc_array_set_pattern_2 (OrcArray *array, OrcRandomContext 
*context,
+   }
+ }
+ 
+-#define MIN_NONDENORMAL (1.1754944909521339405e-38)
+-#define MIN_NONDENORMAL_D (2.2250738585072014e-308)
+-
+ int
+ orc_array_compare (OrcArray *array1, OrcArray *array2, int flags)
+ {
+@@ -230,7 +227,7 @@ orc_array_compare (OrcArray *array1, OrcArray *array2, int 
flags)
+         for (i=0;i<array1->n;i++){
+           if (isnan(a[i]) && isnan(b[i])) continue;
+           if (a[i] == b[i]) continue;
+-          if (fabs(a[i] - b[i]) < MIN_NONDENORMAL) continue;
++          if ((a[i] < 0.0) == (b[i] < 0.0) && abs(*(orc_uint32 *)&a[i] - 
*(orc_uint32 *)&b[i]) <= 2) continue;
+           return FALSE;
+         }
+       }
+@@ -247,7 +244,7 @@ orc_array_compare (OrcArray *array1, OrcArray *array2, int 
flags)
+         for (i=0;i<array1->n;i++){
+           if (isnan(a[i]) && isnan(b[i])) continue;
+           if (a[i] == b[i]) continue;
+-          if (fabs(a[i] - b[i]) < MIN_NONDENORMAL_D) continue;
++          if ((a[i] < 0.0) == (b[i] < 0.0) && abs(*(orc_uint64 *)&a[i] - 
*(orc_uint64 *)&b[i]) <= 2) continue;
+           return FALSE;
+         }
+       }
+diff --git a/orc-test/orctest.c b/orc-test/orctest.c
+index 9f0e942..54658bc 100644
+--- a/orc-test/orctest.c
++++ b/orc-test/orctest.c
+@@ -44,8 +44,6 @@
+ #define snprintf _snprintf
+ #endif
+ 
+-#define MIN_NONDENORMAL (1.1754944909521339405e-38)
+-
+ void _orc_profile_init(void);
+ 
+ OrcRandomContext rand_context;
+@@ -527,10 +525,12 @@ float_compare (OrcArray *array1, OrcArray *array2, int 
i, int j)
+     case 4:
+       if (isnan(*(float *)ptr1) && isnan(*(float *)ptr2)) return TRUE;
+       if (*(float *)ptr1 == *(float *)ptr2) return TRUE;
+-      if (fabs(*(float *)ptr1 - *(float *)ptr2) < MIN_NONDENORMAL) return 
TRUE;
++      if ((*(float *)ptr1 < 0.0) == (*(float *)ptr2 < 0.0) && 
abs(*(orc_uint32 *)ptr1 - *(orc_uint32 *)ptr2) <= 2) return TRUE;
+       return FALSE;
+     case 8:
+-      /* FIXME */
++      if (isnan(*(double *)ptr1) && isnan(*(double *)ptr2)) return TRUE;
++      if (*(double *)ptr1 == *(double *)ptr2) return TRUE;
++      if ((*(double *)ptr1 < 0.0) == (*(double *)ptr2 < 0.0) && 
abs(*(orc_uint64 *)ptr1 - *(orc_uint64 *)ptr2) <= 2) return TRUE;
+       return FALSE;
+   }
+   return FALSE;
+-- 
+2.21.0
+

diff --git a/dev-lang/orc/orc-0.4.29.ebuild b/dev-lang/orc/orc-0.4.29.ebuild
index 974ea15e13d..7c92dcb5075 100644
--- a/dev-lang/orc/orc-0.4.29.ebuild
+++ b/dev-lang/orc/orc-0.4.29.ebuild
@@ -22,6 +22,12 @@ DEPEND="${RDEPEND}
 
 DOCS=( README RELEASE )
 
+PATCHES=(
+       # Fixes some tests on various platforms (AMD Phenom, ARM, etc) with 
more suitable
+       # float comparison - 
https://gitlab.freedesktop.org/gstreamer/orc/issues/18
+       "${FILESDIR}"/${PV}-test-rounding.patch
+)
+
 src_prepare() {
        default
 

Reply via email to