001    package se.liu.ida.critiquer.test;
002    
003    
004    import choco.AbstractConstraint;
005    import choco.Constraint;
006    import choco.ContradictionException;
007    import choco.integer.IntExp;
008    import choco.integer.IntVar;
009    import choco.palm.PalmProblem;
010    
011    public class Test {
012            
013            public static void main(String args[])  {
014                    problemTester();
015            }
016    
017            
018            private static void problemTester() {
019                    PalmProblem p = new PalmProblem();
020                            
021                    IntVar a = p.makeConstantIntVar(3);
022                    IntVar b =  p.makeConstantIntVar(4);
023                    IntVar c = p.makeBoundIntVar("c ", 0, 10);
024                    Constraint sumConstraint = p.eq(p.sum(new IntExp[] {a,b}),c);
025                    tryPropagate(p, sumConstraint);
026                    pprint(c);
027                    removeConstraint(p, sumConstraint);
028                    pprint(c);
029                    
030                    
031            }
032    
033            private static void pprint(IntVar var) {
034                    System.out.println(var.pretty());
035            }
036    
037            private static void tryPropagate(PalmProblem p, Constraint constraint)  {
038                    
039                    try {
040                            p.post(constraint);
041                            p.propagate();
042                    } catch (ContradictionException e) {
043                            /**
044                             * No solution, so remove all constraints and add all except this one
045                             */
046                            System.err.println("Contradiction for constraint "+constraint.pretty());
047                            removeConstraint(p, constraint);
048                            try {
049                                    p.propagate();
050                            } catch (ContradictionException exception) {
051                                    System.err.println("Contradiction when removing constraint "+constraint.pretty());
052                                    e.printStackTrace();
053                            }       
054                    }
055            }
056    
057            private static void removeConstraint(PalmProblem p, Constraint c) {
058                    p.remove(c);
059                    p.eraseConstraint(p.getConstraintIndex((AbstractConstraint) c));
060                    try {
061                            p.propagate();
062                    } catch (ContradictionException exception) {
063                            System.err.println("Contradiction when removing constraint "+c.pretty());
064                    }
065            }
066            
067    }