internal bool CheckResult(VariableDef[] variableDefs, ConstraintDef[] constraintDefs,
                            NeighborDef[] neighborDefs, double[] expectedPositions, bool checkResults)
        {
            SetVariableExpectedPositions(variableDefs, expectedPositions);

            int violationCount;
            return CheckResult(variableDefs, constraintDefs, neighborDefs, checkResults, out violationCount);
        }
 // These overloads work with the local Test*()...
 internal bool CheckResult(VariableDef[] variableDefs,
                 ConstraintDef[] constraintDefsX, ConstraintDef[] constraintDefsY,
                 double[] expectedPositionsX, double[] expectedPositionsY,
                 bool checkResults)
 {
     return CheckResult(variableDefs, /*clusterDefs:*/ null,
                 constraintDefsX, constraintDefsY,
                 expectedPositionsX, expectedPositionsY, checkResults);
 }
        //
        // These overloads work with the local Test*() routines.
        //
        bool CheckResult(VariableDef[] variableDefs, ConstraintDef[] constraintDefs
                            , NeighborDef[] rgNeighborDefs, double[] expectedPositionsX, bool fCheckResults)
        {
            for (uint id = 0; id < variableDefs.Length; ++id)
            {
                variableDefs[id].SetExpected(id, expectedPositionsX[id]);
            }

            return CheckResult(variableDefs, constraintDefs, rgNeighborDefs, fCheckResults);
        }
 internal bool CheckResult(VariableDef[] variableDefs, ClusterDef[] clusterDefs,
                 ConstraintDef[] constraintDefsX, ConstraintDef[] constraintDefsY,
                 double[] expectedPositionsX, double[] expectedPositionsY,
                 bool checkResults)
 {
     for (uint id = 0; id < variableDefs.Length; ++id)
     {
         variableDefs[id].SetExpected(id, expectedPositionsX[id], expectedPositionsY[id]);
     }
     return CheckResult(variableDefs, clusterDefs, constraintDefsX, constraintDefsY, checkResults);
 }
 ////
 //// These overloads work with the local Test*() routines.
 ////
 internal bool CheckResult(VariableDef[] variableDefs, ConstraintDef[] constraintDefs,
                     double[] expectedPositions, bool checkResults)
 {
     return CheckResult(variableDefs, constraintDefs, null, expectedPositions, checkResults);
 }
 internal bool SolveRegap(string tag, VariableDef[] variableDefs, ConstraintDef[] constraintDefs, double[] expectedPositionsX)
 {
     if (TestGlobals.VerboseLevel >= 1)
     {
         this.WriteLine("... ReGapping ({0})...", tag);
     }
     SetVariableExpectedPositions(variableDefs, expectedPositionsX);
     int numViolations = 0;
     var sw = new Stopwatch();
     sw.Start();
     this.SolutionX = this.SolverX.Solve(this.SolverParameters);
     sw.Stop();
     bool succeeded = true;
     if (!VerifySolutionMembers(this.SolutionX, /*iterNeighbourDefs:*/ null))
     {
         succeeded = false;
     }
     if (!VerifyConstraints(/*cRep:*/ 0, constraintDefs, /*succeeded:*/ true, ref numViolations, /*checkResults:*/ true))
     {
         succeeded = false;
     }
     if (!PostCheckResults(variableDefs, this.SolutionX.GoalFunctionValue, double.NaN, sw, /*checkResults:*/ true))
     {
         succeeded = false;
     }
     DisplayVerboseResults();
     return succeeded;
 }
        internal void StartAtZeroWorker(int numVarsPerBlock, int numBlocks)
        {
            var expectedPositionsXNotUsed = new double[numVarsPerBlock * numBlocks];
            var variableDefs = new VariableDef[numVarsPerBlock * numBlocks];
            var constraintDefs = new ConstraintDef[(numVarsPerBlock - 1) * numBlocks];

            for (int idxBlock = 0; idxBlock < numBlocks; ++idxBlock)
            {
                int varOffset = numVarsPerBlock * idxBlock;
                int cstOffset = (numVarsPerBlock - 1) * idxBlock;
                for (int idxVar = 0; idxVar < numVarsPerBlock; ++idxVar)
                {
                    int varIndex = varOffset + idxVar;
                    variableDefs[varIndex] = new VariableDef(0.0, ValueNotUsed);
                    if (idxVar > 0)
                    {
                        constraintDefs[cstOffset + idxVar - 1] = new ConstraintDef(
                            variableDefs[varIndex - 1], variableDefs[varIndex], 1.0);
                    }
                }
            }
            Validate.IsTrue(
                    CheckResult(variableDefs, constraintDefs, expectedPositionsXNotUsed, false /* fCheckResults */),
                    FailureString);
        }