@Test(groups = "fast") public void testBasicEncodeDecode() throws Exception { final DateTime firstTime = DateTimeUtils.dateTimeFromUnixSeconds(1000000); final List<DateTime> unencodedTimes = makeSomeTimes(firstTime); final byte[] compressedTimes = timelineCoder.compressDateTimes(unencodedTimes); //System.out.printf("Compressed times: %s\n", new String(Hex.encodeHex(compressedTimes))); final List<DateTime> decompressedTimes = timelineCoder.decompressDateTimes(compressedTimes); Assert.assertEquals(decompressedTimes.size(), unencodedTimes.size()); for (int i = 0; i < unencodedTimes.size(); i++) { Assert.assertEquals(decompressedTimes.get(i), unencodedTimes.get(i)); } }
@Test(groups = "fast") public void testRepeats() throws Exception { final DateTime firstTime = DateTimeUtils.dateTimeFromUnixSeconds(1293846); final List<DateTime> unencodedTimes = makeSomeTimes(firstTime); final byte[] compressedTimes = timelineCoder.compressDateTimes(unencodedTimes); final List<DateTime> decompressedTimes = timelineCoder.decompressDateTimes(compressedTimes); Assert.assertEquals(decompressedTimes.size(), unencodedTimes.size()); for (int i = 0; i < unencodedTimes.size(); i++) { Assert.assertEquals(decompressedTimes.get(i), unencodedTimes.get(i)); } }
@Test(groups = "fast") public void testCombiningShortFragments() throws Exception { final byte[] fragment0 = new byte[]{(byte) -1, (byte) 0, (byte) 15, (byte) 66, (byte) 84, (byte) 20}; final byte[] fragment1 = new byte[]{(byte) -1, (byte) 0, (byte) 15, (byte) 66, (byte) -122, (byte) 30}; final byte[] fragment2 = new byte[]{(byte) -1, (byte) 0, (byte) 15, (byte) 66, (byte) -62, (byte) 30}; final byte[] fragment3 = new byte[]{(byte) -1, (byte) 0, (byte) 15, (byte) 66, (byte) -2, (byte) 30}; final byte[][] fragmentArray = new byte[][]{fragment0, fragment1, fragment2, fragment3}; final byte[] combined = timelineCoder.combineTimelines(Arrays.asList(fragmentArray), null); final List<DateTime> restoredTimes = timelineCoder.decompressDateTimes(combined); final List<List<DateTime>> fragmentIntTimes = new ArrayList<List<DateTime>>(); final List<DateTime> allFragmentTimes = new ArrayList<DateTime>(); int totalLength = 0; for (final byte[] aFragmentArray : fragmentArray) { final List<DateTime> fragmentTimes = timelineCoder.decompressDateTimes(aFragmentArray); fragmentIntTimes.add(fragmentTimes); totalLength += fragmentTimes.size(); for (final DateTime time : fragmentTimes) { allFragmentTimes.add(time); } } Assert.assertEquals(restoredTimes.size(), totalLength); for (int i = 0; i < totalLength; i++) { Assert.assertEquals(restoredTimes.get(i), allFragmentTimes.get(i)); } }
final List<DateTime> restoredTimes = timelineCoder.decompressDateTimes(allCompressedTime); Assert.assertEquals(restoredTimes.size(), dateTimes.size()); for (int i = 0; i < count; i++) { final List<DateTime> restoredDateTimes = timelineCoder.decompressDateTimes(combined);
@Test(groups = "fast") public void test65KRepeats() throws Exception { final int count = 0; final List<DateTime> dateTimes = new ArrayList<DateTime>(); DateTime time = DateTimeUtils.dateTimeFromUnixSeconds(1000000); for (int i = 0; i < 20; i++) { time = time.plusSeconds(200); dateTimes.add(time); } for (int i = 0; i < 0xFFFF + 100; i++) { time = time.plusSeconds(100); dateTimes.add(time); } final byte[] timeBytes = timelineCoder.compressDateTimes(dateTimes); final String hex = new String(Hex.encodeHex(timeBytes)); // Here are the compressed samples: ff000f4308fe13c8fdffff64fe6464 // Translation: // [ff 00 0f 43 08] means absolution time 1000000 // [fe 13 c8] means repeat 19 times delta 200 seconds // [fd ff ff 64] means repeat 65525 times delta 100 seconds // [fe 64 64] means repeat 100 times delta 100 seconds Assert.assertEquals(timeBytes, Hex.decodeHex("ff000f4308fe13c8fdffff64fe6464".toCharArray())); final List<DateTime> restoredSamples = timelineCoder.decompressDateTimes(timeBytes); Assert.assertEquals(restoredSamples.size(), dateTimes.size()); for (int i = 0; i < count; i++) { Assert.assertEquals(restoredSamples.get(i), DateTimeUtils.unixSeconds(dateTimes.get(i))); } }