1package org.hamcrest.number;
2
3import static org.hamcrest.core.AnyOf.anyOf;
4import static org.hamcrest.core.IsEqual.equalTo;
5import static org.hamcrest.core.IsNot.not;
6import static org.hamcrest.core.DescribedAs.describedAs;
7
8import org.hamcrest.Factory;
9import org.hamcrest.Matcher;
10
11@SuppressWarnings("unchecked")
12public class OrderingComparisons {
13    @Factory
14    public static <T extends Comparable<T>> Matcher<T> greaterThan(T value) {
15        return new IsGreaterThan<T>(value);
16    }
17
18	@Factory
19    public static <T extends Comparable<T>> Matcher<T> greaterThanOrEqualTo(T value) {
20        return describedAs("a value greater than or equal to %0",
21                           anyOf(greaterThan(value), equalTo(value)),
22                           value);
23    }
24
25    @Factory
26    public static <T extends Comparable<T>> Matcher<T> lessThan(T value) {
27        return describedAs("a value less than %0",
28                           not(greaterThanOrEqualTo(value)),
29                           value);
30    }
31
32    @Factory
33    public static <T extends Comparable<T>> Matcher<T> lessThanOrEqualTo(T value) {
34        return describedAs("a value less than or equal to %0",
35                           not(greaterThan(value)),
36                           value);
37    }
38}
39