/* * Copyright (c) 2021, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions.
*/
@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 ist noch experimentell.