@Test(dataProvider = "slices") publicvoid testOffset(SegmentSlice s1, SegmentSlice s2) { if (s1.contains(s2)) { // check that a segment and its overlapping segment point to same elements long offset = s1.segment.segmentOffset(s2.segment); for (int i = 0; i < s2.size(); i++) {
out.format("testOffset s1:%s, s2:%s, offset:%d, i:%s\n", s1, s2, offset, i); byte expected = s2.segment.get(JAVA_BYTE, i); byte found = s1.segment.get(JAVA_BYTE, i + offset);
assertEquals(found, expected);
}
} elseif (s1.kind != s2.kind) { // check that offset from s1 to s2 fails try { long offset = s1.segment.segmentOffset(s2.segment);
out.format("testOffset s1:%s, s2:%s, offset:%d\n", s1, s2, offset);
fail("offset unexpectedly passed!");
} catch (UnsupportedOperationException ex) {
assertTrue(ex.getMessage().contains("Cannot compute offset from native to heap (or vice versa)."));
}
} elseif (!s2.contains(s1)) { // disjoint segments - check that offset is out of bounds long offset = s1.segment.segmentOffset(s2.segment); for (int i = 0; i < s2.size(); i++) {
out.format("testOffset s1:%s, s2:%s, offset:%d, i:%s\n", s1, s2, offset, i);
s2.segment.get(JAVA_BYTE, i); try {
s1.segment.get(JAVA_BYTE, i + offset);
fail("Offset on a disjoint segment is not out of bounds!");
} catch (IndexOutOfBoundsException ex) {
assertTrue(true);
}
}
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.