CalcResult minResult1 = minVisitor.getResult();
CalcResult minResult2 = minVisitor2.getResult();
CalcResult minResult3 = minResult1.merge(minResult2);
assertEquals(1, minResult3.toInt());
//test for destruction during merge
CalcResult minResult4 = new MinResult((Comparable) new Integer(10));
CalcResult minResult5 = minResult4.merge(minResult1);
assertEquals(1, minResult5.toInt());
assertEquals(10, minResult4.toInt());
//test negative result
CalcResult minResult6 = new MinResult((Comparable) new Integer(-5));
CalcResult minResult7 = (MinResult) minResult1.merge(minResult6);
assertEquals(-5, minResult7.toInt());
assertEquals(-5, minResult6.toInt());
//test a mock optimization
minVisitor.setValue(new Integer(-50));
minResult1 = minVisitor.getResult();
minResult7 = minResult7.merge(minResult1);
assertEquals(-50, minResult7.toInt());