code: private boolean makeComplete( TestCaseDef testCase, VarTupleSet tuples, List<VarDef> vars)
      {
      boolean complete;
  
      // Test case still missing a required property?
      if( testCase.isSatisfied())
        {
        // No, complete bindings for remaining variables
        complete = completeSatisfied( testCase, tuples, vars);
        }
      else
        {
        // Yes, find tuples that contain satisfying bindings.
        int prevBindings = testCase.getBindingCount();
        Iterator<Tuple> satisfyingTuples = getSatisfyingTuples( testCase, tuples);
        for( complete = false;
  
             satisfyingTuples.hasNext()
               && !(
                 // Does this tuple lead to satisfaction of all current test case conditions?
                 makeSatisfied( testCase, tuples, satisfyingTuples.next())
  
                 // Can we complete bindings for remaining variables?
                 && (complete = completeSatisfied( testCase, tuples, vars)));
  
             // No, try next tuple
             testCase.revertBindings( prevBindings));
        }
  
      return complete;
      }
docs: Using selections from the given set of tuples, completes binding for all remaining variables.
  Returns true if all variables have been bound.