diff --git a/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTime.cs b/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTime.cs index 39e3920055..4a90602916 100644 --- a/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTime.cs +++ b/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTime.cs @@ -60,6 +60,8 @@ public struct NetworkTime /// The tickrate. public NetworkTime(int tickRate) { + Assert.IsTrue(tickRate > 0, "Tickrate must be a positive value."); + m_TickRate = tickRate; m_TickInterval = 1f / m_TickRate; // potential floating point precision issue, could result in different interval on different machines m_CachedTickOffset = 0; diff --git a/com.unity.netcode.gameobjects/Tests/Editor/Timing/NetworkTimeTests.cs b/com.unity.netcode.gameobjects/Tests/Editor/Timing/NetworkTimeTests.cs index 5fac93a20a..944d40863f 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/Timing/NetworkTimeTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Editor/Timing/NetworkTimeTests.cs @@ -9,6 +9,54 @@ namespace Unity.Netcode.EditorTests { public class NetworkTimeTests { + [Test] + [TestCase(0d, 0)] + [TestCase(5d, 0)] + [TestCase(-5d, 0)] + [TestCase(0d, -20)] + [TestCase(5d, int.MinValue)] + [TestCase(-5d, -1)] + public void TestFailCreateInvalidTime(double time, int tickrate) + { + Assert.Throws(() => new NetworkTime(tickrate, time)); + } + + [Test] + [TestCase(0d, 0f, 20)] + [TestCase(0d, 0f, 30)] + [TestCase(0d, 0f, 60)] + + [TestCase(201d, 201f, 20)] + [TestCase(201d, 201f, 30)] + [TestCase(201d, 201f, 60)] + + [TestCase(-4301d, -4301f, 20)] + [TestCase(-4301d, -4301f, 30)] + [TestCase(-4301d, -4301f, 60)] + + [TestCase(float.MaxValue, float.MaxValue, 20)] + [TestCase(float.MaxValue, float.MaxValue, 30)] + [TestCase(float.MaxValue, float.MaxValue, 60)] + public void TestTimeAsFloat(double d, float f, int tickRate) + { + var networkTime = new NetworkTime(tickRate, d); + Assert.True(Mathf.Approximately(networkTime.TimeAsFloat, f)); + } + + [Test] + [TestCase(53.55d, 53.5d, 10)] + [TestCase(1013553.55d, 1013553.5d, 10)] + [TestCase(0d, 0d, 10)] + [TestCase(-27.41d, -27.5d, 10)] + + [TestCase(53.55d, 53.54d, 50)] + [TestCase(1013553.55d, 1013553.54d, 50)] + [TestCase(0d, 0d, 50)] + [TestCase(-27.4133d, -27.42d, 50)] + public void TestToFixedTime(double time, double expectedFixedTime, int tickRate) + { + Assert.AreEqual(expectedFixedTime, new NetworkTime(tickRate, time).ToFixedTime().Time); + } [Test] public void NetworkTimeCreate() @@ -104,7 +152,6 @@ public void NetworkTimeSubFloatTest() Assert.IsTrue(Approximately(floatResultE, timeE.Time)); } - [Test] public void NetworkTimeAddNetworkTimeTest() { @@ -170,7 +217,6 @@ public void NetworkTimeAdvanceTest() NetworkTimeAdvanceTestInternal(randomSteps, 30, 0f); NetworkTimeAdvanceTestInternal(randomSteps, 144, 0f); - NetworkTimeAdvanceTestInternal(randomSteps, 60, 23132.231f); NetworkTimeAdvanceTestInternal(randomSteps, 1, 23132.231f); NetworkTimeAdvanceTestInternal(randomSteps, 10, 23132.231f); @@ -220,6 +266,5 @@ private static bool Approximately(double a, double b, double epsilon = 0.000001d var dif = Math.Abs(a - b); return dif <= epsilon; } - } }