/ GUNRPG.Tests / MovementModelTests.cs
MovementModelTests.cs
1 using GUNRPG.Core.Combat; 2 using GUNRPG.Core.Operators; 3 using Xunit; 4 5 namespace GUNRPG.Tests; 6 7 public class MovementModelTests 8 { 9 [Theory] 10 [InlineData(MovementState.Stationary, 1.0f)] 11 [InlineData(MovementState.Idle, 1.0f)] 12 [InlineData(MovementState.Walking, 0.85f)] 13 [InlineData(MovementState.Sprinting, 0.45f)] 14 [InlineData(MovementState.Crouching, 1.1f)] 15 [InlineData(MovementState.Sliding, 0.45f)] 16 public void GetAccuracyMultiplier_ReturnsCorrectValues(MovementState state, float expected) 17 { 18 float actual = MovementModel.GetAccuracyMultiplier(state); 19 Assert.Equal(expected, actual, precision: 2); 20 } 21 22 [Theory] 23 [InlineData(MovementState.Stationary, 0.0f)] 24 [InlineData(MovementState.Idle, 0.0f)] 25 [InlineData(MovementState.Walking, 0.05f)] 26 [InlineData(MovementState.Sprinting, 0.15f)] 27 [InlineData(MovementState.Crouching, 0.02f)] 28 [InlineData(MovementState.Sliding, 0.15f)] 29 public void GetWeaponSwayDegrees_ReturnsCorrectValues(MovementState state, float expected) 30 { 31 float actual = MovementModel.GetWeaponSwayDegrees(state); 32 Assert.Equal(expected, actual, precision: 2); 33 } 34 35 [Theory] 36 [InlineData(MovementState.Stationary, 1.0f)] 37 [InlineData(MovementState.Idle, 1.0f)] 38 [InlineData(MovementState.Walking, 1.2f)] 39 [InlineData(MovementState.Sprinting, 1.6f)] 40 [InlineData(MovementState.Crouching, 0.9f)] 41 [InlineData(MovementState.Sliding, 1.6f)] 42 public void GetADSTimeMultiplier_ReturnsCorrectValues(MovementState state, float expected) 43 { 44 float actual = MovementModel.GetADSTimeMultiplier(state); 45 Assert.Equal(expected, actual, precision: 2); 46 } 47 48 [Theory] 49 [InlineData(MovementState.Stationary, 1.0f)] 50 [InlineData(MovementState.Idle, 1.0f)] 51 [InlineData(MovementState.Walking, 1.15f)] 52 [InlineData(MovementState.Sprinting, 1.3f)] 53 [InlineData(MovementState.Crouching, 0.8f)] 54 [InlineData(MovementState.Sliding, 1.3f)] 55 public void GetSuppressionBuildupMultiplier_ReturnsCorrectValues(MovementState state, float expected) 56 { 57 float actual = MovementModel.GetSuppressionBuildupMultiplier(state); 58 Assert.Equal(expected, actual, precision: 2); 59 } 60 61 [Fact] 62 public void GetSuppressionDecayMultiplier_Crouching_ReturnsFasterDecay() 63 { 64 float crouchDecay = MovementModel.GetSuppressionDecayMultiplier(MovementState.Crouching); 65 float normalDecay = MovementModel.GetSuppressionDecayMultiplier(MovementState.Stationary); 66 67 Assert.True(crouchDecay > normalDecay); 68 Assert.Equal(1.4f, crouchDecay, precision: 2); 69 } 70 71 [Theory] 72 [InlineData(CoverState.None, false, 1.0f)] 73 [InlineData(CoverState.Partial, false, 0.7f)] 74 [InlineData(CoverState.Full, false, 0.0f)] 75 [InlineData(CoverState.Full, true, 1.0f)] 76 public void GetCoverHitProbabilityMultiplier_ReturnsCorrectValues(CoverState cover, bool isPeeking, float expected) 77 { 78 float actual = MovementModel.GetCoverHitProbabilityMultiplier(cover, isPeeking); 79 Assert.Equal(expected, actual, precision: 2); 80 } 81 82 [Theory] 83 [InlineData(MovementState.Stationary, true)] 84 [InlineData(MovementState.Idle, true)] 85 [InlineData(MovementState.Crouching, true)] 86 [InlineData(MovementState.Walking, false)] 87 [InlineData(MovementState.Sprinting, false)] 88 [InlineData(MovementState.Sliding, false)] 89 public void CanEnterCover_ReturnsCorrectValues(MovementState state, bool expected) 90 { 91 bool actual = MovementModel.CanEnterCover(state); 92 Assert.Equal(expected, actual); 93 } 94 }