    @Test(timeout = 2000)
    public void booleanExpression() throws Throwable {

        Class<?> mainClass = TestUtils.getUserClass("Main");
        for (int i = 0; i < 16; i++) {
            boolean a = (i % 2) == 1;
            boolean b = ((i >> 1) % 2) == 1;
            boolean c = ((i >> 2) % 2) == 1;
            boolean d = ((i >> 3) % 2) == 1;

            Class<Boolean> booleanClass = Boolean.TYPE;
            Method booleanExpression = TestUtils.getMethod(mainClass,
                    "booleanExpression",
                    new int[]{Modifier.PUBLIC | Modifier.STATIC},
                    booleanClass,
                    booleanClass, booleanClass, booleanClass, booleanClass);

            boolean actualValue = (boolean) TestUtils.invokeMethod(mainClass, booleanExpression, a, b, c, d);
            boolean expectedValue = Integer.bitCount(i) == 2;

            String message = String.format("Main.booleanExpression(%b, %b, %b, %b)", a, b, c, d);
            assertEquals(message, expectedValue, actualValue);
        }
    }