From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id 7465B398D04D for ; Wed, 11 Aug 2021 22:46:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7465B398D04D Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-326-S5NxjIadMiymK1mvayNjcg-1; Wed, 11 Aug 2021 18:46:27 -0400 X-MC-Unique: S5NxjIadMiymK1mvayNjcg-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 86767107ACF5; Wed, 11 Aug 2021 22:46:26 +0000 (UTC) Received: from localhost (unknown [10.33.36.8]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1E53F69CBB; Wed, 11 Aug 2021 22:46:25 +0000 (UTC) Date: Wed, 11 Aug 2021 23:46:25 +0100 From: Jonathan Wakely To: libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: [committed] libstdc++: Fix test that fails randomly [PR101866] Message-ID: MIME-Version: 1.0 X-Clacks-Overhead: GNU Terry Pratchett X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="mznyIvw9X29Yelqb" Content-Disposition: inline X-Spam-Status: No, score=-14.2 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libstdc++@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++ mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 11 Aug 2021 22:46:40 -0000 --mznyIvw9X29Yelqb Content-Type: text/plain; charset=us-ascii Content-Disposition: inline This test assumes that the same sequence of three values cannot occur, which is incorect. It's unlikely, but not impossible. Perform the check in a loop, so that in the unlikely event of an identical sequence, we retry. If the library code is buggy it will keep producing the same sequence and the test will time out. If the code is working correctly then we will usually break out of the loop after one iteration, or very rarely after two or three. libstdc++-v3/ChangeLog: PR libstdc++/101866 * testsuite/experimental/random/randint.cc: Loop and retry if reseed() produces the same sequence. Tested x86_64-linux. Committed to trunk. I'll backport too. --mznyIvw9X29Yelqb Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="patch.txt" commit 93f1dbc7cdcc4b31ea4061efb4c2acf2d4f81eb8 Author: Jonathan Wakely Date: Wed Aug 11 22:11:19 2021 libstdc++: Fix test that fails randomly [PR101866] This test assumes that the same sequence of three values cannot occur, which is incorect. It's unlikely, but not impossible. Perform the check in a loop, so that in the unlikely event of an identical sequence, we retry. If the library code is buggy it will keep producing the same sequence and the test will time out. If the code is working correctly then we will usually break out of the loop after one iteration, or very rarely after two or three. libstdc++-v3/ChangeLog: PR libstdc++/101866 * testsuite/experimental/random/randint.cc: Loop and retry if reseed() produces the same sequence. diff --git a/libstdc++-v3/testsuite/experimental/random/randint.cc b/libstdc++-v3/testsuite/experimental/random/randint.cc index d6225eba1df..e05151e5ea0 100644 --- a/libstdc++-v3/testsuite/experimental/random/randint.cc +++ b/libstdc++-v3/testsuite/experimental/random/randint.cc @@ -34,7 +34,7 @@ test01() } std::experimental::reseed(99u); - const long n1[] = { + const int n1[] = { std::experimental::randint(0, 100), std::experimental::randint(0, 100), std::experimental::randint(0, 100), @@ -42,7 +42,7 @@ test01() std::experimental::randint(0, 100) }; std::experimental::reseed(99u); - const long n2[] = { + const int n2[] = { std::experimental::randint(0, 100), std::experimental::randint(0, 100), std::experimental::randint(0, 100), @@ -52,13 +52,13 @@ test01() for (int i = 0; i < 5; ++i) VERIFY( n1[i] == n2[i] ); - std::experimental::reseed(); - const long n3[] = { - std::experimental::randint(0, 100), - std::experimental::randint(0, 100), - std::experimental::randint(0, 100) - }; - VERIFY( !(n3[0] == n1[0] && n3[1] == n1[1] && n3[2] == n1[2]) ); + do + { + std::experimental::reseed(); + } + while (std::experimental::randint(0, 100) == n1[0] + && std::experimental::randint(0, 100) == n1[1] + && std::experimental::randint(0, 100) == n1[2]); } void --mznyIvw9X29Yelqb--