Increase test coverage
diff --git a/src/main/java/com/yahoo/sketches/MatrixFamily.java b/src/main/java/com/yahoo/sketches/MatrixFamily.java
index 83264f2..19a372e 100644
--- a/src/main/java/com/yahoo/sketches/MatrixFamily.java
+++ b/src/main/java/com/yahoo/sketches/MatrixFamily.java
@@ -26,7 +26,7 @@
    * The Frequent Directions sketch is used for approximate Singular Value Decomposition (SVD) of a
    * matrix.
    */
-  MATRIX(128, "FrequentDirections", 2, 3),
+  MATRIX(128, "Matrix", 2, 3),
   FREQUENTDIRECTIONS(129, "FrequentDirections", 2, 4);
 
 
diff --git a/src/main/java/com/yahoo/sketches/matrix/MatrixBuilder.java b/src/main/java/com/yahoo/sketches/matrix/MatrixBuilder.java
index 22746d6..7aa467d 100644
--- a/src/main/java/com/yahoo/sketches/matrix/MatrixBuilder.java
+++ b/src/main/java/com/yahoo/sketches/matrix/MatrixBuilder.java
@@ -32,7 +32,7 @@
 
   private Algo type_ = Algo.OJALGO; // default type
 
-  MatrixBuilder() {}
+  public MatrixBuilder() {}
 
   /**
    * Sets the underlying type of object to use with any Matrix objects created.
@@ -45,10 +45,10 @@
   }
 
   /**
-   * Returns a value from an enum definig the type of object backing any Matrix objects created.
+   * Returns a value from an enum defining the type of object backing any Matrix objects created.
    * @return An item from the Algo enum.
    */
-  public Algo getFamily() {
+  public Algo getBackingType() {
     return type_;
   }
 
diff --git a/src/main/java/com/yahoo/sketches/matrix/MatrixPreambleUtil.java b/src/main/java/com/yahoo/sketches/matrix/MatrixPreambleUtil.java
index 4ad39d8..6690f7e 100644
--- a/src/main/java/com/yahoo/sketches/matrix/MatrixPreambleUtil.java
+++ b/src/main/java/com/yahoo/sketches/matrix/MatrixPreambleUtil.java
@@ -64,20 +64,6 @@
   // Other constants
   static final int SER_VER               = 1;
 
-
-
-  /**
-   * Returns a human readable string summary of the preamble state of the given byte array.
-   * Used primarily in testing.
-   *
-   * @param byteArr the given byte array.
-   * @return the summary preamble string.
-   */
-  public static String preambleToString(final byte[] byteArr) {
-    final Memory mem = Memory.wrap(byteArr);
-    return preambleToString(mem);
-  }
-
   /**
    * Returns a human readable string summary of the preamble state of the given Memory.
    * Note: other than making sure that the given Memory size is large
@@ -87,14 +73,10 @@
    * @param mem the given Memory.
    * @return the summary preamble string.
    */
-  private static String preambleToString(final Memory mem) {
+  public static String preambleToString(final Memory mem) {
 
     final int preLongs = getAndCheckPreLongs(mem);  // make sure we can get the assumed preamble
-    final MatrixFamily family = MatrixFamily.idToFamily(mem.getByte(FAMILY_BYTE));
-    if (family != MatrixFamily.MATRIX) {
-      throw new IllegalArgumentException("Invalid family in memory region. Expected Matrix; "
-              + "Found: " + family.getFamilyName());
-    }
+    final MatrixFamily family = MatrixFamily.idToFamily(extractFamilyID(mem));
 
     final int serVer = extractSerVer(mem);
     if (serVer != SER_VER) {
diff --git a/src/test/java/com/yahoo/sketches/matrix/MatrixBuilderTest.java b/src/test/java/com/yahoo/sketches/matrix/MatrixBuilderTest.java
new file mode 100644
index 0000000..96793bb
--- /dev/null
+++ b/src/test/java/com/yahoo/sketches/matrix/MatrixBuilderTest.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2017, Yahoo! Inc.
+ * Licensed under the terms of the Apache License 2.0. See LICENSE file at the project root
+ * for terms.
+ */
+
+package com.yahoo.sketches.matrix;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+
+import org.testng.annotations.Test;
+
+public class MatrixBuilderTest {
+  @Test
+  public void checkBuild() {
+    final MatrixBuilder builder = new MatrixBuilder();
+    assertEquals(builder.getBackingType(), MatrixBuilder.Algo.OJALGO); // default type
+
+    Matrix m = builder.build(128, 512);
+    assertNotNull(m);
+  }
+
+  @Test
+  public void checkSetType() {
+    final MatrixBuilder builder = new MatrixBuilder();
+    MatrixBuilder.Algo type = builder.getBackingType();
+    assertEquals(type, MatrixBuilder.Algo.OJALGO); // default type
+    assertEquals(type.getId(), MatrixBuilder.Algo.OJALGO.getId());
+    assertEquals(type.getName(), MatrixBuilder.Algo.OJALGO.getName());
+
+    builder.setType(MatrixBuilder.Algo.NATIVE);
+    assertEquals(builder.getBackingType(), MatrixBuilder.Algo.NATIVE);
+    assertEquals(builder.getBackingType().toString(), "native");
+
+    try {
+      builder.build(10, 20);
+    } catch (final IllegalArgumentException e) {
+      // expected until native is implemented
+    }
+  }
+
+}
diff --git a/src/test/java/com/yahoo/sketches/matrix/MatrixTest.java b/src/test/java/com/yahoo/sketches/matrix/MatrixTest.java
index 3db3442..131450e 100644
--- a/src/test/java/com/yahoo/sketches/matrix/MatrixTest.java
+++ b/src/test/java/com/yahoo/sketches/matrix/MatrixTest.java
@@ -7,6 +7,7 @@
 import static org.testng.Assert.fail;
 
 import com.yahoo.memory.Memory;
+import com.yahoo.memory.WritableMemory;
 import com.yahoo.sketches.MatrixFamily;
 import org.testng.annotations.Test;
 
@@ -17,6 +18,7 @@
     final Matrix m = Matrix.builder().setType(MatrixBuilder.Algo.OJALGO).build(3, 3);
     final byte[] bytes = m.toByteArray();
     final Memory mem = Memory.wrap(bytes);
+    println(MatrixPreambleUtil.preambleToString(mem));
 
     Matrix tgt = Matrix.heapify(mem, MatrixBuilder.Algo.OJALGO);
     assertTrue(tgt instanceof MatrixImplOjAlgo);
@@ -79,6 +81,65 @@
     assertEquals(m.getCompactSizeBytes(2, 2), expectedSize);
   }
 
+  @Test
+  public void invalidSerVer() {
+    final int nRows = 50;
+    final int nCols = 75;
+    final MatrixBuilder mb = new MatrixBuilder();
+    final Matrix m = mb.build(nRows, nCols);
+    final byte[] sketchBytes = m.toByteArray();
+    final WritableMemory mem = WritableMemory.wrap(sketchBytes);
+    MatrixPreambleUtil.insertSerVer(mem.getArray(), mem.getCumulativeOffset(0L), 0);
+
+    try {
+      MatrixPreambleUtil.preambleToString(mem);
+      fail();
+    } catch (final IllegalArgumentException e) {
+      // expected
+    }
+  }
+
+  @Test
+  public void invalidFamily() {
+    final int nRows = 3;
+    final int nCols = 3;
+    final MatrixBuilder mb = new MatrixBuilder();
+    final Matrix m = mb.build(nRows, nCols);
+    final byte[] sketchBytes = m.toByteArray();
+    final WritableMemory mem = WritableMemory.wrap(sketchBytes);
+    MatrixPreambleUtil.insertFamilyID(mem.getArray(), mem.getCumulativeOffset(0L), 0);
+
+    try {
+      MatrixPreambleUtil.preambleToString(mem);
+      fail();
+    } catch (final IllegalArgumentException e) {
+      // expected
+    }
+  }
+
+  @Test
+  public void checkInsufficientMemoryCapacity() {
+    final byte[] bytes = new byte[6];
+    final Memory mem = Memory.wrap(bytes);
+    try {
+      MatrixPreambleUtil.preambleToString(mem);
+      fail();
+    } catch (final IllegalArgumentException e) {
+      // expected
+    }
+  }
+
+  @Test
+  public void checkCompactPreamble() {
+    final int nRows = 4;
+    final int nCols = 7;
+    final MatrixBuilder mb = new MatrixBuilder();
+    final Matrix m = mb.build(nRows, nCols);
+
+    final Memory mem = Memory.wrap(m.toCompactByteArray(nRows - 1, 7));
+    MatrixPreambleUtil.preambleToString(mem);
+  }
+
   static void checkMatrixEquality(final Matrix m1, final Matrix m2) {
     assertEquals(m1.numRows_, m2.numRows_);
     assertEquals(m1.numCols_, m2.numCols_);
@@ -90,4 +151,8 @@
       }
     }
   }
+
+  static void println(final String msg) {
+    System.out.println(msg);
+  }
 }