blob: 5c9ed4e2250f5687c3ef3937bef6f90b3160e198 [file] [log] [blame]
/**
* 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.cassandra.db.marshal;
import java.nio.ByteBuffer;
import org.junit.Test;
import org.apache.cassandra.serializers.SimpleDateSerializer;
public class SimpleDateTypeTest
{
@Test public void TestComparison()
{
ByteBuffer d1 = SimpleDateType.instance.fromString("1970-01-05");
ByteBuffer d2 = SimpleDateSerializer.instance.serialize(makeUnsigned(4));
assert SimpleDateType.instance.compare(d1, d2) == 0 : "Failed == comparison";
String.format("Failed == comparison with %s and %s",
SimpleDateSerializer.instance.deserialize(d1),
SimpleDateSerializer.instance.deserialize(d2));
d1 = SimpleDateType.instance.fromString("1970-01-05");
d2 = SimpleDateSerializer.instance.serialize(makeUnsigned(10));
assert SimpleDateType.instance.compare(d1, d2) < 0 :
String.format("Failed comparison of %s and %s, expected <",
SimpleDateSerializer.instance.deserialize(d1),
SimpleDateSerializer.instance.deserialize(d2));
d1 = SimpleDateType.instance.fromString("1970-01-05"); // 4
d2 = SimpleDateSerializer.instance.serialize(makeUnsigned(-10));
assert SimpleDateType.instance.compare(d1, d2) > 0 :
String.format("Failed comparison of %s and %s, expected > 0",
SimpleDateSerializer.instance.deserialize(d1),
SimpleDateSerializer.instance.deserialize(d2));
d1 = SimpleDateType.instance.fromString("1");
d2 = SimpleDateType.instance.fromString("1000");
assert SimpleDateType.instance.compare(d1, d2) < 0 :
String.format("Failed < comparison with string inputs %s and %s",
SimpleDateSerializer.instance.deserialize(d1),
SimpleDateSerializer.instance.deserialize(d2));
Integer intLimit = Integer.MAX_VALUE;
d1 = SimpleDateType.instance.fromString("0");
d2 = SimpleDateType.instance.fromString(intLimit.toString());
assert SimpleDateType.instance.compare(d1, d2) < 0 :
String.format("Failed < comparison with string inputs at integer bounds %s and %s",
SimpleDateSerializer.instance.deserialize(d1),
SimpleDateSerializer.instance.deserialize(d2));
Long overLimit = (long)(Integer.MAX_VALUE);
d1 = SimpleDateType.instance.fromString("0");
d2 = SimpleDateType.instance.fromString(overLimit.toString());
assert SimpleDateType.instance.compare(d1, d2) < 0 :
String.format("Failed < comparison with string inputs at integer bounds %s and %s",
SimpleDateSerializer.instance.deserialize(d1),
SimpleDateSerializer.instance.deserialize(d2));
Long i1 = 0L;
Long i2 = (long)Math.pow(2,32) - 1;
d1 = SimpleDateType.instance.fromString(i1.toString());
d2 = SimpleDateType.instance.fromString(i2.toString());
assert SimpleDateType.instance.compare(d1, d2) < 0 :
String.format("Failed limits comparison with %s and %s",
SimpleDateSerializer.instance.deserialize(d1),
SimpleDateSerializer.instance.deserialize(d2));
d1 = SimpleDateType.instance.fromString("256");
d2 = SimpleDateType.instance.fromString("512");
assert SimpleDateType.instance.compare(d1, d2) < 0 :
String.format("Failed comparison with %s and %s",
SimpleDateSerializer.instance.deserialize(d1),
SimpleDateSerializer.instance.deserialize(d2));
d1 = SimpleDateSerializer.instance.serialize(makeUnsigned(0));
d2 = SimpleDateSerializer.instance.serialize(makeUnsigned(Integer.MAX_VALUE));
assert SimpleDateType.instance.compare(d1, d2) < 0 :
String.format("Failed neg/pos comparison with %s and %s",
SimpleDateSerializer.instance.deserialize(d1),
SimpleDateSerializer.instance.deserialize(d2));
d1 = SimpleDateType.instance.fromString("-10000-10-10");
d2 = SimpleDateType.instance.fromString("10000-10-10");
assert SimpleDateType.instance.compare(d1, d2) < 0 :
String.format("Failed neg/pos string comparison with %s and %s",
SimpleDateSerializer.instance.deserialize(d1),
SimpleDateSerializer.instance.deserialize(d2));
d1 = SimpleDateType.instance.fromString("1969-12-31");
d2 = SimpleDateType.instance.fromString("1970-1-1");
assert SimpleDateType.instance.compare(d1, d2) < 0 :
String.format("Failed pre/post epoch comparison with %s and %s",
SimpleDateSerializer.instance.deserialize(d1),
SimpleDateSerializer.instance.deserialize(d2));
d1 = SimpleDateType.instance.fromString("1970-1-1");
d2 = SimpleDateType.instance.fromString("1970-1-1");
assert SimpleDateType.instance.compare(d1, d2) == 0 :
String.format("Failed == date from string comparison with %s and %s",
SimpleDateSerializer.instance.deserialize(d1),
SimpleDateSerializer.instance.deserialize(d2));
d1 = SimpleDateType.instance.fromString("1970-1-1");
d2 = SimpleDateType.instance.fromString("1970-1-2");
assert SimpleDateType.instance.compare(d1, d2) < 0 :
String.format("Failed post epoch string comparison with %s and %s",
SimpleDateSerializer.instance.deserialize(d1),
SimpleDateSerializer.instance.deserialize(d2));
for (int i = 0; i < 32; ++i)
{
int offset = (int)Math.pow(2,i);
d1 = SimpleDateSerializer.instance.serialize(makeUnsigned(0 - offset));
d2 = SimpleDateSerializer.instance.serialize(makeUnsigned(offset));
assert SimpleDateType.instance.compare(d1, d2) < 0 :
String.format("Failed < comparison of %s and %s",
SimpleDateSerializer.instance.deserialize(d1),
SimpleDateSerializer.instance.deserialize(d2));
}
for (int i = 0; i < 32; ++i)
{
int offset = (int)Math.pow(2,i);
d1 = SimpleDateSerializer.instance.serialize(makeUnsigned(offset));
d2 = SimpleDateSerializer.instance.serialize(makeUnsigned(0 - offset));
assert SimpleDateType.instance.compare(d1, d2) > 0 :
String.format("Failed > comparison of %s and %s",
SimpleDateSerializer.instance.deserialize(d1),
SimpleDateSerializer.instance.deserialize(d2));
}
}
private Integer makeUnsigned(int input)
{
return input - Integer.MIN_VALUE;
}
}