/**
* 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.hive.serde2.io;
import com.google.code.tempusfugit.concurrency.annotations.*;
import com.google.code.tempusfugit.concurrency.*;
import org.junit.*;
import static org.junit.Assert.*;
import org.apache.hadoop.hive.common.type.HiveChar;
public class TestHiveCharWritable {
@Rule public ConcurrentRule concurrentRule = new ConcurrentRule();
@Rule public RepeatingRule repeatingRule = new RepeatingRule();
@Test
@Concurrent(count=4)
@Repeating(repetition=100)
public void testConstructor() throws Exception {
HiveCharWritable hcw1 = new HiveCharWritable(new HiveChar("abc", 5));
assertEquals("abc ", hcw1.toString());
HiveCharWritable hcw2 = new HiveCharWritable(hcw1);
assertEquals("abc ", hcw2.toString());
}
@Test
@Concurrent(count=4)
@Repeating(repetition=100)
public void testSet() throws Exception {
HiveCharWritable hcw1 = new HiveCharWritable();
HiveChar hc1 = new HiveChar("abcd", 8);
hcw1.set(hc1);
assertEquals("abcd ", hcw1.toString());
hcw1.set(hc1, 10);
assertEquals("abcd ", hcw1.toString());
hcw1.set(hc1, 2);
assertEquals("ab", hcw1.toString());
// copy whole value for strings
hcw1.set("abcd");
assertEquals("abcd", hcw1.toString());
// whole value is copied, including spaces
hcw1.set("abcd ");
assertEquals("abcd ", hcw1.toString());
hcw1.set("abcd", 10);
assertEquals("abcd ", hcw1.toString());
hcw1.set("abcd", 2);
assertEquals("ab", hcw1.toString());
HiveCharWritable hcw2 = new HiveCharWritable(hc1);
hcw1.set(hcw2);
assertEquals("abcd ", hcw1.toString());
hcw1.set(hcw2, 10);
assertEquals("abcd ", hcw1.toString());
assertEquals("abcd ", hcw1.getTextValue().toString());
hcw1.set(hcw2, 2);
assertEquals("ab", hcw1.toString());
assertEquals("ab", hcw1.getTextValue().toString());
}
@Test
@Concurrent(count=4)
@Repeating(repetition=100)
public void testGetHiveChar() throws Exception {
HiveCharWritable hcw = new HiveCharWritable();
hcw.set("abcd", 10);
assertEquals("abcd ", hcw.getHiveChar().toString());
}
@Test
@Concurrent(count=4)
@Repeating(repetition=100)
public void testGetCharacterLength() throws Exception {
HiveCharWritable hcw = new HiveCharWritable();
hcw.set("abcd", 10);
assertEquals(4, hcw.getCharacterLength());
}
@Test
@Concurrent(count=4)
@Repeating(repetition=100)
public void testEnforceMaxLength() {
HiveCharWritable hcw1 = new HiveCharWritable();
hcw1.set("abcdefghij", 10);
assertEquals("abcdefghij", hcw1.toString());
hcw1.enforceMaxLength(12);
assertEquals("abcdefghij ", hcw1.toString());
hcw1.enforceMaxLength(5);
assertEquals("abcde", hcw1.toString());
}
@Test
@Concurrent(count=4)
@Repeating(repetition=100)
public void testComparison() throws Exception {
HiveCharWritable hcw1 = new HiveCharWritable();
HiveCharWritable hcw2 = new HiveCharWritable();
// same string
hcw1.set("abcd", 4);
hcw2.set("abcd", 4);
assertEquals(hcw1, hcw2);
assertEquals(hcw2, hcw1);
assertEquals(0, hcw1.compareTo(hcw2));
assertEquals(0, hcw2.compareTo(hcw1));
// unequal strings
hcw1.set("abcd", 4);
hcw2.set("abc", 4);
assertFalse(hcw1.equals(hcw2));
assertFalse(hcw2.equals(hcw1));
assertFalse(0 == hcw1.compareTo(hcw2));
assertFalse(0 == hcw2.compareTo(hcw1));
// trailing spaces are not significant
hcw1.set("abcd ", 10);
hcw2.set("abcd", 4);
assertEquals("abcd ", hcw1.toString());
assertEquals(hcw1, hcw2);
assertEquals(hcw2, hcw1);
assertEquals(0, hcw1.compareTo(hcw2));
assertEquals(0, hcw2.compareTo(hcw1));
// leading spaces are significant
hcw1.set(" abcd", 5);
hcw2.set("abcd", 5);
assertFalse(hcw1.equals(hcw2));
assertFalse(hcw2.equals(hcw1));
assertFalse(0 == hcw1.compareTo(hcw2));
assertFalse(0 == hcw2.compareTo(hcw1));
}
}