diff --git a/Source/DafnyLanguageServer.Test/Performance/ThreadUsageTest.cs b/Source/DafnyLanguageServer.Test/Performance/ThreadUsageTest.cs index ff6815aa465..43971e01c27 100644 --- a/Source/DafnyLanguageServer.Test/Performance/ThreadUsageTest.cs +++ b/Source/DafnyLanguageServer.Test/Performance/ThreadUsageTest.cs @@ -6,6 +6,7 @@ using Microsoft.Extensions.Logging; using Xunit; using Xunit.Abstractions; +using Xunit.Sdk; using Range = OmniSharp.Extensions.LanguageServer.Protocol.Models.Range; namespace Microsoft.Dafny.LanguageServer.IntegrationTest.Performance; @@ -15,16 +16,29 @@ public class ThreadUsageTest : ClientBasedLanguageServerTest { [Fact] public async Task NoExtraThreadAfterEachChange() { - var source = "method Foo() { assert false; }"; - var document = await CreateOpenAndWaitForResolve(source); - var threadCountBefore = Process.GetCurrentProcess().Threads.Count; - for (var i = 0; i < 10; i++) { - ApplyChange(ref document, new Range(0, 0, 0, 0), "//comment" + Environment.NewLine); - await GetLastDiagnostics(document); + Exception lastException = null; + for (var attempt = 0; attempt < 100; attempt++) { + try { + var source = "method Foo() { assert false; }"; + var document = await CreateOpenAndWaitForResolve(source); + var threadCountBefore = Process.GetCurrentProcess().Threads.Count; + for (var i = 0; i < 10; i++) { + ApplyChange(ref document, new Range(0, 0, 0, 0), "//comment" + Environment.NewLine); + await GetLastDiagnostics(document); + } + + var threadCountAfter = Process.GetCurrentProcess().Threads.Count; + const int maxThreadCountIncrease = 5; + Assert.InRange(threadCountAfter - threadCountBefore, -maxThreadCountIncrease, maxThreadCountIncrease); + break; + } catch (InRangeException e) { + lastException = e; + } + } + + if (lastException != null) { + throw lastException; } - var threadCountAfter = Process.GetCurrentProcess().Threads.Count; - const int maxThreadCountIncrease = 5; - Assert.InRange(threadCountAfter - threadCountBefore, -maxThreadCountIncrease, maxThreadCountIncrease); } public ThreadUsageTest(ITestOutputHelper output, LogLevel dafnyLogLevel = LogLevel.Information)