blob: 050bec517130c2c0409ed7678a228fbd75956bf8 [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.utils.bytecomparable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import java.util.UUID;
import org.apache.cassandra.db.marshal.AbstractType;
import org.apache.cassandra.db.marshal.BooleanType;
import org.apache.cassandra.db.marshal.DecimalType;
import org.apache.cassandra.db.marshal.DoubleType;
import org.apache.cassandra.db.marshal.Int32Type;
import org.apache.cassandra.db.marshal.IntegerType;
import org.apache.cassandra.db.marshal.UTF8Type;
import org.apache.cassandra.utils.TimeUUID;
public class ByteSourceTestBase
{
String[] testStrings = new String[]{ "", "\0", "\0\0", "\001", "A\0\0B", "A\0B\0", "0", "0\0", "00", "1", "\377" };
Integer[] testInts = new Integer[]{ null,
Integer.MIN_VALUE,
Integer.MIN_VALUE + 1,
-256,
-255,
-128,
-127,
-64,
-63,
-1,
0,
1,
63,
64,
127,
128,
255,
256,
Integer.MAX_VALUE - 1,
Integer.MAX_VALUE };
Byte[] testBytes = new Byte[]{ -128, -127, -1, 0, 1, 127 };
Short[] testShorts = new Short[]{ Short.MIN_VALUE,
Short.MIN_VALUE + 1,
-256,
-255,
-128,
-127,
-65,
-64,
-63,
-1,
0,
1,
127,
128,
255,
256,
Short.MAX_VALUE - 1,
Short.MAX_VALUE };
Long[] testLongs = new Long[]{ null,
Long.MIN_VALUE,
Long.MIN_VALUE + 1,
Integer.MIN_VALUE - 1L,
-256L,
-255L,
-128L,
-127L,
-65L,
-64L,
-63L,
-1L,
0L,
1L,
Integer.MAX_VALUE + 1L,
Long.MAX_VALUE - 1,
Long.MAX_VALUE,
(1L << 1) - 1,
(1L << 1),
(1L << 2) - 1,
(1L << 2),
(1L << 3) - 1,
(1L << 3),
(1L << 4) - 1,
(1L << 4),
(1L << 5) - 1,
(1L << 5),
(1L << 6) - 1,
(1L << 6),
(1L << 7) - 1,
(1L << 7),
(1L << 8) - 1,
(1L << 8),
(1L << 9) - 1,
(1L << 9),
(1L << 10) - 1,
(1L << 10),
(1L << 11) - 1,
(1L << 11),
(1L << 12) - 1,
(1L << 12),
(1L << 13) - 1,
(1L << 13),
(1L << 14) - 1,
(1L << 14),
(1L << 15) - 1,
(1L << 15),
(1L << 16) - 1,
(1L << 16),
(1L << 17) - 1,
(1L << 17),
(1L << 18) - 1,
(1L << 18),
(1L << 19) - 1,
(1L << 19),
(1L << 20) - 1,
(1L << 20),
(1L << 21) - 1,
(1L << 21),
(1L << 22) - 1,
(1L << 22),
(1L << 23) - 1,
(1L << 23),
(1L << 24) - 1,
(1L << 24),
(1L << 25) - 1,
(1L << 25),
(1L << 26) - 1,
(1L << 26),
(1L << 27) - 1,
(1L << 27),
(1L << 28) - 1,
(1L << 28),
(1L << 29) - 1,
(1L << 29),
(1L << 30) - 1,
(1L << 30),
(1L << 31) - 1,
(1L << 31),
(1L << 32) - 1,
(1L << 32),
(1L << 33) - 1,
(1L << 33),
(1L << 34) - 1,
(1L << 34),
(1L << 35) - 1,
(1L << 35),
(1L << 36) - 1,
(1L << 36),
(1L << 37) - 1,
(1L << 37),
(1L << 38) - 1,
(1L << 38),
(1L << 39) - 1,
(1L << 39),
(1L << 40) - 1,
(1L << 40),
(1L << 41) - 1,
(1L << 41),
(1L << 42) - 1,
(1L << 42),
(1L << 43) - 1,
(1L << 43),
(1L << 44) - 1,
(1L << 44),
(1L << 45) - 1,
(1L << 45),
(1L << 46) - 1,
(1L << 46),
(1L << 47) - 1,
(1L << 47),
(1L << 48) - 1,
(1L << 48),
(1L << 49) - 1,
(1L << 49),
(1L << 50) - 1,
(1L << 50),
(1L << 51) - 1,
(1L << 51),
(1L << 52) - 1,
(1L << 52),
(1L << 53) - 1,
(1L << 53),
(1L << 54) - 1,
(1L << 54),
(1L << 55) - 1,
(1L << 55),
(1L << 56) - 1,
(1L << 56),
(1L << 57) - 1,
(1L << 57),
(1L << 58) - 1,
(1L << 58),
(1L << 59) - 1,
(1L << 59),
(1L << 60) - 1,
(1L << 60),
(1L << 61) - 1,
(1L << 61),
(1L << 62) - 1,
(1L << 62),
(1L << 63) - 1,
~((1L << 1) - 1),
~((1L << 1)),
~((1L << 2) - 1),
~((1L << 2)),
~((1L << 3) - 1),
~((1L << 3)),
~((1L << 4) - 1),
~((1L << 4)),
~((1L << 5) - 1),
~((1L << 5)),
~((1L << 6) - 1),
~((1L << 6)),
~((1L << 7) - 1),
~((1L << 7)),
~((1L << 8) - 1),
~((1L << 8)),
~((1L << 9) - 1),
~((1L << 9)),
~((1L << 10) - 1),
~((1L << 10)),
~((1L << 11) - 1),
~((1L << 11)),
~((1L << 12) - 1),
~((1L << 12)),
~((1L << 13) - 1),
~((1L << 13)),
~((1L << 14) - 1),
~((1L << 14)),
~((1L << 15) - 1),
~((1L << 15)),
~((1L << 16) - 1),
~((1L << 16)),
~((1L << 17) - 1),
~((1L << 17)),
~((1L << 18) - 1),
~((1L << 18)),
~((1L << 19) - 1),
~((1L << 19)),
~((1L << 20) - 1),
~((1L << 20)),
~((1L << 21) - 1),
~((1L << 21)),
~((1L << 22) - 1),
~((1L << 22)),
~((1L << 23) - 1),
~((1L << 23)),
~((1L << 24) - 1),
~((1L << 24)),
~((1L << 25) - 1),
~((1L << 25)),
~((1L << 26) - 1),
~((1L << 26)),
~((1L << 27) - 1),
~((1L << 27)),
~((1L << 28) - 1),
~((1L << 28)),
~((1L << 29) - 1),
~((1L << 29)),
~((1L << 30) - 1),
~((1L << 30)),
~((1L << 31) - 1),
~((1L << 31)),
~((1L << 32) - 1),
~((1L << 32)),
~((1L << 33) - 1),
~((1L << 33)),
~((1L << 34) - 1),
~((1L << 34)),
~((1L << 35) - 1),
~((1L << 35)),
~((1L << 36) - 1),
~((1L << 36)),
~((1L << 37) - 1),
~((1L << 37)),
~((1L << 38) - 1),
~((1L << 38)),
~((1L << 39) - 1),
~((1L << 39)),
~((1L << 40) - 1),
~((1L << 40)),
~((1L << 41) - 1),
~((1L << 41)),
~((1L << 42) - 1),
~((1L << 42)),
~((1L << 43) - 1),
~((1L << 43)),
~((1L << 44) - 1),
~((1L << 44)),
~((1L << 45) - 1),
~((1L << 45)),
~((1L << 46) - 1),
~((1L << 46)),
~((1L << 47) - 1),
~((1L << 47)),
~((1L << 48) - 1),
~((1L << 48)),
~((1L << 49) - 1),
~((1L << 49)),
~((1L << 50) - 1),
~((1L << 50)),
~((1L << 51) - 1),
~((1L << 51)),
~((1L << 52) - 1),
~((1L << 52)),
~((1L << 53) - 1),
~((1L << 53)),
~((1L << 54) - 1),
~((1L << 54)),
~((1L << 55) - 1),
~((1L << 55)),
~((1L << 56) - 1),
~((1L << 56)),
~((1L << 57) - 1),
~((1L << 57)),
~((1L << 58) - 1),
~((1L << 58)),
~((1L << 59) - 1),
~((1L << 59)),
~((1L << 60) - 1),
~((1L << 60)),
~((1L << 61) - 1),
~((1L << 61)),
~((1L << 62) - 1),
~((1L << 62)),
~((1L << 63) - 1),
};
Double[] testDoubles = new Double[]{ null,
Double.NEGATIVE_INFINITY,
-Double.MAX_VALUE,
-1e+200,
-1e3,
-1e0,
-1e-3,
-1e-200,
-Double.MIN_VALUE,
-0.0,
0.0,
Double.MIN_VALUE,
1e-200,
1e-3,
1e0,
1e3,
1e+200,
Double.MAX_VALUE,
Double.POSITIVE_INFINITY,
Double.NaN };
Float[] testFloats = new Float[]{ null,
Float.NEGATIVE_INFINITY,
-Float.MAX_VALUE,
-1e+30f,
-1e3f,
-1e0f,
-1e-3f,
-1e-30f,
-Float.MIN_VALUE,
-0.0f,
0.0f,
Float.MIN_VALUE,
1e-30f,
1e-3f,
1e0f,
1e3f,
1e+30f,
Float.MAX_VALUE,
Float.POSITIVE_INFINITY,
Float.NaN };
Boolean[] testBools = new Boolean[]{ null, false, true };
UUID[] testUUIDs = new UUID[]{ null,
TimeUUID.Generator.nextTimeAsUUID(),
UUID.randomUUID(),
UUID.randomUUID(),
UUID.randomUUID(),
TimeUUID.Generator.atUnixMillis(123, 234).asUUID(),
TimeUUID.Generator.atUnixMillis(123, 234).asUUID(),
TimeUUID.Generator.atUnixMillis(123).asUUID(),
UUID.fromString("6ba7b811-9dad-11d1-80b4-00c04fd430c8"),
UUID.fromString("6ba7b810-9dad-11d1-80b4-00c04fd430c8"),
UUID.fromString("e902893a-9d22-3c7e-a7b8-d6e313b71d9f"),
UUID.fromString("74738ff5-5367-5958-9aee-98fffdcd1876"),
UUID.fromString("52df1bb0-6a2f-11e6-b6e4-a6dea7a01b67"),
UUID.fromString("52df1bb0-6a2f-11e6-362d-aff2143498ea"),
UUID.fromString("52df1bb0-6a2f-11e6-b62d-aff2143498ea") };
// Instant.MIN/MAX fail Date.from.
Date[] testDates = new Date[]{ null,
Date.from(Instant.ofEpochSecond(Integer.MIN_VALUE)),
Date.from(Instant.ofEpochSecond(Short.MIN_VALUE)),
Date.from(Instant.ofEpochMilli(-2000)),
Date.from(Instant.EPOCH),
Date.from(Instant.ofEpochMilli(2000)),
Date.from(Instant.ofEpochSecond(Integer.MAX_VALUE)),
Date.from(Instant.now()) };
InetAddress[] testInets;
{
try
{
testInets = new InetAddress[]{ null,
InetAddress.getLocalHost(),
InetAddress.getLoopbackAddress(),
InetAddress.getByName("192.168.0.1"),
InetAddress.getByName("fe80::428d:5cff:fe53:1dc9"),
InetAddress.getByName("2001:610:3:200a:192:87:36:2"),
InetAddress.getByName("10.0.0.1"),
InetAddress.getByName("0a00:0001::"),
InetAddress.getByName("::10.0.0.1") };
}
catch (UnknownHostException e)
{
throw new RuntimeException(e);
}
}
BigInteger[] testBigInts;
{
Set<BigInteger> bigs = new TreeSet<>();
for (Long l : testLongs)
if (l != null)
bigs.add(BigInteger.valueOf(l));
for (int i = 0; i < 11; ++i)
{
bigs.add(BigInteger.valueOf(i));
bigs.add(BigInteger.valueOf(-i));
bigs.add(BigInteger.valueOf((1L << 4 * i) - 1));
bigs.add(BigInteger.valueOf((1L << 4 * i)));
bigs.add(BigInteger.valueOf(-(1L << 4 * i) - 1));
bigs.add(BigInteger.valueOf(-(1L << 4 * i)));
String p = exp10(i);
bigs.add(new BigInteger(p));
bigs.add(new BigInteger("-" + p));
p = exp10(1 << i);
bigs.add(new BigInteger(p));
bigs.add(new BigInteger("-" + p));
BigInteger base = BigInteger.ONE.shiftLeft(512 * i);
bigs.add(base);
bigs.add(base.add(BigInteger.ONE));
bigs.add(base.subtract(BigInteger.ONE));
base = base.negate();
bigs.add(base);
bigs.add(base.add(BigInteger.ONE));
bigs.add(base.subtract(BigInteger.ONE));
}
testBigInts = bigs.toArray(new BigInteger[0]);
}
static String exp10(int pow)
{
StringBuilder builder = new StringBuilder();
builder.append('1');
for (int i=0; i<pow; ++i)
builder.append('0');
return builder.toString();
}
BigDecimal[] testBigDecimals;
{
String vals = "0, 1, 1.1, 21, 98.9, 99, 99.9, 100, 100.1, 101, 331, 0.4, 0.07, 0.0700, 0.005, " +
"6e4, 7e200, 6e-300, 8.1e2000, 8.1e-2000, 9e2000000000, " +
"123456789012.34567890e-1000000000, 123456.78901234, 1234.56789012e2, " +
"1.0000, 0.01e2, 100e-2, 00, 0.000, 0E-18, 0E+18";
List<BigDecimal> decs = new ArrayList<>();
for (String s : vals.split(", "))
{
decs.add(new BigDecimal(s));
decs.add(new BigDecimal("-" + s));
}
testBigDecimals = decs.toArray(new BigDecimal[0]);
}
Object[][] testValues = new Object[][]{ testStrings,
testInts,
testBools,
testDoubles,
testBigInts,
testBigDecimals };
AbstractType[] testTypes = new AbstractType[]{ UTF8Type.instance,
Int32Type.instance,
BooleanType.instance,
DoubleType.instance,
IntegerType.instance,
DecimalType.instance };
}