GeoCoordinateMatcher.java

package redis.clients.jedis.util;

import org.hamcrest.Description;
import org.hamcrest.TypeSafeMatcher;
import redis.clients.jedis.GeoCoordinate;

public class GeoCoordinateMatcher extends TypeSafeMatcher<GeoCoordinate> {

  public static GeoCoordinateMatcher atCoordinates(double longitude, double latitude) {
    return atCoordinates(new GeoCoordinate(longitude, latitude));
  }

  static GeoCoordinateMatcher atCoordinates(GeoCoordinate expected) {
    return new GeoCoordinateMatcher(expected);
  }

  private static final double EPSILON = 1e-5;

  private final GeoCoordinate expected;

  public GeoCoordinateMatcher(GeoCoordinate expected) {
    this.expected = expected;
  }

  @Override
  protected boolean matchesSafely(GeoCoordinate actual) {
    return Math.abs(actual.getLatitude() - expected.getLatitude()) < EPSILON &&
            Math.abs(actual.getLongitude() - expected.getLongitude()) < EPSILON;
  }

  @Override
  public void describeTo(Description description) {
    description.appendText("a GeoCoordinate within ")
            .appendValue(EPSILON)
            .appendText(" of ")
            .appendValue(expected);
  }

  @Override
  protected void describeMismatchSafely(GeoCoordinate actual, Description mismatchDescription) {
    mismatchDescription.appendText("was ").appendValue(actual);
  }
}