protected void runTests(boolean weighted, boolean multiInstance, boolean updateable) {
    
    boolean PNom = canPredict(true,  false, false, false, false, multiInstance)[0];
    boolean PNum = canPredict(false, true,  false, false, false, multiInstance)[0];
    boolean PStr = canPredict(false, false, true,  false, false, multiInstance)[0];
    boolean PDat = canPredict(false, false, false, true,  false, multiInstance)[0];
    boolean PRel;
    if (!multiInstance)
      PRel = canPredict(false, false, false, false,  true, multiInstance)[0];
    else
      PRel = false;

    if (PNom || PNum || PStr || PDat || PRel) {
      if (weighted)
        instanceWeights(PNom, PNum, PStr, PDat, PRel, multiInstance);
      
      canHandleZeroTraining(PNom, PNum, PStr, PDat, PRel, multiInstance);
      boolean handleMissingPredictors = canHandleMissing(PNom, PNum, PStr, PDat, PRel, 
          multiInstance, true, 20)[0];
      if (handleMissingPredictors)
        canHandleMissing(PNom, PNum, PStr, PDat, PRel, multiInstance, true, 100);
      
      correctBuildInitialisation(PNom, PNum, PStr, PDat, PRel, multiInstance);
      datasetIntegrity(PNom, PNum, PStr, PDat, PRel, multiInstance, handleMissingPredictors);
      if (updateable)
        updatingEquality(PNom, PNum, PStr, PDat, PRel, multiInstance);
    }
  }