64 lines
1.9 KiB
C#
64 lines
1.9 KiB
C#
// Copyright (C) 2026 SharpEmu Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
using SharpEmu.Libs.Gpu.Buffers;
|
|
using SharpEmu.Libs.Gpu.Images;
|
|
using Xunit;
|
|
|
|
namespace SharpEmu.Libs.Tests.Gpu.Images;
|
|
|
|
public sealed class ImageQueryResultsTests
|
|
{
|
|
[Theory]
|
|
[InlineData(0)]
|
|
[InlineData(1)]
|
|
[InlineData(16)]
|
|
[InlineData(17)]
|
|
[InlineData(65)]
|
|
public void ResultsKeepOrderAndSupportRepeatedEnumeration(int count)
|
|
{
|
|
var results = Create(count);
|
|
Assert.Equal(count, results.Count);
|
|
for (var pass = 0; pass < 2; pass++)
|
|
{
|
|
var index = 0;
|
|
foreach (var identifier in results)
|
|
Assert.Equal(new ResourceSlotIdentifier((uint)index++, 7), identifier);
|
|
Assert.Equal(count, index);
|
|
}
|
|
Assert.Throws<ArgumentOutOfRangeException>(() => results[-1]);
|
|
Assert.Throws<ArgumentOutOfRangeException>(() => results[count]);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(0)]
|
|
[InlineData(16)]
|
|
public void InlineQueriesDoNotAllocate(int count)
|
|
{
|
|
var sum = 0UL;
|
|
var allocated = AllocationMeasurement.SteadyState(
|
|
() => { for (var warmup = 0; warmup < 100; warmup++) Sum(count); },
|
|
() =>
|
|
{
|
|
sum = 0;
|
|
for (var iteration = 0; iteration < 1000; iteration++) sum += Sum(count);
|
|
});
|
|
Assert.Equal(0, allocated);
|
|
Assert.Equal((ulong)(count * (count - 1) / 2) * 1000, sum);
|
|
}
|
|
|
|
private static ImageQueryResults Create(int count)
|
|
{
|
|
var results = new ImageQueryResults();
|
|
for (var index = 0; index < count; index++) results.Add(new ResourceSlotIdentifier((uint)index, 7));
|
|
return results;
|
|
}
|
|
|
|
private static ulong Sum(int count)
|
|
{
|
|
ulong sum = 0;
|
|
foreach (var identifier in Create(count)) sum += identifier.Index;
|
|
return sum;
|
|
}
|
|
}
|