public void Allocate() { PermutationSetup permutation = new PermutationSetup(); permutation.Add(count16queue0); permutation.Add(count16queue16); foreach (Scenario scenario in permutation.Scenarios) { using (Run run = scenario.Run().Initialize()) { IBlockPool pool = run.Parameters["Pool"] as BlockPool; byte[] data = null; for (int i = 0; i < 16; i++) { data = pool.Allocate(); Assert.IsTrue(data != null); Assert.AreEqual(4096, data.Length); } Semaphore s = new Semaphore(0, 256); Task.Run(() => { pool.Allocate(); s.Release(); }); Assert.IsFalse(s.WaitOne(500)); pool.Return(data); Assert.IsTrue(s.WaitOne(500)); } } }
public void TryAllocate() { PermutationSetup permutation = new PermutationSetup(); permutation.Add(count16queue0); permutation.Add(count16queue16); foreach (Scenario scenario in permutation.Scenarios) { using (Run run = scenario.Run().Initialize()) { IBlockPool pool = run.Parameters["Pool"] as BlockPool; byte[] data = null; for (int i = 0; i < 16; i++) { Assert.IsTrue(pool.TryAllocate(out data)); Assert.AreEqual(4096, data.Length); } byte[] data2; Assert.IsFalse(pool.TryAllocate(out data2)); pool.Return(data); Assert.IsTrue(pool.TryAllocate(out data)); } } }