polygone/Library/PackageCache/com.unity.multiplayer.mlapi@3e3aef6aa0/Tests/Runtime/TickSystemTests.cs
2021-08-02 05:44:37 -04:00

51 lines
1.6 KiB
C#

using System;
using System.Collections;
using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;
namespace MLAPI.RuntimeTests
{
public class TickSystemTests: IDisposable
{
private NetworkTickSystem m_TickSystem = null;
private float m_TestDuration = 3.0f;
private float m_SleepInterval = 0.001f;
private float m_TickInterval = 0.010f;
public void Dispose()
{
m_TickSystem.Dispose();
m_TickSystem = null;
NetworkUpdateLoop.UnregisterLoopSystems();
}
[UnityTest]
public IEnumerator VerifyTickSystem()
{
m_TickSystem = new NetworkTickSystem(m_TickInterval);
var startTick = m_TickSystem.GetTick();
var startTime = Time.unscaledTime;
var lastTick = startTick;
do
{
var currentTick = m_TickSystem.GetTick();
Assert.IsTrue(currentTick >= lastTick); // check monotonicity of ticks
lastTick = currentTick;
yield return new WaitForSeconds(m_SleepInterval);
} while (Time.unscaledTime - startTime <= m_TestDuration);
var endTick = m_TickSystem.GetTick();
var endTime = Time.unscaledTime;
var elapsedTicks = endTick - startTick;
var elapsedTime = endTime - startTime;
var elapsedTicksExpected = (int)(elapsedTime / m_TickInterval);
Assert.Less(Math.Abs(elapsedTicksExpected - elapsedTicks), 2); // +/- 1 is OK
}
}
}