using System; using System.Collections; using System.Diagnostics; using System.Threading.Tasks; using NUnit.Framework; using Speckle.Core.Api; using UnityEngine; using UnityEngine.TestTools; public class PerformanceTest { //This method is much faster private static readonly string[] dataSource = new[] { "https://latest.speckle.dev/streams/24c3741255/commits/0925840e09" }; [Test, TestCaseSource(nameof(dataSource))] public void Receive_GetAwaiterResult(string stream) { var stopwatch = Stopwatch.StartNew(); Helpers.Receive(stream).GetAwaiter().GetResult(); stopwatch.Stop(); Console.WriteLine(stopwatch.ElapsedMilliseconds); Assert.That(stopwatch.ElapsedMilliseconds, Is.Zero); } //This method takes around 46 seconds to complete [Test, TestCaseSource(nameof(dataSource))] public void Receive_TaskRunAsync(string stream) { var stopwatch = Stopwatch.StartNew(); Task.Run(async () => { await Helpers.Receive(stream); }).GetAwaiter().GetResult(); stopwatch.Stop(); Console.WriteLine(stopwatch.ElapsedMilliseconds); Assert.That(stopwatch.ElapsedMilliseconds, Is.Zero); } [UnityTest, TestCaseSource(nameof(dataSource))] public IEnumerable Receive_Coroutine(string stream) { var stopwatch = Stopwatch.StartNew(); Task t = Helpers.Receive(stream); t.Start(); yield return new WaitUntil(() => !t.IsCompleted || stopwatch.ElapsedMilliseconds >= 100000); stopwatch.Stop(); Console.WriteLine(stopwatch.ElapsedMilliseconds); Assert.That(stopwatch.ElapsedMilliseconds, Is.Zero); Assert.True(t.IsCompletedSuccessfully); } }