@Test
public void testDistribute1() {

    NumberTupleExpression n = new NumberTupleExpression(10);
    ExpressionCountDistributor cntDistributor = new ExpressionCountDistributor(n);
    TupleExpression t0 = new NumberTupleExpression(1);
    TupleExpression t1 = new NumberTupleExpression(1);
    TupleExpression t2 = new NumberTupleExpression(2);
    TblColRef c = PowerMockito.mock(TblColRef.class);
    TupleExpression t3 = new ColumnTupleExpression(c);
    IEvaluatableTuple evaluatableTuple = PowerMockito.mock(IEvaluatableTuple.class);
    IFilterCodeSystem filterCodeSystem = PowerMockito.mock(IFilterCodeSystem.class);
    t3 = PowerMockito.spy(t3);
    PowerMockito.when(t3.calculate(evaluatableTuple, filterCodeSystem)).thenReturn(new BigDecimal(3));
    TupleExpression t4 = new NumberTupleExpression(1);
    TupleExpression t5 = new NumberTupleExpression(3);
    TupleExpression t6 = new NumberTupleExpression(4);
    TupleExpression t7 = new NumberTupleExpression(1);
    TupleExpression t8 = new NumberTupleExpression(2);
    TupleExpression t9 = new NumberTupleExpression(3);
    TupleExpression t10 = new NumberTupleExpression(1);
    TupleExpression t11 = new NumberTupleExpression(4);
    TupleExpression t12 = new NumberTupleExpression(5);
    TupleExpression t13 = new NumberTupleExpression(4);
    TupleExpression t14 = new NumberTupleExpression(5);
    TupleExpression b0 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(t1, t2));
    TupleExpression b1 = new BinaryTupleExpression(ExpressionOperatorEnum.MULTIPLE, Lists.newArrayList(t0, b0));
    TupleExpression b2 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(t3, t4));
    TupleExpression b3 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(t7, t8));
    TupleExpression b4 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(t9, t10));
    TupleExpression b11 = new BinaryTupleExpression(ExpressionOperatorEnum.MULTIPLE, Lists.newArrayList(b1, b2));
    TupleExpression b12 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(t5, t6));
    TupleExpression b13 = new BinaryTupleExpression(ExpressionOperatorEnum.MULTIPLE, Lists.newArrayList(b3, b4));
    TupleExpression b14 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(t11, t12));
    TupleExpression b21 = new BinaryTupleExpression(ExpressionOperatorEnum.MULTIPLE, Lists.newArrayList(b11, b12));
    TupleExpression b22 = new BinaryTupleExpression(ExpressionOperatorEnum.MULTIPLE, Lists.newArrayList(b13, b14));
    TupleExpression b31 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(b21, b22));
    TupleExpression b41 = new BinaryTupleExpression(ExpressionOperatorEnum.MINUS, Lists.newArrayList(b31, t13));
    TupleExpression b51 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(b41, t14));
    TupleExpression ret = b51.accept(cntDistributor);
    assertTrue(cntDistributor.ifCntSet());
    assertEquals(new BigDecimal(1363), ret.calculate(evaluatableTuple, filterCodeSystem));
}