protected void eq(Buf buf, String expected) {
    eq(buf.size(), expected.getBytes().length);
    eq(buf.data(), expected);

    byte[] bbytes = new byte[buf.size()];
    ByteBuffer bufy = ByteBuffer.wrap(bbytes);
    buf.writeTo(bufy);
    eq(new String(bbytes), expected);

    int size = (int) Math.ceil(expected.length() * 1.0 / buf.unitSize());
    isTrue(buf.unitCount() == size || buf.unitCount() == size + 1);

    byte[] bytes = expected.getBytes();
    synchronized (buf) {
      for (int i = 0; i < bytes.length; i++) {
        eq((char) buf.get(i), (char) bytes[i]);
      }
    }

    for (int len = 2; len < 10; len++) {
      for (int p = 0; p <= buf.size() - len; p++) {
        String sub = buf.get(new Range(p, len));
        eq(sub, expected.substring(p, p + len));
      }
    }
  }