### Question:
Range implements Serializable { public boolean isNaNRange() { return Double.isNaN(this.lower) && Double.isNaN(this.upper); } Range(double lower, double upper); double getLowerBound(); double getUpperBound(); double getLength(); double getCentralValue(); boolean contains(double value); boolean intersects(double b0, double b1); boolean intersects(Range range); double constrain(double value); static Range combine(Range range1, Range range2); static Range combineIgnoringNaN(Range range1, Range range2); static Range expandToInclude(Range range, double value); static Range expand(Range range,
                               double lowerMargin, double upperMargin); static Range shift(Range base, double delta); static Range shift(Range base, double delta,
                              boolean allowZeroCrossing); static Range scale(Range base, double factor); @Override boolean equals(Object obj); boolean isNaNRange(); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void testIsNaNRange() { assertTrue(new Range(Double.NaN, Double.NaN).isNaNRange()); assertFalse(new Range(1.0, 2.0).isNaNRange()); assertFalse(new Range(Double.NaN, 2.0).isNaNRange()); assertFalse(new Range(1.0, Double.NaN).isNaNRange()); }