tree 334599ffd7aa55b4b90afd7f056ecbff7d4d089b
parent 69df4dd055683da6d720103087df278dee365713
author Joseph Koshakow <koshy44@gmail.com> 1507126199 -0400
committer Keith Turner <kturner@apache.org> 1507126355 -0400

fixes #924 add byte[] compare to Bytes (#934)

Squashed commit of the following:

commit dad21cedc9aa263f874426a9f98edaa9e618870c
Author: Joseph Koshakow <koshy44@gmail.com>
Date:   Tue Oct 3 23:24:14 2017 -0400

    Added the following methods:
      private int compareToUnchecked(byte[] bytes, int offset, int len){...}
      private boolean contentEqualsUnchecked(byte[] bytes, int offset, int len){...}
    Refactored the following methods:
      public final int compareTo(Bytes other){...}
      public int compareTo(byte[] bytes){...}
      public int compareTo(byte[] bytes, int offset, int len){...}
      public final boolean equals(Object other){...}
      public boolean contentEquals(byte[] bytes){...}
      public boolean contentEquals(byte[] bytes, int offset, int len){...}
    Added tests to test offsets greater than 0

commit b3038ddccd3fac57604e8f5b53ab38423d146e62
Author: Joseph Koshakow <koshy44@gmail.com>
Date:   Mon Oct 2 23:44:33 2017 -0400

    Modified precondition for contentEquals(byte[] bytes, int offset, int len){...}

commit ad5f06c4aa1eb44559270f5d62396a1eff82e632
Author: Joseph Koshakow <koshy44@gmail.com>
Date:   Mon Oct 2 23:37:04 2017 -0400

    Added @since 1.2.0 tags to new methods
    Added a Precondition.checkArgument to methods that take offset and len
    Added tests for different length Bytes and byte[] and empty Bytes and byte[]
    Added tests for invalid arguments

commit d0033f5dd23144d703643492b55246bf1dd0c4c4
Author: Joseph Koshakow <koshy44@gmail.com>
Date:   Mon Oct 2 20:17:32 2017 -0400

    Created the following methods and corresponding unit tests for them:
      public boolean contentEquals(byte[] bytes){...}
      public boolean contentEquals(byte[] bytes, int offset, int len){...}
      public int compareTo(byte[] bytes){...}
      public int compareTo(byte[] bytes, int offset, int len){...}
    Refactored the following methods:
      public final int compareTo(Bytes other){...}
      public final boolean equals(Object other){...}
