[gcc r17-2583] libstdc++: Handle ibm128 in generate_canonical tests.

Tomasz Kaminski via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <20260721113046.8D8A44BA2E05__17403.9816878334$1784633457$gmane$org@sourceware.org>
https://gcc.gnu.org/g:ef6451b6aec387c5693719fe048c4f11a6be2edb

commit r17-2583-gef6451b6aec387c5693719fe048c4f11a6be2edb
Author: Tomasz Kamiński <[email protected]>
Date:   Tue Jul 21 13:25:13 2026 +0200

    libstdc++: Handle ibm128 in generate_canonical tests.
    
    Numeric traits for ibm128 (double-double) reports is_iec559 as true,
    and thus was hitting VERIFY(false) default branch.
    
    libstdc++-v3/ChangeLog:
    
            * testsuite/26_numerics/random/uniform_real_distribution/operators/gencanon.cc:
            Remove trailing whitespace. Handle 106 (ibm128) mantissa size.

Diff:
---
 .../operators/gencanon.cc                          | 27 +++++++++++++++++-----
 1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/gencanon.cc b/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/gencanon.cc
index ae93ec13b7a3..1161d5603c26 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/gencanon.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/gencanon.cc
@@ -16,7 +16,7 @@ struct local_rng : std::mt19937
   static constexpr std::uint64_t max() { return max_val; }
   std::uint64_t operator()()
   { return std::mt19937::operator()() % (max() + 1); }
-  
+
   local_rng(std::mt19937 const& arg) : std::mt19937(arg) {}
 };
 
@@ -30,7 +30,7 @@ int ifloor(__float128 t)
 #endif
 
 // Verify P0952R2 implementation requiring a second round-trip
-// if first yields exactly 1. 
+// if first yields exactly 1.
 template<typename T, size_t bits,
 	 size_t call_per_elem, size_t max_skips_per_elem,
 	 typename RNG>
@@ -106,12 +106,13 @@ test_2p32(const std::mt19937& rng)
     VERIFY(zeros == 0);
     break;
   case 53: // ieee64
-  case 64: // ieee80 
+  case 64: // ieee80
     VERIFY(deviation == 7650);
     VERIFY(max == 259);
     VERIFY(rms == 975);
     VERIFY(zeros == 0);
     break;
+  case 106: // ibm128
   case 113: // ieee128
     VERIFY(deviation == 9086);
     VERIFY(max == 290);
@@ -159,13 +160,20 @@ test_10p6(const std::mt19937& rng)
     VERIFY(rms == 921);
     VERIFY(zeros == 0);
     break;
-  case 64: // ieee80 
+  case 64: // ieee80
     VERIFY(skips == 1);
     VERIFY(deviation == 7774);
     VERIFY(max == 250);
     VERIFY(rms == 958);
     VERIFY(zeros == 0);
     break;
+  case 106: // ibm128
+    VERIFY(skips == 96);
+    VERIFY(deviation == 6980);
+    VERIFY(max == 260);
+    VERIFY(rms == 876);
+    VERIFY(zeros == 0);
+    break;
   case 113: // ieee128
     VERIFY(skips == 3074);
     VERIFY(deviation == 7568);
@@ -214,13 +222,20 @@ test_2p31m1(const std::mt19937& rng)
     VERIFY(rms == 937);
     VERIFY(zeros == 0);
     break;
-  case 64: // ieee80 
+  case 64: // ieee80
     VERIFY(skips == 143342);
     VERIFY(deviation == 7788);
     VERIFY(max == 296);
     VERIFY(rms == 977);
     VERIFY(zeros == 0);
     break;
+  case 106: // ibm128
+    VERIFY(skips == 0);
+    VERIFY(deviation == 8828);
+    VERIFY(max == 330);
+    VERIFY(rms == 1084);
+    VERIFY(zeros == 0);
+    break;
   case 113: // ieee128
     VERIFY(skips == 8);
     VERIFY(deviation == 8824);
@@ -240,7 +255,7 @@ int main()
   std::seed_seq sequence{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   rng.seed(sequence);
   rng.discard(12 * 629143);
-      
+
   test_2p32<float>(rng);
   test_10p6<float>(rng);
   test_2p31m1<float>(rng);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.