### Question:
GrayPaintScale implements PaintScale, PublicCloneable,
        Serializable { @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof GrayPaintScale)) { return false; } GrayPaintScale that = (GrayPaintScale) obj; if (this.lowerBound != that.lowerBound) { return false; } if (this.upperBound != that.upperBound) { return false; } if (this.alpha != that.alpha) { return false; } return true; } GrayPaintScale();  GrayPaintScale(double lowerBound, double upperBound);  GrayPaintScale(double lowerBound, double upperBound, int alpha); @Override double getLowerBound(); @Override double getUpperBound(); int getAlpha(); @Override Paint getPaint(double value); @Override boolean equals(Object obj); @Override int hashCode(); @Override Object clone();  }### Answer:
@Test public void testEquals() { GrayPaintScale g1 = new GrayPaintScale(); GrayPaintScale g2 = new GrayPaintScale(); assertEquals(g1, g2); assertEquals(g2, g1); g1 = new GrayPaintScale(0.0, 1.0); g2 = new GrayPaintScale(0.0, 1.0); assertEquals(g1, g2); g1 = new GrayPaintScale(0.1, 1.0); assertFalse(g1.equals(g2)); g2 = new GrayPaintScale(0.1, 1.0); assertEquals(g1, g2); g1 = new GrayPaintScale(0.1, 0.9); assertFalse(g1.equals(g2)); g2 = new GrayPaintScale(0.1, 0.9); assertEquals(g1, g2); g1 = new GrayPaintScale(0.1, 0.9, 128); assertFalse(g1.equals(g2)); g2 = new GrayPaintScale(0.1, 0.9, 128); assertEquals(g1, g2); }