/ 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  }