/**
*
* Copyright (c) 2006-2017, Speedment, Inc. All Rights Reserved.
*
* Licensed 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.
*/
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.speedment.runtime.field.internal.comparator;
import com.speedment.runtime.config.identifier.ColumnIdentifier;
import com.speedment.runtime.field.ByteField;
import com.speedment.runtime.field.comparator.FieldComparator;
import com.speedment.runtime.field.comparator.NullOrder;
import com.speedment.runtime.typemapper.TypeMapper;
import java.util.Objects;
import java.util.Random;
import java.util.stream.IntStream;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
/**
*
* @author Per Minborg
*/
public class ByteFieldComparatorImplTest {
ByteFieldComparatorImpl<ByteValue, Byte> instance;
@Before
public void setUp() {
instance = new ByteFieldComparatorImpl<>(ByteValue.BYTE);
}
@Test
public void testGetField() {
final ByteField<ByteValue, Byte> expResult = ByteValue.BYTE;
final ByteField<ByteValue, Byte> result = instance.getField();
assertEquals(expResult, result);
}
@Test
public void testGetNullOrder() {
final NullOrder expResult = NullOrder.NONE;
final NullOrder result = instance.getNullOrder();
assertEquals(expResult, result);
}
@Test
public void testIsReversed() {
boolean expResult = false;
boolean result = instance.isReversed();
assertEquals(expResult, result);
}
@Test
public void testReversed() {
final FieldComparator<ByteValue, Byte> expResult = new ByteFieldComparatorImpl<>(ByteValue.BYTE, true);
final FieldComparator<ByteValue, Byte> result = instance.reversed();
assertEquals(expResult, result);
assertTrue(result.isReversed());
}
@Test
public void testCompareSimple() {
final ByteValue first = ByteValue.of((byte) 0);
final ByteValue second = ByteValue.of((byte) 1);
int expResult = -1;
int result = instance.compare(first, second);
assertEquals(expResult, result);
}
@Test
public void testCompareAllTheThings() {
IntStream.rangeClosed(Byte.MIN_VALUE, Byte.MAX_VALUE).forEach(first -> {
IntStream.rangeClosed(Byte.MIN_VALUE, Byte.MAX_VALUE).forEach(second -> {
final ByteValue firstByteValue = ByteValue.of((byte) first);
final ByteValue secondByteValue = ByteValue.of((byte) second);
final int expResult = signum(Byte.compare(firstByteValue.getByte(), secondByteValue.getByte()));
final int result = signum(instance.compare(firstByteValue, secondByteValue));
assertEquals(expResult, result);
});
});
}
private int signum(int b) {
if (b == 0) {
return 0;
}
if (b > 0) {
return 1;
}
return -1;
}
@Test
public void testHashCode() {
final int expResult = new ByteFieldComparatorImpl<>(ByteValue.BYTE, false).reversed().reversed().hashCode();
final int result = instance.hashCode();
assertEquals(expResult, result);
}
@Test
public void testEquals() {
final ByteFieldComparatorImpl<ByteValue, Byte> result = new ByteFieldComparatorImpl<>(ByteValue.BYTE, false);
assertEquals(instance, result);
}
@Test
public void testToString() {
final String result = instance.toString();
assertNotNull(result);
}
private interface ByteValue {
byte getByte();
ByteValue setByte(byte value);
final ColumnIdentifier<ByteValue> BYTE_IDENTIFIER = new ColumnIdentifier<ByteValue>() {
@Override
public String getDbmsName() {
return "db0";
}
@Override
public String getSchemaName() {
return "schema";
}
@Override
public String getTableName() {
return "byte_value";
}
@Override
public String getColumnName() {
return "byte";
}
};
final ByteField<ByteValue, Byte> BYTE = ByteField.create(
BYTE_IDENTIFIER,
ByteValue::getByte,
ByteValue::setByte,
TypeMapper.identity(),
false
);
static ByteValue of(byte value) {
return new ByteValueImpl(value);
}
}
private static class ByteValueImpl implements ByteValue {
private byte value;
public ByteValueImpl(byte value) {
this.value = value;
}
@Override
public byte getByte() {
return value;
}
@Override
public ByteValue setByte(byte value) {
this.value = value;
return this;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof ByteValue)) {
return false;
}
ByteValue that = (ByteValue) obj;
return this.getByte() == that.getByte();
}
@Override
public int hashCode() {
return Objects.hashCode(value);
}
@Override
public String toString() {
return Byte.toString(value);
}
}
}