@Test
  void andOrCombined() {
    // A or (B and C)
    assertExpressional(person.age.is(1).or()
                    .age.is(2)
                    .age.is(3),
            "call op=OR",
            "  call op=EQUAL path=age constant=1",
            "  call op=AND",
            "    call op=EQUAL path=age constant=2",
            "    call op=EQUAL path=age constant=3");

    // (A and B) or C
    assertExpressional(person.age.is(1)
                    .age.is(2)
                    .or()
                    .age.is(3),
            "call op=OR",
            "  call op=AND",
            "    call op=EQUAL path=age constant=1",
            "    call op=EQUAL path=age constant=2",
            "  call op=EQUAL path=age constant=3");

    // A or (B and C and D)
    assertExpressional(person.age.is(1).or()
                    .age.is(2)
                    .age.is(3)
                    .age.is(4),
            "call op=OR",
            "  call op=EQUAL path=age constant=1",
            "  call op=AND",
            "    call op=EQUAL path=age constant=2",
            "    call op=EQUAL path=age constant=3",
            "    call op=EQUAL path=age constant=4");

    // (A and B) or (C and D)
    assertExpressional(person.age.is(1)
                    .age.is(2)
            .or()
                    .age.is(3)
                    .age.is(4),
            "call op=OR",
            "  call op=AND",
            "    call op=EQUAL path=age constant=1",
            "    call op=EQUAL path=age constant=2",
            "  call op=AND",
            "    call op=EQUAL path=age constant=3",
            "    call op=EQUAL path=age constant=4");

    // (A and B and C) or D
    assertExpressional(person.age.is(1)
                    .age.is(2)
                    .age.is(3)
            .or()
                    .age.is(4),
            "call op=OR",
            "  call op=AND",
            "    call op=EQUAL path=age constant=1",
            "    call op=EQUAL path=age constant=2",
            "    call op=EQUAL path=age constant=3",
            "  call op=EQUAL path=age constant=4");

  }
AND / ORs combined like {@code (A and B) or (C and D)}
criteria/common/test/org/immutables/criteria/ExpressionAsStringTest.java