@Override public DimensionEncoding createDimensionEncoding(String encodingName, String[] args) { return new IntegerDimEnc(Integer.parseInt(args[0])); } };
private void testEncodeDecode(IntegerDimEnc 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.readLong(bytes, offset, len) - CAP[fixedLen]; //only take useful bytes integer = integer & MASK[fixedLen]; boolean positive = (integer & ((0x80L) << ((fixedLen - 1) << 3))) == 0; if (!positive) { integer |= (~MASK[fixedLen]); } return String.valueOf(integer); }
@Test public void testNull() { for (int i = 1; i < 9; i++) { IntegerDimEnc enc = new IntegerDimEnc(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(IntegerDimEnc 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 IntegerDimEnc(0); Assert.fail(); } catch (IllegalArgumentException e) { // expect } try { new IntegerDimEnc(9); Assert.fail(); } catch (IllegalArgumentException e) { // expect } new IntegerDimEnc(8); }
@Override public String decode(byte[] bytes, int offset, int len) { if (isNull(bytes, offset, len)) { return null; } long integer = BytesUtil.readLong(bytes, offset, len) - CAP[fixedLen]; //only take useful bytes integer = integer & MASK[fixedLen]; boolean positive = (integer & ((0x80L) << ((fixedLen - 1) << 3))) == 0; if (!positive) { integer |= (~MASK[fixedLen]); } return String.valueOf(integer); }
@Test // For JIRA: KYLIN-1948 public void testEncodeDecodeMinusOne() { for (int i = 1; i < 9; i++) { IntegerDimEnc enc = new IntegerDimEnc(i); testEncodeDecode(enc, -1); } }
@Test public void testVLongDimEncPreserveOrder() { for (int i = 1; i <= successValue.size(); i++) { IntegerDimEnc enc = new IntegerDimEnc(i); List<ByteArray> encodedValues = Lists.newArrayList(); for (long value : successValue.get(i - 1)) { encodedValues.add(encode(enc, value)); } encodedValues.add(encode(enc, null)); assertTrue(Ordering.from(new DefaultGTComparator()).isOrdered(encodedValues)); } }
@Test public void testEncodeDecode() { for (int i = 1; i <= successValue.size(); i++) { IntegerDimEnc enc = new IntegerDimEnc(i); for (long value : successValue.get(i - 1)) { testEncodeDecode(enc, value); } for (long value : failValue.get(i - 1)) { try { testEncodeDecode(enc, value); Assert.fail(); } catch (Throwable e) { Assert.assertEquals("expected:<" + value + "> but was:<null>", e.getMessage()); } } } }
@Test public void testSerDes() { for (int i = 1; i <= successValue.size(); i++) { IntegerDimEnc enc = new IntegerDimEnc(i); testSerDes(enc, 127); for (long value : successValue.get(i - 1)) { testSerDes(enc, value); } for (long value : failValue.get(i - 1)) { try { testSerDes(enc, value); Assert.fail(); } catch (Throwable e) { Assert.assertEquals("expected:<" + value + "> but was:<null>", e.getMessage()); } } } }
@Override public DimensionEncoding createDimensionEncoding(String encodingName, String[] args) { return new IntegerDimEnc(Integer.parseInt(args[0])); } };