public void TestAlloc()
        {
            int TEST_TIMES = 1000;
            int MIN_SIZE   = 32;
            int MAX_SIZE   = 512;
            ConcurrentCachedPositonPool pool = new ConcurrentCachedPositonPool(16);

            for (int i = 0; i < TEST_TIMES; i++)
            {
                int size = rnd.Next(MIN_SIZE, MAX_SIZE);
                for (int j = 0; j < size; j++)
                {
                    int      x      = rnd.Next(MIN_POSITION, MAX_POSITION);
                    int      y      = rnd.Next(MIN_POSITION, MAX_POSITION);
                    Position answer = pool.AllocPosition(x, y);

                    Position sample_p = new Position(x, y);
                    Assert.IsTrue(sample_p.GetHashCode() == answer.GetHashCode());
                    Assert.IsTrue(sample_p.Equals(answer));
                    Assert.IsTrue(answer.Equals(sample_p));
                    Assert.IsTrue(sample_p == answer);
                    Assert.IsTrue(answer == sample_p);

                    PositionStruct sample_ps = new PositionStruct(x, y);
                    Assert.IsTrue(sample_ps.GetHashCode() == answer.GetHashCode());
                    Assert.IsTrue(sample_ps.Equals(answer));
                    Assert.IsTrue(answer.Equals(sample_ps));
                }
                pool.FreeAllPosition();
            }
            pool.FreeAllPosition();
        }