mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-07 00:39:00 +08:00
- 实现了 CoroutineScheduler 类,支持协程的运行、暂停、恢复和终止管理 - 添加了协程槽位管理机制 CoroutineSlot,用于跟踪单个协程状态 - 实现了协程的优先级、标签和分组功能,支持批量操作 - 集成了等待指令系统,包括 WaitForSecondsRealtime、WaitForFixedUpdate 等 - 添加了协程统计功能和异常处理机制 - 实现了 Godot 平台的时间源适配器 GodotTimeSource - 创建了协程调度器的高级功能测试用例 - 添加了 Timing 节点用于在 Godot 引擎中管理协程生命周期
72 lines
2.6 KiB
C#
72 lines
2.6 KiB
C#
using System.Collections.Generic;
|
|
using GFramework.Godot.Coroutine;
|
|
|
|
namespace GFramework.Godot.Tests.Coroutine;
|
|
|
|
/// <summary>
|
|
/// GodotTimeSource 的单元测试。
|
|
/// </summary>
|
|
[TestFixture]
|
|
public sealed class GodotTimeSourceTests
|
|
{
|
|
/// <summary>
|
|
/// 验证增量模式会直接累加传入的 delta。
|
|
/// </summary>
|
|
[Test]
|
|
public void Update_Should_Accumulate_Delta_When_Using_Delta_Mode()
|
|
{
|
|
var values = new Queue<double>([0.1, 0.2]);
|
|
var timeSource = new GodotTimeSource(() => values.Dequeue());
|
|
|
|
timeSource.Update();
|
|
Assert.That(timeSource.DeltaTime, Is.EqualTo(0.1).Within(0.0001));
|
|
Assert.That(timeSource.CurrentTime, Is.EqualTo(0.1).Within(0.0001));
|
|
|
|
timeSource.Update();
|
|
Assert.That(timeSource.DeltaTime, Is.EqualTo(0.2).Within(0.0001));
|
|
Assert.That(timeSource.CurrentTime, Is.EqualTo(0.3).Within(0.0001));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 验证绝对时间模式会根据前后两次采样计算 delta。
|
|
/// </summary>
|
|
[Test]
|
|
public void Update_Should_Calculate_Delta_When_Using_Absolute_Time_Mode()
|
|
{
|
|
var values = new Queue<double>([1.0, 1.25, 2.0]);
|
|
var timeSource = new GodotTimeSource(() => values.Dequeue(), useAbsoluteTime: true);
|
|
|
|
timeSource.Update();
|
|
Assert.That(timeSource.DeltaTime, Is.EqualTo(0).Within(0.0001));
|
|
Assert.That(timeSource.CurrentTime, Is.EqualTo(1.0).Within(0.0001));
|
|
|
|
timeSource.Update();
|
|
Assert.That(timeSource.DeltaTime, Is.EqualTo(0.25).Within(0.0001));
|
|
Assert.That(timeSource.CurrentTime, Is.EqualTo(1.25).Within(0.0001));
|
|
|
|
timeSource.Update();
|
|
Assert.That(timeSource.DeltaTime, Is.EqualTo(0.75).Within(0.0001));
|
|
Assert.That(timeSource.CurrentTime, Is.EqualTo(2.0).Within(0.0001));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 验证绝对时间源在回拨时仍保持单调,不会把 CurrentTime 拉回去。
|
|
/// </summary>
|
|
[Test]
|
|
public void Update_Should_Keep_Absolute_Time_Monotonic_When_Provider_Goes_Backwards()
|
|
{
|
|
var values = new Queue<double>([5.0, 4.0, 6.5]);
|
|
var timeSource = new GodotTimeSource(() => values.Dequeue(), useAbsoluteTime: true);
|
|
|
|
timeSource.Update();
|
|
timeSource.Update();
|
|
|
|
Assert.That(timeSource.DeltaTime, Is.EqualTo(0).Within(0.0001));
|
|
Assert.That(timeSource.CurrentTime, Is.EqualTo(5.0).Within(0.0001));
|
|
|
|
timeSource.Update();
|
|
|
|
Assert.That(timeSource.DeltaTime, Is.EqualTo(1.5).Within(0.0001));
|
|
Assert.That(timeSource.CurrentTime, Is.EqualTo(6.5).Within(0.0001));
|
|
}
|
|
} |