@Override public DimensionEncoding createDimensionEncoding(String encodingName, String[] args) { return new OneMoreByteVLongDimEnc(Integer.parseInt(args[0])); } };
private void testEncodeDecode(OneMoreByteVLongDimEnc enc, long value) { String valueStr = "" + value; byte[] buf = new byte[enc.getLengthOfEncoding()]; enc.encode(valueStr, buf, 0); String decode = enc.decode(buf, 0, buf.length); Assert.assertEquals(valueStr, decode); }
@Override public String decode(byte[] bytes, int offset, int len) { if (isNull(bytes, offset, len)) { return null; } long integer = BytesUtil.readSignedLong(bytes, offset + 1, len - 1); return String.valueOf(integer); }
@Test public void testNull() { for (int i = 1; i < 9; i++) { OneMoreByteVLongDimEnc enc = new OneMoreByteVLongDimEnc(i); byte[] buf = new byte[enc.getLengthOfEncoding()]; enc.encode(null, buf, 0); Assert.assertTrue(DimensionEncoding.isNull(buf, 0, buf.length)); String decode = enc.decode(buf, 0, buf.length); Assert.assertEquals(null, decode); buf = new byte[enc.getLengthOfEncoding()]; DataTypeSerializer<Object> ser = enc.asDataTypeSerializer(); ser.serialize(null, ByteBuffer.wrap(buf)); Assert.assertTrue(DimensionEncoding.isNull(buf, 0, buf.length)); decode = (String) ser.deserialize(ByteBuffer.wrap(buf)); Assert.assertEquals(null, decode); } }
@Override public void serialize(Object value, ByteBuffer out) { byte[] buf = currentBuf(); String valueStr = value == null ? null : value.toString(); encode(valueStr, buf, 0); out.put(buf); }
@Override public Object deserialize(ByteBuffer in) { byte[] buf = currentBuf(); in.get(buf); return decode(buf, 0, buf.length); }
private void testSerDes(OneMoreByteVLongDimEnc enc, long value) { DataTypeSerializer<Object> ser = enc.asDataTypeSerializer(); byte[] buf = new byte[enc.getLengthOfEncoding()]; String valueStr = "" + value; ser.serialize(valueStr, ByteBuffer.wrap(buf)); String decode = (String) ser.deserialize(ByteBuffer.wrap(buf)); Assert.assertEquals(valueStr, decode); }
@Override public void serialize(Object value, ByteBuffer out) { byte[] buf = currentBuf(); String valueStr = value == null ? null : value.toString(); encode(valueStr, buf, 0); out.put(buf); }
@Override public Object deserialize(ByteBuffer in) { byte[] buf = currentBuf(); in.get(buf); return decode(buf, 0, buf.length); }
@Test public void testConstructor() { try { new OneMoreByteVLongDimEnc(0); Assert.fail(); } catch (IllegalArgumentException e) { // expect } try { new OneMoreByteVLongDimEnc(9); Assert.fail(); } catch (IllegalArgumentException e) { // expect } new OneMoreByteVLongDimEnc(8); }
@Override public String decode(byte[] bytes, int offset, int len) { if (isNull(bytes, offset, len)) { return null; } long integer = BytesUtil.readSignedLong(bytes, offset + 1, len - 1); return String.valueOf(integer); }
@Test public void testOneMoreByteVLongDimEncPreserveOrder() { // TODO: better test OneMoreByteVLongDimEnc enc = new OneMoreByteVLongDimEnc(2); List<ByteArray> encodedValues = Lists.newArrayList(); encodedValues.add(encode(enc, -32768L)); encodedValues.add(encode(enc, -10000L)); encodedValues.add(encode(enc, -100L)); encodedValues.add(encode(enc, 0L)); encodedValues.add(encode(enc, 100L)); encodedValues.add(encode(enc, 10000L)); encodedValues.add(encode(enc, 32767L)); encodedValues.add(encode(enc, null)); assertTrue(Ordering.from(new DefaultGTComparator()).isOrdered(encodedValues)); }
@Test public void testSerDes() { OneMoreByteVLongDimEnc enc = new OneMoreByteVLongDimEnc(2); testSerDes(enc, 0); testSerDes(enc, 100); testSerDes(enc, 10000); testSerDes(enc, 32767); testSerDes(enc, -100); testSerDes(enc, -10000); testSerDes(enc, -32768); try { testSerDes(enc, 32768); Assert.fail(); } catch (Throwable e) { Assert.assertEquals("expected:<[]32768> but was:<[-]32768>", e.getMessage()); } try { testSerDes(enc, -32769); Assert.fail(); } catch (Throwable e) { Assert.assertEquals("expected:<[-32769]> but was:<[32767]>", e.getMessage()); } }
@Test public void testEncodeDecode() { OneMoreByteVLongDimEnc enc = new OneMoreByteVLongDimEnc(2); testEncodeDecode(enc, 0); testEncodeDecode(enc, 100); testEncodeDecode(enc, 10000); testEncodeDecode(enc, 32767); testEncodeDecode(enc, -100); testEncodeDecode(enc, -10000); testEncodeDecode(enc, -32768); try { testEncodeDecode(enc, 32768); Assert.fail(); } catch (Throwable e) { Assert.assertEquals("expected:<[]32768> but was:<[-]32768>", e.getMessage()); } try { testEncodeDecode(enc, -32769); Assert.fail(); } catch (Throwable e) { Assert.assertEquals("expected:<[-32769]> but was:<[32767]>", e.getMessage()); } }
@Override public DimensionEncoding createDimensionEncoding(String encodingName, String[] args) { return new OneMoreByteVLongDimEnc(Integer.parseInt(args[0])); } };