@Test
void divideToDouble() {

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