mirror of
https://github.com/Thealexbarney/LibHac.git
synced 2024-11-14 10:49:41 +01:00
Add an AlignOf<T> function for use in struct layout tests
This commit is contained in:
parent
cac796ac19
commit
bc7fea5714
3 changed files with 17 additions and 34 deletions
|
@ -16,4 +16,17 @@ public class Layout
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int AlignOf<T>() where T : unmanaged
|
||||||
|
{
|
||||||
|
return Unsafe.SizeOf<AlignOfHelper<T>>() - Unsafe.SizeOf<T>();
|
||||||
|
}
|
||||||
|
|
||||||
|
private readonly struct AlignOfHelper<T> where T : unmanaged
|
||||||
|
{
|
||||||
|
#pragma warning disable CS0169 // Field is never used
|
||||||
|
private readonly byte _padding;
|
||||||
|
private readonly T _value;
|
||||||
|
#pragma warning restore CS0169
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,5 +1,4 @@
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using LibHac.Fs.Impl;
|
using LibHac.Fs.Impl;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
@ -476,21 +475,10 @@ public class TypeLayoutTests
|
||||||
Assert.Equal(0, GetOffset(in s, in s.Value));
|
Assert.Equal(0, GetOffset(in s, in s.Value));
|
||||||
}
|
}
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential)]
|
|
||||||
private struct Int64AlignmentTest
|
|
||||||
{
|
|
||||||
public byte A;
|
|
||||||
public Int64 B;
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public static void Int64Test_Layout()
|
public static void Int64_Layout()
|
||||||
{
|
{
|
||||||
var s = new Int64AlignmentTest();
|
Assert.Equal(8, Unsafe.SizeOf<Int64>());
|
||||||
|
Assert.Equal(4, AlignOf<Int64>());
|
||||||
Assert.Equal(12, Unsafe.SizeOf<Int64AlignmentTest>());
|
|
||||||
|
|
||||||
Assert.Equal(0, GetOffset(in s, in s.A));
|
|
||||||
Assert.Equal(4, GetOffset(in s, in s.B));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,5 +1,4 @@
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using LibHac.FsSystem;
|
using LibHac.FsSystem;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
using static LibHac.Tests.Common.Layout;
|
using static LibHac.Tests.Common.Layout;
|
||||||
|
@ -287,6 +286,7 @@ public class TypeLayoutTests
|
||||||
HierarchicalIntegrityVerificationLevelInformation s = default;
|
HierarchicalIntegrityVerificationLevelInformation s = default;
|
||||||
|
|
||||||
Assert.Equal(0x18, Unsafe.SizeOf<HierarchicalIntegrityVerificationLevelInformation>());
|
Assert.Equal(0x18, Unsafe.SizeOf<HierarchicalIntegrityVerificationLevelInformation>());
|
||||||
|
Assert.Equal(0x04, AlignOf<HierarchicalIntegrityVerificationLevelInformation>());
|
||||||
|
|
||||||
Assert.Equal(0x00, GetOffset(in s, in s.Offset));
|
Assert.Equal(0x00, GetOffset(in s, in s.Offset));
|
||||||
Assert.Equal(0x08, GetOffset(in s, in s.Size));
|
Assert.Equal(0x08, GetOffset(in s, in s.Size));
|
||||||
|
@ -294,24 +294,6 @@ public class TypeLayoutTests
|
||||||
Assert.Equal(0x14, GetOffset(in s, in s.Reserved));
|
Assert.Equal(0x14, GetOffset(in s, in s.Reserved));
|
||||||
}
|
}
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential)]
|
|
||||||
private struct HierarchicalIntegrityVerificationLevelInformationAlignmentTest
|
|
||||||
{
|
|
||||||
public byte A;
|
|
||||||
public HierarchicalIntegrityVerificationLevelInformation B;
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public static void HierarchicalIntegrityVerificationLevelInformation_Alignment()
|
|
||||||
{
|
|
||||||
var s = new HierarchicalIntegrityVerificationLevelInformationAlignmentTest();
|
|
||||||
|
|
||||||
Assert.Equal(0x1C, Unsafe.SizeOf<HierarchicalIntegrityVerificationLevelInformationAlignmentTest>());
|
|
||||||
|
|
||||||
Assert.Equal(0, GetOffset(in s, in s.A));
|
|
||||||
Assert.Equal(4, GetOffset(in s, in s.B));
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public static void HierarchicalIntegrityVerificationInformation_Layout()
|
public static void HierarchicalIntegrityVerificationInformation_Layout()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue