set flag ByteArraysPartialInputStream_debug. sclass Test_ByteArraysPartialInputStream { ByteArraysPartialInputStream stream; int n = 1000; byte[] data; void writeInRandomRanges(byte[] data) { for (r : splitIntoRandomRangesOfApproximateLength(10, IntRange(0, l(data)))) stream.write(subByteArray(data, r)); } void writeAndReadInRandomRanges(byte[] data) { int iRead = 0; for (r : splitIntoRandomRangesOfApproximateLength(10, IntRange(0, l(data)))) { stream.write(subByteArray(data, r)); int readTo = random(iRead, r.end+1); while (iRead < readTo) assertEquals("Byte " + i, ubyteToInt(data[iRead++]), stream.read()); // partially out of data if (iRead == r.end+1) assertEquals(-1, stream.read()); } // check reading rest of data while (iRead < l(data)) assertEquals("Byte " + i, ubyteToInt(data[iRead++]), stream.read()); } void checkRead(byte[] data) { checkReadWithMark(data, -1); } void checkReadWithMark(byte[] data, int markPos) { for i over data: { if (i == markPos) stream.mark(n); assertEquals("Byte " + i, ubyteToInt(data[i]), stream.read()); } assertEquals(-1, stream.read()); } void test2() ctex { stream = new ByteArraysPartialInputStream; writeAndReadInRandomRanges(randomBytes(n)); } void test1() ctex { stream = new ByteArraysPartialInputStream; data = randomBytes(n); writeInRandomRanges(data); markPos = random(n); checkReadWithMark(data, markPos); print("Resetting to " + markPos); stream.reset(); checkRead(subByteArray(data, markPos)); print("Read OK"); } }