@Override public DimensionEncoding createDimensionEncoding(String encodingName, String[] args) { return new IntDimEnc(Integer.parseInt(args[0])); } };
private void testEncodeDecode(IntDimEnc enc, long value) { byte[] buf = new byte[enc.getLengthOfEncoding()]; String valueStr = "" + value; 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); return String.valueOf(integer); }
@Test public void testNull() { for (int i = 1; i < 9; i++) { IntDimEnc enc = new IntDimEnc(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(IntDimEnc 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 testBadConstructor() { try { new IntDimEnc(0); Assert.fail(); } catch (IllegalArgumentException e) { // expect Assert.assertEquals("the length of IntDimEnc is 0, which should be 1-8", e.getMessage()); } try { new IntDimEnc(9); Assert.fail(); } catch (IllegalArgumentException e) { Assert.assertEquals("the length of IntDimEnc is 9, which should be 1-8", e.getMessage()); } new IntDimEnc(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); return String.valueOf(integer); }
@Test public void testSerDes() { IntDimEnc enc = new IntDimEnc(2); testSerDes(enc, 0); testSerDes(enc, 100); testSerDes(enc, 10000); testSerDes(enc, 65534); try { testSerDes(enc, 65535); Assert.fail(); } catch (Throwable e) { Assert.assertEquals("expected:<65535> but was:<null>", e.getMessage()); } try { testSerDes(enc, 65536); Assert.fail(); } catch (Throwable e) { Assert.assertEquals("expected:<[65536]> but was:<[0]>", e.getMessage()); } }
@Test public void testEncodeDecode() { IntDimEnc enc = new IntDimEnc(2); testEncodeDecode(enc, 0); testEncodeDecode(enc, 100); testEncodeDecode(enc, 10000); testEncodeDecode(enc, 65534); try { testEncodeDecode(enc, 65535); Assert.fail(); } catch (Throwable e) { Assert.assertEquals("expected:<65535> but was:<null>", e.getMessage()); } try { testEncodeDecode(enc, 65536); Assert.fail(); } catch (Throwable e) { Assert.assertEquals("expected:<[65536]> but was:<[0]>", e.getMessage()); } }
@Override public DimensionEncoding createDimensionEncoding(String encodingName, String[] args) { return new IntDimEnc(Integer.parseInt(args[0])); } };