You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by le...@apache.org on 2021/05/11 05:25:16 UTC

[datasketches-memory] branch noSplitPackage created (now 9ac70eb)

This is an automated email from the ASF dual-hosted git repository.

leerho pushed a change to branch noSplitPackage
in repository https://gitbox.apache.org/repos/asf/datasketches-memory.git.


      at 9ac70eb  Interim 3, almost done.

This branch includes the following new commits:

     new 67abafc  Initial move of all test classes to memory.test.
     new 9c318ef  interim update
     new 5a23ec6  interim commit, not done.
     new 9ac70eb  Interim 3, almost done.

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org


[datasketches-memory] 02/04: interim update

Posted by le...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

leerho pushed a commit to branch noSplitPackage
in repository https://gitbox.apache.org/repos/asf/datasketches-memory.git

commit 9c318efc1c89ff4cd71a2aaca9240a5abaecae7f
Author: Lee Rhodes <le...@users.noreply.github.com>
AuthorDate: Fri May 7 09:44:36 2021 -0700

    interim update
---
 .../datasketches/memory/AllocateDirectMap.java     |   9 +-
 .../memory/BBNonNativeWritableBufferImpl.java      |   4 +-
 .../memory/BBNonNativeWritableMemoryImpl.java      |   4 +-
 .../datasketches/memory/BBWritableBufferImpl.java  |   4 +-
 .../datasketches/memory/BBWritableMemoryImpl.java  |   4 +-
 .../org/apache/datasketches/memory/BaseState.java  |  23 +---
 .../memory/BaseWritableMemoryImpl.java             |   8 +-
 .../memory/DirectNonNativeWritableBufferImpl.java  |  11 +-
 .../memory/DirectNonNativeWritableMemoryImpl.java  |  11 +-
 .../memory/DirectWritableBufferImpl.java           |  10 +-
 .../memory/DirectWritableMemoryImpl.java           |  13 +-
 .../memory/HeapNonNativeWritableBufferImpl.java    |   4 +-
 .../memory/HeapNonNativeWritableMemoryImpl.java    |   4 +-
 .../memory/HeapWritableBufferImpl.java             |   4 +-
 .../memory/HeapWritableMemoryImpl.java             |   4 +-
 .../memory/MapNonNativeWritableBufferImpl.java     |  11 +-
 .../memory/MapNonNativeWritableMemoryImpl.java     |  11 +-
 .../datasketches/memory/MapWritableBufferImpl.java |  11 +-
 .../datasketches/memory/MapWritableMemoryImpl.java |  11 +-
 .../org/apache/datasketches/memory/Memory.java     |  16 +--
 .../java/org/apache/datasketches/memory/Prim.java  |   8 +-
 .../apache/datasketches/memory/StepBoolean.java    |  10 +-
 .../java/org/apache/datasketches/memory/Util.java  |  31 ++++-
 .../apache/datasketches/memory/WritableMemory.java |  25 ++--
 .../memory/test/AllocateDirectMemoryTest.java      |  60 ++++++---
 .../test/AllocateDirectWritableMapMemoryTest.java  |  53 ++++++--
 .../datasketches/memory/test/BaseStateTest.java    |   8 +-
 .../datasketches/memory/test/ReflectUtil.java      | 143 +++++++++++++++++++++
 28 files changed, 389 insertions(+), 126 deletions(-)

diff --git a/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java b/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java
index 29c2d48..25bfef7 100644
--- a/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java
+++ b/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java
@@ -242,13 +242,8 @@ class AllocateDirectMap implements Map {
     }
   }
 
-  static boolean isFileReadOnly(final File file) {
-    try (RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
-      raf.close();
-      return false;
-    } catch (final SecurityException | IOException f) { //could not open for write
-      return true;
-    }
+  public static boolean isFileReadOnly(final File file) {
+    return (!file.canWrite());
   }
 
   private static final class Deallocator implements Runnable {
diff --git a/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableBufferImpl.java b/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableBufferImpl.java
index 44d87b9..cc01a7e 100644
--- a/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableBufferImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableBufferImpl.java
@@ -54,7 +54,7 @@ final class BBNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
   BaseWritableBufferImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
       final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | REGION | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new BBWritableBufferImpl(
           unsafeObj, nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
           type, byteBuf, originMemory)
@@ -66,7 +66,7 @@ final class BBNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
   @Override
   BaseWritableBufferImpl toDuplicate(final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | DUPLICATE | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new BBWritableBufferImpl(
             unsafeObj, nativeBaseOffset, getRegionOffset(), getCapacity(),
             type, byteBuf, originMemory)
diff --git a/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableMemoryImpl.java
index 1a43bf2..4f83901 100644
--- a/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableMemoryImpl.java
@@ -53,7 +53,7 @@ final class BBNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
   BaseWritableMemoryImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
       final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | REGION | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new BBWritableMemoryImpl(
             unsafeObj, nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
             type, getByteBuffer())
@@ -65,7 +65,7 @@ final class BBNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
   @Override
   BaseWritableBufferImpl toWritableBuffer(final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new BBWritableBufferImpl(
             unsafeObj, nativeBaseOffset, getRegionOffset(), getCapacity(),
             type, byteBuf, this)
diff --git a/src/main/java/org/apache/datasketches/memory/BBWritableBufferImpl.java b/src/main/java/org/apache/datasketches/memory/BBWritableBufferImpl.java
index a44e118..20802b9 100644
--- a/src/main/java/org/apache/datasketches/memory/BBWritableBufferImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/BBWritableBufferImpl.java
@@ -54,7 +54,7 @@ final class BBWritableBufferImpl extends WritableBufferImpl {
   BaseWritableBufferImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
       final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | REGION | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new BBWritableBufferImpl(
             unsafeObj, nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
             type, byteBuf, originMemory)
@@ -66,7 +66,7 @@ final class BBWritableBufferImpl extends WritableBufferImpl {
   @Override
   BaseWritableBufferImpl toDuplicate(final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | DUPLICATE | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new BBWritableBufferImpl(
             unsafeObj, nativeBaseOffset, getRegionOffset(), getCapacity(),
             type, byteBuf, originMemory)
diff --git a/src/main/java/org/apache/datasketches/memory/BBWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/BBWritableMemoryImpl.java
index 99284e3..dd06c0b 100644
--- a/src/main/java/org/apache/datasketches/memory/BBWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/BBWritableMemoryImpl.java
@@ -53,7 +53,7 @@ final class BBWritableMemoryImpl extends WritableMemoryImpl {
   BaseWritableMemoryImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
       final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | REGION | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new BBWritableMemoryImpl(
             unsafeObj, nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
             type, getByteBuffer())
@@ -65,7 +65,7 @@ final class BBWritableMemoryImpl extends WritableMemoryImpl {
   @Override
   BaseWritableBufferImpl toWritableBuffer(final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new BBWritableBufferImpl(
             unsafeObj, nativeBaseOffset, getRegionOffset(), getCapacity(),
             type, byteBuf, this)
diff --git a/src/main/java/org/apache/datasketches/memory/BaseState.java b/src/main/java/org/apache/datasketches/memory/BaseState.java
index da66836..82f4e7d 100644
--- a/src/main/java/org/apache/datasketches/memory/BaseState.java
+++ b/src/main/java/org/apache/datasketches/memory/BaseState.java
@@ -37,11 +37,6 @@ import java.util.concurrent.atomic.AtomicLong;
 @SuppressWarnings({"restriction"})
 abstract class BaseState {
 
-  //Byte Order related
-  static final ByteOrder nativeByteOrder = ByteOrder.nativeOrder();
-  static final ByteOrder nonNativeByteOrder = nativeByteOrder == ByteOrder.LITTLE_ENDIAN
-      ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
-
   //Monitoring
   static final AtomicLong currentDirectMemoryAllocations_ = new AtomicLong();
   static final AtomicLong currentDirectMemoryAllocated_ = new AtomicLong();
@@ -101,20 +96,12 @@ abstract class BaseState {
   //Byte Order Related
 
   /**
-   * Returns the Native Byte Order
-   * @return the Native Byte Order
-   */
-  public static final ByteOrder getNativeByteOrder() {
-    return nativeByteOrder;
-  }
-
-  /**
    * Gets the current Type ByteOrder.
    * This may be different from the ByteOrder of the backing resource and of the Native Byte Order.
    * @return the current Type ByteOrder.
    */
   public final ByteOrder getTypeByteOrder() {
-    return isNonNativeType() ? BaseState.nonNativeByteOrder : BaseState.nativeByteOrder;
+    return isNonNativeType() ? Util.nonNativeByteOrder : Util.nativeByteOrder;
   }
 
   /**
@@ -126,7 +113,7 @@ abstract class BaseState {
     if (byteOrder == null) {
       throw new IllegalArgumentException("ByteOrder parameter cannot be null.");
     }
-    return BaseState.nativeByteOrder == byteOrder;
+    return Util.nativeByteOrder == byteOrder;
   }
 
   /**
@@ -138,7 +125,7 @@ abstract class BaseState {
    */
   public final boolean isByteOrderCompatible(final ByteOrder byteOrder) {
     final ByteOrder typeBO = getTypeByteOrder();
-    return typeBO == getNativeByteOrder() && typeBO == byteOrder;
+    return typeBO == Util.nativeByteOrder && typeBO == byteOrder;
   }
 
   /**
@@ -364,7 +351,7 @@ abstract class BaseState {
     assert isValid() : "Memory not valid.";
   }
 
-  final void checkValid() {
+  void checkValid() {
     if (!isValid()) {
       throw new IllegalStateException("Memory not valid.");
     }
@@ -548,7 +535,7 @@ abstract class BaseState {
     sb.append("Valid               : ").append(state.isValid()).append(LS);
     sb.append("Read Only           : ").append(state.isReadOnly()).append(LS);
     sb.append("Type Byte Order     : ").append(state.getTypeByteOrder().toString()).append(LS);
-    sb.append("Native Byte Order   : ").append(nativeByteOrder.toString()).append(LS);
+    sb.append("Native Byte Order   : ").append(Util.nativeByteOrder.toString()).append(LS);
     sb.append("JDK Runtime Version : ").append(UnsafeUtil.JDK).append(LS);
     //Data detail
     sb.append("Data, littleEndian  :  0  1  2  3  4  5  6  7");
diff --git a/src/main/java/org/apache/datasketches/memory/BaseWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/BaseWritableMemoryImpl.java
index 829fe14..820358f 100644
--- a/src/main/java/org/apache/datasketches/memory/BaseWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/BaseWritableMemoryImpl.java
@@ -76,7 +76,7 @@ abstract class BaseWritableMemoryImpl extends WritableMemory {
       final long lengthBytes, final boolean localReadOnly, final ByteOrder byteOrder) {
     if (lengthBytes == 0) { return BaseWritableMemoryImpl.ZERO_SIZE_MEMORY; }
     final int typeId = localReadOnly ? READONLY : 0;
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new HeapWritableMemoryImpl(arr, offsetBytes, lengthBytes, typeId)
         : new HeapNonNativeWritableMemoryImpl(arr, offsetBytes, lengthBytes, typeId);
   }
@@ -88,7 +88,7 @@ abstract class BaseWritableMemoryImpl extends WritableMemory {
       throw new ReadOnlyException("ByteBuffer is Read Only");
     }
     final int typeId = (abb.resourceReadOnly || localReadOnly) ? READONLY : 0;
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new BBWritableMemoryImpl(abb.unsafeObj, abb.nativeBaseOffset,
             abb.regionOffset, abb.capacityBytes, typeId, byteBuf)
         : new BBNonNativeWritableMemoryImpl(abb.unsafeObj, abb.nativeBaseOffset,
@@ -106,7 +106,7 @@ abstract class BaseWritableMemoryImpl extends WritableMemory {
       throw new ReadOnlyException("File is Read Only");
     }
     final int typeId = (dirWMap.resourceReadOnly || localReadOnly) ? READONLY : 0;
-    final BaseWritableMemoryImpl wmem = isNativeByteOrder(byteOrder)
+    final BaseWritableMemoryImpl wmem = Util.isNativeByteOrder(byteOrder)
         ? new MapWritableMemoryImpl(dirWMap.nativeBaseOffset, 0L, capacityBytes,
             typeId, dirWMap.getValid())
         : new MapNonNativeWritableMemoryImpl(dirWMap.nativeBaseOffset, 0L, capacityBytes,
@@ -123,7 +123,7 @@ abstract class BaseWritableMemoryImpl extends WritableMemory {
     }
     final AllocateDirect direct = new AllocateDirect(capacityBytes);
     final int typeId = 0; //direct is never read-only on construction
-    final BaseWritableMemoryImpl wmem = isNativeByteOrder(byteOrder)
+    final BaseWritableMemoryImpl wmem = Util.isNativeByteOrder(byteOrder)
         ? new DirectWritableMemoryImpl(direct.getNativeBaseOffset(), 0L, capacityBytes,
             typeId, direct.getValid(), memReqSvr)
         : new DirectNonNativeWritableMemoryImpl(direct.getNativeBaseOffset(), 0L, capacityBytes,
diff --git a/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableBufferImpl.java b/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableBufferImpl.java
index c3801da..db02695 100644
--- a/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableBufferImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableBufferImpl.java
@@ -54,7 +54,7 @@ final class DirectNonNativeWritableBufferImpl extends NonNativeWritableBufferImp
   BaseWritableBufferImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
       final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | REGION | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new DirectWritableBufferImpl(
             nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
             type, valid, memReqSvr, originMemory)
@@ -66,7 +66,7 @@ final class DirectNonNativeWritableBufferImpl extends NonNativeWritableBufferImp
   @Override
   BaseWritableBufferImpl toDuplicate(final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | DUPLICATE | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new DirectWritableBufferImpl(
             nativeBaseOffset, getRegionOffset(), getCapacity(),
             type, valid, memReqSvr, originMemory)
@@ -96,4 +96,11 @@ final class DirectNonNativeWritableBufferImpl extends NonNativeWritableBufferImp
     return valid.get();
   }
 
+  @Override
+  void checkValid() {
+    if (!this.isValid()) {
+      throw new IllegalStateException("Memory not valid.");
+    }
+  }
+  
 }
diff --git a/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableMemoryImpl.java
index 6e74efa..6649830 100644
--- a/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableMemoryImpl.java
@@ -52,7 +52,7 @@ final class DirectNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImp
   BaseWritableMemoryImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
       final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | REGION | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new DirectWritableMemoryImpl(
             nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
             type, valid, memReqSvr)
@@ -64,7 +64,7 @@ final class DirectNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImp
   @Override
   BaseWritableBufferImpl toWritableBuffer(final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new DirectWritableBufferImpl(
             nativeBaseOffset, getRegionOffset(), getCapacity(),
             type, valid, memReqSvr, this)
@@ -94,4 +94,11 @@ final class DirectNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImp
     return valid.get();
   }
 
+  @Override
+  void checkValid() {
+    if (!this.isValid()) {
+      throw new IllegalStateException("Memory not valid.");
+    }
+  }
+  
 }
diff --git a/src/main/java/org/apache/datasketches/memory/DirectWritableBufferImpl.java b/src/main/java/org/apache/datasketches/memory/DirectWritableBufferImpl.java
index 4a222f3..076910f 100644
--- a/src/main/java/org/apache/datasketches/memory/DirectWritableBufferImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/DirectWritableBufferImpl.java
@@ -54,7 +54,7 @@ final class DirectWritableBufferImpl extends WritableBufferImpl {
   BaseWritableBufferImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
       final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | REGION | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new DirectWritableBufferImpl(
             nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
             type, valid, memReqSvr, originMemory)
@@ -66,7 +66,7 @@ final class DirectWritableBufferImpl extends WritableBufferImpl {
   @Override
   BaseWritableBufferImpl toDuplicate(final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | DUPLICATE | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new DirectWritableBufferImpl(
             nativeBaseOffset, getRegionOffset(), getCapacity(),
             type, valid, memReqSvr, originMemory)
@@ -96,4 +96,10 @@ final class DirectWritableBufferImpl extends WritableBufferImpl {
     return valid.get();
   }
 
+  @Override
+  void checkValid() {
+    if (!this.isValid()) {
+      throw new IllegalStateException("Memory not valid.");
+    }
+  }
 }
diff --git a/src/main/java/org/apache/datasketches/memory/DirectWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/DirectWritableMemoryImpl.java
index 4c86746..886c7bb 100644
--- a/src/main/java/org/apache/datasketches/memory/DirectWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/DirectWritableMemoryImpl.java
@@ -52,7 +52,7 @@ final class DirectWritableMemoryImpl extends WritableMemoryImpl {
   BaseWritableMemoryImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
       final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | REGION | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new DirectWritableMemoryImpl(
             nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
             type, valid, memReqSvr)
@@ -64,7 +64,7 @@ final class DirectWritableMemoryImpl extends WritableMemoryImpl {
   @Override
   BaseWritableBufferImpl toWritableBuffer(final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new DirectWritableBufferImpl(
             nativeBaseOffset, getRegionOffset(), getCapacity(),
             type, valid, memReqSvr, this)
@@ -93,5 +93,12 @@ final class DirectWritableMemoryImpl extends WritableMemoryImpl {
   public boolean isValid() {
     return valid.get();
   }
-
+  
+  @Override
+  void checkValid() {
+    if (!this.isValid()) {
+      throw new IllegalStateException("Memory not valid.");
+    }
+  }
+  
 }
diff --git a/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableBufferImpl.java b/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableBufferImpl.java
index 9ab8ba7..f7e2838 100644
--- a/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableBufferImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableBufferImpl.java
@@ -47,7 +47,7 @@ final class HeapNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl
   BaseWritableBufferImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
       final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | REGION | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new HeapWritableBufferImpl(
             unsafeObj, getRegionOffset(offsetBytes), capacityBytes,
             type, originMemory)
@@ -59,7 +59,7 @@ final class HeapNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl
   @Override
   BaseWritableBufferImpl toDuplicate(final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | DUPLICATE | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new HeapWritableBufferImpl(
             unsafeObj, getRegionOffset(), getCapacity(),
             type, originMemory)
diff --git a/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableMemoryImpl.java
index e9957ca..359a8c6 100644
--- a/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableMemoryImpl.java
@@ -46,7 +46,7 @@ final class HeapNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl
   BaseWritableMemoryImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
       final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | REGION | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new HeapWritableMemoryImpl(
             unsafeObj, getRegionOffset(offsetBytes), capacityBytes,
             type)
@@ -58,7 +58,7 @@ final class HeapNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl
   @Override
   BaseWritableBufferImpl toWritableBuffer(final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new HeapWritableBufferImpl(
             unsafeObj, getRegionOffset(), getCapacity(),
             type, this)
diff --git a/src/main/java/org/apache/datasketches/memory/HeapWritableBufferImpl.java b/src/main/java/org/apache/datasketches/memory/HeapWritableBufferImpl.java
index 17f2fb6..0e3cb56 100644
--- a/src/main/java/org/apache/datasketches/memory/HeapWritableBufferImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/HeapWritableBufferImpl.java
@@ -47,7 +47,7 @@ final class HeapWritableBufferImpl extends WritableBufferImpl {
   BaseWritableBufferImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
       final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | REGION | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new HeapWritableBufferImpl(
             unsafeObj, getRegionOffset(offsetBytes), capacityBytes,
             type, originMemory)
@@ -59,7 +59,7 @@ final class HeapWritableBufferImpl extends WritableBufferImpl {
   @Override
   BaseWritableBufferImpl toDuplicate(final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | DUPLICATE | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new HeapWritableBufferImpl(
             unsafeObj, getRegionOffset(), getCapacity(),
             type, originMemory)
diff --git a/src/main/java/org/apache/datasketches/memory/HeapWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/HeapWritableMemoryImpl.java
index a26abcf..147702e 100644
--- a/src/main/java/org/apache/datasketches/memory/HeapWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/HeapWritableMemoryImpl.java
@@ -46,7 +46,7 @@ final class HeapWritableMemoryImpl extends WritableMemoryImpl {
   BaseWritableMemoryImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
       final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | REGION | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new HeapWritableMemoryImpl(
             unsafeObj, getRegionOffset(offsetBytes), capacityBytes,
             type)
@@ -58,7 +58,7 @@ final class HeapWritableMemoryImpl extends WritableMemoryImpl {
   @Override
   BaseWritableBufferImpl toWritableBuffer(final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new HeapWritableBufferImpl(
             unsafeObj, getRegionOffset(), getCapacity(),
             type, this)
diff --git a/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableBufferImpl.java b/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableBufferImpl.java
index 354030c..2ab9c58 100644
--- a/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableBufferImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableBufferImpl.java
@@ -50,7 +50,7 @@ final class MapNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
   BaseWritableBufferImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
       final boolean readOnly, final ByteOrder byteOrder) {
     final int type = REGION | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new MapWritableBufferImpl(
             nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
             type, valid, originMemory)
@@ -62,7 +62,7 @@ final class MapNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
   @Override
   BaseWritableBufferImpl toDuplicate(final boolean readOnly, final ByteOrder byteOrder) {
     final int type = DUPLICATE | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new MapWritableBufferImpl(
             nativeBaseOffset, getRegionOffset(), getCapacity(),
             type, valid, originMemory)
@@ -86,4 +86,11 @@ final class MapNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
     return valid.get();
   }
 
+  @Override
+  void checkValid() {
+    if (!this.isValid()) {
+      throw new IllegalStateException("Memory not valid.");
+    }
+  }
+  
 }
diff --git a/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableMemoryImpl.java
index a7e578f..05f6989 100644
--- a/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableMemoryImpl.java
@@ -49,7 +49,7 @@ final class MapNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
   BaseWritableMemoryImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
       final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | REGION | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new MapWritableMemoryImpl(
             nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
             type, valid)
@@ -61,7 +61,7 @@ final class MapNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
   @Override
   BaseWritableBufferImpl toWritableBuffer(final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new MapWritableBufferImpl(
             nativeBaseOffset, getRegionOffset(), getCapacity(),
             type, valid, this)
@@ -85,4 +85,11 @@ final class MapNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
     return valid.get();
   }
 
+  @Override
+  void checkValid() {
+    if (!this.isValid()) {
+      throw new IllegalStateException("Memory not valid.");
+    }
+  }
+  
 }
diff --git a/src/main/java/org/apache/datasketches/memory/MapWritableBufferImpl.java b/src/main/java/org/apache/datasketches/memory/MapWritableBufferImpl.java
index ccf0a74..6aab451 100644
--- a/src/main/java/org/apache/datasketches/memory/MapWritableBufferImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/MapWritableBufferImpl.java
@@ -50,7 +50,7 @@ final class MapWritableBufferImpl extends WritableBufferImpl {
   BaseWritableBufferImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
       final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | REGION | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new MapWritableBufferImpl(
             nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
             type, valid, originMemory)
@@ -62,7 +62,7 @@ final class MapWritableBufferImpl extends WritableBufferImpl {
   @Override
   BaseWritableBufferImpl toDuplicate(final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | DUPLICATE | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new MapWritableBufferImpl(
             nativeBaseOffset, getRegionOffset(), getCapacity(),
             type, valid, originMemory)
@@ -86,4 +86,11 @@ final class MapWritableBufferImpl extends WritableBufferImpl {
     return valid.get();
   }
 
+  @Override
+  void checkValid() {
+    if (!this.isValid()) {
+      throw new IllegalStateException("Memory not valid.");
+    }
+  }
+  
 }
diff --git a/src/main/java/org/apache/datasketches/memory/MapWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/MapWritableMemoryImpl.java
index fdcbe9b..1448947 100644
--- a/src/main/java/org/apache/datasketches/memory/MapWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/MapWritableMemoryImpl.java
@@ -49,7 +49,7 @@ final class MapWritableMemoryImpl extends WritableMemoryImpl {
   BaseWritableMemoryImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
       final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | REGION | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new MapWritableMemoryImpl(
             nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
             type, valid)
@@ -61,7 +61,7 @@ final class MapWritableMemoryImpl extends WritableMemoryImpl {
   @Override
   BaseWritableBufferImpl toWritableBuffer(final boolean readOnly, final ByteOrder byteOrder) {
     final int type = typeId | (readOnly ? READONLY : 0);
-    return isNativeByteOrder(byteOrder)
+    return Util.isNativeByteOrder(byteOrder)
         ? new MapWritableBufferImpl(
             nativeBaseOffset, getRegionOffset(), getCapacity(),
             type, valid, this)
@@ -85,4 +85,11 @@ final class MapWritableMemoryImpl extends WritableMemoryImpl {
     return valid.get();
   }
 
+  @Override
+  void checkValid() {
+    if (!this.isValid()) {
+      throw new IllegalStateException("Memory not valid.");
+    }
+  }
+  
 }
diff --git a/src/main/java/org/apache/datasketches/memory/Memory.java b/src/main/java/org/apache/datasketches/memory/Memory.java
index 3af3631..c6c9ba1 100644
--- a/src/main/java/org/apache/datasketches/memory/Memory.java
+++ b/src/main/java/org/apache/datasketches/memory/Memory.java
@@ -227,7 +227,7 @@ public abstract class Memory extends BaseState {
   public static Memory wrap(final boolean[] arr) {
     final long lengthBytes = arr.length << Prim.BOOLEAN.shift();
     return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true,
-        BaseState.nativeByteOrder);
+        Util.nativeByteOrder);
   }
 
   /**
@@ -241,7 +241,7 @@ public abstract class Memory extends BaseState {
    * @return a new <i>Memory</i> for read operations
    */
   public static Memory wrap(final byte[] arr) {
-    return Memory.wrap(arr, 0, arr.length, BaseState.nativeByteOrder);
+    return Memory.wrap(arr, 0, arr.length, Util.nativeByteOrder);
   }
 
   /**
@@ -289,7 +289,7 @@ public abstract class Memory extends BaseState {
    */
   public static Memory wrap(final char[] arr) {
     final long lengthBytes = arr.length << Prim.CHAR.shift();
-    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, BaseState.nativeByteOrder);
+    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, Util.nativeByteOrder);
   }
 
   /**
@@ -303,7 +303,7 @@ public abstract class Memory extends BaseState {
    */
   public static Memory wrap(final short[] arr) {
     final long lengthBytes = arr.length << Prim.SHORT.shift();
-    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, BaseState.nativeByteOrder);
+    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, Util.nativeByteOrder);
   }
 
   /**
@@ -317,7 +317,7 @@ public abstract class Memory extends BaseState {
    */
   public static Memory wrap(final int[] arr) {
     final long lengthBytes = arr.length << Prim.INT.shift();
-    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, BaseState.nativeByteOrder);
+    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, Util.nativeByteOrder);
   }
 
   /**
@@ -332,7 +332,7 @@ public abstract class Memory extends BaseState {
    */
   public static Memory wrap(final long[] arr) {
     final long lengthBytes = arr.length << Prim.LONG.shift();
-    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, BaseState.nativeByteOrder);
+    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, Util.nativeByteOrder);
   }
 
   /**
@@ -347,7 +347,7 @@ public abstract class Memory extends BaseState {
    */
   public static Memory wrap(final float[] arr) {
     final long lengthBytes = arr.length << Prim.FLOAT.shift();
-    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, BaseState.nativeByteOrder);
+    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, Util.nativeByteOrder);
   }
 
   /**
@@ -362,7 +362,7 @@ public abstract class Memory extends BaseState {
    */
   public static Memory wrap(final double[] arr) {
     final long lengthBytes = arr.length << Prim.DOUBLE.shift();
-    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, BaseState.nativeByteOrder);
+    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, Util.nativeByteOrder);
   }
 
   //PRIMITIVE getX() and getXArray()
diff --git a/src/main/java/org/apache/datasketches/memory/Prim.java b/src/main/java/org/apache/datasketches/memory/Prim.java
index 0178d27..9b956bd 100644
--- a/src/main/java/org/apache/datasketches/memory/Prim.java
+++ b/src/main/java/org/apache/datasketches/memory/Prim.java
@@ -52,7 +52,7 @@ import static org.apache.datasketches.memory.UnsafeUtil.SHORT_SHIFT;
  *
  * @author Lee Rhodes
  */
-enum Prim {
+public enum Prim {
   BOOLEAN(ARRAY_BOOLEAN_BASE_OFFSET, ARRAY_BOOLEAN_INDEX_SCALE, BOOLEAN_SHIFT),
   BYTE(ARRAY_BYTE_BASE_OFFSET, ARRAY_BYTE_INDEX_SCALE, BYTE_SHIFT),
   CHAR(ARRAY_CHAR_BASE_OFFSET, ARRAY_CHAR_INDEX_SCALE, CHAR_SHIFT),
@@ -73,15 +73,15 @@ enum Prim {
     this.sizeShift_ = sizeShift;
   }
 
-  long off() {
+  public long off() {
     return arrBaseOff_;
   }
 
-  long scale() {
+  public long scale() {
     return arrIdxScale_;
   }
 
-  long shift() {
+  public long shift() {
     return sizeShift_;
   }
 
diff --git a/src/main/java/org/apache/datasketches/memory/StepBoolean.java b/src/main/java/org/apache/datasketches/memory/StepBoolean.java
index 16d6b19..e614d4c 100644
--- a/src/main/java/org/apache/datasketches/memory/StepBoolean.java
+++ b/src/main/java/org/apache/datasketches/memory/StepBoolean.java
@@ -26,7 +26,7 @@ import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
  *
  * @author Lee Rhodes
  */
-final class StepBoolean {
+public final class StepBoolean {
   private static final int FALSE = 0;
   private static final int TRUE = 1;
   private static final AtomicIntegerFieldUpdater<StepBoolean> STATE_FIELD_UPDATER =
@@ -35,7 +35,7 @@ final class StepBoolean {
   private final int initialState;
   private volatile int state;
 
-  StepBoolean(final boolean initialState) {
+  public StepBoolean(final boolean initialState) {
     this.initialState = initialState ? TRUE : FALSE;
     state = this.initialState;
   }
@@ -44,7 +44,7 @@ final class StepBoolean {
    * Gets the current state.
    * @return the current state.
    */
-  boolean get() {
+  public boolean get() {
     return state == TRUE;
   }
 
@@ -53,7 +53,7 @@ final class StepBoolean {
    * @return true if this call led to the change of the state; false if the state has already been
    * changed
    */
-  boolean change() {
+  public boolean change() {
     final int notInitialState = initialState == TRUE ? FALSE : TRUE;
     return STATE_FIELD_UPDATER.compareAndSet(this, initialState, notInitialState);
   }
@@ -62,7 +62,7 @@ final class StepBoolean {
    * Return true if the state has changed from the initial state
    * @return true if the state has changed from the initial state
    */
-  boolean hasChanged() {
+  public boolean hasChanged() {
     return state != initialState;
   }
 }
diff --git a/src/main/java/org/apache/datasketches/memory/Util.java b/src/main/java/org/apache/datasketches/memory/Util.java
index 10b3eb5..3866c59 100644
--- a/src/main/java/org/apache/datasketches/memory/Util.java
+++ b/src/main/java/org/apache/datasketches/memory/Util.java
@@ -26,6 +26,7 @@ import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
+import java.nio.ByteOrder;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.Random;
@@ -34,10 +35,38 @@ import java.util.Random;
  * @author Lee Rhodes
  */
 public final class Util {
-  private static final String LS = System.getProperty("line.separator");
+  public static final String LS = System.getProperty("line.separator");
+  
+  //Byte Order related
+  public static final ByteOrder nativeByteOrder = ByteOrder.nativeOrder();
+  public static final ByteOrder nonNativeByteOrder = nativeByteOrder == ByteOrder.LITTLE_ENDIAN
+      ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
 
   private Util() { }
 
+  //Byte Order Related
+  
+  /**
+   * Returns the Native Byte Order
+   * @return the Native Byte Order
+   */
+  public static final ByteOrder getNativeByteOrder() {
+    return nativeByteOrder;
+  }
+
+  /**
+   * Returns true if the given byteOrder is the same as the native byte order.
+   * @param byteOrder the given byte order
+   * @return true if the given byteOrder is the same as the native byte order.
+   */
+  public static boolean isNativeByteOrder(final ByteOrder byteOrder) {
+    if (byteOrder == null) {
+      throw new IllegalArgumentException("ByteOrder parameter cannot be null.");
+    }
+    return Util.nativeByteOrder == byteOrder;
+  }
+  
+  
   /**
    * Searches a range of the specified array of longs for the specified value using the binary
    * search algorithm. The range must be sorted method) prior to making this call.
diff --git a/src/main/java/org/apache/datasketches/memory/WritableMemory.java b/src/main/java/org/apache/datasketches/memory/WritableMemory.java
index 39eaef7..84f3d85 100644
--- a/src/main/java/org/apache/datasketches/memory/WritableMemory.java
+++ b/src/main/java/org/apache/datasketches/memory/WritableMemory.java
@@ -90,7 +90,7 @@ public abstract class WritableMemory extends Memory {
    * @throws IOException file not found or a RuntimeException.
    */
   public static WritableMapHandle map(final File file) throws IOException {
-    return map(file, 0, file.length(), BaseState.nativeByteOrder);
+    return map(file, 0, file.length(), Util.nativeByteOrder);
   }
 
   /**
@@ -157,7 +157,7 @@ public abstract class WritableMemory extends Memory {
    */
   public static WritableDirectHandle allocateDirect(final long capacityBytes,
       final MemoryRequestServer memReqSvr) {
-    return BaseWritableMemoryImpl.wrapDirect(capacityBytes, BaseState.nativeByteOrder, memReqSvr);
+    return BaseWritableMemoryImpl.wrapDirect(capacityBytes, Util.nativeByteOrder, memReqSvr);
   }
 
   //REGIONS
@@ -243,7 +243,7 @@ public abstract class WritableMemory extends Memory {
    */
   public static WritableMemory allocate(final int capacityBytes) {
     final byte[] arr = new byte[capacityBytes];
-    return wrap(arr, BaseState.nativeByteOrder);
+    return wrap(arr, Util.nativeByteOrder);
   }
 
   /**
@@ -272,7 +272,7 @@ public abstract class WritableMemory extends Memory {
    */
   public static WritableMemory wrap(final boolean[] arr) {
     final long lengthBytes = arr.length << Prim.BOOLEAN.shift();
-    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, BaseState.nativeByteOrder);
+    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, Util.nativeByteOrder);
   }
 
   /**
@@ -286,7 +286,7 @@ public abstract class WritableMemory extends Memory {
    * @return a new WritableMemory for write operations on the given primitive array.
    */
   public static WritableMemory wrap(final byte[] arr) {
-    return WritableMemory.wrap(arr, 0, arr.length, BaseState.nativeByteOrder);
+    return WritableMemory.wrap(arr, 0, arr.length, Util.nativeByteOrder);
   }
 
   /**
@@ -335,7 +335,7 @@ public abstract class WritableMemory extends Memory {
    */
   public static WritableMemory wrap(final char[] arr) {
     final long lengthBytes = arr.length << Prim.CHAR.shift();
-    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, BaseState.nativeByteOrder);
+    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, Util.nativeByteOrder);
   }
 
   /**
@@ -350,7 +350,7 @@ public abstract class WritableMemory extends Memory {
    */
   public static WritableMemory wrap(final short[] arr) {
     final long lengthBytes = arr.length << Prim.SHORT.shift();
-    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, BaseState.nativeByteOrder);
+    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, Util.nativeByteOrder);
   }
 
   /**
@@ -365,7 +365,7 @@ public abstract class WritableMemory extends Memory {
    */
   public static WritableMemory wrap(final int[] arr) {
     final long lengthBytes = arr.length << Prim.INT.shift();
-    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, BaseState.nativeByteOrder);
+    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, Util.nativeByteOrder);
   }
 
   /**
@@ -380,7 +380,7 @@ public abstract class WritableMemory extends Memory {
    */
   public static WritableMemory wrap(final long[] arr) {
     final long lengthBytes = arr.length << Prim.LONG.shift();
-    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, BaseState.nativeByteOrder);
+    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, Util.nativeByteOrder);
   }
 
   /**
@@ -395,7 +395,7 @@ public abstract class WritableMemory extends Memory {
    */
   public static WritableMemory wrap(final float[] arr) {
     final long lengthBytes = arr.length << Prim.FLOAT.shift();
-    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, BaseState.nativeByteOrder);
+    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, Util.nativeByteOrder);
   }
 
   /**
@@ -410,7 +410,7 @@ public abstract class WritableMemory extends Memory {
    */
   public static WritableMemory wrap(final double[] arr) {
     final long lengthBytes = arr.length << Prim.DOUBLE.shift();
-    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, BaseState.nativeByteOrder);
+    return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, Util.nativeByteOrder);
   }
   //END OF CONSTRUCTOR-TYPE METHODS
 
@@ -640,6 +640,7 @@ public abstract class WritableMemory extends Memory {
    */
   public abstract void setBits(long offsetBytes, byte bitMask);
 
+  
   //OTHER WRITABLE API METHODS
   /**
    * For Direct Memory only. Other types of backing resources will return null.
@@ -653,5 +654,5 @@ public abstract class WritableMemory extends Memory {
   public MemoryRequestServer getMemoryRequestServer() {
     return null;
   }
-
+  
 }
diff --git a/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java
index 877ee5c..6a37003 100644
--- a/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java
@@ -24,9 +24,12 @@ import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.fail;
 
-import org.apache.datasketches.memory.BaseState;
-import org.apache.datasketches.memory.BaseWritableMemoryImpl;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.nio.ByteOrder;
+
 import org.apache.datasketches.memory.MemoryRequestServer;
+import org.apache.datasketches.memory.Util;
 import org.apache.datasketches.memory.WritableDirectHandle;
 import org.apache.datasketches.memory.WritableHandle;
 import org.apache.datasketches.memory.WritableMemory;
@@ -35,23 +38,28 @@ import org.testng.annotations.Test;
 
 @SuppressWarnings("javadoc")
 public class AllocateDirectMemoryTest {
-
+  
   @Test
   public void simpleAllocateDirect() {
     int longs = 32;
-    WritableMemory wMem1;
+    WritableMemory wMem;
     try (WritableHandle wh = WritableMemory.allocateDirect(longs << 3)) {
-      wMem1 = wh.get();
+      wMem = wh.get();
       for (int i = 0; i<longs; i++) {
-        wMem1.putLong(i << 3, i);
-        assertEquals(wMem1.getLong(i << 3), i);
+        wMem.putLong(i << 3, i);
+        assertEquals(wMem.getLong(i << 3), i);
       }
     }
+    //The TWR block has exited, so the memory should be invalid
     try {
-      wMem1.checkValid();
+      final Class<?> wMemClass = wMem.getClass();
+      Method method = ReflectUtil.getMethod(wMemClass, "checkValid", (Class<?>[])null);
+      method.invoke(wMem, (Object[]) null);
+      //wMem.checkValid();
       fail();
-    } catch (IllegalStateException e) {
-      //ok
+    } catch (final Exception e) {
+      if (e instanceof IllegalStateException || e instanceof InvocationTargetException) { } //OK
+      else { throw new RuntimeException(e); }
     }
   }
 
@@ -87,19 +95,24 @@ public class AllocateDirectMemoryTest {
     try (WritableHandle wh = WritableMemory.allocateDirect(128, null)) {
       WritableMemory wmem = wh.get();
       assertNotNull(wmem.getMemoryRequestServer());
-
-
     }
   }
 
 
   @Test
   public void checkNonNativeDirect() { //not allowed in public API
-    try (WritableDirectHandle h =
-        BaseWritableMemoryImpl.wrapDirect(8, BaseState.nonNativeByteOrder, null)) {
+    Class<?> bwMemImpl = ReflectUtil.getClass("org.apache.datasketches.memory.BaseWritableMemoryImpl");
+    Method wrapDirectMethod = 
+        ReflectUtil.getMethod(bwMemImpl, "wrapDirect", long.class, ByteOrder.class, MemoryRequestServer.class);
+    try (WritableDirectHandle h = (WritableDirectHandle) 
+        wrapDirectMethod.invoke(wrapDirectMethod, 8,  Util.nonNativeByteOrder, null)) {
+        //BaseWritableMemoryImpl.wrapDirect(8, Util.nonNativeByteOrder, null)) {
       WritableMemory wmem = h.get();
       wmem.putChar(0, (char) 1);
       assertEquals(wmem.getByte(1), (byte) 1);
+    } catch (final Exception e) {
+      if (e instanceof IllegalStateException || e instanceof InvocationTargetException) { } //OK
+      else { throw new RuntimeException(e); }
     }
   }
 
@@ -108,16 +121,25 @@ public class AllocateDirectMemoryTest {
     final long cap = 128;
     try (WritableDirectHandle wdh = WritableMemory.allocateDirect(cap)) {
       wdh.close(); //explicit close. Does the work of closing
-      wdh.direct.close(); //redundant
     } //end of scope call to Cleaner/Deallocator also will be redundant
   }
 
   @AfterClass
   public void checkDirectCounter() {
-    final long count = BaseState.getCurrentDirectMemoryAllocations();
-    if (count != 0) {
-      println(""+count);
-      fail();
+    final Class<?> baseStateClass = ReflectUtil.getClass("org.apache.datasketches.memory.BaseState");
+    final Method currDirMemAllocMethod = 
+        ReflectUtil.getMethod(baseStateClass, "getCurrentDirectMemoryAllocations", (Class<?>[])null);
+    long count;
+    try {
+      count = (long) currDirMemAllocMethod.invoke(currDirMemAllocMethod, (Object[])null);
+      //final long count = BaseState.getCurrentDirectMemoryAllocations();
+      if (count != 0) {
+        println(""+count);
+        fail();
+      }
+    } catch (final Exception e) {
+      if (e instanceof IllegalStateException || e instanceof InvocationTargetException) { } //OK
+      else { throw new RuntimeException(e); }
     }
   }
 
diff --git a/src/test/java/org/apache/datasketches/memory/test/AllocateDirectWritableMapMemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectWritableMapMemoryTest.java
index dd56842..25af375 100644
--- a/src/test/java/org/apache/datasketches/memory/test/AllocateDirectWritableMapMemoryTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectWritableMapMemoryTest.java
@@ -24,8 +24,8 @@
 package org.apache.datasketches.memory.test;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.apache.datasketches.memory.AllocateDirectMap.isFileReadOnly;
-import static org.apache.datasketches.memory.Util.getResourceFile;
+//import static org.apache.datasketches.memory.AllocateDirectMap.isFileReadOnly;
+import static org.apache.datasketches.memory.Util.*;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.fail;
@@ -35,12 +35,14 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.UnsupportedEncodingException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.nio.ByteOrder;
 
-import org.apache.datasketches.memory.BaseState;
 import org.apache.datasketches.memory.MapHandle;
 import org.apache.datasketches.memory.Memory;
 import org.apache.datasketches.memory.ReadOnlyException;
+import org.apache.datasketches.memory.Util;
 import org.apache.datasketches.memory.WritableHandle;
 import org.apache.datasketches.memory.WritableMapHandle;
 import org.apache.datasketches.memory.WritableMemory;
@@ -130,7 +132,7 @@ public class AllocateDirectWritableMapMemoryTest {
     file.deleteOnExit();  //comment out if you want to examine the file.
 
     final long bytes = 8;
-    try (WritableMapHandle h = WritableMemory.map(file, 0L, bytes, BaseState.nonNativeByteOrder)) {
+    try (WritableMapHandle h = WritableMemory.map(file, 0L, bytes, Util.nonNativeByteOrder)) {
       WritableMemory wmem = h.get();
       wmem.putChar(0, (char) 1);
       assertEquals(wmem.getByte(1), (byte) 1);
@@ -148,7 +150,15 @@ public class AllocateDirectWritableMapMemoryTest {
   @Test(expectedExceptions = ReadOnlyException.class)
   public void simpleMap2() throws IOException {
     File file = getResourceFile("GettysburgAddress.txt");
-    assertTrue(isFileReadOnly(file));
+    final Class<?> allocDirMapClass = ReflectUtil.getClass("org.apache.datasketches.memory.AllocateDirectMap");
+    final Method roMethod = ReflectUtil.getMethod(allocDirMapClass, "isFileReadOnly", file.getClass());
+    try {
+      assertTrue((boolean)roMethod.invoke(roMethod, file));
+      //assertTrue(isFileReadOnly(file));
+    } catch (final Exception e) {
+      if (e instanceof IllegalStateException || e instanceof InvocationTargetException) { } //OK
+      else { throw new RuntimeException(e); }
+    }
     try (WritableMapHandle rh = WritableMemory.map(file)) {
       //
     }
@@ -219,19 +229,38 @@ public class AllocateDirectWritableMapMemoryTest {
   public void checkExplicitClose() throws Exception {
     File file = getResourceFile("GettysburgAddress.txt");
     try (MapHandle wmh = Memory.map(file)) {
-      wmh.close(); //explicit close. Does the work of closing
-      wmh.dirMap.close(); //redundant
+      wmh.close(); //explicit close.
     } //end of scope call to Cleaner/Deallocator also will be redundant
   }
 
   @AfterClass
-  public void checkMapCounter() {
-    final long count = BaseState.getCurrentDirectMemoryMapAllocations();
-    if (count != 0) {
-      println(""+count);
-      fail();
+  public void checkDirectCounter() {
+    final Class<?> baseStateClass = ReflectUtil.getClass("org.apache.datasketches.memory.BaseState");
+    final Method currDirMemAllocMethod = 
+        ReflectUtil.getMethod(baseStateClass, "getCurrentDirectMemoryMapAllocations", (Class<?>[])null);
+    long count;
+    try {
+      count = (long) currDirMemAllocMethod.invoke(currDirMemAllocMethod, (Object[])null);
+      //final long count = BaseState.getCurrentDirectMemoryMapAllocations();
+      if (count != 0) {
+        println(""+count);
+        fail();
+      }
+    } catch (final Exception e) {
+      if (e instanceof IllegalStateException || e instanceof InvocationTargetException) { } //OK
+      else { throw new RuntimeException(e); }
     }
   }
+  
+  
+//  @AfterClass
+//  public void checkMapCounter() {
+//    final long count = BaseState.getCurrentDirectMemoryMapAllocations();
+//    if (count != 0) {
+//      println(""+count);
+//      fail();
+//    }
+//  }
 
   @Test
   public void printlnTest() {
diff --git a/src/test/java/org/apache/datasketches/memory/test/BaseStateTest.java b/src/test/java/org/apache/datasketches/memory/test/BaseStateTest.java
index 2151b05..21045ff 100644
--- a/src/test/java/org/apache/datasketches/memory/test/BaseStateTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/BaseStateTest.java
@@ -27,11 +27,11 @@ import static org.testng.Assert.fail;
 
 import java.nio.ByteOrder;
 
-import org.apache.datasketches.memory.BaseState;
 import org.apache.datasketches.memory.Buffer;
 import org.apache.datasketches.memory.Memory;
 import org.apache.datasketches.memory.Prim;
 import org.apache.datasketches.memory.StepBoolean;
+import org.apache.datasketches.memory.Util;
 import org.apache.datasketches.memory.WritableBuffer;
 import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
@@ -90,7 +90,9 @@ public class BaseStateTest {
 
   @Test
   public void checkGetNativeBaseOffset_Heap() {
-    WritableMemory wmem = WritableMemory.allocate(8);
+    WritableMemory wmem = WritableMemory.allocate(8); //heap
+    final long offset;
+    
     assertEquals(wmem.getNativeBaseOffset(), 0L);
   }
 
@@ -102,7 +104,7 @@ public class BaseStateTest {
 
   @Test(expectedExceptions = IllegalArgumentException.class)
   public void checkByteOrderNull() {
-    BaseState.isNativeByteOrder(null);
+    Util.isNativeByteOrder(null);
     fail();
   }
 
diff --git a/src/test/java/org/apache/datasketches/memory/test/ReflectUtil.java b/src/test/java/org/apache/datasketches/memory/test/ReflectUtil.java
new file mode 100644
index 0000000..c60e113
--- /dev/null
+++ b/src/test/java/org/apache/datasketches/memory/test/ReflectUtil.java
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.datasketches.memory.test;
+
+import java.lang.reflect.*;
+
+public class ReflectUtil {
+
+  /**
+   * Gets a Class reference to the given class loaded by the SystemClassLoader. 
+   * This will work for private, package-private and abstract classes. 
+   * @param fullyQualifiedBinaryName the binary name is the name of the class file on disk. This does not instantiate
+   * a concrete class, but allows access to constructors, static fields and static methods.
+   * @return the Class object of the given class.
+   */
+  public static Class<?> getClass(String fullyQualifiedBinaryName) {
+    try {
+      ClassLoader scl = ClassLoader.getSystemClassLoader();
+      return scl.loadClass(fullyQualifiedBinaryName);
+    } catch (final Exception e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+  /**
+   * Gets a declared constructor given the owner class and parameter types
+   * @param ownerClass the Class<?> object of the class loaded by the SystemClassLoader.
+   * @param parameterTypes parameter types for the constructor
+   * @return the constructor
+   */
+  public static Constructor<?> getConstructor(final Class<?> ownerClass, final Class<?>... parameterTypes ) {
+    try {
+      Constructor<?> ctor = ownerClass.getDeclaredConstructor(parameterTypes);
+      ctor.setAccessible(true);
+      return ctor;
+    } catch (final Exception e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+  /**
+   * Gets a class instance from its constructor and initializing arguments.
+   * @param constructor the given Constructor
+   * @param initargs the initializing arguments
+   * @return the instantiated class.
+   */
+  public static Object getInstance(final Constructor<?> constructor, final Object... initargs) {
+    try {
+      constructor.setAccessible(true);
+      return constructor.newInstance(initargs);
+    } catch (final Exception e) {
+      throw new RuntimeException(e);
+    }
+  }
+  
+  
+  /**
+   * Gets a declared field of the given the loaded owner class and field name. The accessible flag will be set true.
+   * @param ownerClass the Class<?> object of the class loaded by the SystemClassLoader.
+   * @param fieldName the desired field name
+   * @return the desired field.  
+   */
+  public static Field getField(final Class<?> ownerClass, final String fieldName) {
+    try {
+      Field field = ownerClass.getDeclaredField(fieldName);
+      field.setAccessible(true);
+      return field;
+    } catch (final Exception e) {
+      throw new RuntimeException(e);
+    }
+  }
+  
+  /**
+   * Gets a field value given the loaded owner class and the Field. The accessible flag will be set true.
+   * @param ownerClass the loaded class owning the field
+   * @param field The Field object
+   * @return the returned value as an object.
+   */
+  public static Object getFieldValue(final Class<?> ownerClass, final Field field) {
+    try {
+      field.setAccessible(true);
+      return field.get(ownerClass);
+    } catch (final Exception e) {
+      throw new RuntimeException(e);
+    }
+  }
+  
+  /**
+   * Gets a declared method of the given the loaded owning class, method name and parameter types. 
+   * The accessible flag will be set true. 
+   * @param ownerClass the given 
+   * @param methodName the given method name
+   * @param parameterTypes the list of parameter types
+   * @return the desired method.
+   */
+  public static Method getMethod(final Class<?> ownerClass, final String methodName, final Class<?>... parameterTypes ) {
+    try {
+      Method method = (parameterTypes == null) 
+          ? ownerClass.getDeclaredMethod(methodName)
+          : ownerClass.getDeclaredMethod(methodName, parameterTypes);
+      method.setAccessible(true);
+      return method;
+    } catch (final Exception e) {
+      throw new RuntimeException(e);
+    }
+  }
+  
+//  /**
+//   * Invoke the given method along with its concreteOwnerClass and method argueents.
+//   * Any exception is returned to the caller.
+//   * @param method the given method
+//   * @param concreteOwnerInstance the concrete owning class instance
+//   * @param args the method arguments
+//   * @return the result of the invoked method.
+//   */
+//  public static Object invokeMethod(
+//      final Method method, 
+//      final Object concreteOwnerInstance, 
+//      Object... args) throws IllegalAccessException, InvocationTargetException, IllegalArgumentException {
+//      method.setAccessible(true);
+//      return method.invoke(concreteOwnerInstance, args);
+//  }
+  
+}
+
+

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org


[datasketches-memory] 01/04: Initial move of all test classes to memory.test.

Posted by le...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

leerho pushed a commit to branch noSplitPackage
in repository https://gitbox.apache.org/repos/asf/datasketches-memory.git

commit 67abafc4e62390cd3a753b9c9acb3bde909a804d
Author: Lee Rhodes <le...@users.noreply.github.com>
AuthorDate: Tue May 4 16:03:24 2021 -0700

    Initial move of all test classes to memory.test.
    
    Lots of errors.
---
 .../{ => test}/AllocateDirectMapMemoryTest.java      |  4 +++-
 .../memory/{ => test}/AllocateDirectMemoryTest.java  |  8 +++++++-
 .../AllocateDirectWritableMapMemoryTest.java         |  9 ++++++++-
 .../memory/{ => test}/BaseBufferTest.java            |  6 +++++-
 .../memory/{ => test}/BaseStateTest.java             |  9 ++++++++-
 .../datasketches/memory/{ => test}/Buffer2Test.java  |  7 ++++++-
 .../memory/{ => test}/BufferBoundaryCheckTest.java   |  3 ++-
 .../memory/{ => test}/BufferInvariantsTest.java      |  6 +++++-
 .../memory/{ => test}/BufferReadWriteSafetyTest.java |  6 +++++-
 .../datasketches/memory/{ => test}/BufferTest.java   |  7 ++++++-
 .../memory/{ => test}/CommonBufferTest.java          |  5 ++++-
 .../memory/{ => test}/CommonMemoryTest.java          |  4 +++-
 .../memory/{ => test}/CopyMemoryOverlapTest.java     |  5 ++++-
 .../memory/{ => test}/CopyMemoryTest.java            |  5 ++++-
 .../{ => test}/ExampleMemoryRequestServerTest.java   |  5 ++++-
 .../memory/{ => test}/IgnoredArrayOverflowTest.java  |  4 +++-
 .../memory/{ => test}/IsValidUtf8TestUtil.java       |  2 +-
 .../datasketches/memory/{ => test}/LeafImplTest.java |  7 ++++++-
 .../memory/{ => test}/MemoryBoundaryCheckTest.java   |  4 +++-
 .../memory/{ => test}/MemoryReadWriteSafetyTest.java |  6 +++++-
 .../datasketches/memory/{ => test}/MemoryTest.java   |  8 +++++++-
 .../memory/{ => test}/MemoryWriteToTest.java         |  6 +++++-
 .../datasketches/memory/{ => test}/NioBitsTest.java  |  3 ++-
 .../{ => test}/NonNativeWritableBufferImplTest.java  |  5 ++++-
 .../{ => test}/NonNativeWritableMemoryImplTest.java  |  4 +++-
 .../memory/{ => test}/SpecificLeafTest.java          |  8 +++++++-
 .../memory/{ => test}/UnsafeUtilTest.java            |  5 ++++-
 .../datasketches/memory/{ => test}/Utf8Test.java     |  7 ++++++-
 .../datasketches/memory/{ => test}/UtilTest.java     |  6 +++++-
 .../memory/{ => test}/WritableBufferImplTest.java    | 10 +++++++++-
 .../memory/{ => test}/WritableDirectCopyTest.java    |  5 ++++-
 .../memory/{ => test}/WritableMemoryImplTest.java    | 10 +++++++++-
 .../memory/{ => test}/WritableMemoryTest.java        |  6 +++++-
 .../memory/{ => test}/XxHash64LoopingTest.java       |  3 ++-
 .../datasketches/memory/{ => test}/XxHash64Test.java |  5 ++++-
 .../memory/{ => test}/ZeroCapacityTest.java          |  4 +++-
 .../datasketches/memory/test/package-info.java       | 20 ++++++++++++++++++++
 37 files changed, 191 insertions(+), 36 deletions(-)

diff --git a/src/test/java/org/apache/datasketches/memory/AllocateDirectMapMemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMapMemoryTest.java
similarity index 97%
rename from src/test/java/org/apache/datasketches/memory/AllocateDirectMapMemoryTest.java
rename to src/test/java/org/apache/datasketches/memory/test/AllocateDirectMapMemoryTest.java
index c3e2bb6..c5fae90 100644
--- a/src/test/java/org/apache/datasketches/memory/AllocateDirectMapMemoryTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMapMemoryTest.java
@@ -21,7 +21,7 @@
  * Note: Lincoln's Gettysburg Address is in the public domain. See LICENSE.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.apache.datasketches.memory.Util.*;
 import static org.testng.Assert.assertEquals;
@@ -32,6 +32,8 @@ import static org.testng.Assert.fail;
 import java.io.File;
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.MapHandle;
+import org.apache.datasketches.memory.Memory;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
diff --git a/src/test/java/org/apache/datasketches/memory/AllocateDirectMemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java
similarity index 90%
rename from src/test/java/org/apache/datasketches/memory/AllocateDirectMemoryTest.java
rename to src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java
index dcd76da..877ee5c 100644
--- a/src/test/java/org/apache/datasketches/memory/AllocateDirectMemoryTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java
@@ -17,13 +17,19 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.fail;
 
+import org.apache.datasketches.memory.BaseState;
+import org.apache.datasketches.memory.BaseWritableMemoryImpl;
+import org.apache.datasketches.memory.MemoryRequestServer;
+import org.apache.datasketches.memory.WritableDirectHandle;
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.Test;
 
diff --git a/src/test/java/org/apache/datasketches/memory/AllocateDirectWritableMapMemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectWritableMapMemoryTest.java
similarity index 95%
rename from src/test/java/org/apache/datasketches/memory/AllocateDirectWritableMapMemoryTest.java
rename to src/test/java/org/apache/datasketches/memory/test/AllocateDirectWritableMapMemoryTest.java
index bdf361f..dd56842 100644
--- a/src/test/java/org/apache/datasketches/memory/AllocateDirectWritableMapMemoryTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectWritableMapMemoryTest.java
@@ -21,7 +21,7 @@
  * Note: Lincoln's Gettysburg Address is in the public domain. See LICENSE.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.apache.datasketches.memory.AllocateDirectMap.isFileReadOnly;
@@ -37,6 +37,13 @@ import java.io.PrintWriter;
 import java.io.UnsupportedEncodingException;
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.BaseState;
+import org.apache.datasketches.memory.MapHandle;
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.ReadOnlyException;
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMapHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
diff --git a/src/test/java/org/apache/datasketches/memory/BaseBufferTest.java b/src/test/java/org/apache/datasketches/memory/test/BaseBufferTest.java
similarity index 90%
rename from src/test/java/org/apache/datasketches/memory/BaseBufferTest.java
rename to src/test/java/org/apache/datasketches/memory/test/BaseBufferTest.java
index de41755..ed02c79 100644
--- a/src/test/java/org/apache/datasketches/memory/BaseBufferTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/BaseBufferTest.java
@@ -17,10 +17,14 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.fail;
 
+import org.apache.datasketches.memory.Buffer;
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 /**
diff --git a/src/test/java/org/apache/datasketches/memory/BaseStateTest.java b/src/test/java/org/apache/datasketches/memory/test/BaseStateTest.java
similarity index 89%
rename from src/test/java/org/apache/datasketches/memory/BaseStateTest.java
rename to src/test/java/org/apache/datasketches/memory/test/BaseStateTest.java
index 4f6ae7b..2151b05 100644
--- a/src/test/java/org/apache/datasketches/memory/BaseStateTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/BaseStateTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.apache.datasketches.memory.UnsafeUtil.ARRAY_DOUBLE_INDEX_SCALE;
 import static org.testng.Assert.assertEquals;
@@ -27,6 +27,13 @@ import static org.testng.Assert.fail;
 
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.BaseState;
+import org.apache.datasketches.memory.Buffer;
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.Prim;
+import org.apache.datasketches.memory.StepBoolean;
+import org.apache.datasketches.memory.WritableBuffer;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 @SuppressWarnings("javadoc")
diff --git a/src/test/java/org/apache/datasketches/memory/Buffer2Test.java b/src/test/java/org/apache/datasketches/memory/test/Buffer2Test.java
similarity index 97%
rename from src/test/java/org/apache/datasketches/memory/Buffer2Test.java
rename to src/test/java/org/apache/datasketches/memory/test/Buffer2Test.java
index f7683b9..cf984b8 100644
--- a/src/test/java/org/apache/datasketches/memory/Buffer2Test.java
+++ b/src/test/java/org/apache/datasketches/memory/test/Buffer2Test.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -26,6 +26,11 @@ import static org.testng.Assert.assertTrue;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.Buffer;
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.ReadOnlyException;
+import org.apache.datasketches.memory.WritableBuffer;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 @SuppressWarnings("javadoc")
diff --git a/src/test/java/org/apache/datasketches/memory/BufferBoundaryCheckTest.java b/src/test/java/org/apache/datasketches/memory/test/BufferBoundaryCheckTest.java
similarity index 98%
rename from src/test/java/org/apache/datasketches/memory/BufferBoundaryCheckTest.java
rename to src/test/java/org/apache/datasketches/memory/test/BufferBoundaryCheckTest.java
index cbdf531..03d428d 100644
--- a/src/test/java/org/apache/datasketches/memory/BufferBoundaryCheckTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/BufferBoundaryCheckTest.java
@@ -17,8 +17,9 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 @SuppressWarnings("javadoc")
diff --git a/src/test/java/org/apache/datasketches/memory/BufferInvariantsTest.java b/src/test/java/org/apache/datasketches/memory/test/BufferInvariantsTest.java
similarity index 97%
rename from src/test/java/org/apache/datasketches/memory/BufferInvariantsTest.java
rename to src/test/java/org/apache/datasketches/memory/test/BufferInvariantsTest.java
index 33ce960..aa4754e 100644
--- a/src/test/java/org/apache/datasketches/memory/BufferInvariantsTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/BufferInvariantsTest.java
@@ -17,13 +17,17 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.fail;
 
 import java.nio.ByteBuffer;
 
+import org.apache.datasketches.memory.Buffer;
+import org.apache.datasketches.memory.WritableBuffer;
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 /**
diff --git a/src/test/java/org/apache/datasketches/memory/BufferReadWriteSafetyTest.java b/src/test/java/org/apache/datasketches/memory/test/BufferReadWriteSafetyTest.java
similarity index 94%
rename from src/test/java/org/apache/datasketches/memory/BufferReadWriteSafetyTest.java
rename to src/test/java/org/apache/datasketches/memory/test/BufferReadWriteSafetyTest.java
index 9877867..91e0465 100644
--- a/src/test/java/org/apache/datasketches/memory/BufferReadWriteSafetyTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/BufferReadWriteSafetyTest.java
@@ -17,10 +17,14 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import java.nio.ByteBuffer;
 
+import org.apache.datasketches.memory.Buffer;
+import org.apache.datasketches.memory.ReadOnlyException;
+import org.apache.datasketches.memory.WritableBuffer;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 @SuppressWarnings("javadoc")
diff --git a/src/test/java/org/apache/datasketches/memory/BufferTest.java b/src/test/java/org/apache/datasketches/memory/test/BufferTest.java
similarity index 96%
rename from src/test/java/org/apache/datasketches/memory/BufferTest.java
rename to src/test/java/org/apache/datasketches/memory/test/BufferTest.java
index fc05660..b825659 100644
--- a/src/test/java/org/apache/datasketches/memory/BufferTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/BufferTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.assertEquals;
 
@@ -25,6 +25,11 @@ import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import java.util.List;
 
+import org.apache.datasketches.memory.Buffer;
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.WritableBuffer;
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 import org.testng.collections.Lists;
 
diff --git a/src/test/java/org/apache/datasketches/memory/CommonBufferTest.java b/src/test/java/org/apache/datasketches/memory/test/CommonBufferTest.java
similarity index 98%
rename from src/test/java/org/apache/datasketches/memory/CommonBufferTest.java
rename to src/test/java/org/apache/datasketches/memory/test/CommonBufferTest.java
index d3e1ed3..1b7308d 100644
--- a/src/test/java/org/apache/datasketches/memory/CommonBufferTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/CommonBufferTest.java
@@ -17,10 +17,13 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.assertEquals;
 
+import org.apache.datasketches.memory.WritableBuffer;
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 @SuppressWarnings("javadoc")
diff --git a/src/test/java/org/apache/datasketches/memory/CommonMemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/CommonMemoryTest.java
similarity index 98%
rename from src/test/java/org/apache/datasketches/memory/CommonMemoryTest.java
rename to src/test/java/org/apache/datasketches/memory/test/CommonMemoryTest.java
index 9997f5e..41f2b2f 100644
--- a/src/test/java/org/apache/datasketches/memory/CommonMemoryTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/CommonMemoryTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.apache.datasketches.memory.Util.isAllBitsClear;
 import static org.apache.datasketches.memory.Util.isAllBitsSet;
@@ -27,6 +27,8 @@ import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertTrue;
 
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 @SuppressWarnings("javadoc")
diff --git a/src/test/java/org/apache/datasketches/memory/CopyMemoryOverlapTest.java b/src/test/java/org/apache/datasketches/memory/test/CopyMemoryOverlapTest.java
similarity index 96%
rename from src/test/java/org/apache/datasketches/memory/CopyMemoryOverlapTest.java
rename to src/test/java/org/apache/datasketches/memory/test/CopyMemoryOverlapTest.java
index 765ed7b..0f2f027 100644
--- a/src/test/java/org/apache/datasketches/memory/CopyMemoryOverlapTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/CopyMemoryOverlapTest.java
@@ -17,10 +17,13 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.assertEquals;
 
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 /**
diff --git a/src/test/java/org/apache/datasketches/memory/CopyMemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/CopyMemoryTest.java
similarity index 96%
rename from src/test/java/org/apache/datasketches/memory/CopyMemoryTest.java
rename to src/test/java/org/apache/datasketches/memory/test/CopyMemoryTest.java
index 690dcb2..b0552b3 100644
--- a/src/test/java/org/apache/datasketches/memory/CopyMemoryTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/CopyMemoryTest.java
@@ -17,13 +17,16 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.apache.datasketches.memory.CompareAndCopy.UNSAFE_COPY_THRESHOLD_BYTES;
 import static org.testng.Assert.assertEquals;
 
 import java.util.concurrent.ThreadLocalRandom;
 
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
diff --git a/src/test/java/org/apache/datasketches/memory/ExampleMemoryRequestServerTest.java b/src/test/java/org/apache/datasketches/memory/test/ExampleMemoryRequestServerTest.java
similarity index 96%
rename from src/test/java/org/apache/datasketches/memory/ExampleMemoryRequestServerTest.java
rename to src/test/java/org/apache/datasketches/memory/test/ExampleMemoryRequestServerTest.java
index f30ccab..3934c0e 100644
--- a/src/test/java/org/apache/datasketches/memory/ExampleMemoryRequestServerTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/ExampleMemoryRequestServerTest.java
@@ -17,12 +17,15 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.assertFalse;
 
 import java.util.IdentityHashMap;
 
+import org.apache.datasketches.memory.MemoryRequestServer;
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 /**
diff --git a/src/test/java/org/apache/datasketches/memory/IgnoredArrayOverflowTest.java b/src/test/java/org/apache/datasketches/memory/test/IgnoredArrayOverflowTest.java
similarity index 95%
rename from src/test/java/org/apache/datasketches/memory/IgnoredArrayOverflowTest.java
rename to src/test/java/org/apache/datasketches/memory/test/IgnoredArrayOverflowTest.java
index 487b279..2344beb 100644
--- a/src/test/java/org/apache/datasketches/memory/IgnoredArrayOverflowTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/IgnoredArrayOverflowTest.java
@@ -17,8 +17,10 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Ignore;
diff --git a/src/test/java/org/apache/datasketches/memory/IsValidUtf8TestUtil.java b/src/test/java/org/apache/datasketches/memory/test/IsValidUtf8TestUtil.java
similarity index 98%
rename from src/test/java/org/apache/datasketches/memory/IsValidUtf8TestUtil.java
rename to src/test/java/org/apache/datasketches/memory/test/IsValidUtf8TestUtil.java
index aae21aa..0e08200 100644
--- a/src/test/java/org/apache/datasketches/memory/IsValidUtf8TestUtil.java
+++ b/src/test/java/org/apache/datasketches/memory/test/IsValidUtf8TestUtil.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 /**
  * Stripped down version of
diff --git a/src/test/java/org/apache/datasketches/memory/LeafImplTest.java b/src/test/java/org/apache/datasketches/memory/test/LeafImplTest.java
similarity index 97%
rename from src/test/java/org/apache/datasketches/memory/LeafImplTest.java
rename to src/test/java/org/apache/datasketches/memory/test/LeafImplTest.java
index 696a95d..ce69bb8 100644
--- a/src/test/java/org/apache/datasketches/memory/LeafImplTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/LeafImplTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -30,6 +30,11 @@ import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.BaseState;
+import org.apache.datasketches.memory.WritableBuffer;
+import org.apache.datasketches.memory.WritableDirectHandle;
+import org.apache.datasketches.memory.WritableMapHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 /**
diff --git a/src/test/java/org/apache/datasketches/memory/MemoryBoundaryCheckTest.java b/src/test/java/org/apache/datasketches/memory/test/MemoryBoundaryCheckTest.java
similarity index 97%
rename from src/test/java/org/apache/datasketches/memory/MemoryBoundaryCheckTest.java
rename to src/test/java/org/apache/datasketches/memory/test/MemoryBoundaryCheckTest.java
index c8e0457..c45387f 100644
--- a/src/test/java/org/apache/datasketches/memory/MemoryBoundaryCheckTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/MemoryBoundaryCheckTest.java
@@ -17,8 +17,10 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
+import org.apache.datasketches.memory.WritableBuffer;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 @SuppressWarnings("javadoc")
diff --git a/src/test/java/org/apache/datasketches/memory/MemoryReadWriteSafetyTest.java b/src/test/java/org/apache/datasketches/memory/test/MemoryReadWriteSafetyTest.java
similarity index 96%
rename from src/test/java/org/apache/datasketches/memory/MemoryReadWriteSafetyTest.java
rename to src/test/java/org/apache/datasketches/memory/test/MemoryReadWriteSafetyTest.java
index 19aab85..443bb7f 100644
--- a/src/test/java/org/apache/datasketches/memory/MemoryReadWriteSafetyTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/MemoryReadWriteSafetyTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import java.io.File;
 import java.io.IOException;
@@ -25,6 +25,10 @@ import java.io.RandomAccessFile;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.MapHandle;
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.ReadOnlyException;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 @SuppressWarnings("javadoc")
diff --git a/src/test/java/org/apache/datasketches/memory/MemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/MemoryTest.java
similarity index 97%
rename from src/test/java/org/apache/datasketches/memory/MemoryTest.java
rename to src/test/java/org/apache/datasketches/memory/test/MemoryTest.java
index d70e6fd..0022dfd 100644
--- a/src/test/java/org/apache/datasketches/memory/MemoryTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/MemoryTest.java
@@ -21,7 +21,7 @@
  * Note: Lincoln's Gettysburg Address is in the public domain. See LICENSE.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.apache.datasketches.memory.Util.*;
 import static org.testng.Assert.assertEquals;
@@ -35,6 +35,12 @@ import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import java.util.List;
 
+import org.apache.datasketches.memory.BaseState;
+import org.apache.datasketches.memory.MapHandle;
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.WritableDirectHandle;
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.Assert;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
diff --git a/src/test/java/org/apache/datasketches/memory/MemoryWriteToTest.java b/src/test/java/org/apache/datasketches/memory/test/MemoryWriteToTest.java
similarity index 93%
rename from src/test/java/org/apache/datasketches/memory/MemoryWriteToTest.java
rename to src/test/java/org/apache/datasketches/memory/test/MemoryWriteToTest.java
index cd713d6..fdfe3eb 100644
--- a/src/test/java/org/apache/datasketches/memory/MemoryWriteToTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/MemoryWriteToTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -25,6 +25,10 @@ import java.nio.channels.Channels;
 import java.nio.channels.WritableByteChannel;
 import java.util.concurrent.ThreadLocalRandom;
 
+import org.apache.datasketches.memory.CompareAndCopy;
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
diff --git a/src/test/java/org/apache/datasketches/memory/NioBitsTest.java b/src/test/java/org/apache/datasketches/memory/test/NioBitsTest.java
similarity index 96%
rename from src/test/java/org/apache/datasketches/memory/NioBitsTest.java
rename to src/test/java/org/apache/datasketches/memory/test/NioBitsTest.java
index 4e08487..b5e56e1 100644
--- a/src/test/java/org/apache/datasketches/memory/NioBitsTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/NioBitsTest.java
@@ -17,10 +17,11 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.assertEquals;
 
+import org.apache.datasketches.memory.NioBits;
 import org.testng.annotations.Test;
 
 /**
diff --git a/src/test/java/org/apache/datasketches/memory/NonNativeWritableBufferImplTest.java b/src/test/java/org/apache/datasketches/memory/test/NonNativeWritableBufferImplTest.java
similarity index 97%
rename from src/test/java/org/apache/datasketches/memory/NonNativeWritableBufferImplTest.java
rename to src/test/java/org/apache/datasketches/memory/test/NonNativeWritableBufferImplTest.java
index 9b48f7d..8830c23 100644
--- a/src/test/java/org/apache/datasketches/memory/NonNativeWritableBufferImplTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/NonNativeWritableBufferImplTest.java
@@ -17,12 +17,15 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.assertEquals;
 
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.Buffer;
+import org.apache.datasketches.memory.WritableBuffer;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 /**
diff --git a/src/test/java/org/apache/datasketches/memory/NonNativeWritableMemoryImplTest.java b/src/test/java/org/apache/datasketches/memory/test/NonNativeWritableMemoryImplTest.java
similarity index 97%
rename from src/test/java/org/apache/datasketches/memory/NonNativeWritableMemoryImplTest.java
rename to src/test/java/org/apache/datasketches/memory/test/NonNativeWritableMemoryImplTest.java
index 22263a8..dab4eb1 100644
--- a/src/test/java/org/apache/datasketches/memory/NonNativeWritableMemoryImplTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/NonNativeWritableMemoryImplTest.java
@@ -17,12 +17,14 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.assertEquals;
 
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 /**
diff --git a/src/test/java/org/apache/datasketches/memory/SpecificLeafTest.java b/src/test/java/org/apache/datasketches/memory/test/SpecificLeafTest.java
similarity index 94%
rename from src/test/java/org/apache/datasketches/memory/SpecificLeafTest.java
rename to src/test/java/org/apache/datasketches/memory/test/SpecificLeafTest.java
index 04136b8..893fc22 100644
--- a/src/test/java/org/apache/datasketches/memory/SpecificLeafTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/SpecificLeafTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.apache.datasketches.memory.BaseState.DUPLICATE;
 import static org.apache.datasketches.memory.BaseState.REGION;
@@ -28,6 +28,12 @@ import java.io.File;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
+import org.apache.datasketches.memory.BaseState;
+import org.apache.datasketches.memory.Buffer;
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.WritableDirectHandle;
+import org.apache.datasketches.memory.WritableMapHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 /**
diff --git a/src/test/java/org/apache/datasketches/memory/UnsafeUtilTest.java b/src/test/java/org/apache/datasketches/memory/test/UnsafeUtilTest.java
similarity index 96%
rename from src/test/java/org/apache/datasketches/memory/UnsafeUtilTest.java
rename to src/test/java/org/apache/datasketches/memory/test/UnsafeUtilTest.java
index 0ac9463..615211a 100644
--- a/src/test/java/org/apache/datasketches/memory/UnsafeUtilTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/UnsafeUtilTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
@@ -26,6 +26,9 @@ import static org.testng.Assert.fail;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.datasketches.memory.Ints;
+import org.apache.datasketches.memory.JDK7Compatible;
+import org.apache.datasketches.memory.UnsafeUtil;
 import org.testng.annotations.Test;
 
 
diff --git a/src/test/java/org/apache/datasketches/memory/Utf8Test.java b/src/test/java/org/apache/datasketches/memory/test/Utf8Test.java
similarity index 98%
rename from src/test/java/org/apache/datasketches/memory/Utf8Test.java
rename to src/test/java/org/apache/datasketches/memory/test/Utf8Test.java
index 3f66508..d7ad5c7 100644
--- a/src/test/java/org/apache/datasketches/memory/Utf8Test.java
+++ b/src/test/java/org/apache/datasketches/memory/test/Utf8Test.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.testng.Assert.assertEquals;
@@ -31,6 +31,11 @@ import java.util.List;
 import org.testng.annotations.Test;
 
 import com.google.protobuf.ByteString;
+
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.Utf8CodingException;
+import org.apache.datasketches.memory.Util;
+import org.apache.datasketches.memory.WritableMemory;
 import org.apache.datasketches.memory.Util.RandomCodePoints;
 
 /**
diff --git a/src/test/java/org/apache/datasketches/memory/UtilTest.java b/src/test/java/org/apache/datasketches/memory/test/UtilTest.java
similarity index 95%
rename from src/test/java/org/apache/datasketches/memory/UtilTest.java
rename to src/test/java/org/apache/datasketches/memory/test/UtilTest.java
index d174ffa..f665b07 100644
--- a/src/test/java/org/apache/datasketches/memory/UtilTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/UtilTest.java
@@ -21,7 +21,7 @@
  * Note: Lincoln's Gettysburg Address is in the public domain. See LICENSE.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.apache.datasketches.memory.Util.characterPad;
 import static org.apache.datasketches.memory.Util.getResourceFile;
@@ -42,6 +42,10 @@ import java.nio.file.attribute.PosixFileAttributeView;
 import java.nio.file.attribute.PosixFileAttributes;
 import java.nio.file.attribute.PosixFilePermissions;
 
+import org.apache.datasketches.memory.UnsafeUtil;
+import org.apache.datasketches.memory.Util;
+import org.apache.datasketches.memory.WritableMemory;
+import org.apache.datasketches.memory.Util.RandomCodePoints;
 import org.testng.annotations.Test;
 
 @SuppressWarnings("javadoc")
diff --git a/src/test/java/org/apache/datasketches/memory/WritableBufferImplTest.java b/src/test/java/org/apache/datasketches/memory/test/WritableBufferImplTest.java
similarity index 97%
rename from src/test/java/org/apache/datasketches/memory/WritableBufferImplTest.java
rename to src/test/java/org/apache/datasketches/memory/test/WritableBufferImplTest.java
index 38206e1..7188be7 100644
--- a/src/test/java/org/apache/datasketches/memory/WritableBufferImplTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/WritableBufferImplTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -26,6 +26,14 @@ import static org.testng.Assert.assertTrue;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.BaseState;
+import org.apache.datasketches.memory.Buffer;
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.ReadOnlyException;
+import org.apache.datasketches.memory.UnsafeUtil;
+import org.apache.datasketches.memory.WritableBuffer;
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
diff --git a/src/test/java/org/apache/datasketches/memory/WritableDirectCopyTest.java b/src/test/java/org/apache/datasketches/memory/test/WritableDirectCopyTest.java
similarity index 97%
rename from src/test/java/org/apache/datasketches/memory/WritableDirectCopyTest.java
rename to src/test/java/org/apache/datasketches/memory/test/WritableDirectCopyTest.java
index 911895b..4907e5a 100644
--- a/src/test/java/org/apache/datasketches/memory/WritableDirectCopyTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/WritableDirectCopyTest.java
@@ -17,11 +17,14 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.fail;
 
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 /**
diff --git a/src/test/java/org/apache/datasketches/memory/WritableMemoryImplTest.java b/src/test/java/org/apache/datasketches/memory/test/WritableMemoryImplTest.java
similarity index 97%
rename from src/test/java/org/apache/datasketches/memory/WritableMemoryImplTest.java
rename to src/test/java/org/apache/datasketches/memory/test/WritableMemoryImplTest.java
index 34a7587..c08eb5c 100644
--- a/src/test/java/org/apache/datasketches/memory/WritableMemoryImplTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/WritableMemoryImplTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -27,6 +27,14 @@ import static org.testng.Assert.fail;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.BaseState;
+import org.apache.datasketches.memory.Buffer;
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.ReadOnlyException;
+import org.apache.datasketches.memory.UnsafeUtil;
+import org.apache.datasketches.memory.WritableBuffer;
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 @SuppressWarnings("javadoc")
diff --git a/src/test/java/org/apache/datasketches/memory/WritableMemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/WritableMemoryTest.java
similarity index 96%
rename from src/test/java/org/apache/datasketches/memory/WritableMemoryTest.java
rename to src/test/java/org/apache/datasketches/memory/test/WritableMemoryTest.java
index 287f314..906d216 100644
--- a/src/test/java/org/apache/datasketches/memory/WritableMemoryTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/WritableMemoryTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.apache.datasketches.memory.CompareAndCopy.UNSAFE_COPY_THRESHOLD_BYTES;
 import static org.testng.Assert.assertEquals;
@@ -28,6 +28,10 @@ import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import java.util.concurrent.ThreadLocalRandom;
 
+import org.apache.datasketches.memory.BaseState;
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.WritableBuffer;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 @SuppressWarnings("javadoc")
diff --git a/src/test/java/org/apache/datasketches/memory/XxHash64LoopingTest.java b/src/test/java/org/apache/datasketches/memory/test/XxHash64LoopingTest.java
similarity index 99%
rename from src/test/java/org/apache/datasketches/memory/XxHash64LoopingTest.java
rename to src/test/java/org/apache/datasketches/memory/test/XxHash64LoopingTest.java
index 802624b..e1df579 100644
--- a/src/test/java/org/apache/datasketches/memory/XxHash64LoopingTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/XxHash64LoopingTest.java
@@ -17,10 +17,11 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.assertEquals;
 
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 /**
diff --git a/src/test/java/org/apache/datasketches/memory/XxHash64Test.java b/src/test/java/org/apache/datasketches/memory/test/XxHash64Test.java
similarity index 96%
rename from src/test/java/org/apache/datasketches/memory/XxHash64Test.java
rename to src/test/java/org/apache/datasketches/memory/test/XxHash64Test.java
index 8cd49c8..e88d410 100644
--- a/src/test/java/org/apache/datasketches/memory/XxHash64Test.java
+++ b/src/test/java/org/apache/datasketches/memory/test/XxHash64Test.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.apache.datasketches.memory.XxHash64.hashBooleans;
 import static org.apache.datasketches.memory.XxHash64.hashBytes;
@@ -33,6 +33,9 @@ import static org.testng.Assert.assertTrue;
 import java.util.Random;
 import java.util.concurrent.ThreadLocalRandom;
 
+import org.apache.datasketches.memory.BaseState;
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 import net.openhft.hashing.LongHashFunction;
diff --git a/src/test/java/org/apache/datasketches/memory/ZeroCapacityTest.java b/src/test/java/org/apache/datasketches/memory/test/ZeroCapacityTest.java
similarity index 92%
rename from src/test/java/org/apache/datasketches/memory/ZeroCapacityTest.java
rename to src/test/java/org/apache/datasketches/memory/test/ZeroCapacityTest.java
index 2389b91..1c2c7b7 100644
--- a/src/test/java/org/apache/datasketches/memory/ZeroCapacityTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/ZeroCapacityTest.java
@@ -17,12 +17,14 @@
  * under the License.
  */
 
-package org.apache.datasketches.memory;
+package org.apache.datasketches.memory.test;
 
 import static org.testng.Assert.assertEquals;
 
 import java.nio.ByteBuffer;
 
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.WritableMemory;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
diff --git a/src/test/java/org/apache/datasketches/memory/test/package-info.java b/src/test/java/org/apache/datasketches/memory/test/package-info.java
new file mode 100644
index 0000000..be97bb8
--- /dev/null
+++ b/src/test/java/org/apache/datasketches/memory/test/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.datasketches.memory.test;

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org


[datasketches-memory] 04/04: Interim 3, almost done.

Posted by le...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

leerho pushed a commit to branch noSplitPackage
in repository https://gitbox.apache.org/repos/asf/datasketches-memory.git

commit 9ac70eb09cac7e0c6cbe272c14f997bc0639caf0
Author: Lee Rhodes <le...@users.noreply.github.com>
AuthorDate: Mon May 10 22:23:03 2021 -0700

    Interim 3, almost done.
---
 .../java/org/apache/datasketches/memory/Ints.java  |  4 +-
 .../apache/datasketches/memory/JDK7Compatible.java | 44 ----------------------
 .../org/apache/datasketches/memory/UnsafeUtil.java |  8 ++--
 .../java/org/apache/datasketches/memory/Util.java  |  6 +--
 .../datasketches/memory/test/UnsafeUtilTest.java   | 17 ---------
 .../apache/datasketches/memory/test/Utf8Test.java  |  1 -
 .../apache/datasketches/memory/test/UtilTest.java  |  1 -
 .../memory/test/WritableBufferImplTest.java        |  4 +-
 .../memory/test/WritableMemoryImplTest.java        |  4 +-
 .../memory/test/WritableMemoryTest.java            |  9 ++---
 .../datasketches/memory/test/XxHash64Test.java     |  1 -
 11 files changed, 17 insertions(+), 82 deletions(-)

diff --git a/src/main/java/org/apache/datasketches/memory/Ints.java b/src/main/java/org/apache/datasketches/memory/Ints.java
index d463ea0..455f579 100644
--- a/src/main/java/org/apache/datasketches/memory/Ints.java
+++ b/src/main/java/org/apache/datasketches/memory/Ints.java
@@ -20,11 +20,11 @@
 package org.apache.datasketches.memory;
 
 /** Equivalent of Guava's Ints. */
-final class Ints {
+public final class Ints {
 
   private Ints() {}
 
-  static int checkedCast(final long v) {
+  public static int checkedCast(final long v) {
     final int result = (int) v;
     if (result != v) {
       throw new IllegalArgumentException("Out of range: " + v);
diff --git a/src/main/java/org/apache/datasketches/memory/JDK7Compatible.java b/src/main/java/org/apache/datasketches/memory/JDK7Compatible.java
deleted file mode 100644
index ee3ff0a..0000000
--- a/src/main/java/org/apache/datasketches/memory/JDK7Compatible.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.datasketches.memory;
-
-@SuppressWarnings({"restriction"})
-final class JDK7Compatible {
-
-  private JDK7Compatible() {}
-
-  static long getAndAddLong(final Object obj, final long address, final long increment) {
-    long retVal;
-    do {
-      retVal = UnsafeUtil.unsafe.getLongVolatile(obj, address);
-    } while (!UnsafeUtil.unsafe.compareAndSwapLong(obj, address, retVal, retVal + increment));
-
-    return retVal;
-  }
-
-  static long getAndSetLong(final Object obj, final long address, final long value) {
-    long retVal;
-    do {
-      retVal = UnsafeUtil.unsafe.getLongVolatile(obj, address);
-    } while (!UnsafeUtil.unsafe.compareAndSwapLong(obj, address, retVal, value));
-
-    return retVal;
-  }
-}
diff --git a/src/main/java/org/apache/datasketches/memory/UnsafeUtil.java b/src/main/java/org/apache/datasketches/memory/UnsafeUtil.java
index a307802..ffe2414 100644
--- a/src/main/java/org/apache/datasketches/memory/UnsafeUtil.java
+++ b/src/main/java/org/apache/datasketches/memory/UnsafeUtil.java
@@ -129,7 +129,7 @@ public final class UnsafeUtil {
    * @param jdkVer the java version string from System.getProperty("java.version").
    * @return first two number groups of the java version string.
    */
-  static int[] parseJavaVersion(final String jdkVer) {
+  public static int[] parseJavaVersion(final String jdkVer) {
     final int p0, p1;
     try {
       String[] parts = jdkVer.trim().split("[^0-9\\.]");//grab only number groups and "."
@@ -143,14 +143,14 @@ public final class UnsafeUtil {
     return new int[] {p0, p1};
   }
 
-  static void checkJavaVersion(final String jdkVer, final int p0, final int p1) {
+  public static void checkJavaVersion(final String jdkVer, final int p0, final int p1) {
     if ( (p0 < 1) || ((p0 == 1) && (p1 < 8)) || (p0 >= 9)  ) {
       throw new ExceptionInInitializerError(
           "Unsupported JDK Major Version, must be 1.8: " + jdkVer);
     }
   }
 
-  static long getFieldOffset(final Class<?> c, final String fieldName) {
+  public static long getFieldOffset(final Class<?> c, final String fieldName) {
     try {
       return unsafe.objectFieldOffset(c.getDeclaredField(fieldName));
     } catch (final NoSuchFieldException e) {
@@ -162,7 +162,7 @@ public final class UnsafeUtil {
    * Like {@link Unsafe#arrayBaseOffset(Class)}, but caches return values for common array types.
    * Useful because calling {@link Unsafe#arrayBaseOffset(Class)} directly incurs more overhead.
    */
-  static long getArrayBaseOffset(final Class<?> c) {
+  public static long getArrayBaseOffset(final Class<?> c) {
     // Ordering here is roughly in order of what we expect to be most popular.
     if (c == byte[].class) {
       return ARRAY_BYTE_BASE_OFFSET;
diff --git a/src/main/java/org/apache/datasketches/memory/Util.java b/src/main/java/org/apache/datasketches/memory/Util.java
index 61f1785..bfdc710 100644
--- a/src/main/java/org/apache/datasketches/memory/Util.java
+++ b/src/main/java/org/apache/datasketches/memory/Util.java
@@ -287,19 +287,19 @@ public final class Util {
     }
   } //End class RandomCodePoints
 
-  static final void zeroCheck(final long value, final String arg) {
+  public static final void zeroCheck(final long value, final String arg) {
     if (value <= 0) {
       throw new IllegalArgumentException("The argument " + arg + " may not be negative or zero.");
     }
   }
 
-  static final void negativeCheck(final long value, final String arg) {
+  public static final void negativeCheck(final long value, final String arg) {
     if (value < 0) {
       throw new IllegalArgumentException("The argument " + arg + " may not be negative.");
     }
   }
 
-  static final void nullCheck(final Object obj, final String arg) {
+  public static final void nullCheck(final Object obj, final String arg) {
     if (obj == null) {
       throw new IllegalArgumentException("The argument " + arg + " may not be null.");
     }
diff --git a/src/test/java/org/apache/datasketches/memory/test/UnsafeUtilTest.java b/src/test/java/org/apache/datasketches/memory/test/UnsafeUtilTest.java
index 615211a..4966449 100644
--- a/src/test/java/org/apache/datasketches/memory/test/UnsafeUtilTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/UnsafeUtilTest.java
@@ -27,7 +27,6 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.datasketches.memory.Ints;
-import org.apache.datasketches.memory.JDK7Compatible;
 import org.apache.datasketches.memory.UnsafeUtil;
 import org.testng.annotations.Test;
 
@@ -39,22 +38,6 @@ import org.testng.annotations.Test;
 public class UnsafeUtilTest {
   long testField = 1; //Do not remove & cannot be static. Used in reflection check.
 
-  @Test
-  public void checkJDK7methods() {
-    try {
-      final byte[] byteArr = new byte[16];
-      byteArr[0] = (byte) 1;
-      final long one = JDK7Compatible.getAndAddLong(byteArr, 16, 1L);
-      assertEquals(one, 1L);
-
-      final long two = JDK7Compatible.getAndSetLong(byteArr, 16, 3L);
-      assertEquals(two, 2L);
-      assertEquals(byteArr[0], 3);
-
-    } catch (Exception e) {
-      throw new RuntimeException("Failed");
-    }
-  }
 
   @Test
   public void checkJdkString() {
diff --git a/src/test/java/org/apache/datasketches/memory/test/Utf8Test.java b/src/test/java/org/apache/datasketches/memory/test/Utf8Test.java
index d7ad5c7..6c01235 100644
--- a/src/test/java/org/apache/datasketches/memory/test/Utf8Test.java
+++ b/src/test/java/org/apache/datasketches/memory/test/Utf8Test.java
@@ -34,7 +34,6 @@ import com.google.protobuf.ByteString;
 
 import org.apache.datasketches.memory.Memory;
 import org.apache.datasketches.memory.Utf8CodingException;
-import org.apache.datasketches.memory.Util;
 import org.apache.datasketches.memory.WritableMemory;
 import org.apache.datasketches.memory.Util.RandomCodePoints;
 
diff --git a/src/test/java/org/apache/datasketches/memory/test/UtilTest.java b/src/test/java/org/apache/datasketches/memory/test/UtilTest.java
index f665b07..a44d9ec 100644
--- a/src/test/java/org/apache/datasketches/memory/test/UtilTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/UtilTest.java
@@ -45,7 +45,6 @@ import java.nio.file.attribute.PosixFilePermissions;
 import org.apache.datasketches.memory.UnsafeUtil;
 import org.apache.datasketches.memory.Util;
 import org.apache.datasketches.memory.WritableMemory;
-import org.apache.datasketches.memory.Util.RandomCodePoints;
 import org.testng.annotations.Test;
 
 @SuppressWarnings("javadoc")
diff --git a/src/test/java/org/apache/datasketches/memory/test/WritableBufferImplTest.java b/src/test/java/org/apache/datasketches/memory/test/WritableBufferImplTest.java
index 7188be7..0899336 100644
--- a/src/test/java/org/apache/datasketches/memory/test/WritableBufferImplTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/WritableBufferImplTest.java
@@ -26,11 +26,11 @@ import static org.testng.Assert.assertTrue;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 
-import org.apache.datasketches.memory.BaseState;
 import org.apache.datasketches.memory.Buffer;
 import org.apache.datasketches.memory.Memory;
 import org.apache.datasketches.memory.ReadOnlyException;
 import org.apache.datasketches.memory.UnsafeUtil;
+import org.apache.datasketches.memory.Util;
 import org.apache.datasketches.memory.WritableBuffer;
 import org.apache.datasketches.memory.WritableHandle;
 import org.apache.datasketches.memory.WritableMemory;
@@ -583,7 +583,7 @@ public class WritableBufferImplTest {
   public void checkDuplicateNonNative() {
     WritableMemory wmem = WritableMemory.allocate(64);
     wmem.putShort(0, (short) 1);
-    Buffer buf = wmem.asWritableBuffer().duplicate(BaseState.nonNativeByteOrder);
+    Buffer buf = wmem.asWritableBuffer().duplicate(Util.nonNativeByteOrder);
     assertEquals(buf.getShort(0), 256);
   }
 
diff --git a/src/test/java/org/apache/datasketches/memory/test/WritableMemoryImplTest.java b/src/test/java/org/apache/datasketches/memory/test/WritableMemoryImplTest.java
index c08eb5c..561e7d2 100644
--- a/src/test/java/org/apache/datasketches/memory/test/WritableMemoryImplTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/WritableMemoryImplTest.java
@@ -27,11 +27,11 @@ import static org.testng.Assert.fail;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 
-import org.apache.datasketches.memory.BaseState;
 import org.apache.datasketches.memory.Buffer;
 import org.apache.datasketches.memory.Memory;
 import org.apache.datasketches.memory.ReadOnlyException;
 import org.apache.datasketches.memory.UnsafeUtil;
+import org.apache.datasketches.memory.Util;
 import org.apache.datasketches.memory.WritableBuffer;
 import org.apache.datasketches.memory.WritableHandle;
 import org.apache.datasketches.memory.WritableMemory;
@@ -708,7 +708,7 @@ public class WritableMemoryImplTest {
   public void checkAsBufferNonNative() {
     WritableMemory wmem = WritableMemory.allocate(64);
     wmem.putShort(0, (short) 1);
-    Buffer buf = wmem.asBuffer(BaseState.nonNativeByteOrder);
+    Buffer buf = wmem.asBuffer(Util.nonNativeByteOrder);
     assertEquals(buf.getShort(0), 256);
   }
 
diff --git a/src/test/java/org/apache/datasketches/memory/test/WritableMemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/WritableMemoryTest.java
index 906d216..63c3291 100644
--- a/src/test/java/org/apache/datasketches/memory/test/WritableMemoryTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/WritableMemoryTest.java
@@ -19,7 +19,6 @@
 
 package org.apache.datasketches.memory.test;
 
-import static org.apache.datasketches.memory.CompareAndCopy.UNSAFE_COPY_THRESHOLD_BYTES;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertTrue;
@@ -28,8 +27,8 @@ import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import java.util.concurrent.ThreadLocalRandom;
 
-import org.apache.datasketches.memory.BaseState;
 import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.Util;
 import org.apache.datasketches.memory.WritableBuffer;
 import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
@@ -143,7 +142,7 @@ public class WritableMemoryTest {
   public void checkLargeEquals() {
     // Size bigger than UNSAFE_COPY_MEMORY_THRESHOLD; size with "reminder" = 7, to test several
     // traits of the implementation
-    final int thresh = UNSAFE_COPY_THRESHOLD_BYTES;
+    final int thresh = Util.UNSAFE_COPY_THRESHOLD_BYTES;
     byte[] bytes1 = new byte[(thresh * 2) + 7];
     ThreadLocalRandom.current().nextBytes(bytes1);
     byte[] bytes2 = bytes1.clone();
@@ -162,11 +161,11 @@ public class WritableMemoryTest {
   @Test
   public void checkWrapWithBO() {
     WritableMemory wmem = WritableMemory.wrap(new byte[0], ByteOrder.BIG_ENDIAN);
-    boolean nativeBO = wmem.getTypeByteOrder() == BaseState.nativeByteOrder;
+    boolean nativeBO = wmem.getTypeByteOrder() == Util.nativeByteOrder;
     assertTrue(nativeBO); //remains true for ZeroSizeMemory
     println("" + nativeBO);
     wmem = WritableMemory.wrap(new byte[8], ByteOrder.BIG_ENDIAN);
-    nativeBO = wmem.getTypeByteOrder() == BaseState.nativeByteOrder;
+    nativeBO = wmem.getTypeByteOrder() == Util.nativeByteOrder;
     assertFalse(nativeBO);
     println("" + nativeBO);
   }
diff --git a/src/test/java/org/apache/datasketches/memory/test/XxHash64Test.java b/src/test/java/org/apache/datasketches/memory/test/XxHash64Test.java
index e88d410..f12f78a 100644
--- a/src/test/java/org/apache/datasketches/memory/test/XxHash64Test.java
+++ b/src/test/java/org/apache/datasketches/memory/test/XxHash64Test.java
@@ -33,7 +33,6 @@ import static org.testng.Assert.assertTrue;
 import java.util.Random;
 import java.util.concurrent.ThreadLocalRandom;
 
-import org.apache.datasketches.memory.BaseState;
 import org.apache.datasketches.memory.Memory;
 import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org


[datasketches-memory] 03/04: interim commit, not done.

Posted by le...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

leerho pushed a commit to branch noSplitPackage
in repository https://gitbox.apache.org/repos/asf/datasketches-memory.git

commit 5a23ec61beef8412f466a7a7f8993be9b146316f
Author: Lee Rhodes <le...@users.noreply.github.com>
AuthorDate: Mon May 10 22:05:01 2021 -0700

    interim commit, not done.
---
 .../memory/BaseWritableBufferImpl.java             |   2 +-
 .../memory/BaseWritableMemoryImpl.java             |   4 +-
 .../apache/datasketches/memory/CompareAndCopy.java |  13 +-
 .../memory/DirectWritableMemoryImpl.java           |   7 -
 .../java/org/apache/datasketches/memory/Util.java  |  12 ++
 .../memory/test/AllocateDirectMemoryTest.java      |  71 ++++---
 .../test/AllocateDirectWritableMapMemoryTest.java  |  58 +++---
 .../datasketches/memory/test/BaseStateTest.java    |  21 +-
 .../datasketches/memory/test/CopyMemoryTest.java   |   2 +-
 .../datasketches/memory/test/LeafImplTest.java     | 115 +++++++----
 .../datasketches/memory/test/MemoryTest.java       |  73 +++++--
 .../memory/test/MemoryWriteToTest.java             |  16 +-
 .../datasketches/memory/test/NioBitsTest.java      | 112 ++++++++--
 .../datasketches/memory/test/ReflectUtil.java      |  28 ++-
 .../datasketches/memory/test/SpecificLeafTest.java | 226 ++++++++++++++-------
 15 files changed, 509 insertions(+), 251 deletions(-)

diff --git a/src/main/java/org/apache/datasketches/memory/BaseWritableBufferImpl.java b/src/main/java/org/apache/datasketches/memory/BaseWritableBufferImpl.java
index 1894345..32e43ec 100644
--- a/src/main/java/org/apache/datasketches/memory/BaseWritableBufferImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/BaseWritableBufferImpl.java
@@ -395,7 +395,7 @@ abstract class BaseWritableBufferImpl extends WritableBuffer {
     long len = getEnd() - pos;
     checkInvariants(getStart(), pos + len, getEnd(), getCapacity());
     while (len > 0) {
-      final long chunk = Math.min(len, CompareAndCopy.UNSAFE_COPY_THRESHOLD_BYTES);
+      final long chunk = Math.min(len, Util.UNSAFE_COPY_THRESHOLD_BYTES);
       unsafe.setMemory(getUnsafeObject(), getCumulativeOffset(pos), chunk, value);
       pos += chunk;
       len -= chunk;
diff --git a/src/main/java/org/apache/datasketches/memory/BaseWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/BaseWritableMemoryImpl.java
index 820358f..184c1f3 100644
--- a/src/main/java/org/apache/datasketches/memory/BaseWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/BaseWritableMemoryImpl.java
@@ -450,7 +450,7 @@ abstract class BaseWritableMemoryImpl extends WritableMemory {
   public final void fill(long offsetBytes, long lengthBytes, final byte value) {
     checkValidAndBoundsForWrite(offsetBytes, lengthBytes);
     while (lengthBytes > 0) {
-      final long chunk = Math.min(lengthBytes, CompareAndCopy.UNSAFE_COPY_THRESHOLD_BYTES);
+      final long chunk = Math.min(lengthBytes, Util.UNSAFE_COPY_THRESHOLD_BYTES);
       unsafe.setMemory(getUnsafeObject(), getCumulativeOffset(offsetBytes), chunk, value);
       offsetBytes += chunk;
       lengthBytes -= chunk;
@@ -482,7 +482,7 @@ abstract class BaseWritableMemoryImpl extends WritableMemory {
     // or file-backed WritableByteChannel implementations with direct ByteBuffer argument could
     // be subject of the same safepoint problems as in Unsafe.copyMemory and Unsafe.setMemory.
     while (lengthBytes > 0) {
-      final int chunk = (int) Math.min(CompareAndCopy.UNSAFE_COPY_THRESHOLD_BYTES, lengthBytes);
+      final int chunk = (int) Math.min(Util.UNSAFE_COPY_THRESHOLD_BYTES, lengthBytes);
       final ByteBuffer bufToWrite = AccessByteBuffer.getDummyReadOnlyDirectByteBuffer(addr, chunk);
       writeFully(bufToWrite, out);
       addr += chunk;
diff --git a/src/main/java/org/apache/datasketches/memory/CompareAndCopy.java b/src/main/java/org/apache/datasketches/memory/CompareAndCopy.java
index f9bbc0f..75cbf0f 100644
--- a/src/main/java/org/apache/datasketches/memory/CompareAndCopy.java
+++ b/src/main/java/org/apache/datasketches/memory/CompareAndCopy.java
@@ -27,6 +27,7 @@ import static org.apache.datasketches.memory.UnsafeUtil.LONG_SHIFT;
 import static org.apache.datasketches.memory.UnsafeUtil.SHORT_SHIFT;
 import static org.apache.datasketches.memory.UnsafeUtil.checkBounds;
 import static org.apache.datasketches.memory.UnsafeUtil.unsafe;
+import static org.apache.datasketches.memory.Util.UNSAFE_COPY_THRESHOLD_BYTES;
 
 /**
  * @author Lee Rhodes
@@ -34,18 +35,6 @@ import static org.apache.datasketches.memory.UnsafeUtil.unsafe;
 @SuppressWarnings({"restriction"})
 final class CompareAndCopy {
 
-  /**
-   * Don't use sun.misc.Unsafe#copyMemory to copy blocks of memory larger than this
-   * threshold, because internally it doesn't have safepoint polls, that may cause long
-   * "Time To Safe Point" pauses in the application. This has been fixed in JDK 9 (see
-   * https://bugs.openjdk.java.net/browse/JDK-8149596 and
-   * https://bugs.openjdk.java.net/browse/JDK-8141491), but not in JDK 8, so the Memory library
-   * should keep having this boilerplate as long as it supports Java 8.
-   *
-   * <p>A reference to this can be found in java.nio.Bits.</p>
-   */
-  static final int UNSAFE_COPY_THRESHOLD_BYTES = 1024 * 1024;
-
   private CompareAndCopy() { }
 
   static int compare(
diff --git a/src/main/java/org/apache/datasketches/memory/DirectWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/DirectWritableMemoryImpl.java
index 886c7bb..7295e1c 100644
--- a/src/main/java/org/apache/datasketches/memory/DirectWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/DirectWritableMemoryImpl.java
@@ -94,11 +94,4 @@ final class DirectWritableMemoryImpl extends WritableMemoryImpl {
     return valid.get();
   }
   
-  @Override
-  void checkValid() {
-    if (!this.isValid()) {
-      throw new IllegalStateException("Memory not valid.");
-    }
-  }
-  
 }
diff --git a/src/main/java/org/apache/datasketches/memory/Util.java b/src/main/java/org/apache/datasketches/memory/Util.java
index 3866c59..61f1785 100644
--- a/src/main/java/org/apache/datasketches/memory/Util.java
+++ b/src/main/java/org/apache/datasketches/memory/Util.java
@@ -42,6 +42,18 @@ public final class Util {
   public static final ByteOrder nonNativeByteOrder = nativeByteOrder == ByteOrder.LITTLE_ENDIAN
       ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
 
+  /**
+   * Don't use sun.misc.Unsafe#copyMemory to copy blocks of memory larger than this
+   * threshold, because internally it doesn't have safepoint polls, that may cause long
+   * "Time To Safe Point" pauses in the application. This has been fixed in JDK 9 (see
+   * https://bugs.openjdk.java.net/browse/JDK-8149596 and
+   * https://bugs.openjdk.java.net/browse/JDK-8141491), but not in JDK 8, so the Memory library
+   * should keep having this boilerplate as long as it supports Java 8.
+   *
+   * <p>A reference to this can be found in java.nio.Bits.</p>
+   */
+  public static final int UNSAFE_COPY_THRESHOLD_BYTES = 1024 * 1024;
+  
   private Util() { }
 
   //Byte Order Related
diff --git a/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java
index 6a37003..583327e 100644
--- a/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java
@@ -39,6 +39,34 @@ import org.testng.annotations.Test;
 @SuppressWarnings("javadoc")
 public class AllocateDirectMemoryTest {
   
+  static final Method CHECK_VALID;
+  static final Method WRAP_DIRECT;
+  static final Method GET_CURRENT_DIRECT_MEMORY_ALLOCATIONS;
+  
+  static {
+    CHECK_VALID =
+        ReflectUtil.getMethod(ReflectUtil.BASE_STATE, "checkValid", (Class<?>[])null); //not static
+    WRAP_DIRECT =
+        ReflectUtil.getMethod(ReflectUtil.BASE_WRITABLE_MEMORY_IMPL, 
+            "wrapDirect", long.class, ByteOrder.class, MemoryRequestServer.class);  //static method
+    GET_CURRENT_DIRECT_MEMORY_ALLOCATIONS =
+        ReflectUtil.getMethod(ReflectUtil.BASE_STATE, 
+            "getCurrentDirectMemoryAllocations", (Class<?>[])null); //static method
+  }
+  
+  private static long getCurrentDirectMemoryAllocations() {
+    try {
+      return (long) GET_CURRENT_DIRECT_MEMORY_ALLOCATIONS.invoke(null);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static WritableDirectHandle wrapDirect(final long capacityBytes,
+      final ByteOrder byteOrder, final MemoryRequestServer memReqSvr) {
+    try {
+      return (WritableDirectHandle) WRAP_DIRECT.invoke(null, capacityBytes, byteOrder, memReqSvr);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
   @Test
   public void simpleAllocateDirect() {
     int longs = 32;
@@ -49,16 +77,23 @@ public class AllocateDirectMemoryTest {
         wMem.putLong(i << 3, i);
         assertEquals(wMem.getLong(i << 3), i);
       }
+      //inside the TWR block the memory should be valid
+      try {
+        CHECK_VALID.invoke(wMem);
+        //wMem.checkValid();
+        //OK
+      } catch (final Exception e) {
+        throw new RuntimeException(e);
+      }
     }
     //The TWR block has exited, so the memory should be invalid
     try {
-      final Class<?> wMemClass = wMem.getClass();
-      Method method = ReflectUtil.getMethod(wMemClass, "checkValid", (Class<?>[])null);
-      method.invoke(wMem, (Object[]) null);
+      CHECK_VALID.invoke(wMem);
       //wMem.checkValid();
       fail();
     } catch (final Exception e) {
       if (e instanceof IllegalStateException || e instanceof InvocationTargetException) { } //OK
+      //if IllegalAccessException or IllegalArgumentException NOT OK
       else { throw new RuntimeException(e); }
     }
   }
@@ -101,19 +136,12 @@ public class AllocateDirectMemoryTest {
 
   @Test
   public void checkNonNativeDirect() { //not allowed in public API
-    Class<?> bwMemImpl = ReflectUtil.getClass("org.apache.datasketches.memory.BaseWritableMemoryImpl");
-    Method wrapDirectMethod = 
-        ReflectUtil.getMethod(bwMemImpl, "wrapDirect", long.class, ByteOrder.class, MemoryRequestServer.class);
-    try (WritableDirectHandle h = (WritableDirectHandle) 
-        wrapDirectMethod.invoke(wrapDirectMethod, 8,  Util.nonNativeByteOrder, null)) {
+    try (WritableDirectHandle h = wrapDirect(8,  Util.nonNativeByteOrder, null)) { 
         //BaseWritableMemoryImpl.wrapDirect(8, Util.nonNativeByteOrder, null)) {
       WritableMemory wmem = h.get();
       wmem.putChar(0, (char) 1);
       assertEquals(wmem.getByte(1), (byte) 1);
-    } catch (final Exception e) {
-      if (e instanceof IllegalStateException || e instanceof InvocationTargetException) { } //OK
-      else { throw new RuntimeException(e); }
-    }
+    } 
   }
 
   @Test
@@ -126,20 +154,11 @@ public class AllocateDirectMemoryTest {
 
   @AfterClass
   public void checkDirectCounter() {
-    final Class<?> baseStateClass = ReflectUtil.getClass("org.apache.datasketches.memory.BaseState");
-    final Method currDirMemAllocMethod = 
-        ReflectUtil.getMethod(baseStateClass, "getCurrentDirectMemoryAllocations", (Class<?>[])null);
-    long count;
-    try {
-      count = (long) currDirMemAllocMethod.invoke(currDirMemAllocMethod, (Object[])null);
-      //final long count = BaseState.getCurrentDirectMemoryAllocations();
-      if (count != 0) {
-        println(""+count);
-        fail();
-      }
-    } catch (final Exception e) {
-      if (e instanceof IllegalStateException || e instanceof InvocationTargetException) { } //OK
-      else { throw new RuntimeException(e); }
+    long count = getCurrentDirectMemoryAllocations();
+    //final long count = BaseState.getCurrentDirectMemoryAllocations();
+    if (count != 0) {
+      println(""+count);
+      fail();
     }
   }
 
diff --git a/src/test/java/org/apache/datasketches/memory/test/AllocateDirectWritableMapMemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectWritableMapMemoryTest.java
index 25af375..657c1a2 100644
--- a/src/test/java/org/apache/datasketches/memory/test/AllocateDirectWritableMapMemoryTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectWritableMapMemoryTest.java
@@ -35,7 +35,6 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.UnsupportedEncodingException;
-import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.nio.ByteOrder;
 
@@ -54,6 +53,28 @@ import org.testng.annotations.Test;
 public class AllocateDirectWritableMapMemoryTest {
   private static final String LS = System.getProperty("line.separator");
 
+  static final Method IS_FILE_READ_ONLY;
+  static final Method GET_CURRENT_DIRECT_MEMORY_MAP_ALLOCATIONS;
+  
+  static {
+    IS_FILE_READ_ONLY =
+        ReflectUtil.getMethod(ReflectUtil.ALLOCATE_DIRECT_MAP, "isFileReadOnly", File.class);
+    GET_CURRENT_DIRECT_MEMORY_MAP_ALLOCATIONS =
+        ReflectUtil.getMethod(ReflectUtil.BASE_STATE, "getCurrentDirectMemoryMapAllocations", (Class<?>[])null); //static
+  }
+  
+  private static boolean isFileReadOnly(final File file) {
+    try {
+      return (boolean) IS_FILE_READ_ONLY.invoke(null, file);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+
+  private static long getCurrentDirectMemoryMapAllocations() {
+    try {
+      return (long) GET_CURRENT_DIRECT_MEMORY_MAP_ALLOCATIONS.invoke(null);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
   @BeforeClass
   public void setReadOnly() {
     UtilTest.setGettysburgAddressFileToReadOnly();
@@ -150,16 +171,8 @@ public class AllocateDirectWritableMapMemoryTest {
   @Test(expectedExceptions = ReadOnlyException.class)
   public void simpleMap2() throws IOException {
     File file = getResourceFile("GettysburgAddress.txt");
-    final Class<?> allocDirMapClass = ReflectUtil.getClass("org.apache.datasketches.memory.AllocateDirectMap");
-    final Method roMethod = ReflectUtil.getMethod(allocDirMapClass, "isFileReadOnly", file.getClass());
-    try {
-      assertTrue((boolean)roMethod.invoke(roMethod, file));
-      //assertTrue(isFileReadOnly(file));
-    } catch (final Exception e) {
-      if (e instanceof IllegalStateException || e instanceof InvocationTargetException) { } //OK
-      else { throw new RuntimeException(e); }
-    }
-    try (WritableMapHandle rh = WritableMemory.map(file)) {
+    assertTrue(isFileReadOnly(file));
+    try (WritableMapHandle rh = WritableMemory.map(file)) { //throws
       //
     }
   }
@@ -235,32 +248,13 @@ public class AllocateDirectWritableMapMemoryTest {
 
   @AfterClass
   public void checkDirectCounter() {
-    final Class<?> baseStateClass = ReflectUtil.getClass("org.apache.datasketches.memory.BaseState");
-    final Method currDirMemAllocMethod = 
-        ReflectUtil.getMethod(baseStateClass, "getCurrentDirectMemoryMapAllocations", (Class<?>[])null);
-    long count;
-    try {
-      count = (long) currDirMemAllocMethod.invoke(currDirMemAllocMethod, (Object[])null);
+    long count =  getCurrentDirectMemoryMapAllocations();
       //final long count = BaseState.getCurrentDirectMemoryMapAllocations();
       if (count != 0) {
         println(""+count);
         fail();
       }
-    } catch (final Exception e) {
-      if (e instanceof IllegalStateException || e instanceof InvocationTargetException) { } //OK
-      else { throw new RuntimeException(e); }
-    }
-  }
-  
-  
-//  @AfterClass
-//  public void checkMapCounter() {
-//    final long count = BaseState.getCurrentDirectMemoryMapAllocations();
-//    if (count != 0) {
-//      println(""+count);
-//      fail();
-//    }
-//  }
+    } 
 
   @Test
   public void printlnTest() {
diff --git a/src/test/java/org/apache/datasketches/memory/test/BaseStateTest.java b/src/test/java/org/apache/datasketches/memory/test/BaseStateTest.java
index 21045ff..83320a3 100644
--- a/src/test/java/org/apache/datasketches/memory/test/BaseStateTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/BaseStateTest.java
@@ -25,6 +25,7 @@ import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.fail;
 
+import java.lang.reflect.Method;
 import java.nio.ByteOrder;
 
 import org.apache.datasketches.memory.Buffer;
@@ -39,6 +40,19 @@ import org.testng.annotations.Test;
 @SuppressWarnings("javadoc")
 public class BaseStateTest {
 
+  static final Method GET_NATIVE_BASE_OFFSET;
+  
+  static {
+    GET_NATIVE_BASE_OFFSET =
+        ReflectUtil.getMethod(ReflectUtil.BASE_STATE, "getNativeBaseOffset", (Class<?>[])null);
+  }
+  
+  private static long getNativeBaseOffset(final Object owner) {
+    try {
+      return (long) GET_NATIVE_BASE_OFFSET.invoke(owner);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
   @Test
   public void checkPrimOffset() {
     int off = (int)Prim.BYTE.off();
@@ -89,11 +103,10 @@ public class BaseStateTest {
   }
 
   @Test
-  public void checkGetNativeBaseOffset_Heap() {
+  public void checkGetNativeBaseOffset_Heap() throws Exception {
     WritableMemory wmem = WritableMemory.allocate(8); //heap
-    final long offset;
-    
-    assertEquals(wmem.getNativeBaseOffset(), 0L);
+    final long offset = getNativeBaseOffset(wmem);
+    assertEquals(offset, 0L);
   }
 
   @Test
diff --git a/src/test/java/org/apache/datasketches/memory/test/CopyMemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/CopyMemoryTest.java
index b0552b3..a1f21e8 100644
--- a/src/test/java/org/apache/datasketches/memory/test/CopyMemoryTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/CopyMemoryTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.datasketches.memory.test;
 
-import static org.apache.datasketches.memory.CompareAndCopy.UNSAFE_COPY_THRESHOLD_BYTES;
+import static org.apache.datasketches.memory.Util.UNSAFE_COPY_THRESHOLD_BYTES;
 import static org.testng.Assert.assertEquals;
 
 import java.util.concurrent.ThreadLocalRandom;
diff --git a/src/test/java/org/apache/datasketches/memory/test/LeafImplTest.java b/src/test/java/org/apache/datasketches/memory/test/LeafImplTest.java
index ce69bb8..3daee5e 100644
--- a/src/test/java/org/apache/datasketches/memory/test/LeafImplTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/LeafImplTest.java
@@ -27,14 +27,15 @@ import static org.testng.Assert.assertTrue;
 
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.Method;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 
-import org.apache.datasketches.memory.BaseState;
 import org.apache.datasketches.memory.WritableBuffer;
 import org.apache.datasketches.memory.WritableDirectHandle;
 import org.apache.datasketches.memory.WritableMapHandle;
 import org.apache.datasketches.memory.WritableMemory;
+import org.apache.datasketches.memory.Util;
 import org.testng.annotations.Test;
 
 /**
@@ -45,7 +46,13 @@ public class LeafImplTest {
   static final ByteOrder LE = ByteOrder.LITTLE_ENDIAN;
   static final ByteOrder BE = ByteOrder.BIG_ENDIAN;
 
-
+  static final Method GET_UNSAFE_OBJECT;
+  
+  static {
+    GET_UNSAFE_OBJECT = ReflectUtil.getMethod(ReflectUtil.BASE_STATE, "getUnsafeObject", (Class<?>[])null); //not static
+  }
+  
+  
   @Test
   public void checkDirectLeafs() {
     long off = 0;
@@ -57,6 +64,12 @@ public class LeafImplTest {
     }
   }
 
+  private static Object getUnsafeObject(Object target) {
+    try {
+      return GET_UNSAFE_OBJECT.invoke(target);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
   private static void checkDirectImpl(WritableMemory mem, long off, long cap) {
     assertEquals(mem.writableRegion(off, cap, LE).getShort(0), 1);
     assertEquals(mem.writableRegion(off, cap, BE).getShort(0), 256);
@@ -64,10 +77,11 @@ public class LeafImplTest {
     assertEquals(mem.asWritableBuffer(BE).getShort(0), 256);
 
     assertTrue(mem.getByteBuffer() == null);
-    assertTrue(mem.getTypeByteOrder() == BaseState.nativeByteOrder);
+    assertTrue(mem.getTypeByteOrder() == Util.nativeByteOrder);
     assertTrue(mem.getMemoryRequestServer() != null);
     assertTrue(mem.isDirect());
-    assertTrue(mem.getUnsafeObject() == null);
+    assertTrue(getUnsafeObject(mem) == null);
+    //assertTrue(mem.getUnsafeObject() == null);
     assertTrue(mem.isValid() == true);
 
     WritableBuffer buf = mem.asWritableBuffer();
@@ -78,13 +92,14 @@ public class LeafImplTest {
     assertEquals(buf.writableDuplicate(BE).getShort(0), 256);
 
     assertTrue(buf.getByteBuffer() == null);
-    assertTrue(buf.getTypeByteOrder() == BaseState.nativeByteOrder);
+    assertTrue(buf.getTypeByteOrder() == Util.nativeByteOrder);
     assertTrue(buf.getMemoryRequestServer() != null);
     assertTrue(buf.isDirect());
-    assertTrue(buf.getUnsafeObject() == null);
+    assertTrue(getUnsafeObject(buf) == null);
+    //assertTrue(buf.getUnsafeObject() == null);
     assertTrue(buf.isValid() == true);
 
-    WritableMemory nnMem = mem.writableRegion(off, cap, BaseState.nonNativeByteOrder);
+    WritableMemory nnMem = mem.writableRegion(off, cap, Util.nonNativeByteOrder);
 
     assertEquals(nnMem.writableRegion(off, cap, LE).getShort(0), 1);
     assertEquals(nnMem.writableRegion(off, cap, BE).getShort(0), 256);
@@ -92,13 +107,14 @@ public class LeafImplTest {
     assertEquals(nnMem.asWritableBuffer(BE).getShort(0), 256);
 
     assertTrue(nnMem.getByteBuffer() == null);
-    assertTrue(nnMem.getTypeByteOrder() == BaseState.nonNativeByteOrder);
+    assertTrue(nnMem.getTypeByteOrder() == Util.nonNativeByteOrder);
     assertTrue(nnMem.getMemoryRequestServer() != null);
     assertTrue(nnMem.isDirect());
-    assertTrue(nnMem.getUnsafeObject() == null);
+    assertTrue(getUnsafeObject(nnMem) == null);
+    //assertTrue(nnMem.getUnsafeObject() == null);
     assertTrue(nnMem.isValid() == true);
 
-    WritableBuffer nnBuf = mem.asWritableBuffer(BaseState.nonNativeByteOrder);
+    WritableBuffer nnBuf = mem.asWritableBuffer(Util.nonNativeByteOrder);
 
     assertEquals(nnBuf.writableRegion(off, cap, LE).getShort(0), 1);
     assertEquals(nnBuf.writableRegion(off, cap, BE).getShort(0), 256);
@@ -106,10 +122,11 @@ public class LeafImplTest {
     assertEquals(nnBuf.writableDuplicate(BE).getShort(0), 256);
 
     assertTrue(nnBuf.getByteBuffer() == null);
-    assertTrue(nnBuf.getTypeByteOrder() == BaseState.nonNativeByteOrder);
+    assertTrue(nnBuf.getTypeByteOrder() == Util.nonNativeByteOrder);
     assertTrue(nnBuf.getMemoryRequestServer() != null);
     assertTrue(nnBuf.isDirect());
-    assertTrue(nnBuf.getUnsafeObject() == null);
+    assertTrue(getUnsafeObject(nnBuf) == null);
+    //assertTrue(nnBuf.getUnsafeObject() == null);
     assertTrue(nnBuf.isValid() == true);
   }
 
@@ -130,7 +147,7 @@ public class LeafImplTest {
     assertTrue(file.isFile());
     file.deleteOnExit();  //comment out if you want to examine the file.
 
-    try (WritableMapHandle wmh = WritableMemory.map(file, off, cap, BaseState.nativeByteOrder)) {
+    try (WritableMapHandle wmh = WritableMemory.map(file, off, cap, Util.nativeByteOrder)) {
       WritableMemory mem = wmh.get();
       mem.putShort(0, (short) 1);
       assertEquals(mem.getByte(0), (byte) 1);
@@ -145,10 +162,11 @@ public class LeafImplTest {
     assertEquals(mem.asWritableBuffer(BE).getShort(0), 256);
 
     assertTrue(mem.getByteBuffer() == null);
-    assertTrue(mem.getTypeByteOrder() == BaseState.nativeByteOrder);
+    assertTrue(mem.getTypeByteOrder() == Util.nativeByteOrder);
     assertTrue(mem.getMemoryRequestServer() == null);
     assertTrue(mem.isDirect());
-    assertTrue(mem.getUnsafeObject() == null);
+    assertTrue(getUnsafeObject(mem) == null);
+    //assertTrue(mem.getUnsafeObject() == null);
     assertTrue(mem.isValid() == true);
 
     WritableBuffer buf = mem.asWritableBuffer();
@@ -159,13 +177,14 @@ public class LeafImplTest {
     assertEquals(buf.writableDuplicate(BE).getShort(0), 256);
 
     assertTrue(buf.getByteBuffer() == null);
-    assertTrue(buf.getTypeByteOrder() == BaseState.nativeByteOrder);
+    assertTrue(buf.getTypeByteOrder() == Util.nativeByteOrder);
     assertTrue(buf.getMemoryRequestServer() == null);
     assertTrue(buf.isDirect());
-    assertTrue(buf.getUnsafeObject() == null);
+    assertTrue(getUnsafeObject(buf) == null);
+    //assertTrue(buf.getUnsafeObject() == null);
     assertTrue(buf.isValid() == true);
 
-    WritableMemory nnMem = mem.writableRegion(off, cap, BaseState.nonNativeByteOrder);
+    WritableMemory nnMem = mem.writableRegion(off, cap, Util.nonNativeByteOrder);
 
     assertEquals(nnMem.writableRegion(off, cap, LE).getShort(0), 1);
     assertEquals(nnMem.writableRegion(off, cap, BE).getShort(0), 256);
@@ -173,13 +192,14 @@ public class LeafImplTest {
     assertEquals(nnMem.asWritableBuffer(BE).getShort(0), 256);
 
     assertTrue(nnMem.getByteBuffer() == null);
-    assertTrue(nnMem.getTypeByteOrder() == BaseState.nonNativeByteOrder);
+    assertTrue(nnMem.getTypeByteOrder() == Util.nonNativeByteOrder);
     assertTrue(nnMem.getMemoryRequestServer() == null);
     assertTrue(nnMem.isDirect());
-    assertTrue(nnMem.getUnsafeObject() == null);
+    assertTrue(getUnsafeObject(nnMem) == null);
+    //assertTrue(nnMem.getUnsafeObject() == null);
     assertTrue(nnMem.isValid() == true);
 
-    WritableBuffer nnBuf = mem.asWritableBuffer(BaseState.nonNativeByteOrder);
+    WritableBuffer nnBuf = mem.asWritableBuffer(Util.nonNativeByteOrder);
 
     assertEquals(nnBuf.writableRegion(off, cap, LE).getShort(0), 1);
     assertEquals(nnBuf.writableRegion(off, cap, BE).getShort(0), 256);
@@ -187,10 +207,11 @@ public class LeafImplTest {
     assertEquals(nnBuf.writableDuplicate(BE).getShort(0), 256);
 
     assertTrue(nnBuf.getByteBuffer() == null);
-    assertTrue(nnBuf.getTypeByteOrder() == BaseState.nonNativeByteOrder);
+    assertTrue(nnBuf.getTypeByteOrder() == Util.nonNativeByteOrder);
     assertTrue(nnBuf.getMemoryRequestServer() == null);
     assertTrue(nnBuf.isDirect());
-    assertTrue(nnBuf.getUnsafeObject() == null);
+    assertTrue(getUnsafeObject(nnBuf) == null);
+    //assertTrue(nnBuf.getUnsafeObject() == null);
     assertTrue(nnBuf.isValid() == true);
   }
 
@@ -218,9 +239,10 @@ public class LeafImplTest {
     assertEquals(mem.asWritableBuffer(BE).getShort(0), 256);
 
     assertTrue(mem.getByteBuffer() != null);
-    assertTrue(mem.getTypeByteOrder() == BaseState.nativeByteOrder);
+    assertTrue(mem.getTypeByteOrder() == Util.nativeByteOrder);
     assertTrue(mem.getMemoryRequestServer() == null);
-    Object obj = mem.getUnsafeObject();
+    Object obj = getUnsafeObject(mem);
+    //Object obj = mem.getUnsafeObject();
     if (direct) {
       assertTrue(mem.isDirect());
       assertNull(obj);
@@ -238,9 +260,10 @@ public class LeafImplTest {
     assertEquals(buf.writableDuplicate(BE).getShort(0), 256);
 
     assertTrue(buf.getByteBuffer() != null);
-    assertTrue(buf.getTypeByteOrder() == BaseState.nativeByteOrder);
+    assertTrue(buf.getTypeByteOrder() == Util.nativeByteOrder);
     assertTrue(buf.getMemoryRequestServer() == null);
-    obj = buf.getUnsafeObject();
+    obj = getUnsafeObject(buf);
+    //obj = buf.getUnsafeObject();
     if (direct) {
       assertTrue(buf.isDirect());
       assertNull(obj);
@@ -250,7 +273,7 @@ public class LeafImplTest {
     }
     assertTrue(buf.isValid() == true);
 
-    WritableMemory nnMem = mem.writableRegion(off, cap, BaseState.nonNativeByteOrder);
+    WritableMemory nnMem = mem.writableRegion(off, cap, Util.nonNativeByteOrder);
 
     assertEquals(nnMem.writableRegion(off, cap, LE).getShort(0), 1);
     assertEquals(nnMem.writableRegion(off, cap, BE).getShort(0), 256);
@@ -258,9 +281,10 @@ public class LeafImplTest {
     assertEquals(nnMem.asWritableBuffer(BE).getShort(0), 256);
 
     assertTrue(nnMem.getByteBuffer() != null);
-    assertTrue(nnMem.getTypeByteOrder() == BaseState.nonNativeByteOrder);
+    assertTrue(nnMem.getTypeByteOrder() == Util.nonNativeByteOrder);
     assertTrue(nnMem.getMemoryRequestServer() == null);
-    obj = nnMem.getUnsafeObject();
+    obj = getUnsafeObject(nnMem);
+    //obj = nnMem.getUnsafeObject();
     if (direct) {
       assertTrue(nnMem.isDirect());
       assertNull(obj);
@@ -270,7 +294,7 @@ public class LeafImplTest {
     }
     assertTrue(nnMem.isValid() == true);
 
-    WritableBuffer nnBuf = mem.asWritableBuffer(BaseState.nonNativeByteOrder);
+    WritableBuffer nnBuf = mem.asWritableBuffer(Util.nonNativeByteOrder);
 
     assertEquals(nnBuf.writableRegion(off, cap, LE).getShort(0), 1);
     assertEquals(nnBuf.writableRegion(off, cap, BE).getShort(0), 256);
@@ -278,9 +302,10 @@ public class LeafImplTest {
     assertEquals(nnBuf.writableDuplicate(BE).getShort(0), 256);
 
     assertTrue(nnBuf.getByteBuffer() != null);
-    assertTrue(nnBuf.getTypeByteOrder() == BaseState.nonNativeByteOrder);
+    assertTrue(nnBuf.getTypeByteOrder() == Util.nonNativeByteOrder);
     assertTrue(nnBuf.getMemoryRequestServer() == null);
-    obj = nnBuf.getUnsafeObject();
+    obj = getUnsafeObject(nnBuf);
+    //obj = nnBuf.getUnsafeObject();
     if (direct) {
       assertTrue(nnBuf.isDirect());
       assertNull(obj);
@@ -307,10 +332,11 @@ public class LeafImplTest {
     assertEquals(mem.asWritableBuffer(BE).getShort(0), 256);
 
     assertTrue(mem.getByteBuffer() == null);
-    assertTrue(mem.getTypeByteOrder() == BaseState.nativeByteOrder);
+    assertTrue(mem.getTypeByteOrder() == Util.nativeByteOrder);
     assertTrue(mem.getMemoryRequestServer() == null);
     assertFalse(mem.isDirect());
-    assertTrue(mem.getUnsafeObject() != null);
+    assertTrue(getUnsafeObject(mem) != null);
+    //assertTrue(mem.getUnsafeObject() != null);
     assertTrue(mem.isValid() == true);
 
     WritableBuffer buf = mem.asWritableBuffer();
@@ -321,13 +347,14 @@ public class LeafImplTest {
     assertEquals(buf.writableDuplicate(BE).getShort(0), 256);
 
     assertTrue(buf.getByteBuffer() == null);
-    assertTrue(buf.getTypeByteOrder() == BaseState.nativeByteOrder);
+    assertTrue(buf.getTypeByteOrder() == Util.nativeByteOrder);
     assertTrue(buf.getMemoryRequestServer() == null);
     assertFalse(buf.isDirect());
-    assertTrue(buf.getUnsafeObject() != null);
+    assertTrue(getUnsafeObject(buf) != null);
+    //assertTrue(buf.getUnsafeObject() != null);
     assertTrue(buf.isValid() == true);
 
-    WritableMemory nnMem = mem.writableRegion(off, cap, BaseState.nonNativeByteOrder);
+    WritableMemory nnMem = mem.writableRegion(off, cap, Util.nonNativeByteOrder);
 
     assertEquals(nnMem.writableRegion(off, cap, LE).getShort(0), 1);
     assertEquals(nnMem.writableRegion(off, cap, BE).getShort(0), 256);
@@ -335,13 +362,14 @@ public class LeafImplTest {
     assertEquals(nnMem.asWritableBuffer(BE).getShort(0), 256);
 
     assertTrue(nnMem.getByteBuffer() == null);
-    assertTrue(nnMem.getTypeByteOrder() == BaseState.nonNativeByteOrder);
+    assertTrue(nnMem.getTypeByteOrder() == Util.nonNativeByteOrder);
     assertTrue(nnMem.getMemoryRequestServer() == null);
     assertFalse(nnMem.isDirect());
-    assertTrue(nnMem.getUnsafeObject() != null);
+    assertTrue(getUnsafeObject(nnMem) != null);
+    //assertTrue(nnMem.getUnsafeObject() != null);
     assertTrue(nnMem.isValid() == true);
 
-    WritableBuffer nnBuf = mem.asWritableBuffer(BaseState.nonNativeByteOrder);
+    WritableBuffer nnBuf = mem.asWritableBuffer(Util.nonNativeByteOrder);
 
     assertEquals(nnBuf.writableRegion(off, cap, LE).getShort(0), 1);
     assertEquals(nnBuf.writableRegion(off, cap, BE).getShort(0), 256);
@@ -349,10 +377,11 @@ public class LeafImplTest {
     assertEquals(nnBuf.writableDuplicate(BE).getShort(0), 256);
 
     assertTrue(nnBuf.getByteBuffer() == null);
-    assertTrue(nnBuf.getTypeByteOrder() == BaseState.nonNativeByteOrder);
+    assertTrue(nnBuf.getTypeByteOrder() == Util.nonNativeByteOrder);
     assertTrue(nnBuf.getMemoryRequestServer() == null);
     assertFalse(nnBuf.isDirect());
-    assertTrue(nnBuf.getUnsafeObject() != null);
+    assertTrue(getUnsafeObject(nnBuf) != null);
+    //assertTrue(nnBuf.getUnsafeObject() != null);
     assertTrue(nnBuf.isValid() == true);
   }
 
diff --git a/src/test/java/org/apache/datasketches/memory/test/MemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/MemoryTest.java
index 0022dfd..989ea10 100644
--- a/src/test/java/org/apache/datasketches/memory/test/MemoryTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/MemoryTest.java
@@ -31,13 +31,14 @@ import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
 
 import java.io.File;
+import java.lang.reflect.Method;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import java.util.List;
 
-import org.apache.datasketches.memory.BaseState;
 import org.apache.datasketches.memory.MapHandle;
 import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.Util;
 import org.apache.datasketches.memory.WritableDirectHandle;
 import org.apache.datasketches.memory.WritableHandle;
 import org.apache.datasketches.memory.WritableMemory;
@@ -50,6 +51,46 @@ import org.testng.collections.Lists;
 public class MemoryTest {
   private static final String LS = System.getProperty("line.separator");
 
+  static final Method GET_CURRENT_DIRECT_MEMORY_ALLOCATIONS;
+  static final Method GET_CURRENT_DIRECT_MEMORY_ALLOCATED;
+  static final Method GET_CURRENT_DIRECT_MEMORY_MAP_ALLOCATIONS;
+  static final Method GET_CURRENT_DIRECT_MEMORY_MAP_ALLOCATED;
+  
+  static {
+    GET_CURRENT_DIRECT_MEMORY_ALLOCATIONS = 
+        ReflectUtil.getMethod(ReflectUtil.BASE_STATE, "getCurrentDirectMemoryAllocations", (Class<?>[])null); //static
+    GET_CURRENT_DIRECT_MEMORY_ALLOCATED =
+        ReflectUtil.getMethod(ReflectUtil.BASE_STATE, "getCurrentDirectMemoryAllocated", (Class<?>[])null); //static
+    GET_CURRENT_DIRECT_MEMORY_MAP_ALLOCATIONS = 
+        ReflectUtil.getMethod(ReflectUtil.BASE_STATE, "getCurrentDirectMemoryMapAllocations", (Class<?>[])null); //static
+    GET_CURRENT_DIRECT_MEMORY_MAP_ALLOCATED =
+        ReflectUtil.getMethod(ReflectUtil.BASE_STATE, "getCurrentDirectMemoryMapAllocated", (Class<?>[])null); //static
+  }
+  
+  private static long getCurrentDirectMemoryAllocations() {
+    try {
+      return (long) GET_CURRENT_DIRECT_MEMORY_ALLOCATIONS.invoke(null);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static long getCurrentDirectMemoryAllocated() {
+    try {
+      return (long) GET_CURRENT_DIRECT_MEMORY_ALLOCATED.invoke(null);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static long getCurrentDirectMemoryMapAllocations() {
+    try {
+      return (long) GET_CURRENT_DIRECT_MEMORY_MAP_ALLOCATIONS.invoke(null);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static long getCurrentDirectMemoryMapAllocated() {
+    try {
+      return (long) GET_CURRENT_DIRECT_MEMORY_MAP_ALLOCATED.invoke(null);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
   @BeforeClass
   public void setReadOnly() {
     UtilTest.setGettysburgAddressFileToReadOnly();
@@ -212,7 +253,7 @@ public class MemoryTest {
     ByteBuffer bb = ByteBuffer.allocate(n * 8);
     bb.order(ByteOrder.BIG_ENDIAN);
     Memory mem = Memory.wrap(bb);
-    assertFalse(mem.getTypeByteOrder() == BaseState.nativeByteOrder);
+    assertFalse(mem.getTypeByteOrder() == Util.nativeByteOrder);
     assertEquals(mem.getTypeByteOrder(), ByteOrder.BIG_ENDIAN);
   }
 
@@ -268,7 +309,7 @@ public class MemoryTest {
     long[] arr = new long[n];
     for (int i = 0; i < n; i++) { arr[i] = i; }
     Memory mem = Memory.wrap(arr);
-    Memory reg = mem.region(n2 * 8, n2 * 8, BaseState.nonNativeByteOrder); //top half
+    Memory reg = mem.region(n2 * 8, n2 * 8, Util.nonNativeByteOrder); //top half
     for (int i = 0; i < n2; i++) {
       long v = Long.reverseBytes(reg.getLong(i * 8));
       long e = i + n2;
@@ -308,7 +349,7 @@ public class MemoryTest {
       //println("" + wmem.getLong(i * 8));
     }
     //println("");
-    WritableMemory reg = wmem.writableRegion(n2 * 8, n2 * 8, BaseState.nonNativeByteOrder);
+    WritableMemory reg = wmem.writableRegion(n2 * 8, n2 * 8, Util.nonNativeByteOrder);
     for (int i = 0; i < n2; i++) { reg.putLong(i * 8, i); }
     for (int i = 0; i < n; i++) {
       long v = wmem.getLong(i * 8);
@@ -389,17 +430,17 @@ public class MemoryTest {
     int bytes = 1024;
     WritableHandle wh1 = WritableMemory.allocateDirect(bytes);
     WritableHandle wh2 = WritableMemory.allocateDirect(bytes);
-    assertEquals(BaseState.getCurrentDirectMemoryAllocations(), 2L);
-    assertEquals(BaseState.getCurrentDirectMemoryAllocated(), 2 * bytes);
+    assertEquals(getCurrentDirectMemoryAllocations(), 2L);
+    assertEquals(getCurrentDirectMemoryAllocated(), 2 * bytes);
 
     wh1.close();
-    assertEquals(BaseState.getCurrentDirectMemoryAllocations(), 1L);
-    assertEquals(BaseState.getCurrentDirectMemoryAllocated(), bytes);
+    assertEquals(getCurrentDirectMemoryAllocations(), 1L);
+    assertEquals(getCurrentDirectMemoryAllocated(), bytes);
 
     wh2.close();
     wh2.close(); //check that it doesn't go negative.
-    assertEquals(BaseState.getCurrentDirectMemoryAllocations(), 0L);
-    assertEquals(BaseState.getCurrentDirectMemoryAllocated(), 0L);
+    assertEquals(getCurrentDirectMemoryAllocations(), 0L);
+    assertEquals(getCurrentDirectMemoryAllocated(), 0L);
   }
 
   @SuppressWarnings("resource")
@@ -411,17 +452,17 @@ public class MemoryTest {
     MapHandle mmh1 = Memory.map(file);
     MapHandle mmh2 = Memory.map(file);
 
-    assertEquals(BaseState.getCurrentDirectMemoryMapAllocations(), 2L);
-    assertEquals(BaseState.getCurrentDirectMemoryMapAllocated(), 2 * bytes);
+    assertEquals(getCurrentDirectMemoryMapAllocations(), 2L);
+    assertEquals(getCurrentDirectMemoryMapAllocated(), 2 * bytes);
 
     mmh1.close();
-    assertEquals(BaseState.getCurrentDirectMemoryMapAllocations(), 1L);
-    assertEquals(BaseState.getCurrentDirectMemoryMapAllocated(), bytes);
+    assertEquals(getCurrentDirectMemoryMapAllocations(), 1L);
+    assertEquals(getCurrentDirectMemoryMapAllocated(), bytes);
 
     mmh2.close();
     mmh2.close(); //check that it doesn't go negative.
-    assertEquals(BaseState.getCurrentDirectMemoryMapAllocations(), 0L);
-    assertEquals(BaseState.getCurrentDirectMemoryMapAllocated(), 0L);
+    assertEquals(getCurrentDirectMemoryMapAllocations(), 0L);
+    assertEquals(getCurrentDirectMemoryMapAllocated(), 0L);
   }
 
   @Test
diff --git a/src/test/java/org/apache/datasketches/memory/test/MemoryWriteToTest.java b/src/test/java/org/apache/datasketches/memory/test/MemoryWriteToTest.java
index fdfe3eb..09ce3f7 100644
--- a/src/test/java/org/apache/datasketches/memory/test/MemoryWriteToTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/MemoryWriteToTest.java
@@ -25,7 +25,7 @@ import java.nio.channels.Channels;
 import java.nio.channels.WritableByteChannel;
 import java.util.concurrent.ThreadLocalRandom;
 
-import org.apache.datasketches.memory.CompareAndCopy;
+import static org.apache.datasketches.memory.Util.UNSAFE_COPY_THRESHOLD_BYTES;
 import org.apache.datasketches.memory.Memory;
 import org.apache.datasketches.memory.WritableHandle;
 import org.apache.datasketches.memory.WritableMemory;
@@ -41,8 +41,8 @@ public class MemoryWriteToTest {
     testWriteTo(createRandomBytesMemory(7));
     testWriteTo(createRandomBytesMemory(1023));
     testWriteTo(createRandomBytesMemory(10_000));
-    testWriteTo(createRandomBytesMemory(CompareAndCopy.UNSAFE_COPY_THRESHOLD_BYTES * 5));
-    testWriteTo(createRandomBytesMemory((CompareAndCopy.UNSAFE_COPY_THRESHOLD_BYTES * 5) + 10));
+    testWriteTo(createRandomBytesMemory(UNSAFE_COPY_THRESHOLD_BYTES * 5));
+    testWriteTo(createRandomBytesMemory((UNSAFE_COPY_THRESHOLD_BYTES * 5) + 10));
   }
 
   @Test
@@ -51,21 +51,21 @@ public class MemoryWriteToTest {
     testWriteTo(createRandomIntsMemory(7));
     testWriteTo(createRandomIntsMemory(1023));
     testWriteTo(createRandomIntsMemory(10_000));
-    testWriteTo(createRandomIntsMemory(CompareAndCopy.UNSAFE_COPY_THRESHOLD_BYTES * 5));
-    testWriteTo(createRandomIntsMemory((CompareAndCopy.UNSAFE_COPY_THRESHOLD_BYTES * 5) + 10));
+    testWriteTo(createRandomIntsMemory(UNSAFE_COPY_THRESHOLD_BYTES * 5));
+    testWriteTo(createRandomIntsMemory((UNSAFE_COPY_THRESHOLD_BYTES * 5) + 10));
   }
 
   @Test
   public void testOffHeap() throws IOException {
     try (WritableHandle handle =
-        WritableMemory.allocateDirect((CompareAndCopy.UNSAFE_COPY_THRESHOLD_BYTES * 5) + 10)) {
+        WritableMemory.allocateDirect((UNSAFE_COPY_THRESHOLD_BYTES * 5) + 10)) {
       WritableMemory mem = handle.get();
       testWriteTo(mem.region(0, 0));
       testOffHeap(mem, 7);
       testOffHeap(mem, 1023);
       testOffHeap(mem, 10_000);
-      testOffHeap(mem, CompareAndCopy.UNSAFE_COPY_THRESHOLD_BYTES * 5);
-      testOffHeap(mem, (CompareAndCopy.UNSAFE_COPY_THRESHOLD_BYTES * 5) + 10);
+      testOffHeap(mem, UNSAFE_COPY_THRESHOLD_BYTES * 5);
+      testOffHeap(mem, (UNSAFE_COPY_THRESHOLD_BYTES * 5) + 10);
     }
   }
 
diff --git a/src/test/java/org/apache/datasketches/memory/test/NioBitsTest.java b/src/test/java/org/apache/datasketches/memory/test/NioBitsTest.java
index b5e56e1..f6b7710 100644
--- a/src/test/java/org/apache/datasketches/memory/test/NioBitsTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/NioBitsTest.java
@@ -19,9 +19,10 @@
 
 package org.apache.datasketches.memory.test;
 
+import java.lang.reflect.Method;
+
 import static org.testng.Assert.assertEquals;
 
-import org.apache.datasketches.memory.NioBits;
 import org.testng.annotations.Test;
 
 /**
@@ -30,36 +31,121 @@ import org.testng.annotations.Test;
 @SuppressWarnings("javadoc")
 public class NioBitsTest {
 
+  static final Method GET_MAX_DIRECT_BYTE_BUFFER_MEMORY;
+  static final Method IS_PAGE_ALIGHED;
+  static final Method PAGE_SIZE;
+  static final Method PAGE_COUNT;
+  static final Method GET_DIRECT_ALLOCATIONS_COUNT;
+  static final Method GET_RESERVED_MEMORY;
+  static final Method GET_TOTAL_CAPACITY;
+  static final Method RESERVE_MEMORY;
+  static final Method UNRESERVE_MEMORY;
+  
+  static {
+    GET_MAX_DIRECT_BYTE_BUFFER_MEMORY =
+        ReflectUtil.getMethod(ReflectUtil.NIO_BITS, "getMaxDirectByteBufferMemory", (Class<?>[])null); //static
+    IS_PAGE_ALIGHED =
+        ReflectUtil.getMethod(ReflectUtil.NIO_BITS, "isPageAligned", (Class<?>[])null); //static
+    PAGE_SIZE =
+        ReflectUtil.getMethod(ReflectUtil.NIO_BITS, "pageSize", (Class<?>[])null); //static
+    PAGE_COUNT =
+        ReflectUtil.getMethod(ReflectUtil.NIO_BITS, "pageCount", long.class); //static
+    GET_DIRECT_ALLOCATIONS_COUNT =
+        ReflectUtil.getMethod(ReflectUtil.NIO_BITS, "getDirectAllocationsCount", (Class<?>[])null); //static
+    GET_RESERVED_MEMORY =
+        ReflectUtil.getMethod(ReflectUtil.NIO_BITS, "getReservedMemory", (Class<?>[])null); //static
+    GET_TOTAL_CAPACITY =
+        ReflectUtil.getMethod(ReflectUtil.NIO_BITS, "getTotalCapacity", (Class<?>[])null); //static
+    RESERVE_MEMORY =
+        ReflectUtil.getMethod(ReflectUtil.NIO_BITS, "reserveMemory", long.class, long.class); //static
+    UNRESERVE_MEMORY =
+        ReflectUtil.getMethod(ReflectUtil.NIO_BITS, "unreserveMemory", long.class, long.class); //static
+  }
+
+  private static long getMaxDirectByteBufferMemory() {
+    try {
+      return (long) GET_MAX_DIRECT_BYTE_BUFFER_MEMORY.invoke(null);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static boolean isPageAligned() {
+    try {
+      return (boolean) IS_PAGE_ALIGHED.invoke(null);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static int pageSize() {
+    try {
+      return (int) PAGE_SIZE.invoke(null);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static int pageCount(final long bytes) {
+    try {
+      return (int) PAGE_COUNT.invoke(null, bytes);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static long getDirectAllocationsCount() {
+    try {
+      return (long) GET_DIRECT_ALLOCATIONS_COUNT.invoke(null);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static long getReservedMemory() {
+    try {
+      return (long) GET_RESERVED_MEMORY.invoke(null);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static long getTotalCapacity() {
+    try {
+      return (long) GET_TOTAL_CAPACITY.invoke(null);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static void reserveMemory(final long allocationSize, final long capacity) {
+    try {
+     RESERVE_MEMORY.invoke(null, allocationSize, capacity);
+    } catch (Exception e) { 
+      throw new RuntimeException(e); }
+  }
+  private static void unreserveMemory(final long allocationSize, final long capacity) {
+    try {
+      UNRESERVE_MEMORY.invoke(null, allocationSize, capacity);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
   @Test
   public void checkVMParams() {
-    println("Max Memory: " + NioBits.getMaxDirectByteBufferMemory());
-    println("Page Aligned: " + NioBits.isPageAligned());
-    println("Page Size: " + NioBits.pageSize());
+    println("Max Memory: " + getMaxDirectByteBufferMemory());
+    println("Page Aligned: " + isPageAligned());
+    println("Page Size: " + pageSize());
   }
-
+  
   @Test
   //testing this beyond 2GB may not work on JVMs < 8GB.
   //This must be checked manually
   public void checkGetAtomicFields() {
     long cap = 1024L + Integer.MAX_VALUE;
     printStats();
-    NioBits.reserveMemory(cap, cap);
+    reserveMemory(cap, cap);
     printStats();
-    NioBits.unreserveMemory(cap, cap);
+    unreserveMemory(cap, cap);
     printStats();
   }
 
   @Test
   public void checkPageCount() {
-    assertEquals(NioBits.pageCount(0), 0);
-    assertEquals(NioBits.pageCount(1), 1);
+    assertEquals(pageCount(0), 0);
+    assertEquals(pageCount(1), 1);
   }
 
   private static void printStats() {
-    long count = NioBits.getDirectAllocationsCount();
-    long resMem = NioBits.getReservedMemory();
-    long totCap = NioBits.getTotalCapacity();
-    long maxDBBmem = NioBits.getMaxDirectByteBufferMemory();
+    long count = getDirectAllocationsCount();
+    long resMem = getReservedMemory();
+    long totCap = getTotalCapacity();
+    long maxDBBmem = getMaxDirectByteBufferMemory();
     String s = String.format("%,10d\t%,15d\t%,15d\t%,15d", count, resMem, totCap, maxDBBmem);
     println(s);
   }
diff --git a/src/test/java/org/apache/datasketches/memory/test/ReflectUtil.java b/src/test/java/org/apache/datasketches/memory/test/ReflectUtil.java
index c60e113..fc6333c 100644
--- a/src/test/java/org/apache/datasketches/memory/test/ReflectUtil.java
+++ b/src/test/java/org/apache/datasketches/memory/test/ReflectUtil.java
@@ -23,6 +23,18 @@ import java.lang.reflect.*;
 
 public class ReflectUtil {
 
+  final static Class<?> BASE_STATE;
+  final static Class<?> BASE_WRITABLE_MEMORY_IMPL;
+  final static Class<?> ALLOCATE_DIRECT_MAP;
+  final static Class<?> NIO_BITS;
+  
+  static {
+    BASE_STATE = getClass("org.apache.datasketches.memory.BaseState");
+    BASE_WRITABLE_MEMORY_IMPL = getClass("org.apache.datasketches.memory.BaseWritableMemoryImpl");
+    ALLOCATE_DIRECT_MAP = getClass("org.apache.datasketches.memory.AllocateDirectMap");
+    NIO_BITS = getClass("org.apache.datasketches.memory.NioBits");
+  }
+  
   /**
    * Gets a Class reference to the given class loaded by the SystemClassLoader. 
    * This will work for private, package-private and abstract classes. 
@@ -122,22 +134,6 @@ public class ReflectUtil {
     }
   }
   
-//  /**
-//   * Invoke the given method along with its concreteOwnerClass and method argueents.
-//   * Any exception is returned to the caller.
-//   * @param method the given method
-//   * @param concreteOwnerInstance the concrete owning class instance
-//   * @param args the method arguments
-//   * @return the result of the invoked method.
-//   */
-//  public static Object invokeMethod(
-//      final Method method, 
-//      final Object concreteOwnerInstance, 
-//      Object... args) throws IllegalAccessException, InvocationTargetException, IllegalArgumentException {
-//      method.setAccessible(true);
-//      return method.invoke(concreteOwnerInstance, args);
-//  }
-  
 }
 
 
diff --git a/src/test/java/org/apache/datasketches/memory/test/SpecificLeafTest.java b/src/test/java/org/apache/datasketches/memory/test/SpecificLeafTest.java
index 893fc22..72cbd01 100644
--- a/src/test/java/org/apache/datasketches/memory/test/SpecificLeafTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/SpecificLeafTest.java
@@ -19,18 +19,17 @@
 
 package org.apache.datasketches.memory.test;
 
-import static org.apache.datasketches.memory.BaseState.DUPLICATE;
-import static org.apache.datasketches.memory.BaseState.REGION;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertTrue;
 
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.Method;
 import java.nio.ByteBuffer;
 
-import org.apache.datasketches.memory.BaseState;
 import org.apache.datasketches.memory.Buffer;
 import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.Util;
 import org.apache.datasketches.memory.WritableDirectHandle;
 import org.apache.datasketches.memory.WritableMapHandle;
 import org.apache.datasketches.memory.WritableMemory;
@@ -42,28 +41,115 @@ import org.testng.annotations.Test;
 @SuppressWarnings("javadoc")
 public class SpecificLeafTest {
 
+  static final Method IS_READ_ONLY_TYPE;
+  static final Method IS_BUFFER_TYPE;
+  static final Method IS_DUPLICATE_TYPE;
+  static final Method IS_REGION_TYPE;
+  static final Method IS_NON_NATIVE_TYPE;
+  static final Method IS_HEAP_TYPE;
+  static final Method IS_DIRECT_TYPE;
+  static final Method IS_MAP_TYPE;
+  static final Method IS_BB_TYPE;
+  
+  static {
+    IS_READ_ONLY_TYPE =
+        ReflectUtil.getMethod(ReflectUtil.BASE_STATE, "isReadOnlyType", (Class<?>[])null); //not static
+    IS_BUFFER_TYPE =
+        ReflectUtil.getMethod(ReflectUtil.BASE_STATE, "isBufferType", (Class<?>[])null); //not static
+    IS_DUPLICATE_TYPE =
+        ReflectUtil.getMethod(ReflectUtil.BASE_STATE, "isDuplicateType", (Class<?>[])null); //not static
+    IS_REGION_TYPE =
+        ReflectUtil.getMethod(ReflectUtil.BASE_STATE, "isRegionType", (Class<?>[])null); //not static
+    IS_NON_NATIVE_TYPE =
+        ReflectUtil.getMethod(ReflectUtil.BASE_STATE, "isNonNativeType", (Class<?>[])null); //not static
+    IS_HEAP_TYPE =
+        ReflectUtil.getMethod(ReflectUtil.BASE_STATE, "isHeapType", (Class<?>[])null); //not static
+    IS_DIRECT_TYPE =
+        ReflectUtil.getMethod(ReflectUtil.BASE_STATE, "isDirectType", (Class<?>[])null); //not static
+    IS_MAP_TYPE =
+        ReflectUtil.getMethod(ReflectUtil.BASE_STATE, "isMapType", (Class<?>[])null); //not static
+    IS_BB_TYPE =
+        ReflectUtil.getMethod(ReflectUtil.BASE_STATE, "isBBType", (Class<?>[])null); //not static
+  }
+  
+  private static boolean isReadOnlyType(final Object owner) {
+    try {
+      return (boolean) IS_READ_ONLY_TYPE.invoke(owner);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static boolean isBufferType(final Object owner) {
+    try {
+      return (boolean) IS_BUFFER_TYPE.invoke(owner);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static boolean isDuplicateType(final Object owner) {
+    try {
+      return (boolean) IS_DUPLICATE_TYPE.invoke(owner);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static boolean isRegionType(final Object owner) {
+    try {
+      return (boolean) IS_REGION_TYPE.invoke(owner);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static boolean isNonNativeType(final Object owner) {
+    try {
+      return (boolean) IS_NON_NATIVE_TYPE.invoke(owner);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static boolean isHeapType(final Object owner) {
+    try {
+      return (boolean) IS_HEAP_TYPE.invoke(owner);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static boolean isDirectType(final Object owner) {
+    try {
+      return (boolean) IS_DIRECT_TYPE.invoke(owner);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static boolean isMapType(final Object owner) {
+    try {
+      return (boolean) IS_MAP_TYPE.invoke(owner);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  private static boolean isBBType(final Object owner) {
+    try {
+      return (boolean) IS_BB_TYPE.invoke(owner);
+    } catch (Exception e) { throw new RuntimeException(e); }
+  }
+  
+  
+  
   @Test
   public void checkByteBufferLeafs() {
     int bytes = 128;
     ByteBuffer bb = ByteBuffer.allocate(bytes);
-    bb.order(BaseState.nativeByteOrder);
+    bb.order(Util.nativeByteOrder);
 
-    Memory mem = Memory.wrap(bb).region(0, bytes, BaseState.nativeByteOrder);
-    assertTrue(mem.isBBType());
+    Memory mem = Memory.wrap(bb).region(0, bytes, Util.nativeByteOrder);
+    assertTrue(isBBType(mem));
     assertTrue(mem.isReadOnly());
     checkCrossLeafTypeIds(mem);
-    Buffer buf = mem.asBuffer().region(0, bytes, BaseState.nativeByteOrder);
+    Buffer buf = mem.asBuffer().region(0, bytes, Util.nativeByteOrder);
 
-    bb.order(BaseState.nonNativeByteOrder);
-    Memory mem2 = Memory.wrap(bb).region(0, bytes, BaseState.nonNativeByteOrder);
-    Buffer buf2 = mem2.asBuffer().region(0, bytes, BaseState.nonNativeByteOrder);
+    bb.order(Util.nonNativeByteOrder);
+    Memory mem2 = Memory.wrap(bb).region(0, bytes, Util.nonNativeByteOrder);
+    Buffer buf2 = mem2.asBuffer().region(0, bytes, Util.nonNativeByteOrder);
     Buffer buf3 = buf2.duplicate();
 
-    assertTrue((mem.getTypeId() & REGION) > 0);
-    assertTrue((mem2.getTypeId() & REGION) > 0);
-    assertTrue((buf.getTypeId() & REGION) > 0);
-    assertTrue((buf2.getTypeId() & REGION) > 0);
-    assertTrue((buf3.getTypeId() & DUPLICATE) > 0);
+    assertTrue(isRegionType(mem));
+    assertTrue(isRegionType(mem2));
+    assertTrue(isRegionType(buf));
+    assertTrue(isRegionType(buf2));
+    assertTrue(isDuplicateType(buf3));
   }
 
   @Test
@@ -71,24 +157,24 @@ public class SpecificLeafTest {
     int bytes = 128;
     try (WritableDirectHandle h = WritableMemory.allocateDirect(bytes)) {
       WritableMemory wmem = h.get(); //native mem
-      assertTrue(wmem.isDirectType());
+      assertTrue(isDirectType(wmem));
       assertFalse(wmem.isReadOnly());
       checkCrossLeafTypeIds(wmem);
-      WritableMemory nnwmem = wmem.writableRegion(0, bytes, BaseState.nonNativeByteOrder);
+      WritableMemory nnwmem = wmem.writableRegion(0, bytes, Util.nonNativeByteOrder);
 
-      Memory mem = wmem.region(0, bytes, BaseState.nativeByteOrder);
-      Buffer buf = mem.asBuffer().region(0, bytes, BaseState.nativeByteOrder);
+      Memory mem = wmem.region(0, bytes, Util.nativeByteOrder);
+      Buffer buf = mem.asBuffer().region(0, bytes, Util.nativeByteOrder);
 
 
-      Memory mem2 = nnwmem.region(0, bytes, BaseState.nonNativeByteOrder);
-      Buffer buf2 = mem2.asBuffer().region(0, bytes, BaseState.nonNativeByteOrder);
+      Memory mem2 = nnwmem.region(0, bytes, Util.nonNativeByteOrder);
+      Buffer buf2 = mem2.asBuffer().region(0, bytes, Util.nonNativeByteOrder);
       Buffer buf3 = buf2.duplicate();
 
-      assertTrue((mem.getTypeId() & REGION) > 0);
-      assertTrue((mem2.getTypeId() & REGION) > 0);
-      assertTrue((buf.getTypeId() & REGION) > 0);
-      assertTrue((buf2.getTypeId() & REGION) > 0);
-      assertTrue((buf3.getTypeId() & DUPLICATE) > 0);
+      assertTrue(isRegionType(mem));
+      assertTrue(isRegionType(mem2));
+      assertTrue(isRegionType(buf));
+      assertTrue(isRegionType(buf2));
+      assertTrue(isDuplicateType(buf3));
     }
   }
 
@@ -109,27 +195,27 @@ public class SpecificLeafTest {
 
     final long bytes = 128;
 
-    try (WritableMapHandle h = WritableMemory.map(file, 0L, bytes, BaseState.nativeByteOrder)) {
+    try (WritableMapHandle h = WritableMemory.map(file, 0L, bytes, Util.nativeByteOrder)) {
       WritableMemory mem = h.get(); //native mem
-      assertTrue(mem.isMapType());
+      assertTrue(isMapType(mem));
       assertFalse(mem.isReadOnly());
       checkCrossLeafTypeIds(mem);
-      Memory nnreg = mem.region(0, bytes, BaseState.nonNativeByteOrder);
+      Memory nnreg = mem.region(0, bytes, Util.nonNativeByteOrder);
 
-      Memory reg = mem.region(0, bytes, BaseState.nativeByteOrder);
-      Buffer buf = reg.asBuffer().region(0, bytes, BaseState.nativeByteOrder);
+      Memory reg = mem.region(0, bytes, Util.nativeByteOrder);
+      Buffer buf = reg.asBuffer().region(0, bytes, Util.nativeByteOrder);
       Buffer buf4 = buf.duplicate();
 
-      Memory reg2 = nnreg.region(0, bytes, BaseState.nonNativeByteOrder);
-      Buffer buf2 = reg2.asBuffer().region(0, bytes, BaseState.nonNativeByteOrder);
+      Memory reg2 = nnreg.region(0, bytes, Util.nonNativeByteOrder);
+      Buffer buf2 = reg2.asBuffer().region(0, bytes, Util.nonNativeByteOrder);
       Buffer buf3 = buf2.duplicate();
 
-      assertTrue((reg.getTypeId() & REGION) > 0);
-      assertTrue((reg2.getTypeId() & REGION) > 0);
-      assertTrue((buf.getTypeId() & REGION) > 0);
-      assertTrue((buf2.getTypeId() & REGION) > 0);
-      assertTrue((buf3.getTypeId() & DUPLICATE) > 0);
-      assertTrue((buf4.getTypeId() & DUPLICATE) > 0);
+      assertTrue(isRegionType(reg));
+      assertTrue(isRegionType(reg2));
+      assertTrue(isRegionType(buf));
+      assertTrue(isRegionType(buf2));
+      assertTrue(isDuplicateType(buf3));
+      assertTrue(isDuplicateType(buf4));
     }
   }
 
@@ -137,56 +223,56 @@ public class SpecificLeafTest {
   public void checkHeapLeafs() {
     int bytes = 128;
     Memory mem = Memory.wrap(new byte[bytes]);
-    assertTrue(mem.isHeapType());
-    assertTrue(mem.isReadOnlyType());
+    assertTrue(isHeapType(mem));
+    assertTrue(isReadOnlyType(mem));
     checkCrossLeafTypeIds(mem);
-    Memory nnreg = mem.region(0, bytes, BaseState.nonNativeByteOrder);
+    Memory nnreg = mem.region(0, bytes, Util.nonNativeByteOrder);
 
-    Memory reg = mem.region(0, bytes, BaseState.nativeByteOrder);
-    Buffer buf = reg.asBuffer().region(0, bytes, BaseState.nativeByteOrder);
+    Memory reg = mem.region(0, bytes, Util.nativeByteOrder);
+    Buffer buf = reg.asBuffer().region(0, bytes, Util.nativeByteOrder);
     Buffer buf4 = buf.duplicate();
 
-    Memory reg2 = nnreg.region(0, bytes, BaseState.nonNativeByteOrder);
-    Buffer buf2 = reg2.asBuffer().region(0, bytes, BaseState.nonNativeByteOrder);
+    Memory reg2 = nnreg.region(0, bytes, Util.nonNativeByteOrder);
+    Buffer buf2 = reg2.asBuffer().region(0, bytes, Util.nonNativeByteOrder);
     Buffer buf3 = buf2.duplicate();
 
-    assertFalse((mem.getTypeId() & REGION) > 0);
-    assertTrue((reg2.getTypeId() & REGION) > 0);
-    assertTrue((buf.getTypeId() & REGION) > 0);
-    assertTrue((buf2.getTypeId() & REGION) > 0);
-    assertTrue((buf3.getTypeId() & DUPLICATE) > 0);
-    assertTrue((buf4.getTypeId() & DUPLICATE) > 0);
+    assertFalse(isRegionType(mem));
+    assertTrue(isRegionType(reg2));
+    assertTrue(isRegionType(buf));
+    assertTrue(isRegionType(buf2));
+    assertTrue(isDuplicateType(buf3));
+    assertTrue(isDuplicateType(buf4));
   }
 
   private static void checkCrossLeafTypeIds(Memory mem) {
     Memory reg1 = mem.region(0, mem.getCapacity());
-    assertTrue(reg1.isRegionType());
+    assertTrue(isRegionType(reg1));
 
     Buffer buf1 = reg1.asBuffer();
-    assertTrue(buf1.isRegionType());
-    assertTrue(buf1.isBufferType());
+    assertTrue(isRegionType(buf1));
+    assertTrue(isBufferType(buf1));
 
     Buffer buf2 = buf1.duplicate();
-    assertTrue(buf2.isRegionType());
-    assertTrue(buf2.isBufferType());
-    assertTrue(buf2.isDuplicateType());
+    assertTrue(isRegionType(buf2));
+    assertTrue(isBufferType(buf2));
+    assertTrue(isDuplicateType(buf2));
 
     Memory mem2 = buf1.asMemory();
-    assertTrue(mem2.isRegionType());
-    assertFalse(mem2.isBufferType());
-    assertFalse(mem2.isDuplicateType());
+    assertTrue(isRegionType(mem2));
+    assertFalse(isBufferType(mem2));
+    assertFalse(isDuplicateType(mem2));
 
-    Buffer buf3 = buf1.duplicate(BaseState.nonNativeByteOrder);
-    assertTrue(buf3.isRegionType());
-    assertTrue(buf3.isBufferType());
-    assertTrue(buf3.isDuplicateType());
-    assertTrue(buf3.isNonNativeType());
+    Buffer buf3 = buf1.duplicate(Util.nonNativeByteOrder);
+    assertTrue(isRegionType(buf3));
+    assertTrue(isBufferType(buf3));
+    assertTrue(isDuplicateType(buf3));
+    assertTrue(isNonNativeType(buf3));
 
     Memory mem3 = buf3.asMemory();
-    assertTrue(mem3.isRegionType());
-    assertFalse(mem3.isBufferType());
-    assertFalse(mem3.isDuplicateType());
-    assertFalse(mem3.isNonNativeType());
+    assertTrue(isRegionType(mem3));
+    assertFalse(isBufferType(mem3));
+    assertFalse(isDuplicateType(mem3));
+    assertFalse(isNonNativeType(mem3));
   }
 
 }

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org