// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
 *******************************************************************************
 * Copyright (C) 2002-2004, International Business Machines Corporation and    *
 * others. All Rights Reserved.                                                *
 *******************************************************************************
 */
package com.ibm.icu.dev.test.util;

public interface Equator {
    /**
      * Comparator function. If overridden, must handle case of null,
      * and compare any two objects that could be compared.
      * Must obey normal rules of symmetry: a=b => b=a
      * and transitivity: a=b & b=c => a=b)
      * @param a
      * @param b
      * @return true if a and b are equal
      */
     public boolean isEqual(Object a, Object b);

    /**
     * Must obey normal rules: a=b => getHashCode(a)=getHashCode(b)
     * @param object
     * @return a hash code for the object
     */
    public int getHashCode(Object object);
}
