+++ /dev/null
-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