### Question:
UnitaryProjection extends NormalizedProjection { final double qsfn(final double sinφ) { if (eccentricity < EPSILON) { return 2 * sinφ; } final double esinφ = eccentricity * sinφ; return (1 - eccentricitySquared) * (sinφ / (1 - esinφ*esinφ) + atanh(esinφ)/eccentricity); } protected  UnitaryProjection(final OperationMethod method, final org.apache.sis.parameter.Parameters parameters,
            Map<ParameterRole, ParameterDescriptor<Double>> roles);   }### Answer:
@Test @Ignore public void testQsfn() { boolean ellipse = true; do { tolerance = TOLERANCE; for (int i=-100; i<=100; i++) { final double sinφ = i/100.0; final double q = qsfn(sinφ); assertEquals("Expected qsfn(-sinphi) == -qsfn(sinphi)", q, -qsfn(-sinφ), tolerance); assertEquals("Expected sinphi and qsfn(sinphi) to have same sign.", signum(sinφ), signum(q), 0); } } while ((ellipse = !ellipse) == false); }