@Test
  public void testNestedExpressions() {
    AttributeCompiler builder = new AttributeCompiler("(3 + (2)) - 10/5");
    Source source = builder.compile();
    assertEquals("((3+2)-(10/5))", source.getSource());
    assertEquals((3 + (2)) - 10 / 5, ((3 + 2) - (10 / 5)));

    builder = new AttributeCompiler("(3 - (2)) - 10/5");
    source = builder.compile();
    assertEquals("((3-2)-(10/5))", source.getSource());
    assertEquals((3 - (2)) - 10 / 5, ((3 - 2) - (10 / 5)));

    builder = new AttributeCompiler("(3 - (2+7)) - 10/5");
    source = builder.compile();
    assertEquals("((3-(2+7))-(10/5))", source.getSource());
    assertEquals((3 - (2 + 7)) - 10 / 5, ((3 - (2 + 7)) - (10 / 5)));
    assertEquals(-8, ((3 - (2 + 7)) - (10 / 5)));

    builder = new AttributeCompiler("(3 - (2+7)) - 10/(5-3)");
    source = builder.compile();
    assertEquals("((3-(2+7))-(10/(5-3)))", source.getSource());
    assertEquals((3 - (2 + 7)) - 10 / (5 - 3), ((3 - (2 + 7)) - (10 / (5 - 3))));

    builder = new AttributeCompiler("(modelName.num - (2*(7-1))) - 10/(modelName.num-3)");
    source = builder.compile();
    List<ModelSource> modelSourceList = new ArrayList<>();
    source.getModelSource(modelSourceList);
    for (ModelSource modelSource : modelSourceList) modelSource.setGetter("getNum");
    assertEquals(
        "((scope.modelName.getNum()-(2*(7-1)))-(10/(scope.modelName.getNum()-3)))",
        source.getSource());
  }