IEnumerator Start() { var random = new System.Random(); { _dummyBool = false; var voidCallback = new NativeLib.VoidCallback(ToggleDummy); NativeLib.ExecuteCallback(voidCallback); Test("NativeLib.ExecuteVoidCallback()", true, _dummyBool); NativeLib.ExecuteCallback(voidCallback); Test("NativeLib.ExecuteVoidCallback()", false, _dummyBool); LogComplete("NativeLib.ExecuteVoidCallback()"); } { var boolCallback = new NativeLib.BoolCallback(ToggleBool); var val = NativeLib.ExecuteCallback(boolCallback, false); Test("NativeLib.ExecuteBoolCallback()", true, val); val = NativeLib.ExecuteCallback(boolCallback, true); Test("NativeLib.ExecuteBoolCallback()", false, val); LogComplete("NativeLib.ExecuteBoolCallback()"); } { for (var i = 0; i < NUM_TESTS; ++i) { var byteCallback = new NativeLib.ByteCallback(DecrementByte); var param = (byte)random.Next(); var val = NativeLib.ExecuteCallback(byteCallback, param); Test("NativeLib.ExecuteCharCallback()", DecrementByte(param), val); } LogComplete("NativeLib.ExecuteCharCallback()"); } { for (var i = 0; i < NUM_TESTS; ++i) { var shortCallback = new NativeLib.ShortCallback(DecrementShort); var param = (short)random.Next(); var val = NativeLib.ExecuteCallback(shortCallback, param); Test("NativeLib.ExecuteShortCallback()", DecrementShort(param), val); } LogComplete("NativeLib.ExecuteShortCallback()"); } { for (var i = 0; i < NUM_TESTS; ++i) { var intCallback = new NativeLib.IntCallback(DecrementInt); var param = random.Next(); var val = NativeLib.ExecuteCallback(intCallback, param); Test("NativeLib.ExecuteIntCallback()", DecrementInt(param), val); } LogComplete("NativeLib.ExecuteIntCallback()"); } { for (var i = 0; i < NUM_TESTS; ++i) { var floatCallback = new NativeLib.FloatCallback(MultiplyByTwoFloat); var param = (float)random.Next(); var val = NativeLib.ExecuteCallback(floatCallback, param); Test("NativeLib.ExecuteFloatCallback()", MultiplyByTwoFloat(param), val); } LogComplete("NativeLib.ExecuteFloatCallback()"); } { for (var i = 0; i < NUM_TESTS; ++i) { var doubleCallback = new NativeLib.DoubleCallback(MultiplyByTwoDouble); var param = (double)random.Next(); var val = NativeLib.ExecuteCallback(doubleCallback, param); Test("NativeLib.ExecuteDoubleCallback()", MultiplyByTwoDouble(param), val); } LogComplete("NativeLib.ExecuteDoubleCallback()"); } { var callbacks = new NativeLib.IntCallback [] { DecrementInt, IncrementInt }; for (var i = 0; i < NUM_TESTS; ++i) { var param = random.Next(); var val = NativeLib.ExecuteCallback(callbacks, param, 0); Test("NativeLib.ExecuteIntCallbackByIndex()", callbacks[0](param), val); } for (var i = 0; i < NUM_TESTS; ++i) { var param = random.Next(); var val = NativeLib.ExecuteCallback(callbacks, param, 1); Test("NativeLib.ExecuteIntCallbackByIndex()", callbacks[1](param), val); } LogComplete("NativeLib.ExecuteIntCallbackByIndex()"); } { var callback = new NativeLib.StringCallback(SetDummyString); NativeLib.ExecuteCallback(callback, "after"); Test("NativeLib.ExecuteStringCallback()", "after", _dummyString); NativeLib.ExecuteCallback(callback, "aser3f@#$!3fsdrt"); Test("NativeLib.ExecuteStringCallback()", "aser3f@#$!3fsdrt", _dummyString); NativeLib.ExecuteCallback(callback, ""); Test("NativeLib.ExecuteStringCallback()", "", _dummyString); LogComplete("NativeLib.ExecuteStringCallback()"); } { var callback = new NativeLib.StructCallback(SetDummyVec2); var newVec2 = new NativeLib.Vec2(); for (var i = 0; i < NUM_TESTS; ++i) { newVec2.x = random.Next(); newVec2.y = random.Next(); NativeLib.ExecuteCallback(callback, newVec2); Test("NativeLib.ExecuteStructCallback()", newVec2, _dummyVec2); } LogComplete("NativeLib.ExecuteStructCallback()"); } { var callback1 = new NativeLib.IntCallback(DecrementInt); var callback2 = new NativeLib.IntCallback(IncrementInt); NativeLib.StoreIntCallbackForLater(callback1); for (var i = 0; i < NUM_TESTS; ++i) { var param = random.Next(); var val = NativeLib.ExecuteStoredIntCallback(param); Test("NativeLib.ExecuteStoredIntCallback()", callback1(param), val); } NativeLib.StoreIntCallbackForLater(callback2); for (var i = 0; i < NUM_TESTS; ++i) { var param = random.Next(); var val = NativeLib.ExecuteStoredIntCallback(param); Test("NativeLib.ExecuteStoredIntCallback()", callback2(param), val); } NativeLib.StoreIntCallbackForLater(null); for (var i = 0; i < NUM_TESTS; ++i) { var val = NativeLib.ExecuteStoredIntCallback(random.Next()); Test("NativeLib.ExecuteStoredIntCallback()", -1, val); } LogComplete("NativeLib.StoreIntCallbackForLater(),\n" + "NativeLib.ExecuteStoredIntCallback()"); } { var structWithCallbacks = new NativeLib.StructWithCallbacks(); structWithCallbacks.eventA = IncrementInt; structWithCallbacks.eventB = DecrementInt; NativeLib.StoreStructWithCallbacksForLater(structWithCallbacks); for (var i = 0; i < NUM_TESTS; ++i) { var param = random.Next(); var val = NativeLib.ExecuteStoredStructWithCallbacksEventA(param); Test("NativeLib.ExecuteStoredStructWithCallbacksEventA()", structWithCallbacks.eventA(param), val); val = NativeLib.ExecuteStoredStructWithCallbacksEventB(param); Test("NativeLib.ExecuteStoredStructWithCallbacksEventB()", structWithCallbacks.eventB(param), val); } structWithCallbacks.eventA = null; structWithCallbacks.eventB = null; NativeLib.StoreStructWithCallbacksForLater(structWithCallbacks); { var param = random.Next(); var val = NativeLib.ExecuteStoredStructWithCallbacksEventA(param); Test("NativeLib.ExecuteStoredStructWithCallbacksEventA()", -1, val); val = NativeLib.ExecuteStoredStructWithCallbacksEventB(param); Test("NativeLib.ExecuteStoredStructWithCallbacksEventB()", -1, val); } LogComplete("NativeLib.StoreStructWithCallbacksForLater(),\n" + "NativeLib.ExecuteStoredStructWithCallbacksEventA(),\n" + "NativeLib.ExecuteStoredStructWithCallbacksEventB()"); } { _dummySynchronizingBool = false; var callback = new NativeLib.VoidCallback(ToggleSynchronizingBool); NativeLib.ExecuteCallbackInThread(callback); var timeStart = Time.time; var timeOutSeconds = 5.0f; while (Time.time < timeStart + timeOutSeconds) // blocking execution { var val = false; lock (_synchronizationObject) { val = _dummySynchronizingBool; } if (val) { break; } yield return(null); } Test("NativeLib.ExecuteCallbackInThread()", () => { return(Time.time < timeStart + timeOutSeconds); }); LogComplete("NativeLib.ExecuteCallbackInThread()"); } Debug.Log("<b>NativeLibDelegatesTester Test Complete</b>"); }
void Start() { var random = new System.Random(); { for (var i = 0; i < NUM_TESTS; ++i) { var a = new NativeLib.Vec2(); a.x = (float)random.NextDouble(); a.y = (float)random.NextDouble(); var b = NativeLib.SwapCoords(a); Debug.Assert(a.x == b.y, "NativeLib.SwapCoords()"); Debug.Assert(a.y == b.x, "NativeLib.SwapCoords()"); NativeLib.SwapCoordsPtr(ref b); Debug.Assert(a.x == b.x, "NativeLib.SwapCoordsPtr()"); Debug.Assert(a.y == b.y, "NativeLib.SwapCoordsPtr()"); NativeLib.SwapCoordsRef(ref b); Debug.Assert(a.x == b.y, "NativeLib.SwapCoords()"); Debug.Assert(a.y == b.x, "NativeLib.SwapCoords()"); } LogComplete("NativeLib.SwapCoords()"); } { Action testCase = () => { for (var i = 0; i < NUM_TESTS; ++i) { var vecArr = new NativeLib.Vec2[random.Next(2, 10)]; var val = (float)random.NextDouble(); NativeLib.SetVecArray(vecArr, val); foreach (var v in vecArr) { Debug.Assert(v.x == val, "NativeLib.SetVecArray()"); Debug.Assert(v.y == val, "NativeLib.SetVecArray()"); } } }; TestWithAlternate(testCase); LogComplete("NativeLib.SetVecArray()"); } { Action testCase = () => { for (var i = 0; i < NUM_TESTS; ++i) { var vecArr = new NativeLib.Vec2[random.Next(2, 10)]; var sum = new NativeLib.Vec2(); for (var j = 0; j < vecArr.Length; ++j) { vecArr[j].x = (float)random.NextDouble(); vecArr[j].y = (float)random.NextDouble(); sum.x += vecArr[j].x; sum.y += vecArr[j].y; } var arrSum = NativeLib.GetVecArraySum(vecArr); Test("NativeLib.GetVecArraySum()", sum, arrSum); } }; TestWithAlternate(testCase); LogComplete("NativeLib.GetVecArraySum()"); } { for (var i = 0; i < NUM_TESTS; ++i) { var a = new NativeLib.Vec2(); a.x = (float)random.NextDouble(); a.y = (float)random.NextDouble(); var b = new NativeLib.Vec2(); b.x = (float)random.NextDouble(); b.y = (float)random.NextDouble(); var dist = NativeLib.GetDistance(a, b); var xDeltaSq = (a.x - b.x) * (a.x - b.x); var yDeltaSq = (a.y - b.y) * (a.y - b.y); var expDist = Mathf.Sqrt(xDeltaSq + yDeltaSq); Test("NativeLib.GetDistance()", expDist, dist); } LogComplete("NativeLib.GetDistance()"); } { for (var i = 0; i < NUM_TESTS; ++i) { var line = new NativeLib.Line(); line.start.x = (float)random.NextDouble(); line.start.y = (float)random.NextDouble(); line.end.x = (float)random.NextDouble(); line.end.y = (float)random.NextDouble(); var lineLength = NativeLib.GetLineLength(line); var xDeltaSq = (line.start.x - line.end.x) * (line.start.x - line.end.x); var yDeltaSq = (line.start.y - line.end.y) * (line.start.y - line.end.y); var expLength = Mathf.Sqrt(xDeltaSq + yDeltaSq); Test("NativeLib.GetLineLength()", expLength, lineLength); } LogComplete("NativeLib.GetLineLength()"); } { for (var i = 0; i < NUM_TESTS; ++i) { var a = new NativeLib.Vec2(); a.x = (float)random.NextDouble(); a.y = (float)random.NextDouble(); var b = new NativeLib.Vec2(); b.x = (float)random.NextDouble(); b.y = (float)random.NextDouble(); var line = new NativeLib.Line(); NativeLib.GetLineFromVecs(ref line, a, b); Test("NativeLib.GetLineFromVecs()", line.start, a); Test("NativeLib.GetLineFromVecs()", line.end, b); } LogComplete("NativeLib.GetLineFromVecs()"); } { for (var i = 0; i < NUM_TESTS; ++i) { var line = new NativeLib.Line(); line.start.x = (float)random.NextDouble(); line.start.y = (float)random.NextDouble(); line.end.x = (float)random.NextDouble(); line.end.y = (float)random.NextDouble(); var lineLength = NativeLib.GetLineWithPtrsLength(line); var xDeltaSq = (line.start.x - line.end.x) * (line.start.x - line.end.x); var yDeltaSq = (line.start.y - line.end.y) * (line.start.y - line.end.y); var expLength = Mathf.Sqrt(xDeltaSq + yDeltaSq); Test("NativeLib.GetLineWithPtrsLength()", expLength, lineLength); } LogComplete("NativeLib.GetLineWithPtrsLength()"); } { for (var i = 0; i < NUM_TESTS; ++i) { var a = new NativeLib.Vec2(); a.x = (float)random.NextDouble(); a.y = (float)random.NextDouble(); var b = new NativeLib.Vec2(); b.x = (float)random.NextDouble(); b.y = (float)random.NextDouble(); var line = new NativeLib.Line(); NativeLib.GetLineWithPtrsFromVecs(ref line, a, b); Test("NativeLib.GetLineWithPtrsFromVecs()", line.start, a); Test("NativeLib.GetLineWithPtrsFromVecs()", line.end, b); } LogComplete("NativeLib.GetLineWithPtrsFromVecs()"); } { for (var i = 0; i < NUM_TESTS; ++i) { var triangle = new NativeLib.Triangle(); triangle.edge = new NativeLib.Vec2[3]; for (var j = 0; j < 3; ++j) { triangle.edge[j].x = (float)random.NextDouble(); triangle.edge[j].y = (float)random.NextDouble(); } var p = NativeLib.GetTrianglePerimeter(triangle); // Heron's Formula var a = NativeLib.GetDistance(triangle.edge[0], triangle.edge[1]); var b = NativeLib.GetDistance(triangle.edge[1], triangle.edge[2]); var c = NativeLib.GetDistance(triangle.edge[2], triangle.edge[0]); var p2 = a + b + c; Test("NativeLib.GetTrianglePerimeter()", p, p2); } LogComplete("NativeLib.GetTrianglePerimeter()"); } { for (var i = 0; i < NUM_TESTS; ++i) { var a = new NativeLib.Vec2(); a.x = (float)random.NextDouble(); a.y = (float)random.NextDouble(); var b = new NativeLib.Vec2(); b.x = (float)random.NextDouble(); b.y = (float)random.NextDouble(); var c = new NativeLib.Vec2(); c.x = (float)random.NextDouble(); c.y = (float)random.NextDouble(); var triangle = new NativeLib.Triangle(); NativeLib.GetTriangleFromVecs(ref triangle, a, b, c); Test("NativeLib.GetTriangleFromVecs()", triangle.edge[0], a); Test("NativeLib.GetTriangleFromVecs()", triangle.edge[1], b); Test("NativeLib.GetTriangleFromVecs()", triangle.edge[2], c); } LogComplete("NativeLib.GetTriangleFromVecs()"); } { for (var i = 0; i < NUM_TESTS; ++i) { var p = new NativeLib.Path(); p.count = random.Next(2, 100); p.edge = new NativeLib.Vec2[p.count]; for (var j = 0; j < p.count; ++j) { var v = new NativeLib.Vec2(); v.x = (float)random.NextDouble(); v.y = (float)random.NextDouble(); p.edge[j] = v; } var pathLength = NativeLib.GetPathLength(p); var pathLength2 = 0.0f; for (var j = 1; j < p.count; ++j) { pathLength2 += NativeLib.GetDistance(p.edge[j - 1], p.edge[j]); } Test("NativeLib.GetPathLength()", pathLength, pathLength2); } LogComplete("NativeLib.GetPathLength()"); } { for (var i = 0; i < NUM_TESTS; ++i) { var count = random.Next(1, 100); var vec = new NativeLib.Vec2[count]; for (var j = 0; j < vec.Length; ++j) { vec[j] = new NativeLib.Vec2(); vec[j].x = (float)random.NextDouble(); vec[j].y = (float)random.NextDouble(); } var path = new NativeLib.Path(); NativeLib.GetPathFromVecs(ref path, vec); for (var j = 0; j < path.count; ++j) { Test("NativeLib.GetPathFromVecs()", path.edge[j], vec[j]); } } LogComplete("NativeLib.GetPathFromVecs()"); } Debug.Log("NativeLibStructsTester Test Complete"); }