SmoothAcceleratingTimeoutTests.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. namespace ApplicationTests.Timeout;
  2. public class SmoothAcceleratingTimeoutTests
  3. {
  4. [Fact]
  5. public void Span_Should_Return_InitialDelay_On_StageZero ()
  6. {
  7. var initialDelay = TimeSpan.FromMilliseconds (500);
  8. var minDelay = TimeSpan.FromMilliseconds (50);
  9. double decayFactor = 0.7;
  10. var timeout = new SmoothAcceleratingTimeout (initialDelay, minDelay, decayFactor, () => true);
  11. Assert.Equal (initialDelay, timeout.Span);
  12. }
  13. [Fact]
  14. public void Span_Should_Decrease_As_Stage_Increases ()
  15. {
  16. var initialDelay = TimeSpan.FromMilliseconds (500);
  17. var minDelay = TimeSpan.FromMilliseconds (50);
  18. double decayFactor = 0.7;
  19. var timeout = new SmoothAcceleratingTimeout (initialDelay, minDelay, decayFactor, () => true);
  20. var previousSpan = timeout.Span;
  21. for (int i = 0; i < 10; i++)
  22. {
  23. timeout.AdvanceStage ();
  24. var currentSpan = timeout.Span;
  25. Assert.True (currentSpan <= previousSpan, $"Stage {i + 1}: {currentSpan} should be <= {previousSpan}");
  26. previousSpan = currentSpan;
  27. }
  28. }
  29. [Fact]
  30. public void Span_Should_Not_Go_Below_MinDelay ()
  31. {
  32. var initialDelay = TimeSpan.FromMilliseconds (500);
  33. var minDelay = TimeSpan.FromMilliseconds (50);
  34. double decayFactor = 0.5;
  35. var timeout = new SmoothAcceleratingTimeout (initialDelay, minDelay, decayFactor, () => true);
  36. for (int i = 0; i < 100; i++)
  37. {
  38. timeout.AdvanceStage ();
  39. }
  40. Assert.Equal (minDelay, timeout.Span);
  41. }
  42. [Fact]
  43. public void Reset_Should_Set_Stage_Back_To_Zero ()
  44. {
  45. var initialDelay = TimeSpan.FromMilliseconds (500);
  46. var minDelay = TimeSpan.FromMilliseconds (50);
  47. double decayFactor = 0.7;
  48. var timeout = new SmoothAcceleratingTimeout (initialDelay, minDelay, decayFactor, () => true);
  49. timeout.AdvanceStage ();
  50. timeout.AdvanceStage ();
  51. Assert.NotEqual (initialDelay, timeout.Span);
  52. timeout.Reset ();
  53. Assert.Equal (initialDelay, timeout.Span);
  54. }
  55. }