PixelShifterTests.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using System;
  2. using DesktopClock.Utilities;
  3. namespace DesktopClock.Tests;
  4. public class PixelShifterTests
  5. {
  6. [Theory]
  7. [InlineData(50, 0.1, 100, 5)]
  8. [InlineData(20, 0.5, 4, 4)]
  9. public void GetEffectiveMaxOffset_ShouldUseWindowSizeRatio(double windowSize, double ratio, int maxOffset, double expected)
  10. {
  11. var shifter = new PixelShifter
  12. {
  13. MaxPixelOffsetRatio = ratio,
  14. MaxPixelOffset = maxOffset,
  15. };
  16. var effective = shifter.GetEffectiveMaxOffset(windowSize);
  17. Assert.Equal(expected, effective);
  18. }
  19. [Fact]
  20. public void ShiftX_ShouldBounceDeterministicallyWithinBounds()
  21. {
  22. var shifter = new PixelShifter
  23. {
  24. PixelsPerShift = 2,
  25. MaxPixelOffset = 100,
  26. MaxPixelOffsetRatio = 0.1,
  27. };
  28. const double windowSize = 50;
  29. Assert.Equal(5d, shifter.GetEffectiveMaxOffset(windowSize));
  30. var expectedShifts = new double[] { 2, 2, 1, -2, -2, -2, -2, -2, 2, 2 };
  31. foreach (var expected in expectedShifts)
  32. {
  33. var shift = shifter.ShiftX(windowSize);
  34. Assert.Equal(expected, shift);
  35. Assert.InRange(Math.Abs(shifter.TotalShiftX), 0, 5);
  36. }
  37. }
  38. [Fact]
  39. public void ShiftY_ShouldBounceDeterministicallyWithinBounds()
  40. {
  41. var shifter = new PixelShifter
  42. {
  43. PixelsPerShift = 2,
  44. MaxPixelOffset = 100,
  45. MaxPixelOffsetRatio = 0.1,
  46. };
  47. const double windowSize = 50;
  48. Assert.Equal(5d, shifter.GetEffectiveMaxOffset(windowSize));
  49. var expectedShifts = new double[] { 2, 2, 1, -2, -2, -2, -2, -2, 2, 2 };
  50. foreach (var expected in expectedShifts)
  51. {
  52. var shift = shifter.ShiftY(windowSize);
  53. Assert.Equal(expected, shift);
  54. Assert.InRange(Math.Abs(shifter.TotalShiftY), 0, 5);
  55. }
  56. }
  57. [Theory]
  58. [InlineData(0, 50)]
  59. [InlineData(2, 0)]
  60. public void ShiftX_WhenDisabled_ReturnsZero(int pixelsPerShift, double windowSize)
  61. {
  62. var shifter = new PixelShifter
  63. {
  64. PixelsPerShift = pixelsPerShift,
  65. MaxPixelOffset = 10,
  66. MaxPixelOffsetRatio = 0.1,
  67. };
  68. var shift = shifter.ShiftX(windowSize);
  69. Assert.Equal(0, shift);
  70. Assert.Equal(0, shifter.TotalShiftX);
  71. }
  72. [Fact]
  73. public void DefaultValues_ShouldBeExpected()
  74. {
  75. var shifter = new PixelShifter();
  76. Assert.Equal(1, shifter.PixelsPerShift);
  77. Assert.Equal(4, shifter.MaxPixelOffset);
  78. Assert.Equal(0.1, shifter.MaxPixelOffsetRatio, 5);
  79. }
  80. }