Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id ADB27200CD8 for ; Wed, 2 Aug 2017 14:47:02 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id ABF801695C2; Wed, 2 Aug 2017 12:47:02 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 2F6651695C7 for ; Wed, 2 Aug 2017 14:47:00 +0200 (CEST) Received: (qmail 16753 invoked by uid 500); 2 Aug 2017 12:46:54 -0000 Mailing-List: contact commits-help@flink.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@flink.apache.org Delivered-To: mailing list commits@flink.apache.org Received: (qmail 16562 invoked by uid 99); 2 Aug 2017 12:46:53 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 02 Aug 2017 12:46:53 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id B6367F3344; Wed, 2 Aug 2017 12:46:52 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: chesnay@apache.org To: commits@flink.apache.org Date: Wed, 02 Aug 2017 12:46:56 -0000 Message-Id: In-Reply-To: <95978bdc975f427bb54e29fc0d4f3498@git.apache.org> References: <95978bdc975f427bb54e29fc0d4f3498@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [5/7] flink git commit: [FLINK-7311][tests] refrain from using fail(Exception#getMessage()) archived-at: Wed, 02 Aug 2017 12:47:02 -0000 http://git-wip-us.apache.org/repos/asf/flink/blob/e83217bd/flink-core/src/test/java/org/apache/flink/core/memory/MemorySegmentTestBase.java ---------------------------------------------------------------------- diff --git a/flink-core/src/test/java/org/apache/flink/core/memory/MemorySegmentTestBase.java b/flink-core/src/test/java/org/apache/flink/core/memory/MemorySegmentTestBase.java index 10c3622..8c10902 100644 --- a/flink-core/src/test/java/org/apache/flink/core/memory/MemorySegmentTestBase.java +++ b/flink-core/src/test/java/org/apache/flink/core/memory/MemorySegmentTestBase.java @@ -18,7 +18,6 @@ package org.apache.flink.core.memory; -import org.junit.Assert; import org.junit.Test; import org.junit.runners.Parameterized; @@ -67,1508 +66,1675 @@ public abstract class MemorySegmentTestBase { @Test public void testByteAccess() { - try { - final MemorySegment segment = createSegment(pageSize); - - // test exceptions - try { - segment.put(-1, (byte) 0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + final MemorySegment segment = createSegment(pageSize); - try { - segment.put(pageSize, (byte) 0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + // test exceptions + try { + segment.put(-1, (byte) 0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.put(Integer.MAX_VALUE, (byte) 0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.put(pageSize, (byte) 0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.put(Integer.MIN_VALUE, (byte) 0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.put(Integer.MAX_VALUE, (byte) 0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.get(-1); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.put(Integer.MIN_VALUE, (byte) 0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.get(pageSize); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.get(-1); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.get(Integer.MAX_VALUE); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.get(pageSize); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.get(Integer.MIN_VALUE); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.get(Integer.MAX_VALUE); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - // test expected correct behavior, sequential access + try { + segment.get(Integer.MIN_VALUE); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - long seed = random.nextLong(); + // test expected correct behavior, sequential access - random.setSeed(seed); - for (int i = 0; i < pageSize; i++) { - segment.put(i, (byte) random.nextInt()); - } + long seed = random.nextLong(); - random.setSeed(seed); - for (int i = 0; i < pageSize; i++) { - assertEquals((byte) random.nextInt(), segment.get(i)); - } + random.setSeed(seed); + for (int i = 0; i < pageSize; i++) { + segment.put(i, (byte) random.nextInt()); + } - // test expected correct behavior, random access + random.setSeed(seed); + for (int i = 0; i < pageSize; i++) { + assertEquals((byte) random.nextInt(), segment.get(i)); + } - random.setSeed(seed); - boolean[] occupied = new boolean[pageSize]; + // test expected correct behavior, random access - for (int i = 0; i < 1000; i++) { - int pos = random.nextInt(pageSize); + random.setSeed(seed); + boolean[] occupied = new boolean[pageSize]; - if (occupied[pos]) { - continue; - } else { - occupied[pos] = true; - } + for (int i = 0; i < 1000; i++) { + int pos = random.nextInt(pageSize); - segment.put(pos, (byte) random.nextInt()); + if (occupied[pos]) { + continue; + } else { + occupied[pos] = true; } - random.setSeed(seed); - occupied = new boolean[pageSize]; + segment.put(pos, (byte) random.nextInt()); + } - for (int i = 0; i < 1000; i++) { - int pos = random.nextInt(pageSize); + random.setSeed(seed); + occupied = new boolean[pageSize]; - if (occupied[pos]) { - continue; - } else { - occupied[pos] = true; - } + for (int i = 0; i < 1000; i++) { + int pos = random.nextInt(pageSize); - assertEquals((byte) random.nextInt(), segment.get(pos)); + if (occupied[pos]) { + continue; + } else { + occupied[pos] = true; } - } - catch (Exception e) { - e.printStackTrace(); - fail(e.getMessage()); + + assertEquals((byte) random.nextInt(), segment.get(pos)); } } @Test public void testBooleanAccess() { - try { - final MemorySegment segment = createSegment(pageSize); - - // test exceptions - try { - segment.putBoolean(-1, false); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + final MemorySegment segment = createSegment(pageSize); - try { - segment.putBoolean(pageSize, false); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + // test exceptions + try { + segment.putBoolean(-1, false); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putBoolean(Integer.MAX_VALUE, false); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putBoolean(pageSize, false); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putBoolean(Integer.MIN_VALUE, false); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putBoolean(Integer.MAX_VALUE, false); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getBoolean(-1); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putBoolean(Integer.MIN_VALUE, false); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getBoolean(pageSize); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getBoolean(-1); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getBoolean(Integer.MAX_VALUE); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getBoolean(pageSize); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getBoolean(Integer.MIN_VALUE); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getBoolean(Integer.MAX_VALUE); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - // test expected correct behavior, sequential access + try { + segment.getBoolean(Integer.MIN_VALUE); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - long seed = random.nextLong(); + // test expected correct behavior, sequential access - random.setSeed(seed); - for (int i = 0; i < pageSize; i++) { - segment.putBoolean(i, random.nextBoolean()); - } + long seed = random.nextLong(); - random.setSeed(seed); - for (int i = 0; i < pageSize; i++) { - assertEquals(random.nextBoolean(), segment.getBoolean(i)); - } + random.setSeed(seed); + for (int i = 0; i < pageSize; i++) { + segment.putBoolean(i, random.nextBoolean()); + } - // test expected correct behavior, random access + random.setSeed(seed); + for (int i = 0; i < pageSize; i++) { + assertEquals(random.nextBoolean(), segment.getBoolean(i)); + } - random.setSeed(seed); - boolean[] occupied = new boolean[pageSize]; + // test expected correct behavior, random access - for (int i = 0; i < 1000; i++) { - int pos = random.nextInt(pageSize); + random.setSeed(seed); + boolean[] occupied = new boolean[pageSize]; - if (occupied[pos]) { - continue; - } else { - occupied[pos] = true; - } + for (int i = 0; i < 1000; i++) { + int pos = random.nextInt(pageSize); - segment.putBoolean(pos, random.nextBoolean()); + if (occupied[pos]) { + continue; + } else { + occupied[pos] = true; } - random.setSeed(seed); - occupied = new boolean[pageSize]; + segment.putBoolean(pos, random.nextBoolean()); + } - for (int i = 0; i < 1000; i++) { - int pos = random.nextInt(pageSize); + random.setSeed(seed); + occupied = new boolean[pageSize]; - if (occupied[pos]) { - continue; - } else { - occupied[pos] = true; - } + for (int i = 0; i < 1000; i++) { + int pos = random.nextInt(pageSize); - assertEquals(random.nextBoolean(), segment.getBoolean(pos)); + if (occupied[pos]) { + continue; + } else { + occupied[pos] = true; } - } - catch (Exception e) { - e.printStackTrace(); - fail(e.getMessage()); + + assertEquals(random.nextBoolean(), segment.getBoolean(pos)); } } @Test public void testCharAccess() { + final MemorySegment segment = createSegment(pageSize); + + // test exceptions + try { - final MemorySegment segment = createSegment(pageSize); + segment.putChar(-1, 'a'); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - // test exceptions + try { + segment.putChar(pageSize, 'a'); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putChar(-1, 'a'); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putChar(Integer.MIN_VALUE, 'a'); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putChar(pageSize, 'a'); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putChar(Integer.MAX_VALUE, 'a'); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putChar(Integer.MIN_VALUE, 'a'); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putChar(Integer.MAX_VALUE - 1, 'a'); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putChar(Integer.MAX_VALUE, 'a'); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getChar(-1); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putChar(Integer.MAX_VALUE - 1, 'a'); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getChar(pageSize); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getChar(-1); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getChar(Integer.MIN_VALUE); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getChar(pageSize); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getChar(Integer.MAX_VALUE); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getChar(Integer.MIN_VALUE); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getChar(Integer.MAX_VALUE - 1); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getChar(Integer.MAX_VALUE); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + // test expected correct behavior, sequential access - try { - segment.getChar(Integer.MAX_VALUE - 1); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + long seed = random.nextLong(); - // test expected correct behavior, sequential access + random.setSeed(seed); + for (int i = 0; i <= pageSize - 2; i += 2) { + segment.putChar(i, (char) (random.nextInt(Character.MAX_VALUE))); + } - long seed = random.nextLong(); + random.setSeed(seed); + for (int i = 0; i <= pageSize - 2; i += 2) { + assertEquals((char) (random.nextInt(Character.MAX_VALUE)), segment.getChar(i)); + } - random.setSeed(seed); - for (int i = 0; i <= pageSize - 2; i += 2) { - segment.putChar(i, (char) (random.nextInt(Character.MAX_VALUE))); - } + // test expected correct behavior, random access - random.setSeed(seed); - for (int i = 0; i <= pageSize - 2; i += 2) { - assertEquals((char) (random.nextInt(Character.MAX_VALUE)), segment.getChar(i)); - } + random.setSeed(seed); + boolean[] occupied = new boolean[pageSize]; - // test expected correct behavior, random access + for (int i = 0; i < 1000; i++) { + int pos = random.nextInt(pageSize - 1); - random.setSeed(seed); - boolean[] occupied = new boolean[pageSize]; + if (occupied[pos] || occupied[pos + 1]) { + continue; + } else { + occupied[pos] = true; + occupied[pos+1] = true; + } + + segment.putChar(pos, (char) (random.nextInt(Character.MAX_VALUE))); + } - for (int i = 0; i < 1000; i++) { - int pos = random.nextInt(pageSize - 1); + random.setSeed(seed); + occupied = new boolean[pageSize]; - if (occupied[pos] || occupied[pos + 1]) { - continue; - } else { - occupied[pos] = true; - occupied[pos+1] = true; - } + for (int i = 0; i < 1000; i++) { + int pos = random.nextInt(pageSize - 1); - segment.putChar(pos, (char) (random.nextInt(Character.MAX_VALUE))); + if (occupied[pos] || occupied[pos + 1]) { + continue; + } else { + occupied[pos] = true; + occupied[pos+1] = true; } - random.setSeed(seed); - occupied = new boolean[pageSize]; + assertEquals((char) (random.nextInt(Character.MAX_VALUE)), segment.getChar(pos)); + } + } - for (int i = 0; i < 1000; i++) { - int pos = random.nextInt(pageSize - 1); + @Test + public void testShortAccess() { + final MemorySegment segment = createSegment(pageSize); - if (occupied[pos] || occupied[pos + 1]) { - continue; - } else { - occupied[pos] = true; - occupied[pos+1] = true; - } + // test exceptions - assertEquals((char) (random.nextInt(Character.MAX_VALUE)), segment.getChar(pos)); - } + try { + segment.putShort(-1, (short) 0); + fail("IndexOutOfBoundsException expected"); } catch (Exception e) { - e.printStackTrace(); - fail(e.getMessage()); + assertTrue(e instanceof IndexOutOfBoundsException); } - } - @Test - public void testShortAccess() { try { - final MemorySegment segment = createSegment(pageSize); + segment.putShort(pageSize, (short) 0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - // test exceptions + try { + segment.putShort(Integer.MIN_VALUE, (short) 0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putShort(-1, (short) 0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putShort(Integer.MAX_VALUE, (short) 0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putShort(pageSize, (short) 0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putShort(Integer.MAX_VALUE - 1, (short) 0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putShort(Integer.MIN_VALUE, (short) 0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getShort(-1); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putShort(Integer.MAX_VALUE, (short) 0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getShort(pageSize); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putShort(Integer.MAX_VALUE - 1, (short) 0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getShort(Integer.MIN_VALUE); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getShort(-1); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getShort(Integer.MAX_VALUE); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getShort(pageSize); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getShort(Integer.MAX_VALUE - 1); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getShort(Integer.MIN_VALUE); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + // test expected correct behavior, sequential access - try { - segment.getShort(Integer.MAX_VALUE); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + long seed = random.nextLong(); - try { - segment.getShort(Integer.MAX_VALUE - 1); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + random.setSeed(seed); + for (int i = 0; i <= pageSize - 2; i += 2) { + segment.putShort(i, (short) random.nextInt()); + } - // test expected correct behavior, sequential access + random.setSeed(seed); + for (int i = 0; i <= pageSize - 2; i += 2) { + assertEquals((short) random.nextInt(), segment.getShort(i)); + } - long seed = random.nextLong(); + // test expected correct behavior, random access - random.setSeed(seed); - for (int i = 0; i <= pageSize - 2; i += 2) { - segment.putShort(i, (short) random.nextInt()); - } + random.setSeed(seed); + boolean[] occupied = new boolean[pageSize]; - random.setSeed(seed); - for (int i = 0; i <= pageSize - 2; i += 2) { - assertEquals((short) random.nextInt(), segment.getShort(i)); - } + for (int i = 0; i < 1000; i++) { + int pos = random.nextInt(pageSize - 1); - // test expected correct behavior, random access + if (occupied[pos] || occupied[pos + 1]) { + continue; + } else { + occupied[pos] = true; + occupied[pos+1] = true; + } - random.setSeed(seed); - boolean[] occupied = new boolean[pageSize]; + segment.putShort(pos, (short) random.nextInt()); + } - for (int i = 0; i < 1000; i++) { - int pos = random.nextInt(pageSize - 1); + random.setSeed(seed); + occupied = new boolean[pageSize]; - if (occupied[pos] || occupied[pos + 1]) { - continue; - } else { - occupied[pos] = true; - occupied[pos+1] = true; - } + for (int i = 0; i < 1000; i++) { + int pos = random.nextInt(pageSize - 1); - segment.putShort(pos, (short) random.nextInt()); + if (occupied[pos] || occupied[pos + 1]) { + continue; + } else { + occupied[pos] = true; + occupied[pos+1] = true; } - random.setSeed(seed); - occupied = new boolean[pageSize]; + assertEquals((short) random.nextInt(), segment.getShort(pos)); + } + } - for (int i = 0; i < 1000; i++) { - int pos = random.nextInt(pageSize - 1); + @Test + public void testIntAccess() { + final MemorySegment segment = createSegment(pageSize); - if (occupied[pos] || occupied[pos + 1]) { - continue; - } else { - occupied[pos] = true; - occupied[pos+1] = true; - } + // test exceptions - assertEquals((short) random.nextInt(), segment.getShort(pos)); - } + try { + segment.putInt(-1, 0); + fail("IndexOutOfBoundsException expected"); } catch (Exception e) { - e.printStackTrace(); - fail(e.getMessage()); + assertTrue(e instanceof IndexOutOfBoundsException); } - } - @Test - public void testIntAccess() { try { - final MemorySegment segment = createSegment(pageSize); + segment.putInt(pageSize, 0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - // test exceptions + try { + segment.putInt(pageSize - 3, 0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putInt(-1, 0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putInt(Integer.MIN_VALUE, 0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putInt(pageSize, 0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putInt(Integer.MAX_VALUE, 0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putInt(pageSize - 3, 0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putInt(Integer.MAX_VALUE - 3, 0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putInt(Integer.MIN_VALUE, 0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getInt(-1); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putInt(Integer.MAX_VALUE, 0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getInt(pageSize); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putInt(Integer.MAX_VALUE - 3, 0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getInt(pageSize - 3); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getInt(-1); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getInt(Integer.MIN_VALUE); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getInt(pageSize); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getInt(Integer.MAX_VALUE); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getInt(pageSize - 3); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getInt(Integer.MAX_VALUE - 3); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getInt(Integer.MIN_VALUE); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + // test expected correct behavior, sequential access - try { - segment.getInt(Integer.MAX_VALUE); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + long seed = random.nextLong(); - try { - segment.getInt(Integer.MAX_VALUE - 3); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + random.setSeed(seed); + for (int i = 0; i <= pageSize - 4; i += 4) { + segment.putInt(i, random.nextInt()); + } - // test expected correct behavior, sequential access + random.setSeed(seed); + for (int i = 0; i <= pageSize - 4; i += 4) { + assertEquals(random.nextInt(), segment.getInt(i)); + } - long seed = random.nextLong(); + // test expected correct behavior, random access - random.setSeed(seed); - for (int i = 0; i <= pageSize - 4; i += 4) { - segment.putInt(i, random.nextInt()); - } + random.setSeed(seed); + boolean[] occupied = new boolean[pageSize]; - random.setSeed(seed); - for (int i = 0; i <= pageSize - 4; i += 4) { - assertEquals(random.nextInt(), segment.getInt(i)); - } + for (int i = 0; i < 1000; i++) { + int pos = random.nextInt(pageSize - 3); - // test expected correct behavior, random access + if (occupied[pos] || occupied[pos + 1] || occupied[pos + 2] || occupied[pos + 3]) { + continue; + } else { + occupied[pos] = true; + occupied[pos+1] = true; + occupied[pos+2] = true; + occupied[pos+3] = true; + } - random.setSeed(seed); - boolean[] occupied = new boolean[pageSize]; - - for (int i = 0; i < 1000; i++) { - int pos = random.nextInt(pageSize - 3); - - if (occupied[pos] || occupied[pos + 1] || occupied[pos + 2] || occupied[pos + 3]) { - continue; - } else { - occupied[pos] = true; - occupied[pos+1] = true; - occupied[pos+2] = true; - occupied[pos+3] = true; - } + segment.putInt(pos, random.nextInt()); + } - segment.putInt(pos, random.nextInt()); - } + random.setSeed(seed); + occupied = new boolean[pageSize]; - random.setSeed(seed); - occupied = new boolean[pageSize]; - - for (int i = 0; i < 1000; i++) { - int pos = random.nextInt(pageSize - 3); - - if (occupied[pos] || occupied[pos + 1] || occupied[pos + 2] || occupied[pos + 3]) { - continue; - } else { - occupied[pos] = true; - occupied[pos+1] = true; - occupied[pos+2] = true; - occupied[pos+3] = true; - } + for (int i = 0; i < 1000; i++) { + int pos = random.nextInt(pageSize - 3); - assertEquals(random.nextInt(), segment.getInt(pos)); + if (occupied[pos] || occupied[pos + 1] || occupied[pos + 2] || occupied[pos + 3]) { + continue; + } else { + occupied[pos] = true; + occupied[pos+1] = true; + occupied[pos+2] = true; + occupied[pos+3] = true; } - } - catch (Exception e) { - e.printStackTrace(); - fail(e.getMessage()); + + assertEquals(random.nextInt(), segment.getInt(pos)); } } @Test public void testLongAccess() { - try { - final MemorySegment segment = createSegment(pageSize); + final MemorySegment segment = createSegment(pageSize); - // test exceptions - - try { - segment.putLong(-1, 0L); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + // test exceptions - try { - segment.putLong(pageSize, 0L); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putLong(-1, 0L); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putLong(pageSize - 7, 0L); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putLong(pageSize, 0L); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putLong(Integer.MIN_VALUE, 0L); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putLong(pageSize - 7, 0L); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putLong(Integer.MAX_VALUE, 0L); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putLong(Integer.MIN_VALUE, 0L); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putLong(Integer.MAX_VALUE - 7, 0L); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putLong(Integer.MAX_VALUE, 0L); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getLong(-1); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putLong(Integer.MAX_VALUE - 7, 0L); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getLong(pageSize); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getLong(-1); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getLong(pageSize - 7); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getLong(pageSize); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getLong(Integer.MIN_VALUE); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getLong(pageSize - 7); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getLong(Integer.MAX_VALUE); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getLong(Integer.MIN_VALUE); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getLong(Integer.MAX_VALUE - 7); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getLong(Integer.MAX_VALUE); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - // test expected correct behavior, sequential access + try { + segment.getLong(Integer.MAX_VALUE - 7); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - long seed = random.nextLong(); + // test expected correct behavior, sequential access - random.setSeed(seed); - for (int i = 0; i <= pageSize - 8; i += 8) { - segment.putLong(i, random.nextLong()); - } + long seed = random.nextLong(); - random.setSeed(seed); - for (int i = 0; i <= pageSize - 8; i += 8) { - assertEquals(random.nextLong(), segment.getLong(i)); - } + random.setSeed(seed); + for (int i = 0; i <= pageSize - 8; i += 8) { + segment.putLong(i, random.nextLong()); + } - // test expected correct behavior, random access + random.setSeed(seed); + for (int i = 0; i <= pageSize - 8; i += 8) { + assertEquals(random.nextLong(), segment.getLong(i)); + } - random.setSeed(seed); - boolean[] occupied = new boolean[pageSize]; + // test expected correct behavior, random access - for (int i = 0; i < 1000; i++) { - int pos = random.nextInt(pageSize - 7); + random.setSeed(seed); + boolean[] occupied = new boolean[pageSize]; - if (occupied[pos] || occupied[pos + 1] || occupied[pos + 2] || occupied[pos + 3] || - occupied[pos + 4] || occupied[pos + 5] || occupied[pos + 6] || occupied[pos + 7]) - { - continue; - } - else { - occupied[pos] = true; - occupied[pos+1] = true; - occupied[pos+2] = true; - occupied[pos+3] = true; - occupied[pos+4] = true; - occupied[pos+5] = true; - occupied[pos+6] = true; - occupied[pos+7] = true; - } + for (int i = 0; i < 1000; i++) { + int pos = random.nextInt(pageSize - 7); - segment.putLong(pos, random.nextLong()); + if (occupied[pos] || occupied[pos + 1] || occupied[pos + 2] || occupied[pos + 3] || + occupied[pos + 4] || occupied[pos + 5] || occupied[pos + 6] || occupied[pos + 7]) + { + continue; + } + else { + occupied[pos] = true; + occupied[pos+1] = true; + occupied[pos+2] = true; + occupied[pos+3] = true; + occupied[pos+4] = true; + occupied[pos+5] = true; + occupied[pos+6] = true; + occupied[pos+7] = true; } - random.setSeed(seed); - occupied = new boolean[pageSize]; + segment.putLong(pos, random.nextLong()); + } - for (int i = 0; i < 1000; i++) { - int pos = random.nextInt(pageSize - 7); + random.setSeed(seed); + occupied = new boolean[pageSize]; - if (occupied[pos] || occupied[pos + 1] || occupied[pos + 2] || occupied[pos + 3] || - occupied[pos + 4] || occupied[pos + 5] || occupied[pos + 6] || occupied[pos + 7]) - { - continue; - } - else { - occupied[pos] = true; - occupied[pos+1] = true; - occupied[pos+2] = true; - occupied[pos+3] = true; - occupied[pos+4] = true; - occupied[pos+5] = true; - occupied[pos+6] = true; - occupied[pos+7] = true; - } + for (int i = 0; i < 1000; i++) { + int pos = random.nextInt(pageSize - 7); - assertEquals(random.nextLong(), segment.getLong(pos)); + if (occupied[pos] || occupied[pos + 1] || occupied[pos + 2] || occupied[pos + 3] || + occupied[pos + 4] || occupied[pos + 5] || occupied[pos + 6] || occupied[pos + 7]) + { + continue; } - } - catch (Exception e) { - e.printStackTrace(); - fail(e.getMessage()); + else { + occupied[pos] = true; + occupied[pos+1] = true; + occupied[pos+2] = true; + occupied[pos+3] = true; + occupied[pos+4] = true; + occupied[pos+5] = true; + occupied[pos+6] = true; + occupied[pos+7] = true; + } + + assertEquals(random.nextLong(), segment.getLong(pos)); } } @Test public void testFloatAccess() { - try { - final MemorySegment segment = createSegment(pageSize); + final MemorySegment segment = createSegment(pageSize); - // test exceptions + // test exceptions - try { - segment.putFloat(-1, 0.0f); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putFloat(-1, 0.0f); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putFloat(pageSize, 0.0f); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putFloat(pageSize, 0.0f); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putFloat(pageSize - 3, 0.0f); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putFloat(pageSize - 3, 0.0f); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putFloat(Integer.MIN_VALUE, 0.0f); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putFloat(Integer.MIN_VALUE, 0.0f); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putFloat(Integer.MAX_VALUE, 0.0f); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putFloat(Integer.MAX_VALUE, 0.0f); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putFloat(Integer.MAX_VALUE - 3, 0.0f); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putFloat(Integer.MAX_VALUE - 3, 0.0f); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getFloat(-1); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getFloat(-1); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getFloat(pageSize); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getFloat(pageSize); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getFloat(pageSize - 3); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getFloat(pageSize - 3); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getFloat(Integer.MIN_VALUE); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getFloat(Integer.MIN_VALUE); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getFloat(Integer.MAX_VALUE); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getFloat(Integer.MAX_VALUE); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getFloat(Integer.MAX_VALUE - 3); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getFloat(Integer.MAX_VALUE - 3); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - // test expected correct behavior, sequential access + // test expected correct behavior, sequential access - long seed = random.nextLong(); + long seed = random.nextLong(); - random.setSeed(seed); - for (int i = 0; i <= pageSize - 4; i += 4) { - segment.putFloat(i, random.nextFloat()); - } + random.setSeed(seed); + for (int i = 0; i <= pageSize - 4; i += 4) { + segment.putFloat(i, random.nextFloat()); + } - random.setSeed(seed); - for (int i = 0; i <= pageSize - 4; i += 4) { - assertEquals(random.nextFloat(), segment.getFloat(i), 0.0); - } + random.setSeed(seed); + for (int i = 0; i <= pageSize - 4; i += 4) { + assertEquals(random.nextFloat(), segment.getFloat(i), 0.0); + } - // test expected correct behavior, random access + // test expected correct behavior, random access - random.setSeed(seed); - boolean[] occupied = new boolean[pageSize]; - - for (int i = 0; i < 1000; i++) { - int pos = random.nextInt(pageSize - 3); - - if (occupied[pos] || occupied[pos + 1] || occupied[pos + 2] || occupied[pos + 3]) { - continue; - } else { - occupied[pos] = true; - occupied[pos+1] = true; - occupied[pos+2] = true; - occupied[pos+3] = true; - } + random.setSeed(seed); + boolean[] occupied = new boolean[pageSize]; - segment.putFloat(pos, random.nextFloat()); + for (int i = 0; i < 1000; i++) { + int pos = random.nextInt(pageSize - 3); + + if (occupied[pos] || occupied[pos + 1] || occupied[pos + 2] || occupied[pos + 3]) { + continue; + } else { + occupied[pos] = true; + occupied[pos+1] = true; + occupied[pos+2] = true; + occupied[pos+3] = true; } - random.setSeed(seed); - occupied = new boolean[pageSize]; - - for (int i = 0; i < 1000; i++) { - int pos = random.nextInt(pageSize - 3); - - if (occupied[pos] || occupied[pos + 1] || occupied[pos + 2] || occupied[pos + 3]) { - continue; - } else { - occupied[pos] = true; - occupied[pos+1] = true; - occupied[pos+2] = true; - occupied[pos+3] = true; - } + segment.putFloat(pos, random.nextFloat()); + } + + random.setSeed(seed); + occupied = new boolean[pageSize]; + + for (int i = 0; i < 1000; i++) { + int pos = random.nextInt(pageSize - 3); - assertEquals(random.nextFloat(), segment.getFloat(pos), 0.0); + if (occupied[pos] || occupied[pos + 1] || occupied[pos + 2] || occupied[pos + 3]) { + continue; + } else { + occupied[pos] = true; + occupied[pos+1] = true; + occupied[pos+2] = true; + occupied[pos+3] = true; } - } - catch (Exception e) { - e.printStackTrace(); - fail(e.getMessage()); + + assertEquals(random.nextFloat(), segment.getFloat(pos), 0.0); } } @Test public void testDoubleAccess() { + final MemorySegment segment = createSegment(pageSize); + + // test exceptions try { - final MemorySegment segment = createSegment(pageSize); + segment.putDouble(-1, 0.0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - // test exceptions - try { - segment.putDouble(-1, 0.0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putDouble(pageSize, 0.0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putDouble(pageSize, 0.0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putDouble(pageSize - 7, 0.0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putDouble(pageSize - 7, 0.0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putDouble(Integer.MIN_VALUE, 0.0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putDouble(Integer.MIN_VALUE, 0.0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putDouble(Integer.MAX_VALUE, 0.0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putDouble(Integer.MAX_VALUE, 0.0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.putDouble(Integer.MAX_VALUE - 7, 0.0); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.putDouble(Integer.MAX_VALUE - 7, 0.0); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getDouble(-1); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getDouble(-1); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getDouble(pageSize); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getDouble(pageSize); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getDouble(pageSize - 7); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getDouble(pageSize - 7); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getDouble(Integer.MIN_VALUE); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getDouble(Integer.MIN_VALUE); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.getDouble(Integer.MAX_VALUE); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.getDouble(Integer.MAX_VALUE); - fail("IndexOutOfBoundsException expected"); + try { + segment.getDouble(Integer.MAX_VALUE - 7); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + // test expected correct behavior, sequential access + + long seed = random.nextLong(); + + random.setSeed(seed); + for (int i = 0; i <= pageSize - 8; i += 8) { + segment.putDouble(i, random.nextDouble()); + } + + random.setSeed(seed); + for (int i = 0; i <= pageSize - 8; i += 8) { + assertEquals(random.nextDouble(), segment.getDouble(i), 0.0); + } + + // test expected correct behavior, random access + + random.setSeed(seed); + boolean[] occupied = new boolean[pageSize]; + + for (int i = 0; i < 1000; i++) { + int pos = random.nextInt(pageSize - 7); + + if (occupied[pos] || occupied[pos + 1] || occupied[pos + 2] || occupied[pos + 3] || + occupied[pos + 4] || occupied[pos + 5] || occupied[pos + 6] || occupied[pos + 7]) + { + continue; } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); + else { + occupied[pos] = true; + occupied[pos+1] = true; + occupied[pos+2] = true; + occupied[pos+3] = true; + occupied[pos+4] = true; + occupied[pos+5] = true; + occupied[pos+6] = true; + occupied[pos+7] = true; } - try { - segment.getDouble(Integer.MAX_VALUE - 7); - fail("IndexOutOfBoundsException expected"); + segment.putDouble(pos, random.nextDouble()); + } + + random.setSeed(seed); + occupied = new boolean[pageSize]; + + for (int i = 0; i < 1000; i++) { + int pos = random.nextInt(pageSize - 7); + + if (occupied[pos] || occupied[pos + 1] || occupied[pos + 2] || occupied[pos + 3] || + occupied[pos + 4] || occupied[pos + 5] || occupied[pos + 6] || occupied[pos + 7]) + { + continue; } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); + else { + occupied[pos] = true; + occupied[pos+1] = true; + occupied[pos+2] = true; + occupied[pos+3] = true; + occupied[pos+4] = true; + occupied[pos+5] = true; + occupied[pos+6] = true; + occupied[pos+7] = true; } - // test expected correct behavior, sequential access + assertEquals(random.nextDouble(), segment.getDouble(pos), 0.0); + } + } - long seed = random.nextLong(); + // ------------------------------------------------------------------------ + // Bulk Byte Movements + // ------------------------------------------------------------------------ - random.setSeed(seed); - for (int i = 0; i <= pageSize - 8; i += 8) { - segment.putDouble(i, random.nextDouble()); - } + @Test + public void testBulkBytePutExceptions() { + final MemorySegment segment = createSegment(pageSize); - random.setSeed(seed); - for (int i = 0; i <= pageSize - 8; i += 8) { - assertEquals(random.nextDouble(), segment.getDouble(i), 0.0); - } + byte[] bytes = new byte[pageSize / 4 + (pageSize%4)]; + random.nextBytes(bytes); - // test expected correct behavior, random access + // wrong positions into memory segment - random.setSeed(seed); - boolean[] occupied = new boolean[pageSize]; + try { + segment.put(-1, bytes); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - for (int i = 0; i < 1000; i++) { - int pos = random.nextInt(pageSize - 7); + try { + segment.put(-1, bytes, 4, 5); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - if (occupied[pos] || occupied[pos + 1] || occupied[pos + 2] || occupied[pos + 3] || - occupied[pos + 4] || occupied[pos + 5] || occupied[pos + 6] || occupied[pos + 7]) - { - continue; - } - else { - occupied[pos] = true; - occupied[pos+1] = true; - occupied[pos+2] = true; - occupied[pos+3] = true; - occupied[pos+4] = true; - occupied[pos+5] = true; - occupied[pos+6] = true; - occupied[pos+7] = true; - } + try { + segment.put(Integer.MIN_VALUE, bytes); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - segment.putDouble(pos, random.nextDouble()); - } + try { + segment.put(Integer.MIN_VALUE, bytes, 4, 5); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - random.setSeed(seed); - occupied = new boolean[pageSize]; + try { + segment.put(pageSize, bytes); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - for (int i = 0; i < 1000; i++) { - int pos = random.nextInt(pageSize - 7); + try { + segment.put(pageSize, bytes, 6, 44); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - if (occupied[pos] || occupied[pos + 1] || occupied[pos + 2] || occupied[pos + 3] || - occupied[pos + 4] || occupied[pos + 5] || occupied[pos + 6] || occupied[pos + 7]) - { - continue; - } - else { - occupied[pos] = true; - occupied[pos+1] = true; - occupied[pos+2] = true; - occupied[pos+3] = true; - occupied[pos+4] = true; - occupied[pos+5] = true; - occupied[pos+6] = true; - occupied[pos+7] = true; - } + try { + segment.put(pageSize - bytes.length + 1, bytes); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - assertEquals(random.nextDouble(), segment.getDouble(pos), 0.0); - } + try { + segment.put(pageSize - 5, bytes, 3, 6); + fail("IndexOutOfBoundsException expected"); } catch (Exception e) { - e.printStackTrace(); - fail(e.getMessage()); + assertTrue(e instanceof IndexOutOfBoundsException); } - } - // ------------------------------------------------------------------------ - // Bulk Byte Movements - // ------------------------------------------------------------------------ + try { + segment.put(Integer.MAX_VALUE, bytes); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.put(Integer.MAX_VALUE, bytes, 10, 20); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.put(Integer.MAX_VALUE - bytes.length + 1, bytes); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.put(Integer.MAX_VALUE - 11, bytes, 11, 11); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.put(3 * (pageSize / 4) + 1, bytes); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.put(3 * (pageSize / 4) + 2, bytes, 0, bytes.length - 1); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.put(7 * (pageSize / 8) + 1, bytes, 0, bytes.length / 2); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + // wrong source array positions / lengths + + try { + segment.put(0, bytes, -1, 1); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.put(0, bytes, -1, bytes.length + 1); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.put(0, bytes, Integer.MIN_VALUE, bytes.length); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.put(0, bytes, Integer.MAX_VALUE, bytes.length); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.put(0, bytes, Integer.MAX_VALUE - bytes.length + 1, bytes.length); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + // case where negative offset and negative index compensate each other + try { + segment.put(-2, bytes, -1, bytes.length / 2); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + } @Test - public void testBulkBytePutExceptions() { + public void testBulkByteGetExceptions() { + final MemorySegment segment = createSegment(pageSize); + + byte[] bytes = new byte[pageSize / 4]; + + // wrong positions into memory segment + try { - final MemorySegment segment = createSegment(pageSize); + segment.get(-1, bytes); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - byte[] bytes = new byte[pageSize / 4 + (pageSize%4)]; - random.nextBytes(bytes); + try { + segment.get(-1, bytes, 4, 5); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - // wrong positions into memory segment + try { + segment.get(Integer.MIN_VALUE, bytes); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.put(-1, bytes); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.get(Integer.MIN_VALUE, bytes, 4, 5); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.put(-1, bytes, 4, 5); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.get(pageSize, bytes); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.put(Integer.MIN_VALUE, bytes); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.get(pageSize, bytes, 6, 44); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.put(Integer.MIN_VALUE, bytes, 4, 5); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.get(pageSize - bytes.length + 1, bytes); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.put(pageSize, bytes); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.get(pageSize - 5, bytes, 3, 6); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.put(pageSize, bytes, 6, 44); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.get(Integer.MAX_VALUE, bytes); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - try { - segment.put(pageSize - bytes.length + 1, bytes); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + try { + segment.get(Integer.MAX_VALUE, bytes, 10, 20); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.get(Integer.MAX_VALUE - bytes.length + 1, bytes); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.get(Integer.MAX_VALUE - 11, bytes, 11, 11); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.get(3 * (pageSize / 4) + 1, bytes); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.get(3 * (pageSize / 4) + 2, bytes, 0, bytes.length - 1); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.get(7 * (pageSize / 8) + 1, bytes, 0, bytes.length / 2); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + // wrong source array positions / lengths + + try { + segment.get(0, bytes, -1, 1); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.get(0, bytes, -1, bytes.length + 1); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.get(0, bytes, Integer.MIN_VALUE, bytes.length); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.get(0, bytes, Integer.MAX_VALUE, bytes.length); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + try { + segment.get(0, bytes, Integer.MAX_VALUE - bytes.length + 1, bytes.length); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + + // case where negative offset and negative index compensate each other + try { + segment.get(-2, bytes, -1, bytes.length / 2); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } + } + + @Test + public void testBulkByteAccess() { + // test expected correct behavior with default offset / length + { + final MemorySegment segment = createSegment(pageSize); + long seed = random.nextLong(); - try { - segment.put(pageSize - 5, bytes, 3, 6); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); + random.setSeed(seed); + byte[] src = new byte[pageSize / 8]; + for (int i = 0; i < 8; i++) { + random.nextBytes(src); + segment.put(i * (pageSize / 8), src); } - try { - segment.put(Integer.MAX_VALUE, bytes); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + random.setSeed(seed); + byte[] expected = new byte[pageSize / 8]; + byte[] actual = new byte[pageSize / 8]; + for (int i = 0; i < 8; i++) { + random.nextBytes(expected); + segment.get(i * (pageSize / 8), actual); - try { - segment.put(Integer.MAX_VALUE, bytes, 10, 20); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); + assertArrayEquals(expected, actual); } + } - try { - segment.put(Integer.MAX_VALUE - bytes.length + 1, bytes); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + // test expected correct behavior with specific offset / length + { + final MemorySegment segment = createSegment(pageSize); + byte[] expected = new byte[pageSize]; + random.nextBytes(expected); - try { - segment.put(Integer.MAX_VALUE - 11, bytes, 11, 11); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); + for (int i = 0; i < 16; i++) { + segment.put(i * (pageSize / 16), expected, i * (pageSize / 16), + pageSize / 16); } - try { - segment.put(3 * (pageSize / 4) + 1, bytes); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); + byte[] actual = new byte[pageSize]; + for (int i = 0; i < 16; i++) { + segment.get(i * (pageSize / 16), actual, i * (pageSize / 16), + pageSize / 16); } - try { - segment.put(3 * (pageSize / 4) + 2, bytes, 0, bytes.length - 1); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + assertArrayEquals(expected, actual); + } - try { - segment.put(7 * (pageSize / 8) + 1, bytes, 0, bytes.length / 2); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + // put segments of various lengths to various positions + { + final MemorySegment segment = createSegment(pageSize); + byte[] expected = new byte[pageSize]; - // wrong source array positions / lengths + for (int i = 0; i < 200; i++) { + int numBytes = random.nextInt(pageSize - 10) + 1; + int pos = random.nextInt(pageSize - numBytes + 1); - try { - segment.put(0, bytes, -1, 1); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + byte[] data = new byte[(random.nextInt(3) + 1) * numBytes]; + int dataStartPos = random.nextInt(data.length - numBytes + 1); - try { - segment.put(0, bytes, -1, bytes.length + 1); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + random.nextBytes(data); - try { - segment.put(0, bytes, Integer.MIN_VALUE, bytes.length); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + // copy to the expected + System.arraycopy(data, dataStartPos, expected, pos, numBytes); - try { - segment.put(0, bytes, Integer.MAX_VALUE, bytes.length); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); + // put to the memory segment + segment.put(pos, data, dataStartPos, numBytes); } - try { - segment.put(0, bytes, Integer.MAX_VALUE - bytes.length + 1, bytes.length); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + byte[] validation = new byte[pageSize]; + segment.get(0, validation); - // case where negative offset and negative index compensate each other - try { - segment.put(-2, bytes, -1, bytes.length / 2); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } - } - catch (Exception e) { - e.printStackTrace(); - fail(e.getMessage()); + assertArrayEquals(expected, validation); } - } - @Test - public void testBulkByteGetExceptions() { - try { + // get segments with various contents + { final MemorySegment segment = createSegment(pageSize); + byte[] contents = new byte[pageSize]; + random.nextBytes(contents); + segment.put(0, contents); - byte[] bytes = new byte[pageSize / 4]; + for (int i = 0; i < 200; i++) { + int numBytes = random.nextInt(pageSize / 8) + 1; + int pos = random.nextInt(pageSize - numBytes + 1); - // wrong positions into memory segment + byte[] data = new byte[(random.nextInt(3) + 1) * numBytes]; + int dataStartPos = random.nextInt(data.length - numBytes + 1); - try { - segment.get(-1, bytes); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + segment.get(pos, data, dataStartPos, numBytes); - try { - segment.get(-1, bytes, 4, 5); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); + byte[] expected = Arrays.copyOfRange(contents, pos, pos + numBytes); + byte[] validation = Arrays.copyOfRange(data, dataStartPos, dataStartPos + numBytes); + assertArrayEquals(expected, validation); } + } + } - try { - segment.get(Integer.MIN_VALUE, bytes); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + // ------------------------------------------------------------------------ + // Writing / Reading to/from DataInput / DataOutput + // ------------------------------------------------------------------------ - try { - segment.get(Integer.MIN_VALUE, bytes, 4, 5); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + @Test + public void testDataInputOutput() throws IOException { + MemorySegment seg = createSegment(pageSize); + byte[] contents = new byte[pageSize]; + random.nextBytes(contents); + seg.put(0, contents); - try { - segment.get(pageSize, bytes); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + ByteArrayOutputStream buffer = new ByteArrayOutputStream(pageSize); + DataOutputStream out = new DataOutputStream(buffer); - try { - segment.get(pageSize, bytes, 6, 44); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + // write the segment in chunks into the stream + int pos = 0; + while (pos < pageSize) { + int len = random.nextInt(200); + len = Math.min(len, pageSize - pos); + seg.get(out, pos, len); + pos += len; + } - try { - segment.get(pageSize - bytes.length + 1, bytes); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + // verify that we wrote the same bytes + byte[] result = buffer.toByteArray(); + assertArrayEquals(contents, result); - try { - segment.get(pageSize - 5, bytes, 3, 6); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + // re-read the bytes into a new memory segment + MemorySegment reader = createSegment(pageSize); + DataInputStream in = new DataInputStream(new ByteArrayInputStream(result)); - try { - segment.get(Integer.MAX_VALUE, bytes); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + pos = 0; + while (pos < pageSize) { + int len = random.nextInt(200); + len = Math.min(len, pageSize - pos); + reader.put(in, pos, len); + pos += len; + } - try { - segment.get(Integer.MAX_VALUE, bytes, 10, 20); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + byte[] targetBuffer = new byte[pageSize]; + reader.get(0, targetBuffer); - try { - segment.get(Integer.MAX_VALUE - bytes.length + 1, bytes); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + assertArrayEquals(contents, targetBuffer); + } - try { - segment.get(Integer.MAX_VALUE - 11, bytes, 11, 11); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + @Test + public void testDataInputOutputOutOfBounds() { + final int segmentSize = 52; - try { - segment.get(3 * (pageSize / 4) + 1, bytes); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + // segment with random contents + MemorySegment seg = createSegment(segmentSize); + byte[] bytes = new byte[segmentSize]; + random.nextBytes(bytes); + seg.put(0, bytes); + + // out of bounds when writing + { + DataOutputStream out = new DataOutputStream(new ByteArrayOutputStream()); try { - segment.get(3 * (pageSize / 4) + 2, bytes, 0, bytes.length - 1); + seg.get(out, -1, segmentSize / 2); fail("IndexOutOfBoundsException expected"); } catch (Exception e) { @@ -1576,17 +1742,15 @@ public abstract class MemorySegmentTestBase { } try { - segment.get(7 * (pageSize / 8) + 1, bytes, 0, bytes.length / 2); + seg.get(out, segmentSize, segmentSize / 2); fail("IndexOutOfBoundsException expected"); } catch (Exception e) { assertTrue(e instanceof IndexOutOfBoundsException); } - // wrong source array positions / lengths - try { - segment.get(0, bytes, -1, 1); + seg.get(out, -segmentSize, segmentSize / 2); fail("IndexOutOfBoundsException expected"); } catch (Exception e) { @@ -1594,7 +1758,7 @@ public abstract class MemorySegmentTestBase { } try { - segment.get(0, bytes, -1, bytes.length + 1); + seg.get(out, Integer.MIN_VALUE, segmentSize / 2); fail("IndexOutOfBoundsException expected"); } catch (Exception e) { @@ -1602,15 +1766,20 @@ public abstract class MemorySegmentTestBase { } try { - segment.get(0, bytes, Integer.MIN_VALUE, bytes.length); + seg.get(out, Integer.MAX_VALUE, segmentSize / 2); fail("IndexOutOfBoundsException expected"); } catch (Exception e) { assertTrue(e instanceof IndexOutOfBoundsException); } + } + + // out of bounds when reading + { + DataInputStream in = new DataInputStream(new ByteArrayInputStream(new byte[segmentSize])); try { - segment.get(0, bytes, Integer.MAX_VALUE, bytes.length); + seg.put(in, -1, segmentSize / 2); fail("IndexOutOfBoundsException expected"); } catch (Exception e) { @@ -1618,345 +1787,91 @@ public abstract class MemorySegmentTestBase { } try { - segment.get(0, bytes, Integer.MAX_VALUE - bytes.length + 1, bytes.length); + seg.put(in, segmentSize, segmentSize / 2); fail("IndexOutOfBoundsException expected"); } catch (Exception e) { assertTrue(e instanceof IndexOutOfBoundsException); } - // case where negative offset and negative index compensate each other try { - segment.get(-2, bytes, -1, bytes.length / 2); + seg.put(in, -segmentSize, segmentSize / 2); fail("IndexOutOfBoundsException expected"); } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } - } - catch (Exception e) { - e.printStackTrace(); - fail(e.getMessage()); - } - } - - @Test - public void testBulkByteAccess() { - try { - // test expected correct behavior with default offset / length - { - final MemorySegment segment = createSegment(pageSize); - long seed = random.nextLong(); - - random.setSeed(seed); - byte[] src = new byte[pageSize / 8]; - for (int i = 0; i < 8; i++) { - random.nextBytes(src); - segment.put(i * (pageSize / 8), src); - } - - random.setSeed(seed); - byte[] expected = new byte[pageSize / 8]; - byte[] actual = new byte[pageSize / 8]; - for (int i = 0; i < 8; i++) { - random.nextBytes(expected); - segment.get(i * (pageSize / 8), actual); - - assertArrayEquals(expected, actual); - } - } - - // test expected correct behavior with specific offset / length - { - final MemorySegment segment = createSegment(pageSize); - byte[] expected = new byte[pageSize]; - random.nextBytes(expected); - - for (int i = 0; i < 16; i++) { - segment.put(i * (pageSize / 16), expected, i * (pageSize / 16), - pageSize / 16); - } - - byte[] actual = new byte[pageSize]; - for (int i = 0; i < 16; i++) { - segment.get(i * (pageSize / 16), actual, i * (pageSize / 16), - pageSize / 16); - } - - assertArrayEquals(expected, actual); - } - - // put segments of various lengths to various positions - { - final MemorySegment segment = createSegment(pageSize); - byte[] expected = new byte[pageSize]; - - for (int i = 0; i < 200; i++) { - int numBytes = random.nextInt(pageSize - 10) + 1; - int pos = random.nextInt(pageSize - numBytes + 1); - - byte[] data = new byte[(random.nextInt(3) + 1) * numBytes]; - int dataStartPos = random.nextInt(data.length - numBytes + 1); - - random.nextBytes(data); - - // copy to the expected - System.arraycopy(data, dataStartPos, expected, pos, numBytes); - - // put to the memory segment - segment.put(pos, data, dataStartPos, numBytes); - } - - byte[] validation = new byte[pageSize]; - segment.get(0, validation); - - assertArrayEquals(expected, validation); - } - - // get segments with various contents - { - final MemorySegment segment = createSegment(pageSize); - byte[] contents = new byte[pageSize]; - random.nextBytes(contents); - segment.put(0, contents); - - for (int i = 0; i < 200; i++) { - int numBytes = random.nextInt(pageSize / 8) + 1; - int pos = random.nextInt(pageSize - numBytes + 1); - - byte[] data = new byte[(random.nextInt(3) + 1) * numBytes]; - int dataStartPos = random.nextInt(data.length - numBytes + 1); - - segment.get(pos, data, dataStartPos, numBytes); - - byte[] expected = Arrays.copyOfRange(contents, pos, pos + numBytes); - byte[] validation = Arrays.copyOfRange(data, dataStartPos, dataStartPos + numBytes); - assertArrayEquals(expected, validation); - } - } - } - catch (Exception e) { - e.printStackTrace(); - fail(e.getMessage()); - } - } - - // ------------------------------------------------------------------------ - // Writing / Reading to/from DataInput / DataOutput - // ------------------------------------------------------------------------ - - @Test - public void testDataInputOutput() { - try { - MemorySegment seg = createSegment(pageSize); - byte[] contents = new byte[pageSize]; - random.nextBytes(contents); - seg.put(0, contents); - - ByteArrayOutputStream buffer = new ByteArrayOutputStream(pageSize); - DataOutputStream out = new DataOutputStream(buffer); - - // write the segment in chunks into the stream - int pos = 0; - while (pos < pageSize) { - int len = random.nextInt(200); - len = Math.min(len, pageSize - pos); - seg.get(out, pos, len); - pos += len; - } - - // verify that we wrote the same bytes - byte[] result = buffer.toByteArray(); - assertArrayEquals(contents, result); - - // re-read the bytes into a new memory segment - MemorySegment reader = createSegment(pageSize); - DataInputStream in = new DataInputStream(new ByteArrayInputStream(result)); + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } - pos = 0; - while (pos < pageSize) { - int len = random.nextInt(200); - len = Math.min(len, pageSize - pos); - reader.put(in, pos, len); - pos += len; + try { + seg.put(in, Integer.MIN_VALUE, segmentSize / 2); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); } - byte[] targetBuffer = new byte[pageSize]; - reader.get(0, targetBuffer); - - assertArrayEquals(contents, targetBuffer); - } - catch (Exception e) { - e.printStackTrace(); - fail(e.getMessage()); + try { + seg.put(in, Integer.MAX_VALUE, segmentSize / 2); + fail("IndexOutOfBoundsException expected"); + } + catch (Exception e) { + assertTrue(e instanceof IndexOutOfBoundsException); + } } } @Test - public void testDataInputOutputOutOfBounds() { - try { - final int segmentSize = 52; - - // segment with random contents - MemorySegment seg = createSegment(segmentSize); - byte[] bytes = new byte[segmentSize]; - random.nextBytes(bytes); - seg.put(0, bytes); - - // out of bounds when writing - { - DataOutputStream out = new DataOutputStream(new ByteArrayOutputStream()); - - try { - seg.get(out, -1, segmentSize / 2); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } - - try { - seg.get(out, segmentSize, segmentSize / 2); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } - - try { - seg.get(out, -segmentSize, segmentSize / 2); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } - - try { - seg.get(out, Integer.MIN_VALUE, segmentSize / 2); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } - - try { - seg.get(out, Integer.MAX_VALUE, segmentSize / 2); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } - } - - // out of bounds when reading - { - DataInputStream in = new DataInputStream(new ByteArrayInputStream(new byte[segmentSize])); - - try { - seg.put(in, -1, segmentSize / 2); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + public void testDataInputOutputStreamUnderflowOverflow() throws IOException { + final int segmentSize = 1337; - try { - seg.put(in, segmentSize, segmentSize / 2); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + // segment with random contents + MemorySegment seg = createSegment(segmentSize); + byte[] bytes = new byte[segmentSize]; + random.nextBytes(bytes); + seg.put(0, bytes); - try { - seg.put(in, -segmentSize, segmentSize / 2); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + // a stream that we cannot fully write to + DataOutputStream out = new DataOutputStream(new OutputStream() { - try { - seg.put(in, Integer.MIN_VALUE, segmentSize / 2); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); + int bytesSoFar = 0; + @Override + public void write(int b) throws IOException { + bytesSoFar++; + if (bytesSoFar > segmentSize / 2) { + throw new IOException("overflow"); } + } + }); - try { - seg.put(in, Integer.MAX_VALUE, segmentSize / 2); - fail("IndexOutOfBoundsException expected"); - } - catch (Exception e) { - assertTrue(e instanceof IndexOutOfBoundsException); - } + // write the segment in chunks into the stream + try { + int pos = 0; + while (pos < pageSize) { + int len = random.nextInt(segmentSize / 10); + len = Math.min(len, pageSize - pos); + seg.get(out, pos, len); + pos += len; } + fail("Should fail with an IOException"); } - catch (Exception e) { - e.printStackTrace(); - fail(e.getMessage()); + catch (IOException e) { + // expected } - } - - @Test - public void testDataInputOutputStreamUnderflowOverflow() { - try { - final int segmentSize = 1337; - - // segment with random contents - MemorySegment seg = createSegment(segmentSize); - byte[] bytes = new byte[segmentSize]; - random.nextBytes(bytes); - seg.put(0, bytes); - - // a stream that we cannot fully write to - DataOutputStream out = new DataOutputStream(new OutputStream() { -