@Test
  public void testWriteEndianNess() throws IOException {
    writer.writeShort((short) 4);
    assertArrayEquals(new byte[] {0, 4}, out.toByteArray());
    out.reset();

    writer.writeInt(4);
    assertArrayEquals(new byte[] {0, 0, 0, 4}, out.toByteArray());
    out.reset();

    writer.writeLong(4L);
    assertArrayEquals(new byte[] {0, 0, 0, 0, 0, 0, 0, 4}, out.toByteArray());
    out.reset();

    writer.writeUInt16(4);
    assertArrayEquals(new byte[] {0, 4}, out.toByteArray());
    out.reset();

    writer.writeUInt24(4);
    assertArrayEquals(new byte[] {0, 0, 4}, out.toByteArray());
    out.reset();

    writer.writeUInt32(4);
    assertArrayEquals(new byte[] {0, 0, 0, 4}, out.toByteArray());
    out.reset();
  }
  @Test
  public void testExpectUnsigned() throws IOException {
    writer.writeUInt8(1);
    writer.writeUInt16(2);
    writer.writeUInt24(3);
    writer.writeUInt32(4);

    BinaryReader reader = getReader();

    assertEquals(1, reader.expectUInt8());
    assertEquals(2, reader.expectUInt16());
    assertEquals(3, reader.expectUInt24());
    assertEquals(4, reader.expectUInt32());
  }
  @Test
  public void testReadUnsigned() throws IOException {
    writer.writeUInt16(2);

    BinaryReader reader = getReader();

    assertEquals(2, reader.readUInt16());
    assertEquals(0, reader.readUInt16());

    writer.writeUInt8(5);
    reader = getReader();

    try {
      reader.readUInt16();
      fail("No exception in bad read");
    } catch (IOException e) {
      assertEquals("Missing byte 2 to read uint16", e.getMessage());
    }
  }