📄 ui/tests/PhysicsLayoutTests/TickShould.cs
using System;
using Avalonia;
using Cfa.Ui.Graph;
using Shouldly;
using Xunit;

namespace Cfa.Ui.Tests.PhysicsLayoutTests;

public sealed class TickShould
{
    [Fact]
    public void ProjectAnOverlapOutsideTheRequiredRadiusInOneTick()
    {
        // Arrange
        var layout = new PhysicsLayout([new(-1, 100), new(0, 300)], initialPositions: [default, new Point(10, 0)]);

        // Act
        layout.Tick();

        // Assert
        layout.Positions[1].X.ShouldBe(300, 0.001);
        layout.Positions[0].ShouldBe(default(Point));
    }

    [Theory]
    [InlineData(10)]
    [InlineData(40)]
    public void BoundIntegrationSpeedWithoutConstrainingExclusionCorrections(double maximum)
    {
        // Arrange
        var layout = new PhysicsLayout(
            [new(-1, 100), new(0, 100)],
            new PhysicsOptions { MaxSpeed = maximum },
            [default, new Point(10000, 0)]
        );

        // Act
        layout.Tick();

        // Assert
        layout.Positions[1].X.ShouldBe(10000 - maximum, 0.00001);
    }
}