106 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			106 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using NUnit.Framework; | ||
|  | using Unity.Burst; | ||
|  | using Unity.Jobs.LowLevel.Unsafe; | ||
|  | 
 | ||
|  | namespace Unity.Collections.Tests | ||
|  | { | ||
|  |     // If ENABLE_UNITY_COLLECTIONS_CHECKS is not defined we will ignore the test | ||
|  |     // When using this attribute, consider it to logically AND with any other TestRequiresxxxx attrubute | ||
|  | #if ENABLE_UNITY_COLLECTIONS_CHECKS | ||
|  |     internal class TestRequiresCollectionChecks : System.Attribute | ||
|  |     { | ||
|  |         public TestRequiresCollectionChecks(string msg = null) { } | ||
|  |     } | ||
|  | #else | ||
|  |     internal class TestRequiresCollectionChecks : IgnoreAttribute | ||
|  |     { | ||
|  |         public TestRequiresCollectionChecks(string msg = null) : base($"Test requires ENABLE_UNITY_COLLECTION_CHECKS which is not defined{(msg == null ? "." : $": {msg}")}") { } | ||
|  |     } | ||
|  | #endif | ||
|  | 
 | ||
|  |     // If ENABLE_UNITY_COLLECTIONS_CHECKS and UNITY_DOTS_DEBUG is not defined we will ignore the test | ||
|  |     // conversely if either of them are defined the test will be run. | ||
|  |     // When using this attribute, consider it to logically AND with any other TestRequiresxxxx attrubute | ||
|  | #if ENABLE_UNITY_COLLECTIONS_CHECKS || UNITY_DOTS_DEBUG | ||
|  |     internal class TestRequiresDotsDebugOrCollectionChecks : System.Attribute | ||
|  |     { | ||
|  |         public TestRequiresDotsDebugOrCollectionChecks(string msg = null) { } | ||
|  |     } | ||
|  | #else | ||
|  |     internal class TestRequiresDotsDebugOrCollectionChecks : IgnoreAttribute | ||
|  |     { | ||
|  |         public TestRequiresDotsDebugOrCollectionChecks(string msg = null) : base($"Test requires UNITY_DOTS_DEBUG || ENABLE_UNITY_COLLECTION_CHECKS which neither are defined{(msg == null ? "." : $": {msg}")}") { } | ||
|  |     } | ||
|  | #endif | ||
|  | 
 | ||
|  |     internal class CollectionsTestCommonBase | ||
|  |     { | ||
|  |         AllocatorHelper<RewindableAllocator> rwdAllocatorHelper; | ||
|  | 
 | ||
|  |         protected AllocatorHelper<RewindableAllocator> CommonRwdAllocatorHelper => rwdAllocatorHelper; | ||
|  |         protected ref RewindableAllocator CommonRwdAllocator => ref rwdAllocatorHelper.Allocator; | ||
|  | 
 | ||
|  |         [SetUp] | ||
|  |         public virtual void Setup() | ||
|  |         { | ||
|  |         } | ||
|  | 
 | ||
|  |         [OneTimeSetUp] | ||
|  |         public void OneTimeSetup() | ||
|  |         { | ||
|  |             rwdAllocatorHelper = new AllocatorHelper<RewindableAllocator>(Allocator.Persistent); | ||
|  |             CommonRwdAllocator.Initialize(128 * 1024, true); | ||
|  |         } | ||
|  | 
 | ||
|  |         [OneTimeTearDown] | ||
|  |         public void OneTimeTearDown() | ||
|  |         { | ||
|  |             CommonRwdAllocator.Dispose(); | ||
|  |             rwdAllocatorHelper.Dispose(); | ||
|  |         } | ||
|  | 
 | ||
|  |         [TearDown] | ||
|  |         public virtual void TearDown() | ||
|  |         { | ||
|  |             CommonRwdAllocator.Rewind(); | ||
|  |             // This is test only behavior for determinism.  Rewind twice such that all | ||
|  |             // tests start with an allocator containing only one memory block. | ||
|  |             CommonRwdAllocator.Rewind(); | ||
|  | 
 | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     /// <summary> | ||
|  |     /// Collections test fixture to do setup and teardown. | ||
|  |     /// </summary> | ||
|  |     /// <remarks> | ||
|  |     /// Jobs debugger and safety checks should always be enabled when running collections tests. This fixture verifies | ||
|  |     /// those are enabled to prevent crashing the editor. | ||
|  |     /// </remarks> | ||
|  |     internal abstract class CollectionsTestFixture : CollectionsTestCommonBase | ||
|  |     { | ||
|  |         static string SafetyChecksMenu = "Jobs > Burst > Safety Checks"; | ||
|  |         private bool JobsDebuggerWasEnabled; | ||
|  | 
 | ||
|  |         [SetUp] | ||
|  |         public override void Setup() | ||
|  |         { | ||
|  |             base.Setup(); | ||
|  | 
 | ||
|  |             // Many ECS tests will only pass if the Jobs Debugger enabled; | ||
|  |             // force it enabled for all tests, and restore the original value at teardown. | ||
|  |             JobsDebuggerWasEnabled = JobsUtility.JobDebuggerEnabled; | ||
|  |             JobsUtility.JobDebuggerEnabled = true; | ||
|  |             Assert.IsTrue(BurstCompiler.Options.EnableBurstSafetyChecks, $"Collections tests must have Burst safety checks enabled! To enable, go to {SafetyChecksMenu}"); | ||
|  |         } | ||
|  | 
 | ||
|  |         [TearDown] | ||
|  |         public override void TearDown() | ||
|  |         { | ||
|  |             JobsUtility.JobDebuggerEnabled = JobsDebuggerWasEnabled; | ||
|  | 
 | ||
|  |             base.TearDown(); | ||
|  |         } | ||
|  |     } | ||
|  | } |