public static Slice unscaledDecimal(long unscaledValue) { long[] longs = new long[NUMBER_OF_LONGS]; if (unscaledValue < 0) { longs[0] = -unscaledValue; longs[1] = SIGN_LONG_MASK; } else { longs[0] = unscaledValue; } return Slices.wrappedLongArray(longs); }
@Test public void testMultiply256() { assertMultiply256(MAX_DECIMAL, MAX_DECIMAL, wrappedLongArray(0xECEBBB8000000001L, 0xE0FF0CA0BC87870BL, 0x0764B4ABE8652978L, 0x161BCCA7119915B5L)); assertMultiply256(MIN_DECIMAL, MIN_DECIMAL, wrappedLongArray(0xECEBBB8000000001L, 0xE0FF0CA0BC87870BL, 0x0764B4ABE8652978L, 0x161BCCA7119915B5L)); assertMultiply256(wrappedLongArray(0xFFFFFFFFFFFFFFFFL, 0x0FFFFFFFFFFFFFFFL), wrappedLongArray(0xFFFFFFFFFFFFFFFFL, 0x0FFFFFFFFFFFFFFFL), wrappedLongArray(0x0000000000000001L, 0xE000000000000000L, 0xFFFFFFFFFFFFFFFFL, 0x00FFFFFFFFFFFFFFL)); assertMultiply256(wrappedLongArray(0x1234567890ABCDEFL, 0x0EDCBA0987654321L), wrappedLongArray(0xFEDCBA0987654321L, 0x1234567890ABCDEL), wrappedLongArray(0xC24A442FE55618CFL, 0xAA71A60D0DA49DDAL, 0x7C163D5A13DF8695L, 0x0010E8EEF9BD1294L)); }
@Test public void testShiftLeft() { assertEquals(shiftLeft(wrappedLongArray(0x1234567890ABCDEFL, 0xEFDCBA0987654321L), 0), wrappedLongArray(0x1234567890ABCDEFL, 0xEFDCBA0987654321L)); assertEquals(shiftLeft(wrappedLongArray(0x1234567890ABCDEFL, 0xEFDCBA0987654321L), 1), wrappedLongArray(0x2468ACF121579BDEL, 0xDFB974130ECA8642L)); assertEquals(shiftLeft(wrappedLongArray(0x1234567890ABCDEFL, 0x00DCBA0987654321L), 8), wrappedLongArray(0x34567890ABCDEF00L, 0xDCBA098765432112L)); assertEquals(shiftLeft(wrappedLongArray(0x1234567890ABCDEFL, 0x0000BA0987654321L), 16), wrappedLongArray(0x567890ABCDEF0000L, 0xBA09876543211234L)); assertEquals(shiftLeft(wrappedLongArray(0x1234567890ABCDEFL, 0x0000000087654321L), 32), wrappedLongArray(0x90ABCDEF00000000L, 0x8765432112345678L)); assertEquals(shiftLeft(wrappedLongArray(0x1234567890ABCDEFL, 0L), 64), wrappedLongArray(0x0000000000000000L, 0x1234567890ABCDEFL)); assertEquals(shiftLeft(wrappedLongArray(0x0034567890ABCDEFL, 0L), 64 + 8), wrappedLongArray(0x0000000000000000L, 0x34567890ABCDEF00L)); assertEquals(shiftLeft(wrappedLongArray(0x000000000000CDEFL, 0L), 64 + 48), wrappedLongArray(0x0000000000000000L, 0xCDEF000000000000L)); assertEquals(shiftLeft(wrappedLongArray(0x1L, 0L), 64 + 63), wrappedLongArray(0x0000000000000000L, 0x8000000000000000L)); }
@Override public Object randomValue() { long low = ThreadLocalRandom.current().nextLong(); long high = ThreadLocalRandom.current().nextLong(); return Slices.wrappedLongArray(low, high); } }
public static void output(NullableLongState state, BlockBuilder out) { if (state.isNull()) { out.appendNull(); } else { VARBINARY.writeSlice(out, wrappedLongArray(state.getLong())); } } }
case "long": long[] longBase = (long[]) base; slices[i] = wrappedLongArray(longBase, 0, longBase.length); break; case "byte":
@Test public void testMultiply() { assertEquals(multiply(unscaledDecimal(0), MAX_DECIMAL), unscaledDecimal(0)); assertEquals(multiply(unscaledDecimal(1), MAX_DECIMAL), MAX_DECIMAL); assertEquals(multiply(unscaledDecimal(1), MIN_DECIMAL), MIN_DECIMAL); assertEquals(multiply(unscaledDecimal(-1), MAX_DECIMAL), MIN_DECIMAL); assertEquals(multiply(unscaledDecimal(-1), MIN_DECIMAL), MAX_DECIMAL); assertEquals(multiply(wrappedIntArray(0xFFFFFFFF, 0xFFFFFFFF, 0, 0), wrappedIntArray(0xFFFFFFFF, 0x00FFFFFF, 0, 0)), wrappedLongArray(0xff00000000000001L, 0xfffffffffffffeL)); assertEquals(multiply(wrappedLongArray(0xFFFFFF0096BFB800L, 0), wrappedLongArray(0x39003539D9A51600L, 0)), wrappedLongArray(0x1CDBB17E11D00000L, 0x39003500FB00AB76L)); assertEquals(multiply(unscaledDecimal(Integer.MAX_VALUE), unscaledDecimal(Integer.MIN_VALUE)), unscaledDecimal((long) Integer.MAX_VALUE * Integer.MIN_VALUE)); assertEquals(multiply(unscaledDecimal("99999999999999"), unscaledDecimal("-1000000000000000000000000")), unscaledDecimal("-99999999999999000000000000000000000000")); assertEquals(multiply(unscaledDecimal("12380837221737387489365741632769922889"), unscaledDecimal("3")), unscaledDecimal("37142511665212162468097224898309768667")); }
private static SqlVarbinary expectedChecksum(Type type, Block block) { long result = 0; for (int i = 0; i < block.getPositionCount(); i++) { if (block.isNull(i)) { result += PRIME64; } else { result += type.hash(block, i) * PRIME64; } } return new SqlVarbinary(wrappedLongArray(result).getBytes()); } }
/** * Creates a slice over the specified array. */ public static Slice wrappedLongArray(long... array) { return wrappedLongArray(array, 0, array.length); }
public static Slice unscaledDecimal(long unscaledValue) { long[] longs = new long[NUMBER_OF_LONGS]; if (unscaledValue < 0) { longs[0] = -unscaledValue; longs[1] = SIGN_LONG_MASK; } else { longs[0] = unscaledValue; } return Slices.wrappedLongArray(longs); }
public static Slice unscaledDecimal(long unscaledValue) { long[] longs = new long[NUMBER_OF_LONGS]; if (unscaledValue < 0) { longs[0] = -unscaledValue; longs[1] = SIGN_LONG_MASK; } else { longs[0] = unscaledValue; } return Slices.wrappedLongArray(longs); }
/** * Creates a slice over the specified array. */ public static Slice wrappedLongArray(long... array) { return wrappedLongArray(array, 0, array.length); }
@Test public void testMultiply256() { assertMultiply256(MAX_DECIMAL, MAX_DECIMAL, wrappedLongArray(0xECEBBB8000000001L, 0xE0FF0CA0BC87870BL, 0x0764B4ABE8652978L, 0x161BCCA7119915B5L)); assertMultiply256(MIN_DECIMAL, MIN_DECIMAL, wrappedLongArray(0xECEBBB8000000001L, 0xE0FF0CA0BC87870BL, 0x0764B4ABE8652978L, 0x161BCCA7119915B5L)); assertMultiply256(wrappedLongArray(0xFFFFFFFFFFFFFFFFL, 0x0FFFFFFFFFFFFFFFL), wrappedLongArray(0xFFFFFFFFFFFFFFFFL, 0x0FFFFFFFFFFFFFFFL), wrappedLongArray(0x0000000000000001L, 0xE000000000000000L, 0xFFFFFFFFFFFFFFFFL, 0x00FFFFFFFFFFFFFFL)); assertMultiply256(wrappedLongArray(0x1234567890ABCDEFL, 0x0EDCBA0987654321L), wrappedLongArray(0xFEDCBA0987654321L, 0x1234567890ABCDEL), wrappedLongArray(0xC24A442FE55618CFL, 0xAA71A60D0DA49DDAL, 0x7C163D5A13DF8695L, 0x0010E8EEF9BD1294L)); }
@Test public void testMultiply256() { assertMultiply256(MAX_DECIMAL, MAX_DECIMAL, wrappedLongArray(0xECEBBB8000000001L, 0xE0FF0CA0BC87870BL, 0x0764B4ABE8652978L, 0x161BCCA7119915B5L)); assertMultiply256(MIN_DECIMAL, MIN_DECIMAL, wrappedLongArray(0xECEBBB8000000001L, 0xE0FF0CA0BC87870BL, 0x0764B4ABE8652978L, 0x161BCCA7119915B5L)); assertMultiply256(wrappedLongArray(0xFFFFFFFFFFFFFFFFL, 0x0FFFFFFFFFFFFFFFL), wrappedLongArray(0xFFFFFFFFFFFFFFFFL, 0x0FFFFFFFFFFFFFFFL), wrappedLongArray(0x0000000000000001L, 0xE000000000000000L, 0xFFFFFFFFFFFFFFFFL, 0x00FFFFFFFFFFFFFFL)); assertMultiply256(wrappedLongArray(0x1234567890ABCDEFL, 0x0EDCBA0987654321L), wrappedLongArray(0xFEDCBA0987654321L, 0x1234567890ABCDEL), wrappedLongArray(0xC24A442FE55618CFL, 0xAA71A60D0DA49DDAL, 0x7C163D5A13DF8695L, 0x0010E8EEF9BD1294L)); }
@Override public Object randomValue() { long low = ThreadLocalRandom.current().nextLong(); long high = ThreadLocalRandom.current().nextLong(); return Slices.wrappedLongArray(low, high); } }
@Test public void testShiftLeft() { assertEquals(shiftLeft(wrappedLongArray(0x1234567890ABCDEFL, 0xEFDCBA0987654321L), 0), wrappedLongArray(0x1234567890ABCDEFL, 0xEFDCBA0987654321L)); assertEquals(shiftLeft(wrappedLongArray(0x1234567890ABCDEFL, 0xEFDCBA0987654321L), 1), wrappedLongArray(0x2468ACF121579BDEL, 0xDFB974130ECA8642L)); assertEquals(shiftLeft(wrappedLongArray(0x1234567890ABCDEFL, 0x00DCBA0987654321L), 8), wrappedLongArray(0x34567890ABCDEF00L, 0xDCBA098765432112L)); assertEquals(shiftLeft(wrappedLongArray(0x1234567890ABCDEFL, 0x0000BA0987654321L), 16), wrappedLongArray(0x567890ABCDEF0000L, 0xBA09876543211234L)); assertEquals(shiftLeft(wrappedLongArray(0x1234567890ABCDEFL, 0x0000000087654321L), 32), wrappedLongArray(0x90ABCDEF00000000L, 0x8765432112345678L)); assertEquals(shiftLeft(wrappedLongArray(0x1234567890ABCDEFL, 0L), 64), wrappedLongArray(0x0000000000000000L, 0x1234567890ABCDEFL)); assertEquals(shiftLeft(wrappedLongArray(0x0034567890ABCDEFL, 0L), 64 + 8), wrappedLongArray(0x0000000000000000L, 0x34567890ABCDEF00L)); assertEquals(shiftLeft(wrappedLongArray(0x000000000000CDEFL, 0L), 64 + 48), wrappedLongArray(0x0000000000000000L, 0xCDEF000000000000L)); assertEquals(shiftLeft(wrappedLongArray(0x1L, 0L), 64 + 63), wrappedLongArray(0x0000000000000000L, 0x8000000000000000L)); }
@Override public Object randomValue() { long low = ThreadLocalRandom.current().nextLong(); long high = ThreadLocalRandom.current().nextLong(); return Slices.wrappedLongArray(low, high); } }
public static void output(NullableLongState state, BlockBuilder out) { if (state.isNull()) { out.appendNull(); } else { VARBINARY.writeSlice(out, wrappedLongArray(state.getLong())); } } }
public static void output(NullableLongState state, BlockBuilder out) { if (state.isNull()) { out.appendNull(); } else { VARBINARY.writeSlice(out, wrappedLongArray(state.getLong())); } } }
public static void output(NullableLongState state, BlockBuilder out) { if (state.isNull()) { out.appendNull(); } else { VARBINARY.writeSlice(out, wrappedLongArray(state.getLong())); } } }