| /** |
| * 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; |
| } |
| } |