123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- using System;
- using Unity.Collections.LowLevel.Unsafe;
-
- namespace Burst.Compiler.IL.Tests
- {
- #if UNITY_2021_2_OR_NEWER || BURST_INTERNAL
- /// <summary>
- /// Test <see cref="System.ReadOnlySpan{T}"/>.
- /// </summary>
- internal partial class ReadOnlySpan
- {
- [TestCompiler]
- public static int CreateDefault()
- {
- var span = new ReadOnlySpan<int>();
-
- return span.Length;
- }
-
- [TestCompiler]
- public static int CreateStackalloc()
- {
- ReadOnlySpan<int> span = stackalloc int[42];
-
- return span.Length;
- }
-
- [TestCompiler(42)]
- public static int CreateFromNullPointer(int size)
- {
- ReadOnlySpan<double> span;
-
- unsafe
- {
- span = new ReadOnlySpan<double>(null, size);
- }
-
- return span.Length;
- }
-
- [TestCompiler]
- public static unsafe double CreateFromMalloc()
- {
- double* malloc = (double*)UnsafeUtility.Malloc(UnsafeUtility.SizeOf<double>(), UnsafeUtility.AlignOf<double>(), Unity.Collections.Allocator.Persistent);
- *malloc = 42.0f;
-
- var span = new ReadOnlySpan<double>(malloc, 1);
-
- double result = span[0];
-
- UnsafeUtility.Free(malloc, Unity.Collections.Allocator.Persistent);
-
- return result;
- }
-
- [TestCompiler]
- public static int GetItem()
- {
- ReadOnlySpan<int> span = stackalloc int[42];
- return span[41];
- }
-
- [TestCompiler]
- public static int SliceFromStart()
- {
- ReadOnlySpan<int> span = stackalloc int[42];
-
- var newSpan = span.Slice(10);
-
- return newSpan[0] + newSpan.Length;
- }
-
- [TestCompiler]
- public static int SliceFromStartWithLength()
- {
- ReadOnlySpan<int> span = stackalloc int[42];
-
- var newSpan = span.Slice(10, 4);
-
- return newSpan[3] + newSpan.Length;
- }
-
- [TestCompiler]
- public static int CopyTo()
- {
- Span<int> span = stackalloc int[42];
-
- for (int i = 0; i < span.Length; i++)
- {
- span[i] = i;
- }
-
- ReadOnlySpan<int> other = stackalloc int[4];
-
- other.CopyTo(span);
-
- int result = 0;
-
- for (int i = 0; i < span.Length; i++)
- {
- result += span[i];
- }
-
- return result;
- }
-
- [TestCompiler]
- public static int IsEmpty() => new ReadOnlySpan<int>().IsEmpty ? 1 : 0;
-
- [TestCompiler]
- public static int Empty() => ReadOnlySpan<double>.Empty.Length;
-
- [TestCompiler]
- public static int GetEnumerator()
- {
- ReadOnlySpan<int> span = stackalloc int[42];
-
- int result = 0;
-
- var enumerator = span.GetEnumerator();
-
- while (enumerator.MoveNext())
- {
- result += enumerator.Current;
- }
-
- return result;
- }
-
- [TestCompiler]
- public static int OperatorEquality() => new ReadOnlySpan<double>() == ReadOnlySpan<double>.Empty ? 1 : 0;
-
- [TestCompiler]
- public static int OperatorInEquality() => new ReadOnlySpan<double>() != ReadOnlySpan<double>.Empty ? 1 : 0;
-
- [TestCompiler]
- public static int Fixed()
- {
- Span<int> span = stackalloc int[42];
-
- for (int i = 0; i < span.Length; i++)
- {
- span[i] = i;
- }
-
- ReadOnlySpan<int> readOnlySpan = span;
-
- unsafe
- {
- fixed (int* ptr = readOnlySpan)
- {
- return ptr[41];
- }
- }
- }
- }
- #endif
- }
|