X-Git-Url: https://git.mdrn.pl/pylucene.git/blobdiff_plain/a2e61f0c04805cfcb8706176758d1283c7e3a55c..aaeed5504b982cf3545252ab528713250aa33eed:/lucene-java-3.5.0/lucene/contrib/facet/src/test/org/apache/lucene/util/Vint8Test.java diff --git a/lucene-java-3.5.0/lucene/contrib/facet/src/test/org/apache/lucene/util/Vint8Test.java b/lucene-java-3.5.0/lucene/contrib/facet/src/test/org/apache/lucene/util/Vint8Test.java new file mode 100644 index 0000000..905f035 --- /dev/null +++ b/lucene-java-3.5.0/lucene/contrib/facet/src/test/org/apache/lucene/util/Vint8Test.java @@ -0,0 +1,141 @@ +package org.apache.lucene.util; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import org.junit.Test; + +import org.apache.lucene.util.LuceneTestCase; +import org.apache.lucene.util.Vint8; + +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Tests the {@link Vint8} class. + */ +public class Vint8Test extends LuceneTestCase { + + /** + * Tests the position wrapper. + * @throws Exception For any reason. + */ + @Test + public void testPosition() throws Exception { + Vint8.Position pos = new Vint8.Position(); + assertEquals(0, pos.pos); + pos = new Vint8.Position(12345); + assertEquals(12345, pos.pos); + } + + private static int[] testValues = { + -1000000000, + -1, 0, (1 << 7) - 1, 1 << 7, (1 << 14) - 1, 1 << 14, + (1 << 21) - 1, 1 << 21, (1 << 28) - 1, 1 << 28 + }; + private static int[] bytesNeededTestValues = { + 5, 5, 1, 1, 2, 2, 3, 3, 4, 4, 5 + }; + + /** + * Tests the {@code bytesNeeded} method. + */ + @Test + public void testBytesNeeded() { + assertEquals(5, Vint8.MAXIMUM_BYTES_NEEDED); + for (int j = 0; j < testValues.length; j++) { + assertEquals(bytesNeededTestValues[j], Vint8.bytesNeeded(testValues[j])); + } + } + + /** + * Tests encoding and decoding to and from a stream. + */ + @Test + public void testStreamEncodingAndDecoding() throws IOException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(256); + int expectedSize = 0; + for (int j = 0; j < testValues.length; j++) { + Vint8.encode(testValues[j], baos); + expectedSize += bytesNeededTestValues[j]; + } + assertEquals(expectedSize, baos.size()); + ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); + for (int j = 0; j < testValues.length; j++) { + assertEquals(testValues[j], Vint8.decode(bais)); + } + assertEquals(0, bais.available()); + } + + /** + * Tests encoding and decoding to and from an array. + */ + @Test + public void testArrayEncodingAndDecoding() throws IOException { + byte[] byteArray = new byte[256]; + int position = 0, expectedSize = 0; + for (int j = 0; j < testValues.length; j++) { + position += Vint8.encode(testValues[j], byteArray, position); + expectedSize += bytesNeededTestValues[j]; + } + assertEquals(expectedSize, position); + Vint8.Position pos = new Vint8.Position(); + for (int j = 0; j < testValues.length; j++) { + assertEquals(testValues[j], Vint8.decode(byteArray, pos)); + } + assertEquals(expectedSize, pos.pos); + } + + /** + * The result of encoding the test values with the current algorithm. If these + * values are changed to match an algorithm change, compatibility with legacy + * data will be broken. + */ + private static final byte[] encodedTestValues = { + -4, -93, -108, -20, 0, -1, -1, -1, -1, 127, 0, 127, -127, 0, -1, 127, + -127, -128, 0, -1, -1, 127, -127, -128, -128, 0, -1, -1, -1, 127, -127, + -128, -128, -128, 0 + }; + + /** + * Tests algorithm. + */ + @Test + public void testLegacyCompatibility() throws IOException { + /* To generate the encoded test values: + byte[] byteArray = new byte[256]; + int position = 0, expectedSize = 0; + for (int j = 0; j < testValues.length; j++) { + position += Vint8.encode(testValues[j], byteArray, position); + expectedSize += bytesNeededTestValues[j]; + } + assertEquals(expectedSize, position); + Vint8.Position pos = new Vint8.Position(); + for (int j = 0; j < expectedSize; j++) { + System.out.print(byteArray[j] + ", "); + } + System.out.flush(); + pos.pos = 0; + */ + Vint8.Position pos = new Vint8.Position(); + for (int j = 0; j < testValues.length; j++) { + assertEquals(testValues[j], Vint8.decode(encodedTestValues, pos)); + } + } + +} // end class Vint8Test