protected unsafe void PerformManipulation <TOrigin, TTarget>(TOrigin[] origin, TTarget[] target, ArrayManipulationOperation <TOrigin, TTarget> operation) where TOrigin : unmanaged where TTarget : unmanaged { DebugAssertionHelpers.TestArrays(origin, target); fixed(TOrigin *o = origin) fixed(TTarget * t = target) { if (!operation(o, t, ArrayLength)) { UnsupportedInstructionSet(); } for (int i = 0; i < ArrayLength; i++) { Assert.AreEqual(GetExpectedResult <TOrigin, TTarget>(o, i), target[i], $"{i}/{ArrayLength}"); } } // Clear for debugging purposes Array.Clear(target, 0, ArrayLength); }
protected unsafe void PerformManipulationArray <TOrigin>(ArrayManipulationOperation <TOrigin, TOrigin> operation) where TOrigin : unmanaged { PerformManipulation(new TOrigin[ArrayLength], new TOrigin[ArrayLength], operation); }