Add isAtMost and isAtLeast to ComparableSubject
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=73189915
diff --git a/core/src/main/java/com/google/common/truth/ComparableSubject.java b/core/src/main/java/com/google/common/truth/ComparableSubject.java
index b604907..abe4919 100644
--- a/core/src/main/java/com/google/common/truth/ComparableSubject.java
+++ b/core/src/main/java/com/google/common/truth/ComparableSubject.java
@@ -52,4 +52,16 @@
       fail("is less than", other);
     }
   }
+
+  public final void isAtMost(T other) {
+    if (getSubject().compareTo(other) > 0) {
+      fail("is at most", other);
+    }
+  }
+
+  public final void isAtLeast(T other) {
+    if (getSubject().compareTo(other) < 0) {
+      fail("is at least", other);
+    }
+  }
 }
diff --git a/core/src/test/java/com/google/common/truth/ComparableSubjectTest.java b/core/src/test/java/com/google/common/truth/ComparableSubjectTest.java
index 669c766..2f890fa 100644
--- a/core/src/test/java/com/google/common/truth/ComparableSubjectTest.java
+++ b/core/src/test/java/com/google/common/truth/ComparableSubjectTest.java
@@ -45,7 +45,7 @@
       assertThat(6).isIn(oneToFive);
       fail("should have thrown");
     } catch (AssertionError e) {
-      assertThat(e.getMessage()).contains("<6> is in <[1\u20255]>");
+      assertThat(e.getMessage()).contains("Not true that <6> is in <[1\u20255]>");
     }
   }
 
@@ -57,7 +57,7 @@
       assertThat(4).isNotIn(oneToFive);
       fail("should have thrown");
     } catch (AssertionError e) {
-      assertThat(e.getMessage()).contains("<4> is not in <[1\u20255]>");
+      assertThat(e.getMessage()).contains("Not true that <4> is not in <[1\u20255]>");
     }
   }
 
@@ -68,13 +68,13 @@
       assertThat(4).isGreaterThan(4);
       fail("should have thrown");
     } catch (AssertionError e) {
-      assertThat(e.getMessage()).contains("<4> is greater than <4>");
+      assertThat(e.getMessage()).contains("Not true that <4> is greater than <4>");
     }
     try {
       assertThat(3).isGreaterThan(4);
       fail("should have thrown");
     } catch (AssertionError e) {
-      assertThat(e.getMessage()).contains("<3> is greater than <4>");
+      assertThat(e.getMessage()).contains("Not true that <3> is greater than <4>");
     }
   }
 
@@ -85,13 +85,37 @@
       assertThat(4).isLessThan(4);
       fail("should have thrown");
     } catch (AssertionError e) {
-      assertThat(e.getMessage()).contains("<4> is less than <4>");
+      assertThat(e.getMessage()).contains("Not true that <4> is less than <4>");
     }
     try {
       assertThat(4).isLessThan(3);
       fail("should have thrown");
     } catch (AssertionError e) {
-      assertThat(e.getMessage()).contains("<4> is less than <3>");
+      assertThat(e.getMessage()).contains("Not true that <4> is less than <3>");
+    }
+  }
+
+  @Test public void isAtMost() {
+    assertThat(5).isAtMost(5);
+    assertThat(5).isAtMost(6);
+
+    try {
+      assertThat(4).isAtMost(3);
+      fail("should have thrown");
+    } catch (AssertionError e) {
+      assertThat(e.getMessage()).contains("Not true that <4> is at most <3>");
+    }
+  }
+
+  @Test public void isAtLeast() {
+    assertThat(4).isAtLeast(3);
+    assertThat(4).isAtLeast(4);
+
+    try {
+      assertThat(4).isAtLeast(5);
+      fail("should have thrown");
+    } catch (AssertionError e) {
+      assertThat(e.getMessage()).contains("Not true that <4> is at least <5>");
     }
   }
 
@@ -101,6 +125,11 @@
     assertThat(5L).isGreaterThan(4L);
     assertThat(4L).isLessThan(5L);
 
+    assertThat(4L).isAtMost(4L);
+    assertThat(4L).isAtMost(5L);
+    assertThat(4L).isAtLeast(4L);
+    assertThat(4L).isAtLeast(3L);
+
     Range<Long> range = Range.closed(2L, 4L);
     assertThat(3L).isIn(range);
     assertThat(5L).isNotIn(range);
@@ -110,15 +139,29 @@
     assertThat("kak").isGreaterThan("gak");
     assertThat("gak").isLessThan("kak");
 
+    assertThat("kak").isAtMost("kak");
+    assertThat("gak").isAtMost("kak");
+    assertThat("kak").isAtLeast("kak");
+    assertThat("kak").isAtLeast("gak");
+
     Range<String> range = Range.closed("a", "c");
     assertThat("b").isIn(range);
     assertThat("d").isNotIn(range);
   }
 
+  // Weirdest tests ever...
   @Test public void booleans() {
     assertThat(true).isGreaterThan(false);
     assertThat(false).isLessThan(true);
 
+    assertThat(true).isAtMost(true);
+    assertThat(true).isAtLeast(true);
+    assertThat(true).isAtLeast(false);
+
+    assertThat(false).isAtLeast(false);
+    assertThat(false).isAtMost(false);
+    assertThat(false).isAtMost(true);
+
     Range<Boolean> range = Range.closed(true, true);
     assertThat(true).isIn(range);
     assertThat(false).isNotIn(range);