public void Test_ParallelHelper_ForEach_Ref() { foreach (int count in TestForCounts) { using UnmanagedSpanOwner <int> data = CreateRandomData(count); using UnmanagedSpanOwner <int> copy = new UnmanagedSpanOwner <int>(count); data.GetSpan().CopyTo(copy.GetSpan()); foreach (ref int n in copy.GetSpan()) { n = unchecked (n * 397); } ParallelHelper.ForEach(data.Memory, new Multiplier(397)); Span <int> dataSpan = data.GetSpan(); Span <int> copySpan = copy.GetSpan(); for (int i = 0; i < data.Length; i++) { if (dataSpan[i] != copySpan[i]) { Assert.Fail($"Item #{i} was not a match, was {dataSpan[i]} instead of {copySpan[i]}"); } } } }
public unsafe void Test_ParallelHelper_ForEach_In() { foreach (int count in TestForCounts) { using UnmanagedSpanOwner <int> data = CreateRandomData(count); int sum = 0; ParallelHelper.ForEach <int, Summer>(data.Memory, new Summer(&sum)); int expected = 0; foreach (int n in data.GetSpan()) { expected += n; } Assert.AreEqual(sum, expected, $"The sum doesn't match, was {sum} instead of {expected}"); } }
public unsafe void Test_ParallelHelper_For2DWithRanges() { foreach (var size in TestFor2DSizes) { using UnmanagedSpanOwner <int> data = new UnmanagedSpanOwner <int>(size.Height * size.Width); data.GetSpan().Clear(); ParallelHelper.For2D(..size.Height, ..size.Width, new Assigner2D(size.Height, size.Width, data.Ptr)); for (int i = 0; i < size.Height; i++) { for (int j = 0; j < size.Width; j++) { if (data.Ptr[(i * size.Width) + j] != unchecked (i * 397 ^ j)) { Assert.Fail($"Invalid item at position [{i},{j}], value was {data.Ptr[(i * size.Width) + j]} instead of {unchecked(i * 397 ^ j)}"); } } } } }