/**
 *  Copyright (c) 1999-2011, Ecole des Mines de Nantes
 *  All rights reserved.
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *      * Redistributions of source code must retain the above copyright
 *        notice, this list of conditions and the following disclaimer.
 *      * Redistributions in binary form must reproduce the above copyright
 *        notice, this list of conditions and the following disclaimer in the
 *        documentation and/or other materials provided with the distribution.
 *      * Neither the name of the Ecole des Mines de Nantes nor the
 *        names of its contributors may be used to endorse or promote products
 *        derived from this software without specific prior written permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
 *  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 *  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 *  DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
 *  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 *  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package solver.constraints.ternary;

import solver.Solver;
import solver.constraints.Constraint;
import solver.constraints.IntConstraintFactory;
import solver.variables.IntVar;

/**
 * <br/>
 *
 * @author Charles Prud'homme
 * @since 07/02/11
 */
public class TimesTest extends AbstractTernaryTest {

    @Override
    protected int validTuple(int vx, int vy, int vz) {
        return vx * vy == vz ? 1 : 0;
    }

    @Override
    protected Constraint make(IntVar[] vars, Solver solver) {
        return IntConstraintFactory.times(vars[0], vars[1], vars[2]);
    }

}

@@ -1661,16 +1661,78 @@
 rnary;%0A%0A
+import org.testng.Assert;%0Aimport org.testng.annotations.Test;%0A
 import s
@@ -1745,16 +1745,16 @@
 Solver;%0A
-
 import s
@@ -1783,16 +1783,47 @@
 traint;%0A
+import solver.constraints.ICF;%0A
 import s
@@ -1862,16 +1862,137 @@
 actory;%0A
+import solver.constraints.Propagator;%0Aimport solver.exception.ContradictionException;%0Aimport solver.variables.EventType;%0A
 import s
@@ -2014,16 +2014,44 @@
 .IntVar;
+%0Aimport solver.variables.VF;
 %0A%0A/**%0A *
@@ -2434,10 +2434,590 @@
 %0A    %7D%0A%0A
+%09@Test(groups = %221s%22)%0A%09public void testJL() %7B%0A%09    Solver s = new Solver();%0A%09    IntVar a = VF.enumerated(%22a%22, 0, 3, s);%0A%09    IntVar b = VF.enumerated(%22b%22, -3, 3, s);%0A%0A%09    IntVar z = VF.enumerated(%22z%22, 3, 4, s);%0A%09    s.post(ICF.arithm(z, %22=%22, 3));%0A%09    Constraint c = ICF.times(a, b, z);%0A%09    s.post(c);%0A%09%09try %7B%0A%09%09%09s.propagate();%0A%09%09%09Assert.assertFalse(a.contains(0));%0A%09%09%09for (Propagator p : c.getPropagators()) %7B%0A%09%09%09%09p.propagate(EventType.FULL_PROPAGATION.mask);%0A%09%09%09%7D%0A%09%09%09Assert.assertFalse(a.contains(0));%0A%09%09%7Dcatch (ContradictionException e)%7B%0A%09%09%09Assert.assertFalse(true);%0A%09%09%7D%0A%09%7D%0A
 %7D%0A

add JL test for times