Backport upstream fix to improve stability of randtest.sh by
retrying when sigma is too small, avoiding intermittent failures.

https://bugzilla.yoctoproject.org/show_bug.cgi?id=16254

Signed-off-by: Aditya GS <[email protected]>
---
 .../gawk/files/randtest-fix.patch             | 138 ++++++++++++++++++
 meta/recipes-extended/gawk/gawk_5.3.0.bb      |   1 +
 2 files changed, 139 insertions(+)
 create mode 100644 meta/recipes-extended/gawk/files/randtest-fix.patch

diff --git a/meta/recipes-extended/gawk/files/randtest-fix.patch 
b/meta/recipes-extended/gawk/files/randtest-fix.patch
new file mode 100644
index 0000000000..b909d52263
--- /dev/null
+++ b/meta/recipes-extended/gawk/files/randtest-fix.patch
@@ -0,0 +1,138 @@
+From f2250f4bc864913437619af7a9834a1c24915acd Mon Sep 17 00:00:00 2001
+From: "Arnold D. Robbins" <[email protected]>
+Date: Thu, 28 May 2026 09:52:41 -0400
+Subject: [PATCH] Improve test/randtest.sh.
+
+Backport upstream fix to improve stability of randtest.sh by retrying
+when sigma is too small, avoiding intermittent failures.
+
+Upstream-Status: Backport [f2250f4bc864913437619af7a9834a1c24915acd]
+
+---
+
+diff --git a/test/randtest.sh b/test/randtest.sh
+index 597376a8..6ae6f830 100755
+--- a/test/randtest.sh
++++ b/test/randtest.sh
+@@ -45,68 +45,77 @@ $AWK 'BEGIN{
+     nsamples=('$NSAMPLES');
+     max_allowed_sigma=('$MAX_ALLOWED_SIGMA');
+     nruns=('$NRUNS');
+-    for(tau=0;tau<nsamples/2;tau++) corr[tau]=0;
++    max_retries=5
+ 
+-    for(run=0;run<nruns;run++) {
+-      sum=0;
++    for (retry=0; retry<max_retries; retry++) {
++        for(tau=0; tau<nsamples/2; tau++) corr[tau]=0;
+ 
+-      # Fill an array with a sequence of samples that are a
+-      # function of pairs of rand() values.
++        for(run=0; run<nruns; run++) {
++            sum=0;
+ 
+-      for(i=0;i<nsamples;i++) {
+-         samp[i]=((rand()-0.5)*(rand()-0.5))^2;
+-         sum=sum+samp[i];
+-         }
++          # Fill an array with a sequence of samples that are a
++          # function of pairs of rand() values.
+ 
+-      # Subtract off the mean of the sequence:
++            for(i=0; i<nsamples; i++) {
++                samp[i]=((rand()-0.5)*(rand()-0.5))^2;
++              sum=sum+samp[i];
++            }
+ 
+-      mean=sum/nsamples;
+-      for(i=0;i<nsamples;i++) samp[i]=samp[i]-mean;
++          # Subtract off the mean of the sequence:
+ 
+-      # Calculate an autocorrelation function on the sequence.
+-      # Because the values of rand() should be independent, there
+-      # should be no peaks in the autocorrelation.
++          mean=sum/nsamples;
++          for(i=0;i<nsamples;i++) samp[i]=samp[i]-mean;
+ 
+-      for(tau=0;tau<nsamples/2;tau++) {
+-          sum=0;
+-          for(i=0;i<nsamples/2;i++) sum=sum+samp[i]*samp[i+tau];
+-          corr[tau]=corr[tau]+sum;
+-          }
++          # Calculate an autocorrelation function on the sequence.
++          # Because the values of rand() should be independent, there
++          # should be no peaks in the autocorrelation.
+ 
+-      }
+-    # Normalize the autocorrelation to the tau=0 value.
++            for(tau=0; tau<nsamples/2; tau++) {
++              sum=0;
++              for(i=0;i<nsamples/2;i++) sum=sum+samp[i]*samp[i+tau];
++              corr[tau]=corr[tau]+sum;
++            }
+ 
+-    max_corr=corr[0];
+-    for(tau=0;tau<nsamples/2;tau++) corr[tau]=corr[tau]/max_corr;
++        }
++        # Normalize the autocorrelation to the tau=0 value.
+ 
+-    # OPTIONALLY Print out the autocorrelation values:
++        max_corr=corr[0];
++        for(tau=0;tau<nsamples/2;tau++) corr[tau]=corr[tau]/max_corr;
+ 
+-    # for(tau=0;tau<nsamples/2;tau++) print tau, corr[tau] > 
"pairpower_corr.data";
++        # OPTIONALLY Print out the autocorrelation values:
+ 
+-    # Calculate the sigma for the non-zero tau values: 
++        # for(tau=0;tau<nsamples/2;tau++) print tau, corr[tau] > 
"pairpower_corr.data";
+ 
+-    power_sum=0;
++        # Calculate the sigma for the non-zero tau values: 
+ 
+-    for(tau=1;tau<nsamples/2;tau++) power_sum=power_sum+(corr[tau])^2;
++        power_sum=0;
+ 
+-    sigma=sqrt(power_sum/(nsamples/2-1));
++        for(tau=1;tau<nsamples/2;tau++) power_sum=power_sum+(corr[tau])^2;
+ 
+-    # See if any of the correlations exceed a reasonable number of sigma:
++        sigma=sqrt(power_sum/(nsamples/2-1));
+ 
+-    passed=1;
+-    for(tau=1;tau<nsamples/2;tau++) {
+-      if ( abs(corr[tau])/sigma > max_allowed_sigma ) {
+-          print "Tau=", tau ", Autocorr=", corr[tau]/sigma, "sigma";
+-          passed=0;
+-          }
++        if (sigma < 1e-6) {
++            print "Sigma too small, retrying run", retry
++            continue
+         }
+-    if(!passed) {
+-      print "Test failed."
+-      exit(1);
++
++        # See if any of the correlations exceed a reasonable number of sigma:
++
++        for(tau=1;tau<nsamples/2;tau++) {
++            if (abs(corr[tau])/sigma > max_allowed_sigma) {
++                print "Tau=", tau ", Autocorr=", corr[tau]/sigma, "sigma";
++                print "Test failed."
++                exit 1
++            }
+         }
+-    else exit (0);
++
++        exit 0
+     }
+ 
++    print "Test failed after retries due to unstable sigma"
++    exit 1
++}
++
+ function abs(abs_input) { return(sqrt(abs_input^2)) ; }
+ '
+ 
+-- 
+2.34.1
+
diff --git a/meta/recipes-extended/gawk/gawk_5.3.0.bb 
b/meta/recipes-extended/gawk/gawk_5.3.0.bb
index ac9d8500d6..a6bf793e65 100644
--- a/meta/recipes-extended/gawk/gawk_5.3.0.bb
+++ b/meta/recipes-extended/gawk/gawk_5.3.0.bb
@@ -19,6 +19,7 @@ SRC_URI = "${GNU_MIRROR}/gawk/gawk-${PV}.tar.gz \
            file://0001-m4-readline-add-missing-includes.patch \
            file://run-ptest \
            "
+SRC_URI += "file://randtest-fix.patch"
 
 SRC_URI[sha256sum] = 
"378f8864ec21cfceaa048f7e1869ac9b4597b449087caf1eb55e440d30273336"
 
-- 
2.34.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#237730): 
https://lists.openembedded.org/g/openembedded-core/message/237730
Mute This Topic: https://lists.openembedded.org/mt/119535145/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to