public void Expire_ReducesObjectCount() { // setup PPool.Clear(prefab); // arrange float shortStale = 0; int count = 7; List <GameObject> list = new List <GameObject>(); PPool.SetLimit(prefab, staleDuration: shortStale); for (int i = 0; i < count; i++) { list.Add(PPool.Get(prefab)); } for (int i = 0; i < count; i++) { PPool.Put(list[i]); } list.Clear(); // act PPool.Expire(prefab, true); int available = PPool.GetAvailable(prefab); // assert Assert.AreEqual(0, available, "Pool did not expire unused objects"); }
public void SetNoStaleDuration_RemovesTimestamps() { // setup PPool.Clear(prefab); // arrange List <GameObject> list = new List <GameObject>(); float duration = 0; // seconds int count = 9; // act (create objects with timestamps) PPool.SetLimit(prefab, staleDuration: duration); for (int i = 0; i < count; i++) { list.Add(PPool.Get(prefab)); } for (int i = 0; i < count; i++) { PPool.Put(list[i]); } list.Clear(); // act (remove timestamps) PPool.SetLimit(prefab, staleDuration: PPool.UNLIMITED); int available = PPool.GetAvailable(prefab); // assert Assert.AreEqual(count, available, "Wrong number available"); }
public void Cull_ReducesObjectCount() { // setup PPool.Clear(prefab); // arrange int count = 9; int reduced = count - 1; List <GameObject> list = new List <GameObject>(); for (int i = 0; i < count; i++) { list.Add(PPool.Get(prefab)); } for (int i = 0; i < count; i++) { PPool.Put(list[0]); } list.Clear(); // act PPool.SetLimit(prefab, poolSize: reduced); int available = PPool.GetAvailable(prefab); // assert Assert.AreEqual(reduced, available, "Available objects does not match expected count"); }
public void Clear_DestroysAllObjects() { // setup PPool.Clear(prefab); // arrange List <GameObject> list = new List <GameObject>(); int count = 9; // act for (int i = 0; i < count; i++) { GameObject g = PPool.Get(prefab); if (g != null) { list.Add(g); } } for (int i = 0; i < count; i++) { PPool.Put(list[0]); } PPool.Clear(prefab); int total = PPool.GetAvailable(prefab) + PPool.GetInUse(prefab); // assert Assert.AreEqual(0, total, "Pool contains objects"); }
public void GetInUse_IndicatesUsedQuantity() { // setup PPool.Clear(prefab); // arrange int count = 3; GameObject[] gos = new GameObject[count]; // act for (int i = 0; i < count; i++) { gos[i] = PPool.Get(prefab); } int resultForUsed = PPool.GetInUse(prefab); for (int i = 0; i < count; i++) { PPool.Put(gos[i]); } int resultForReclaimed = PPool.GetInUse(prefab); // assert Assert.AreEqual(count, resultForUsed, "Pool has wrong number of active objects"); Assert.AreEqual(0, resultForReclaimed, "Pool has wrong number of active objects"); }
public void GetAvailable_IndicatesUnusedQuantity() { // setup PPool.Clear(prefab); // arrange int count = 3; GameObject[] gos = new GameObject[count]; // act for (int i = 0; i < count; i++) { gos[i] = PPool.Get(prefab); } int resultForEmpty = PPool.GetAvailable(prefab); for (int i = 0; i < count; i++) { PPool.Put(gos[i]); } int resultForReclaimed = PPool.GetAvailable(prefab); // assert Assert.AreEqual(0, resultForEmpty, "Pool not empty"); Assert.AreEqual(count, resultForReclaimed, "Pool missing reclaimed objects"); }
public void Put_ReturnsObjectToPool() { // setup PPool.Clear(prefab); // arrange GameObject instance = PPool.Get(prefab); int available = PPool.GetAvailable(prefab); //// act bool putResult = PPool.Put(instance); int result = PPool.GetAvailable(prefab); // assert Assert.IsTrue(putResult, "Pool indicated object was destroyed"); Assert.AreEqual(0, available, "Should be no available objects"); Assert.AreEqual(1, result, "Should be one available object"); }
private void Update() { if (createPrefab) { createPrefab = false; prefab = GameObject.CreatePrimitive(PrimitiveType.Cube); prefab.name = "prefab"; PPool.SetLimit(prefab, staleDuration: 2); } if (getItems) { getItems = false; list = new List <GameObject>(); for (int i = 0; i < count; i++) { list.Add(PPool.Get(prefab)); } } if (putItems) { putItems = false; for (int i = 0; i < count; i++) { PPool.Put(list[i]); } list.Clear(); } if (expirePool) { expirePool = false; PPool.Expire(prefab); } if (prewarm) { prewarm = false; PPool.Prewarm(prefab, count, 4); } }
public void Get_PoolProvidesExistingObject() { // setup PPool.Clear(prefab); // arrange GameObject first, second; int firstHash, secondHash; // act first = PPool.Get(prefab); firstHash = first.GetHashCode(); PPool.Put(first); second = PPool.Get(prefab); secondHash = second.GetHashCode(); // assert Assert.AreEqual(firstHash, secondHash, "First and second hash do not match"); }
public void Put_DestroysNonPoolObject() { // setup PPool.Clear(prefab); // arrange GameObject nonPoolObject = GameObject.CreatePrimitive(PrimitiveType.Sphere); // act bool result = PPool.Put(nonPoolObject); // Force the use of the Unity overloaded operator == when checking // for destroyed objects. (Destroy() does not *actually* destroy the object, // it just tells Unity to treat the object AS destroyed for the moment. // Ref: https://gamedev.stackexchange.com/questions/115716/how-to-make-an-assert-isnull-test-pass-when-the-value-is-reported-as-null bool isDestroyed = nonPoolObject == null; // assert Assert.IsFalse(result, "Pool indicated object was reclaimed."); Assert.IsTrue(isDestroyed, "Object was not Destroyed"); }
public void SetLimit_AssignsPersistenceLimit() { // setup PPool.Clear(prefab); // arrange float duration = 0; PPool.SetLimit(prefab, staleDuration: duration); // act GameObject instance = PPool.Get(prefab); bool putResult = PPool.Put(instance); Delay(duration + 1); PPool.Expire(prefab); Delay(duration + 1); int available = PPool.GetAvailable(prefab); // assert Assert.IsTrue(putResult, "Pool indicates item was destroyed"); Assert.AreEqual(0, available, "Pool kept objects past expiration"); }