@Test
void divideObjToDouble() {

    final ToDouble<String> toDouble = String::length;
    final DivideObjToDouble<String, ToDouble<String>, Double> divide =
            (DivideObjToDouble<String, ToDouble<String>, Double>)
                    DivideUtil.doubleDivideDouble(toDouble, 1);
    assertEquals(BinaryObjExpression.Operator.DIVIDE, divide.operator());
    assertNotNull(divide.first());
    assertNotEquals(0, divide.hashCode());
    final DivideObjToDouble<String, ToDouble<String>, Double> copy = divide;
    assertTrue(divide.equals(copy));
    assertFalse(divide.equals(null));
    assertFalse(divide.equals(1));
    final DivideObjToDouble<String, ToDouble<String>, Double> another1 =
            new DivideObjToDouble<String, ToDouble<String>, Double>(divide.first()) {
        @Override
        public Double second() {
            return null;
        }
        @Override
        public double applyAsDouble(String object) {
            return 0;
        }
    };
    assertTrue(divide.equals(another1));
    final DivideObjToDouble<String, ToDouble<String>, Double> another2 =
            new DivideObjToDouble<String, ToDouble<String>, Double>(ToDouble.constant(1)) {
        @Override
        public Double second() {
            return null;
        }
        @Override
        public double applyAsDouble(String object) {
        return 0;
        }
    };
    assertFalse(divide.equals(another2));
}