tests/test_capture_lanes.cs
using HumanoidMocapX;
static class CaptureLaneTests
{
const ulong Gib = 1UL << 30, Mib = 1UL << 20;
internal static void Run()
{
// Unknown or exhausted budgets still allow one lane.
MotionTests.Equal(1, CaptureLanes.Capacity(0, 0));
MotionTests.Equal(1, CaptureLanes.Capacity(8 * Gib, 9 * Gib));
MotionTests.Equal(1, CaptureLanes.Capacity(4 * Gib, 0));
// 4 GiB for the first lane, then 512 MiB per extra lane, up to the maximum.
MotionTests.Equal(2, CaptureLanes.Capacity(4 * Gib + 512 * Mib, 0));
MotionTests.Equal(3, CaptureLanes.Capacity(16 * Gib, 11 * Gib));
MotionTests.Equal(CaptureLanes.Maximum, CaptureLanes.Capacity(16 * Gib, 2 * Gib));
MotionTests.Equal(CaptureLanes.Maximum, CaptureLanes.Resolve(CaptureLanes.Auto, 24 * Gib, 0));
MotionTests.Equal(2, CaptureLanes.Resolve(2, 24 * Gib, 0));
MotionTests.Equal(1, CaptureLanes.Resolve(4, 4 * Gib, 0));
MotionTests.Throws<ArgumentOutOfRangeException>(() => CaptureLanes.Resolve(-1, 24 * Gib, 0));
MotionTests.Throws<ArgumentOutOfRangeException>(() => CaptureLanes.Resolve(CaptureLanes.Maximum + 1, 24 * Gib, 0));
MotionTests.Throws<ArgumentOutOfRangeException>(() => new CaptureOptions { Lanes = CaptureLanes.Maximum + 1 }.Validate());
new CaptureOptions { Lanes = 3 }.Validate(); new CaptureOptions { Lanes = CaptureLanes.Maximum }.Validate();
Console.WriteLine("PASS: capture lanes from video memory, Auto, capped manual choices and validation");
}
}