blob: d362e21fbb1d3f37e1a5e2be34c1f5a2ee368a44 [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* one or more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
package com.gemstone.gemfire.internal.cache.persistence.soplog;
import java.math.BigInteger;
import java.nio.ByteBuffer;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.experimental.categories.Category;
import com.gemstone.gemfire.internal.DSCODE;
import com.gemstone.gemfire.test.junit.categories.UnitTest;
@Category(UnitTest.class)
public class LexicographicalComparatorJUnitTest extends ComparisonTestCase {
private LexicographicalComparator lc;
public void testMixedNumeric() throws Exception {
compare(lc, (byte) 1, (short) 2, Comparison.LT);
compare(lc, (byte) 1, (int) 2, Comparison.LT);
compare(lc, (byte) 1, (long) 2, Comparison.LT);
compare(lc, (byte) 1, 2.1f, Comparison.LT);
compare(lc, (byte) 1, 2.1d, Comparison.LT);
compare(lc, (short) 1, (byte) 2, Comparison.LT);
compare(lc, (short) 1, (int) 2, Comparison.LT);
compare(lc, (short) 1, (long) 2, Comparison.LT);
compare(lc, (short) 1, 2.1f, Comparison.LT);
compare(lc, (short) 1, 2.1d, Comparison.LT);
compare(lc, (int) 1, (byte) 2, Comparison.LT);
compare(lc, (int) 1, (short) 2, Comparison.LT);
compare(lc, (int) 1, (long) 2, Comparison.LT);
compare(lc, (int) 1, 2.1f, Comparison.LT);
compare(lc, (int) 1, 2.1d, Comparison.LT);
compare(lc, (long) 1, (byte) 2, Comparison.LT);
compare(lc, (long) 1, (short) 2, Comparison.LT);
compare(lc, (long) 1, (int) 2, Comparison.LT);
compare(lc, (long) 1, 2.1f, Comparison.LT);
compare(lc, (long) 1, 2.1d, Comparison.LT);
compare(lc, 1.1f, (byte) 2, Comparison.LT);
compare(lc, 1.1f, (short) 2, Comparison.LT);
compare(lc, 1.1f, (int) 2, Comparison.LT);
compare(lc, 1.1f, (long) 2, Comparison.LT);
compare(lc, 1.1f, 2.1d, Comparison.LT);
compare(lc, 1.1d, (byte) 2, Comparison.LT);
compare(lc, 1.1d, (short) 2, Comparison.LT);
compare(lc, 1.1d, (int) 2, Comparison.LT);
compare(lc, 1.1d, (long) 2, Comparison.LT);
compare(lc, 1.1d, 2.1f, Comparison.LT);
}
public void testBoolean() throws Exception {
compare(lc, Boolean.TRUE, Boolean.TRUE, Comparison.EQ);
compare(lc, Boolean.FALSE, Boolean.FALSE, Comparison.EQ);
compare(lc, Boolean.TRUE, Boolean.FALSE, Comparison.GT);
compare(lc, Boolean.FALSE, Boolean.TRUE, Comparison.LT);
}
public void testByte() throws Exception {
compare(lc, (byte) 0, (byte) 0, Comparison.EQ);
compare(lc, (byte) 0, (byte) 1, Comparison.LT);
compare(lc, (byte) -1, (byte) 1, Comparison.LT);
compare(lc, (byte) 1, (byte) -1, Comparison.GT);
compare(lc, (byte) -2, (byte) -1, Comparison.LT);
compare(lc, (byte) 1, (byte) 2, Comparison.LT);
compare(lc, (byte) 2, (byte) 1, Comparison.GT);
}
public void testShort() throws Exception {
compare(lc, (short) 0, (short) 0, Comparison.EQ);
compare(lc, (short) 0, (short) 1, Comparison.LT);
compare(lc, (short) -1, (short) 1, Comparison.LT);
compare(lc, (short) 1, (short) -1, Comparison.GT);
compare(lc, (short) -2, (short) -1, Comparison.LT);
compare(lc, (short) 1, (short) 2, Comparison.LT);
compare(lc, (short) 2, (short) 1, Comparison.GT);
}
public void testInt() throws Exception {
compare(lc, (int) 0, (int) 0, Comparison.EQ);
compare(lc, (int) 0, (int) 1, Comparison.LT);
compare(lc, (int) -1, (int) 1, Comparison.LT);
compare(lc, (int) 1, (int) -1, Comparison.GT);
compare(lc, (int) -2, (int) -1, Comparison.LT);
compare(lc, (int) 1, (int) 2, Comparison.LT);
compare(lc, (int) 2, (int) 1, Comparison.GT);
}
public void testLong() throws Exception {
compare(lc, (long) 0, (long) 0, Comparison.EQ);
compare(lc, (long) 0, (long) 1, Comparison.LT);
compare(lc, (long) -1, (long) 1, Comparison.LT);
compare(lc, (long) 1, (long) -1, Comparison.GT);
compare(lc, (long) -2, (long) -1, Comparison.LT);
compare(lc, (long) 1, (long) 2, Comparison.LT);
compare(lc, (long) 2, (long) 1, Comparison.GT);
}
public void testFloat() throws Exception {
compare(lc, 0.0f, 0.0f, Comparison.EQ);
compare(lc, 0.0f, 1.0f, Comparison.LT);
compare(lc, -1.0f, 1.0f, Comparison.LT);
compare(lc, 1.0f, -1.0f, Comparison.GT);
compare(lc, -2.0f, -1.0f, Comparison.LT);
compare(lc, 1.0f, 2.0f, Comparison.LT);
compare(lc, 2.0f, 1.0f, Comparison.GT);
compare(lc, 2.1f, 0.9f, Comparison.GT);
}
public void testDouble() throws Exception {
compare(lc, 0.0d, 0.0d, Comparison.EQ);
compare(lc, 0.0d, 1.0d, Comparison.LT);
compare(lc, -1.0d, 1.0d, Comparison.LT);
compare(lc, 1.0d, -1.0d, Comparison.GT);
compare(lc, -2.0d, -1.0d, Comparison.LT);
compare(lc, 1.0d, 2.0d, Comparison.LT);
compare(lc, 2.0d, 1.0d, Comparison.GT);
compare(lc, 2.1d, 0.9d, Comparison.GT);
}
public void testString() throws Exception {
compare(lc, "", "", Comparison.EQ);
compare(lc, "aa", "a", Comparison.GT);
compare(lc, "a", "b", Comparison.LT);
compare(lc, "b", "a", Comparison.GT);
compare(lc, "baah", "aardvark", Comparison.GT);
compare(lc, "Chloé", "Réal", Comparison.LT);
compare(lc, "chowder", "Réal", Comparison.GT);
compare(lc, "Réal", "chowder", Comparison.LT);
compare(lc, "Réal", "Réa", Comparison.GT);
compare(lc, "Réal", "Réa", Comparison.GT);
compare(lc, "\u0061\u00a2\u0f00", "\u0061\u00a2\u0f00\u0061", Comparison.LT);
}
public void testChar() throws Exception {
compare(lc, 'a', 'a', Comparison.EQ);
compare(lc, 'a', 'b', Comparison.LT);
compare(lc, 'b', 'a', Comparison.GT);
}
public void testNull() throws Exception {
compare(lc, null, null, Comparison.EQ);
compare(lc, null, "hi mom", Comparison.GT);
compare(lc, "hi mom", null, Comparison.LT);
}
public void testObject() throws Exception {
compare(lc, new BigInteger("1"), new BigInteger("1"), Comparison.EQ);
compare(lc, new BigInteger("1"), new BigInteger("0"), Comparison.GT);
compare(lc, new BigInteger("-1"), new BigInteger("0"), Comparison.LT);
}
public void testIntPerformance() throws Exception {
ByteBuffer b1 = ByteBuffer.allocate(5).put(0, DSCODE.INTEGER);
ByteBuffer b2 = ByteBuffer.allocate(5).put(0, DSCODE.INTEGER);
for (int n = 0; n < 5; n++) {
long diff = 0;
int count = 10000000;
long start = System.nanoTime();
for (int i = 0; i < count; i++) {
b1.putInt(1, i);
b2.putInt(1, i + 1);
diff += lc.compare(b1.array(), b1.arrayOffset(), b1.capacity(), b2.array(), b2.arrayOffset(), b2.capacity());
}
long nanos = System.nanoTime() - start;
System.out.printf("(%d) %f int comparisons / ms\n", diff, 1000000.0 * count / nanos);
diff = 0;
start = System.nanoTime();
for (int i = 0; i < count; i++) {
b1.putInt(1, i);
b2.putInt(1, i + 1);
diff += Bytes.compareTo(b1.array(), b1.arrayOffset(), b1.capacity(), b2.array(), b2.arrayOffset(), b2.capacity());
}
nanos = System.nanoTime() - start;
System.out.printf("(%d) %f byte comparisons / ms\n\n", diff, 1000000.0 * count / nanos);
}
}
protected void setUp() {
lc = new LexicographicalComparator();
}
}