45 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			45 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using NUnit.Framework; | ||
|  | using Unity.Collections.LowLevel.Unsafe; | ||
|  | using Unity.Collections.Tests; | ||
|  | 
 | ||
|  | internal class UnsafeCounterTests | ||
|  | { | ||
|  |     [Test] | ||
|  |     public unsafe void UnsafeAtomicCounter32_AddSub() | ||
|  |     { | ||
|  |         int value = 0; | ||
|  |         var counter = new UnsafeAtomicCounter32(&value); | ||
|  | 
 | ||
|  |         Assert.AreEqual(0, counter.Add(123)); | ||
|  |         Assert.AreEqual(123, counter.Add(0)); | ||
|  |         Assert.AreEqual(123, counter.Sub(0)); | ||
|  |         Assert.AreEqual(123, counter.AddSat(1, 123)); | ||
|  |         Assert.AreEqual(123, counter.SubSat(1, 123)); | ||
|  | 
 | ||
|  |         counter.AddSat(0xffff, 256); | ||
|  |         Assert.AreEqual(256, counter.Add(0)); | ||
|  | 
 | ||
|  |         counter.SubSat(0xffff, -256); | ||
|  |         Assert.AreEqual(-256, counter.Add(0)); | ||
|  |     } | ||
|  | 
 | ||
|  |     [Test] | ||
|  |     public unsafe void UnsafeAtomicCounter64_AddSub() | ||
|  |     { | ||
|  |         long value = 0; | ||
|  |         var counter = new UnsafeAtomicCounter64(&value); | ||
|  | 
 | ||
|  |         Assert.AreEqual(0, counter.Add(123)); | ||
|  |         Assert.AreEqual(123, counter.Add(0)); | ||
|  |         Assert.AreEqual(123, counter.Sub(0)); | ||
|  |         Assert.AreEqual(123, counter.AddSat(1, 123)); | ||
|  |         Assert.AreEqual(123, counter.SubSat(1, 123)); | ||
|  | 
 | ||
|  |         counter.AddSat(0xffff, 256); | ||
|  |         Assert.AreEqual(256, counter.Add(0)); | ||
|  | 
 | ||
|  |         counter.SubSat(0xffff, -256); | ||
|  |         Assert.AreEqual(-256, counter.Add(0)); | ||
|  |     } | ||
|  | } |