This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-lang.git

commit 9840b9df5795a9d253611ac7cd451163470b2443
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Fri Oct 20 15:15:10 2023 -0400

    Try to fix random failures in StopWatchTest.testStopWatchSuspend()
    
    Watch out comparing measurements from System.currentTimeMillis() vs.
    System.nanoTime()
---
 .../apache/commons/lang3/time/StopWatchTest.java   | 56 ++++++++++++----------
 1 file changed, 30 insertions(+), 26 deletions(-)

diff --git a/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java 
b/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java
index 8cb7d312e..44e375cde 100644
--- a/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java
@@ -75,7 +75,7 @@ public class StopWatchTest extends AbstractLangTest {
         return watch;
     }
 
-    private void sleepQuietly(final Duration duration) throws 
InterruptedException {
+    private void sleep(final Duration duration) throws InterruptedException {
         ThreadUtils.sleep(duration);
     }
 
@@ -196,10 +196,10 @@ public class StopWatchTest extends AbstractLangTest {
     @Test
     public void testLang315() throws InterruptedException {
         final StopWatch watch = StopWatch.createStarted();
-        sleepQuietly(MILLIS_200);
+        sleep(MILLIS_200);
         watch.suspend();
         final long suspendTime = watch.getTime();
-        sleepQuietly(MILLIS_200);
+        sleep(MILLIS_200);
         watch.stop();
         final long totalTime = watch.getTime();
         assertEquals(suspendTime, totalTime);
@@ -220,7 +220,7 @@ public class StopWatchTest extends AbstractLangTest {
     public void testStopTimeSimple() throws InterruptedException {
         final StopWatch watch = StopWatch.createStarted();
         final long testStartMillis = System.currentTimeMillis();
-        sleepQuietly(MILLIS_550);
+        sleep(MILLIS_550);
         watch.stop();
         final long testEndMillis = System.currentTimeMillis();
         final long stopTime = watch.getStopTime();
@@ -250,7 +250,7 @@ public class StopWatchTest extends AbstractLangTest {
     @Test
     public void testStopWatchSimple() throws InterruptedException {
         final StopWatch watch = StopWatch.createStarted();
-        sleepQuietly(MILLIS_550);
+        sleep(MILLIS_550);
         watch.stop();
         final long time = watch.getTime();
         assertEquals(time, watch.getTime());
@@ -269,20 +269,20 @@ public class StopWatchTest extends AbstractLangTest {
         assertEquals(ZERO_TIME_ELAPSED, watch.toString());
 
         watch.start();
-        sleepQuietly(MILLIS_550);
+        sleep(MILLIS_550);
         assertTrue(watch.getTime() < 2000);
     }
 
     @Test
     public void testStopWatchSplit() throws InterruptedException {
         final StopWatch watch = StopWatch.createStarted();
-        sleepQuietly(MILLIS_550);
+        sleep(MILLIS_550);
         watch.split();
         final long splitTime = watch.getSplitTime();
         final String splitStr = watch.toSplitString();
-        sleepQuietly(MILLIS_550);
+        sleep(MILLIS_550);
         watch.unsplit();
-        sleepQuietly(MILLIS_550);
+        sleep(MILLIS_550);
         watch.stop();
         final long totalTime = watch.getTime();
 
@@ -301,35 +301,39 @@ public class StopWatchTest extends AbstractLangTest {
 
     @Test
     public void testStopWatchSuspend() throws InterruptedException {
+        // Watch out comparing measurements from System.currentTimeMillis() 
vs. System.nanoTime()
         final StopWatch watch = StopWatch.createStarted();
         final long testStartMillis = System.currentTimeMillis();
-        sleepQuietly(MILLIS_550);
+        final long testStartNanos = System.nanoTime();
+        sleep(MILLIS_550);
         watch.suspend();
         final long testSuspendMillis = System.currentTimeMillis();
-        final long testSuspendTime = testSuspendMillis - testStartMillis;
-        final long suspendTime = watch.getTime();
-        final long stopTime = watch.getStopTime();
+        final long testSuspendNanos = System.nanoTime();
+        final long testSuspendTimeNanos = testSuspendNanos - testStartNanos;
+        final long suspendTimeFromNanos = watch.getTime();
+        final long stopTimeMillis = watch.getStopTime();
 
-        assertTrue(testStartMillis <= stopTime);
-        assertTrue(testSuspendMillis <= stopTime);
+        assertTrue(testStartMillis <= stopTimeMillis);
+        assertTrue(testSuspendMillis <= stopTimeMillis);
 
-        sleepQuietly(MILLIS_550);
+        sleep(MILLIS_550);
         watch.resume();
-        sleepQuietly(MILLIS_550);
+        sleep(MILLIS_550);
         watch.stop();
-        final long totalTime = watch.getTime();
+        final long totalTimeFromNanos = watch.getTime();
 
-        assertTrue(suspendTime >= 500, () -> "suspendTime = " + suspendTime);
-        assertTrue(suspendTime <= testSuspendTime, () -> 
String.format("suspendTime = %,d, testSuspendTime = %,d", suspendTime, 
testSuspendTime));
-        assertTrue(totalTime >= 1000, () -> "totalTime = " + totalTime);
+        assertTrue(suspendTimeFromNanos >= 500, () -> "suspendTime = " + 
suspendTimeFromNanos);
+        assertTrue(suspendTimeFromNanos <= testSuspendTimeNanos,
+                () -> String.format("suspendTime = %,d, testSuspendTime = 
%,d", suspendTimeFromNanos, testSuspendTimeNanos));
+        assertTrue(totalTimeFromNanos >= 1000, () -> "totalTime = " + 
totalTimeFromNanos);
         // Be lenient for slow running builds
-        assertTrue(totalTime < 2500, () -> "totalTime = " + totalTime);
+        assertTrue(totalTimeFromNanos < 2500, () -> "totalTime = " + 
totalTimeFromNanos);
     }
 
     @Test
     public void testToSplitString() throws InterruptedException {
         final StopWatch watch = StopWatch.createStarted();
-        sleepQuietly(MILLIS_550);
+        sleep(MILLIS_550);
         watch.split();
         final String splitStr = watch.toSplitString();
         assertEquals(splitStr.length(), 12, "Formatted split string not the 
correct length");
@@ -339,7 +343,7 @@ public class StopWatchTest extends AbstractLangTest {
     public void testToSplitStringWithMessage() throws InterruptedException {
         final StopWatch watch = new StopWatch(MESSAGE);
         watch.start();
-        sleepQuietly(MILLIS_550);
+        sleep(MILLIS_550);
         watch.split();
         final String splitStr = watch.toSplitString();
         assertEquals(splitStr.length(), 12 + MESSAGE.length() + 1, "Formatted 
split string not the correct length");
@@ -349,7 +353,7 @@ public class StopWatchTest extends AbstractLangTest {
     public void testToString() throws InterruptedException {
         //
         final StopWatch watch = StopWatch.createStarted();
-        sleepQuietly(MILLIS_550);
+        sleep(MILLIS_550);
         watch.split();
         final String splitStr = watch.toString();
         assertEquals(splitStr.length(), 12, "Formatted split string not the 
correct length");
@@ -361,7 +365,7 @@ public class StopWatchTest extends AbstractLangTest {
         //
         final StopWatch watch = new StopWatch(MESSAGE);
         watch.start();
-        sleepQuietly(MILLIS_550);
+        sleep(MILLIS_550);
         watch.split();
         final String splitStr = watch.toString();
         assertEquals(splitStr.length(), 12 + MESSAGE.length() + 1, "Formatted 
split string not the correct length");

Reply via email to