// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. #if !NET6_0_OR_GREATER using System; using CommunityToolkit.HighPerformance.Helpers.Internals; using Microsoft.VisualStudio.TestTools.UnitTesting; #pragma warning disable CS0649 namespace CommunityToolkit.HighPerformance.UnitTests.Helpers.Internals; [TestClass] public class Test_RuntimeHelpers { [TestMethod] public void Test_RuntimeHelpers_ManagedTypes() { Assert.IsTrue(RuntimeHelpers.IsReferenceOrContainsReferences()); Assert.IsTrue(RuntimeHelpers.IsReferenceOrContainsReferences()); Assert.IsTrue(RuntimeHelpers.IsReferenceOrContainsReferences()); Assert.IsTrue(RuntimeHelpers.IsReferenceOrContainsReferences>()); Assert.IsTrue(RuntimeHelpers.IsReferenceOrContainsReferences()); Assert.IsTrue(RuntimeHelpers.IsReferenceOrContainsReferences()); Assert.IsTrue(RuntimeHelpers.IsReferenceOrContainsReferences()); } [TestMethod] public void Test_RuntimeHelpers_UnmanagedTypes() { Assert.IsFalse(RuntimeHelpers.IsReferenceOrContainsReferences()); Assert.IsFalse(RuntimeHelpers.IsReferenceOrContainsReferences()); Assert.IsFalse(RuntimeHelpers.IsReferenceOrContainsReferences()); Assert.IsFalse(RuntimeHelpers.IsReferenceOrContainsReferences()); Assert.IsFalse(RuntimeHelpers.IsReferenceOrContainsReferences()); Assert.IsFalse(RuntimeHelpers.IsReferenceOrContainsReferences()); Assert.IsFalse(RuntimeHelpers.IsReferenceOrContainsReferences()); Assert.IsFalse(RuntimeHelpers.IsReferenceOrContainsReferences>()); Assert.IsFalse(RuntimeHelpers.IsReferenceOrContainsReferences>()); } private unsafe struct ManagedStruct1 { public int A; public Memory B; } private struct ManagedStruct2 { public int A; public ManagedStruct1 B; } private struct ManagedStruct3 { public GenericStruct> A; } private unsafe struct UnmanagedStruct1 { public int A; public double B; public Guid C; public IntPtr D; public int* E; public void** F; public GenericStruct G; public GenericStruct H; } private struct UnmanagedStruct2 { public int A; public UnmanagedStruct1 B; public UnmanagedStruct1? C; public Guid? D; } private struct GenericStruct where T : struct { public T A; public T? B; } } #endif