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]] -=-=-=-=-=-=-=-=-=-=-=-
