public void TestRemoveAllUsingRemoveAtFromEnd() { var objects = new List <object> { new object(), new object(), new object(), new object(), new object(), new object(), }; var list = new WeakList <object>(); foreach (object o in objects) { list.Add(o); } for (int i = 0; i < objects.Count; i++) { list.RemoveAt(list.Count() - 1); } Assert.That(list.Count(), Is.Zero); }
public void TestUnloadViaScroll() { WeakList <Container> references = new WeakList <Container>(); AddStep("populate panels", () => { references.Clear(); for (int i = 0; i < 16; i++) { flow.Add(new Container { Size = new Vector2(128), Children = new Drawable[] { new DelayedLoadUnloadWrapper(() => { var container = new Container { RelativeSizeAxes = Axes.Both, Children = new Drawable[] { new TestBox { RelativeSizeAxes = Axes.Both } }, }; references.Add(container); return(container); }, 500, 2000), new SpriteText { Text = i.ToString() }, } }); } flow.Add( new Container { Size = new Vector2(128, 1280), }); }); AddUntilStep("references loaded", () => references.Count() == 16 && references.All(c => c.IsLoaded)); AddStep("scroll to end", () => scroll.ScrollToEnd()); AddUntilStep("references lost", () => { GC.Collect(); return(!references.Any()); }); AddStep("scroll to start", () => scroll.ScrollToStart()); AddUntilStep("references restored", () => references.Count() == 16); }
public void TestRemoveObjectsAtSides() { var objects = new List <object> { new object(), new object(), new object(), new object(), new object(), new object(), }; var list = new WeakList <object>(); foreach (object o in objects) { list.Add(o); } list.Remove(objects[0]); list.Remove(objects[1]); list.Remove(objects[4]); list.Remove(objects[5]); Assert.That(list.Count(), Is.EqualTo(2)); Assert.That(list, Does.Contain(objects[2])); Assert.That(list, Does.Contain(objects[3])); }
public void TestAddAfterRemoveFromEnd() { var objects = new List <object> { new object(), new object(), new object(), }; object newLastObject = new object(); var list = new WeakList <object>(); foreach (object o in objects) { list.Add(o); } list.Remove(objects[2]); list.Add(newLastObject); Assert.That(list.Count(), Is.EqualTo(3)); Assert.That(list, Does.Contain(objects[0])); Assert.That(list, Does.Contain(objects[0])); Assert.That(list, Does.Not.Contain(objects[2])); Assert.That(list, Does.Contain(newLastObject)); }
public void TestRemovedStillUnload() { WeakList <Container> references = new WeakList <Container>(); AddStep("populate panels", () => { references.Clear(); for (int i = 0; i < 16; i++) { flow.Add(new Container { Size = new Vector2(128), Children = new Drawable[] { new DelayedLoadUnloadWrapper(() => { var container = new Container { RelativeSizeAxes = Axes.Both, Children = new Drawable[] { new TestBox { RelativeSizeAxes = Axes.Both } }, }; references.Add(container); return(container); }, 500, 2000), new SpriteText { Text = i.ToString() }, } }); } }); AddUntilStep("references loaded", () => references.Count() == 16 && references.All(c => c.IsLoaded)); AddAssert("check schedulers present", () => scroll.Scheduler.HasPendingTasks); AddStep("Remove all panels", () => flow.Clear(false)); AddUntilStep("repeating schedulers removed", () => !scroll.Scheduler.HasPendingTasks); AddUntilStep("references lost", () => { GC.Collect(); return(!references.Any()); }); }
public void TestEnumerate() { object obj = new object(); var list = new WeakList <object> { obj }; Assert.That(list.Count(), Is.EqualTo(1)); Assert.That(list, Does.Contain(obj)); GC.KeepAlive(obj); }
public void TestRemove() { object obj = new object(); var list = new WeakList <object> { obj }; list.Remove(obj); Assert.That(list.Count(), Is.Zero); Assert.That(list, Does.Not.Contain(obj)); GC.KeepAlive(obj); }
public void TestRemoveWeakReference() { object obj = new object(); var weakRef = new WeakReference <object>(obj); var list = new WeakList <object> { weakRef }; list.Remove(weakRef); Assert.That(list.Count(), Is.Zero); Assert.That(list.Contains(weakRef), Is.False); GC.KeepAlive(obj); }
public void TestRemoveAllUsingRemoveAtFromBothSides() { var objects = new List <object> { new object(), new object(), new object(), new object(), new object(), new object(), new object(), new object(), new object(), }; var list = new WeakList <object>(); foreach (var o in objects) { list.Add(o); } for (int i = 0; i < objects.Count; i++) { if (i % 2 == 0) { list.RemoveAt(0); } else { list.RemoveAt(list.Count() - 1); } } Assert.That(list.Count(), Is.Zero); }
public void TestCountIsZeroAfterClear() { object obj = new object(); var weakRef = new WeakReference <object>(obj); var list = new WeakList <object> { obj, weakRef }; list.Clear(); Assert.That(list.Count(), Is.Zero); Assert.That(list, Does.Not.Contain(obj)); Assert.That(list.Contains(weakRef), Is.False); GC.KeepAlive(obj); }
public static void LogAndFlush() { if (!DebugUtils.IsDebugBuild) { return; } lock (loading_components) { Logger.Log($"⏳ Currently loading components ({loading_components.Count()})"); foreach (var c in loading_components.OrderBy(c => c.LoadThread?.Name).ThenBy(c => c.LoadState)) { Logger.Log(c.ToString()); Logger.Log($"- thread: {c.LoadThread?.Name ?? "none"}"); Logger.Log($"- state: {c.LoadState}"); } loading_components.Clear(); Logger.Log("🧵 Task schedulers"); Logger.Log(CompositeDrawable.SCHEDULER_STANDARD.GetStatusString()); Logger.Log(CompositeDrawable.SCHEDULER_LONG_LOAD.GetStatusString()); } ThreadPool.GetAvailableThreads(out int workerAvailable, out int completionAvailable); ThreadPool.GetMinThreads(out int workerMin, out int completionMin); ThreadPool.GetMaxThreads(out int workerMax, out int completionMax); Logger.Log("🎱 Thread pool"); // TODO: use after net6 // Logger.Log($"threads: {ThreadPool.ThreadCount:#,0}"); // Logger.Log($"work pending: {ThreadPool.PendingWorkItemCount:#,0}"); // Logger.Log($"work completed: {ThreadPool.CompletedWorkItemCount:#,0}"); Logger.Log($"worker: min {workerMin,-6:#,0} max {workerMax,-6:#,0} available {workerAvailable,-6:#,0}"); Logger.Log($"completion: min {completionMin,-6:#,0} max {completionMax,-6:#,0} available {completionAvailable,-6:#,0}"); }
public void TestAddAfterClear() { var objects = new List <object> { new object(), new object(), new object(), }; object newObject = new object(); var list = new WeakList <object>(); foreach (object o in objects) { list.Add(o); } list.Clear(); list.Add(newObject); Assert.That(list.Count(), Is.EqualTo(1)); Assert.That(list, Does.Contain(newObject)); }