You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by mh...@apache.org on 2013/09/24 20:32:40 UTC

[04/50] [abbrv] Port: more util unit tests

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/06f5d4b8/test/core/Util/TestPagedBytes.cs
----------------------------------------------------------------------
diff --git a/test/core/Util/TestPagedBytes.cs b/test/core/Util/TestPagedBytes.cs
new file mode 100644
index 0000000..bd80843
--- /dev/null
+++ b/test/core/Util/TestPagedBytes.cs
@@ -0,0 +1,131 @@
+using System;
+using Lucene.Net.Store;
+using Lucene.Net.Support;
+using Lucene.Net.Test.Support;
+using Lucene.Net.Util;
+using NUnit.Framework;
+
+namespace Lucene.Net.Test.Util
+{
+    [TestFixture]
+    public class TestPagedBytes : LuceneTestCase
+    {
+        [Test]
+        public virtual void TestDataInputOutput()
+        {
+            var random = new Random();
+            for (var iter = 0; iter < 5 * RANDOM_MULTIPLIER; iter++)
+            {
+                var dir = NewFSDirectory(_TestUtil.GetTempDir("testOverflow"));
+                if (dir is MockDirectoryWrapper)
+                {
+                    ((MockDirectoryWrapper)dir).SetThrottling(MockDirectoryWrapper.Throttling.NEVER);
+                }
+                int blockBits = _TestUtil.Next(random, 1, 20);
+                var blockSize = 1 << blockBits;
+                var p = new PagedBytes(blockBits);
+                var indexOutput = dir.CeateOutput("foo", IOContext.DEFAULT);
+                int numBytes = _TestUtil.NextInt(random, 2, 10000000);
+
+                var answer = new byte[numBytes];
+                random.NextBytes(answer);
+                var written = 0;
+                while (written < numBytes)
+                {
+                    if (random.Next(10) == 7)
+                    {
+                        indexOutput.WriteByte(answer[written++]);
+                    }
+                    else
+                    {
+                        int chunk = Math.Min(random.Next(1000), numBytes - written);
+                        indexOutput.WriteBytes(answer, written, chunk);
+                        written += chunk;
+                    }
+                }
+
+                indexOutput.Close();
+                IndexInput input = dir.OpenInput("foo", IOContext.DEFAULT);
+                var dataInput = (DataInput)input.Clone();
+
+                p.Copy(input, input.Length);
+                var reader = p.Freeze(random.NextBool());
+
+                var verify = new byte[numBytes];
+                var read = 0;
+                while (read < numBytes)
+                {
+                    if (random.Next(10) == 7)
+                    {
+                        verify[read++] = dataInput.ReadByte();
+                    }
+                    else
+                    {
+                        var chunk = Math.Min(random.Next(1000), numBytes - read);
+                        dataInput.ReadBytes(verify, read, chunk);
+                        read += chunk;
+                    }
+                }
+                assertTrue(Arrays.Equals(answer, verify));
+
+                var slice = new BytesRef();
+                for (var iter2 = 0; iter2 < 100; iter2++)
+                {
+                    var pos = random.Next(numBytes - 1);
+                    var len = random.Next(Math.Min(blockSize + 1, numBytes - pos));
+                    reader.FillSlice(slice, pos, len);
+                    for (var byteUpto = 0; byteUpto < len; byteUpto++)
+                    {
+                        assertEquals(answer[pos + byteUpto], slice.bytes[slice.offset + byteUpto]);
+                    }
+                }
+                input.Close();
+                dir.Close();
+            }
+        }
+
+        [Ignore] // memory hole
+        [Test]
+        public virtual void TestOverflow()
+        {
+            var random = new Random();
+
+            var dir = NewFSDirectory(_TestUtil.GetTempDir("testOverflow"));
+            if (dir is MockDirectoryWrapper)
+            {
+                ((MockDirectoryWrapper)dir).SetThrottling(MockDirectoryWrapper.Throttling.NEVER);
+            }
+            int blockBits = _TestUtil.NextInt(random, 14, 28);
+            var blockSize = 1 << blockBits;
+            var arr = new byte[_TestUtil.NextInt(random, blockSize / 2, blockSize * 2)];
+            for (var i = 0; i < arr.Length; ++i)
+            {
+                arr[i] = (byte)i;
+            }
+            var numBytes = (1L << 31) + _TestUtil.NextInt(random, 1, blockSize * 3);
+            var p = new PagedBytes(blockBits);
+            IndexOutput indexOutput = dir.CreateOutput("foo", IOContext.DEFAULT);
+            for (long i = 0; i < numBytes; )
+            {
+                assertEquals(i, indexOutput.FilePointer);
+                var len = (int)Math.Min(arr.Length, numBytes - i);
+                indexOutput.WriteBytes(arr, len);
+                i += len;
+            }
+            assertEquals(numBytes, indexOutput.FilePointer);
+            indexOutput.Close();
+            IndexInput indexInput = dir.OpenInput("foo", IOContext.DEFAULT);
+            p.Copy(indexInput, numBytes);
+            var reader = p.Freeze(random.NextBool());
+
+            foreach (var offset in new long[] {0L, int.MinValue, numBytes - 1, _TestUtil.NextLong(random, 1, numBytes - 2)})
+            {
+                var b = new BytesRef();
+                reader.FillSlice(b, offset, 1);
+                assertEquals(arr[(int)(offset % arr.Length)], b.bytes[b.offset]);
+            }
+            indexInput.Close();
+            dir.Close();
+        }
+    }
+}