private BinaryTreeLUT createSampleInstance() {
    // ArrayBlockingQueue<Integer> keysAndData = new ArrayBlockingQueue<Integer>(20);
    ArrayBlockingQueue<String> keysAndData = new ArrayBlockingQueue<String>(20);
    BinaryTreeLUT result = new BinaryTreeLUT();

    keysAndData.add("P");
    keysAndData.add("Q");
    keysAndData.add("O");
    keysAndData.add("L");
    keysAndData.add("M");
    keysAndData.add("N");
    keysAndData.add("I");
    keysAndData.add("G");
    keysAndData.add("H");
    keysAndData.add("A");
    keysAndData.add("D");
    keysAndData.add("E");
    keysAndData.add("F");
    keysAndData.add("C");
    keysAndData.add("B");

    while (keysAndData.size() > 0)
      result.insert(keysAndData.peek() /*.toString()*/, keysAndData.poll());

    // System.out.println(result.toString());
    return result;
  }
  @Test
  public void removeRightTest() throws KeyNotFoundInTableException {
    BinaryTreeLUT instance = createSampleInstance();

    instance.remove("O");

    // P has L to its right:
    assertTrue(instance.root.right.kvPair.key.equals(new Key("L")));
  }
  @Test
  public void removeLeftTest() throws KeyNotFoundInTableException {
    BinaryTreeLUT instance = createSampleInstance();

    instance.remove("M");

    // L has N to its left:
    assertTrue(instance.root.right.right.left.kvPair.key.equals(new Key("N")));
  }
  @Test
  public void findRightmostTest() throws KeyNotFoundInTableException {
    BinaryTreeLUT instance = createSampleInstance();

    // System.out.println(instance.findRightmost(instance.root.right).kvPair.key.toString());

    assertTrue(instance.findRightmost(instance.root).kvPair.key.equals(new Key("A"))); // expect A

    assertTrue(
        instance
            .findRightmost(instance.getFromTree(new Key("L"), instance.root))
            .kvPair
            .key
            .equals(new Key("A"))); // expect A
  }
  @Test
  public void removeGeneralRightnodeTest() throws KeyNotFoundInTableException {
    BinaryTreeLUT instance = createSampleInstance();

    System.out.println("Original:\n" + instance.toString());
    // ACT
    instance.remove("G");
    System.out.println(instance.toString());
    // NOTE: After moving the rightmost node to another position, the order of
    // the elements in the tree is compromised: therefore getFromTree is
    // no longer reliable:
    // assertNotNull(instance.getFromTree(new Key("I"), instance.root).right);
    // It thinks that I is to the left of A, when it is to the right

    // H is where G was
    assertTrue(instance.root.right.right.right.right.kvPair.key.equals(new Key("H")));

    // verify that H is no longer where it was
    assertNull(instance.root.right.right.right.right.left);
  }
  @Test
  public void removeGeneralRootNodeTest() throws KeyNotFoundInTableException {
    BinaryTreeLUT instance = createSampleInstance();

    // ACT
    instance.remove("P");

    // NOTE: After moving the rightmost node to another position, the order of
    // the elements in the tree is compromised: therefore getFromTree is
    // no longer reliable, see note in removeGeneralTest() above

    // Q is where P was
    assertTrue(instance.root.kvPair.key.equals(new Key("Q")));

    // verify that Q is no longer where it was
    assertNull(instance.root.left);

    // Verify that right subtree unaltered
    assertTrue(instance.root.right.kvPair.key.equals(new Key("O")));
  }
  @Test
  public void removeGeneralTest() throws KeyNotFoundInTableException {
    BinaryTreeLUT instance = createSampleInstance();

    // ACT
    instance.remove("L");

    // NOTE: After moving the rightmost node to another position, the order of
    // the elements in the tree is compromised: therefore getFromTree is
    // no longer reliable:
    // assertNotNull(instance.getFromTree(new Key("I"), instance.root).right);
    // It thinks that I is to the left of A, when it is to the right

    // A is where L was
    assertTrue(instance.root.right.right.kvPair.key.equals(new Key("M")));

    // verify that A is no longer where it was
    assertFalse(instance.root.right.right.left.kvPair.key.equals(new Key("M")));

    // verify that N is still attached to M
    assertTrue(instance.root.right.right.left.kvPair.key.equals(new Key("N")));
  }