public void Test()
        {
            var rand = new Random(3);

            List<string> list1 = new List<string>();
            WeakList<string> list2 = new WeakList<string>();

            for (int x = 0; x < 1000; x++)
            {
                var str = x.ToString();
                list1.Add(str);
                list2.Add(str);

                if (!list1.SequenceEqual(list2))
                    throw new Exception("Lists are not the same.");
            }

            for (int x = 1000; x < 2000; x++)
            {
                var str = x.ToString();
                var removeItem = list1[rand.Next(list1.Count)];
                list1.Remove(removeItem);
                list2.Remove(removeItem);

                if (!list1.SequenceEqual(list2))
                    throw new Exception("Lists are not the same.");

                list1.Add(str);
                list2.Add(str);

                if (!list1.SequenceEqual(list2))
                    throw new Exception("Lists are not the same.");
            }

            for (int x = 0; x < 100; x++)
            {
                list1.RemoveAt(rand.Next(list1.Count));
                GC.Collect();

                if (!list1.SequenceEqual(list2))
                    throw new Exception("Lists are not the same.");
            }


            list2.Clear();
            foreach (var data in list2)
                throw new Exception();
        }
Esempio n. 2
0
        public RenderableList Clone()
        {
            var result = new RenderableList(Name + "_copy", LocalMatrix, this.Select(x => x.Clone()))
            {
                IsEnabled     = IsEnabled,
                IsReflectable = IsReflectable,
                ParentMatrix  = ParentMatrix,
                BoundingBox   = BoundingBox
            };

            _clones.Add(result);
            return(result);
        }
Esempio n. 3
0
        public void Test_GcCollect()
        {
            var weakList = new WeakList <object>();

            weakList.Add(new Object());


            GC.Collect();
            GC.WaitForPendingFinalizers();

            weakList.Clear(true);

            Assert.IsTrue(weakList.Count == 0, "Item must be collected by the GC collector");
        }
        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));

            AddStep("Remove all panels", () => flow.Clear(false));

            AddUntilStep("references lost", () =>
            {
                GC.Collect();
                return(!references.Any());
            });
        }
        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));
        }
        protected override void OnAttached()
        {
            base.OnAttached();
            DockLayoutManager manager = AssociatedObject as DockLayoutManager;

            if (manager != null && !managers.Contains(manager))
            {
                lock (managers) {
                    foreach (var m in managers)
                    {
                        DockLayoutManagerLinker.Link(manager, m);
                    }
                    managers.Add(manager);
                }
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Creates an object that can be used to get updated snapshots from this <see cref="ArchiveList{TKey,TValue}"/>.
        /// Client must call <see cref="IDisposable.Dispose"/> method when finished with these resources as they will not
        /// automatically be reclaimed by the garbage collector. Class will not be initiallized until calling <see cref="ArchiveListSnapshot{TKey,TValue}.UpdateSnapshot"/>.
        /// </summary>
        /// <returns></returns>
        public ArchiveListSnapshot <TKey, TValue> CreateNewClientResources()
        {
            ArchiveListSnapshot <TKey, TValue> resources;

            lock (m_syncRoot)
            {
                if (m_disposed)
                {
                    throw new Exception("Object is disposing");
                }

                resources = new ArchiveListSnapshot <TKey, TValue>(ReleaseClientResources, UpdateSnapshot);
                m_allSnapshots.Add(resources);
            }

            return(resources);
        }
            public TreeStream <TKey, TValue> Read(SortedTreeEngineReaderOptions readerOptions, SeekFilterBase <TKey> keySeekFilter, MatchFilterBase <TKey, TValue> keyMatchFilter, WorkerThreadSynchronization workerThreadSynchronization)
            {
                if (m_disposed)
                {
                    throw new ObjectDisposedException(GetType().FullName);
                }

                SequentialReaderStream <TKey, TValue> stream = m_server.Read(readerOptions, keySeekFilter, keyMatchFilter, workerThreadSynchronization);

                if (!stream.EOS)
                {
                    stream.Disposed += OnStreamDisposal;

                    lock (m_syncRoot)
                        m_openStreams.Add(stream);
                }

                return(stream);
            }
Esempio n. 9
0
        public void Test_GcCannotCollect()
        {
            var weakList = new WeakList <object>();

            //holding strong reference
            var item = new Object();

            TestContext.Properties.Add("item", item);

            weakList.Add(item);

            GC.Collect();
            GC.WaitForPendingFinalizers();

            weakList.Clear(true);

            Assert.AreEqual(1, weakList.Count);

            TestContext.Properties.Remove("item");
        }
Esempio n. 10
0
        private (WeakList <object> list, object[] alive) generateWeakObjects()
        {
            var allObjects = new[]
            {
                new object(),
                new object(),
                new object(),
                new object(),
                new object(),
            };

            var list = new WeakList <object>();

            foreach (var obj in allObjects)
            {
                list.Add(obj);
            }

            return(list, new[] { allObjects[1], allObjects[2], allObjects[4] });
        }
Esempio n. 11
0
        private (WeakList <object> list, object[] aliveObjects) generateWeakList()
        {
            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);
            }

            return(list, new[] { objects[1], objects[2], objects[4] });
        }
Esempio n. 12
0
        public void TestTasksCanceledDuringLoadSequence()
        {
            var references = new WeakList <TestBox>();

            AddStep("populate panels", () =>
            {
                references.Clear();

                for (int i = 0; i < 16; i++)
                {
                    DelayedLoadUnloadWrapper loadUnloadWrapper;

                    flow.Add(new Container
                    {
                        Size  = new Vector2(128),
                        Child = loadUnloadWrapper = new DelayedLoadUnloadWrapper(() =>
                        {
                            var content = new TestBox {
                                RelativeSizeAxes = Axes.Both
                            };
                            references.Add(content);
                            return(content);
                        }, 0),
                    });

                    // cancel load tasks after the delayed load has started.
                    loadUnloadWrapper.DelayedLoadStarted += _ => game.Schedule(() => loadUnloadWrapper.UnbindAllBindables());
                }
            });

            AddStep("remove all panels", () => flow.Clear(false));

            AddUntilStep("references lost", () =>
            {
                GC.Collect();
                return(!references.Any());
            });
        }
		public void TestWeakList()
		{
			var wl = new WeakList<object>();

			AddObject(wl);
			Assert.AreEqual(1, wl.Count);

			GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
			AddObject(wl);
			Assert.AreEqual(1, wl.Count);

			var o = new object();
			wl.Add(o);
			GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
			Assert.AreEqual(2, wl.Count);

			int iC = 0;
			foreach (var item in wl) iC++;
			Assert.AreEqual(1, iC);
			Assert.AreEqual(2, wl.Count);

			GC.KeepAlive(o);
		}
Esempio n. 14
0
        private Player loadPlayerFor(Ruleset r)
        {
            var beatmap = CreateBeatmap(r);
            var working = new TestWorkingBeatmap(beatmap);

            workingWeakReferences.Add(working);

            Beatmap.Value            = working;
            Beatmap.Value.Mods.Value = new[] { r.GetAllMods().First(m => m is ModNoFail) };

            Player?.Exit();

            var player = CreatePlayer(r);

            playerWeakReferences.Add(player);

            LoadComponentAsync(player, p =>
            {
                Player = p;
                LoadScreen(p);
            });

            return(player);
        }
Esempio n. 15
0
        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 (object 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);
        }
Esempio n. 16
0
 void AddObject(WeakList <object> wl)
 {
     wl.Add(new Object());
 }
Esempio n. 17
0
 private void Add(WeakList <object> list, ObjectReference value)
 {
     list.Add(value.Strong);
 }
Esempio n. 18
0
 /// <summary>
 /// Begins tracking a <see cref="IVertexBatch"/>, resetting its counters every frame. This should be invoked once for every <see cref="IVertexBatch"/> in use.
 /// </summary>
 /// <param name="batch">The batch to register.</param>
 internal static void RegisterVertexBatch(IVertexBatch batch) => reset_scheduler.Add(() => all_batches.Add(batch));
            /// <summary>
            /// Add the IrecieveMessageEntity in a tag (create the tag if doesnt exists)
            /// </summary>
            /// <param name="tag"></param>
            /// <param name="Agente"></param>
            public void AddgrouptagRecieveEntity(string tag, IRecieveMessageEntity Agente)
            {
                System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(tag));
                System.Diagnostics.Debug.Assert(Agente != null);
                if (!IdEntity.ContainsKey(Agente.GetId()))
                {
                    throw new Exception("The following instance is not in the mapper, add it beforing calling this: " + Agente.ToString());
                }

                if (tagRecieveEntity.ContainsKey(tag))
                {
                    tagRecieveEntity[tag].Add(Agente);
                }
                else
                {
                    WeakList<IRecieveMessageEntity> l = new WeakList<IRecieveMessageEntity>();
                    l.Add(Agente);
                    tagRecieveEntity.Add(tag, l);
                }

                if (recieveEntityTag.ContainsKey(Agente.GetId()))
                {
                    recieveEntityTag[Agente.GetId()].Add(tag);
                }
                else
                {
                    recieveEntityTag[Agente.GetId()] = new List<string>();
                    recieveEntityTag[Agente.GetId()].Add(tag);
                }

            }
Esempio n. 20
0
 private void Add(WeakList<object> list, ObjectReference value)
 {
     list.Add(value.Strong);
 }
 /// <summary>
 /// Adds given retargeting assembly for this compilation into the cache.
 /// <see cref="CommonReferenceManager.SymbolCacheAndReferenceManagerStateGuard"/> must be locked while calling this method.
 /// </summary>
 internal void CacheRetargetingAssemblySymbolNoLock(IAssemblySymbol assembly)
 {
     _retargetingAssemblySymbols.Add(assembly);
 }
Esempio n. 22
0
 private void Add(WeakList <object> list, ObjectReference <C> value)
 {
     value.UseReference(r => list.Add(r));
 }
        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));

            AddAssert("check schedulers present", () => scroll.Scheduler.HasPendingTasks);

            AddStep("scroll to end", () => scroll.ScrollToEnd());

            AddUntilStep("repeating schedulers removed", () => !scroll.Scheduler.HasPendingTasks);

            AddUntilStep("references lost", () =>
            {
                GC.Collect();
                return(!references.Any());
            });

            AddStep("scroll to start", () => scroll.ScrollToStart());

            AddUntilStep("references restored", () => references.Count() == 16);
        }
        public void TestRemoveThenAdd()
        {
            WeakList <Container> references = new WeakList <Container>();

            int loadCount = 0;

            AddStep("populate panels", () =>
            {
                references.Clear();
                loadCount = 0;

                for (int i = 0; i < 16; i++)
                {
                    flow.Add(new Container
                    {
                        Size     = new Vector2(128),
                        Children = new Drawable[]
                        {
                            new DelayedLoadUnloadWrapper(() =>
                            {
                                TestBox testBox;
                                var container = new Container
                                {
                                    RelativeSizeAxes = Axes.Both,
                                    Children         = new Drawable[]
                                    {
                                        testBox = new TestBox {
                                            RelativeSizeAxes = Axes.Both
                                        }
                                    },
                                };

                                testBox.OnLoadComplete += _ =>
                                {
                                    references.Add(container);
                                    loadCount++;
                                };

                                return(container);
                            }, 500, 2000),
                            new SpriteText {
                                Text = i.ToString()
                            },
                        }
                    });
                }
            });

            IReadOnlyList <Container> previousChildren = null;

            AddUntilStep("all loaded", () => loadCount == 16);

            AddStep("Remove all panels", () =>
            {
                previousChildren = flow.Children.ToList();
                flow.Clear(false);
            });

            AddStep("Add panels back", () => flow.Children = previousChildren);

            AddWaitStep("wait for potential unload", 20);

            AddAssert("load count hasn't changed", () => loadCount == 16);
        }
Esempio n. 25
0
 protected static void AddReference(Timer timer)
 {
     _runningTimers.Add(timer);
 }
		void AddObject(WeakList<object> wl) { wl.Add(new Object()); }
Esempio n. 27
0
 private void Add(WeakList<object> list, ObjectReference<C> value)
 {
     value.UseReference(r => list.Add(r));
 }