TestBytesWritable.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:3k
- /**
- * 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.
- */
- package org.apache.hadoop.io;
- import junit.framework.TestCase;
- /**
- * This is the unit test for BytesWritable.
- */
- public class TestBytesWritable extends TestCase {
- public void testSizeChange() throws Exception {
- byte[] hadoop = "hadoop".getBytes();
- BytesWritable buf = new BytesWritable(hadoop);
- int size = buf.getLength();
- int orig_capacity = buf.getCapacity();
- buf.setSize(size*2);
- int new_capacity = buf.getCapacity();
- System.arraycopy(buf.getBytes(), 0, buf.getBytes(), size, size);
- assertTrue(new_capacity >= size * 2);
- assertEquals(size * 2, buf.getLength());
- assertTrue(new_capacity != orig_capacity);
- buf.setSize(size*4);
- assertTrue(new_capacity != buf.getCapacity());
- for(int i=0; i < size*2; ++i) {
- assertEquals(hadoop[i%size], buf.getBytes()[i]);
- }
- // shrink the buffer
- buf.setCapacity(1);
- // make sure the size has been cut down too
- assertEquals(1, buf.getLength());
- // but that the data is still there
- assertEquals(hadoop[0], buf.getBytes()[0]);
- }
-
- public void testHash() throws Exception {
- byte[] owen = "owen".getBytes();
- BytesWritable buf = new BytesWritable(owen);
- assertEquals(4347922, buf.hashCode());
- buf.setCapacity(10000);
- assertEquals(4347922, buf.hashCode());
- buf.setSize(0);
- assertEquals(1, buf.hashCode());
- }
-
- public void testCompare() throws Exception {
- byte[][] values = new byte[][]{"abc".getBytes(),
- "ad".getBytes(),
- "abcd".getBytes(),
- "".getBytes(),
- "b".getBytes()};
- BytesWritable[] buf = new BytesWritable[values.length];
- for(int i=0; i < values.length; ++i) {
- buf[i] = new BytesWritable(values[i]);
- }
- // check to make sure the compare function is symetric and reflexive
- for(int i=0; i < values.length; ++i) {
- for(int j=0; j < values.length; ++j) {
- assertTrue(buf[i].compareTo(buf[j]) == -buf[j].compareTo(buf[i]));
- assertTrue((i == j) == (buf[i].compareTo(buf[j]) == 0));
- }
- }
- assertTrue(buf[0].compareTo(buf[1]) < 0);
- assertTrue(buf[1].compareTo(buf[2]) > 0);
- assertTrue(buf[2].compareTo(buf[3]) > 0);
- assertTrue(buf[3].compareTo(buf[4]) < 0);
- }
-
- private void checkToString(byte[] input, String expected) {
- String actual = new BytesWritable(input).toString();
- assertEquals(expected, actual);
- }
- public void testToString() {
- checkToString(new byte[]{0,1,2,0x10}, "00 01 02 10");
- checkToString(new byte[]{-0x80, -0x7f, -0x1, -0x2, 1, 0},
- "80 81 ff fe 01 00");
- }
- }