final List<MemorySegment> memSegs = this.memoryManager.allocatePages(new DummyInvokable(), NUM_SEGS);
final Channel.ID channelID = this.ioManager.createChannel();
final BlockChannelWriter writer = this.ioManager.createBlockChannelWriter(channelID);
for (int i = 0; i < NUM_IOS; i++) {
final MemorySegment memSeg = memSegs.isEmpty() ? writer.getNextReturnedSegment() : memSegs.remove(0);
for (int pos = 0; pos < memSeg.size(); pos += 4) {
memSeg.putInt(pos, i);
}
writer.writeBlock(memSeg);
}
writer.close();
// get back the memory
while (memSegs.size() < NUM_SEGS) {
memSegs.add(writer.getNextReturnedSegment());
}
final BlockChannelReader reader = this.ioManager.createBlockChannelReader(channelID);
while(!memSegs.isEmpty()) {
reader.readBlock(memSegs.remove(0));
}
for (int i = 0; i < NUM_IOS; i++) {
final MemorySegment memSeg = reader.getNextReturnedSegment();
for (int pos = 0; pos < memSeg.size(); pos += 4) {
if (memSeg.getInt(pos) != i) {
Assert.fail("Read memory segment contains invalid data.");
}
}
reader.readBlock(memSeg);
}