package android.uirendering.cts.util;

import android.graphics.Color;

public class CompareUtils {
    /**
     * @return True if close enough
     */
    public static boolean verifyPixelWithThreshold(int color, int expectedColor, int threshold) {
        int diff = Math.abs(Color.red(color) - Color.red(expectedColor))
                + Math.abs(Color.green(color) - Color.green(expectedColor))
                + Math.abs(Color.blue(color) - Color.blue(expectedColor));
        return diff <= threshold;
    }

    /**
     * @param threshold Per channel differences for R / G / B channel against the average of these 3
     *                  channels. Should be less than 2 normally.
     * @return True if the color is close enough to be a gray scale color.
     */
    public static boolean verifyPixelGrayScale(int color, int threshold) {
        int average =  Color.red(color) + Color.green(color) + Color.blue(color);
        average /= 3;
        return Math.abs(Color.red(color) - average) <= threshold
                && Math.abs(Color.green(color) - average) <= threshold
                && Math.abs(Color.blue(color) - average) <= threshold;
    }
}
