@Override
  public View getView(int position, View convertView, ViewGroup parent) {

    View view = convertView;
    ResultHolder resultHolder = null;

    if (view == null) {
      LayoutInflater layoutInflater = ((Activity) context).getLayoutInflater();
      view = layoutInflater.inflate(layoutRessource, parent, false);

      resultHolder = new ResultHolder();
      resultHolder.imageView_result = (ImageView) view.findViewById(R.id.ImageView_movie_poster);
      resultHolder.textView_result = (TextView) view.findViewById(R.id.textView_movie_poster);

      view.setTag(resultHolder);
    } else {
      resultHolder = (ResultHolder) view.getTag();
    }

    Result result = data.get(position);

    if (result.getPosterPath() != null) {
      Picasso.with(context)
          .load(getImageURL(result.getPosterPath()))
          .into(resultHolder.imageView_result);
    } else {
      Picasso.with(context).load(R.drawable.placeholder).into(resultHolder.imageView_result);
    }

    resultHolder.textView_result.setText(result.getTitle());

    return view;
  }
  /**
   * Transform, using XSLT, a XML String to another String.
   *
   * @return The result in the type specified by the user
   */
  @Override
  public Object transformMessage(MuleMessage message, String putputEncoding)
      throws TransformerException {
    Object src = message.getPayload();
    try {
      Source sourceDoc = XMLUtils.toXmlSource(getXMLInputFactory(), isUseStaxSource(), src);
      if (sourceDoc == null) {
        return null;
      }

      ResultHolder holder = getResultHolder(returnType.getType());

      // If the users hasn't specified a class, lets return the same type they gave us
      if (holder == null) {
        holder = getResultHolder(src.getClass());
      }

      // If we still don't have a result type, lets fall back to using a DelayedResult
      // as it is the most efficient.
      if (holder == null || DelayedResult.class.equals(returnType.getType())) {
        return getDelayedResult(message, putputEncoding, sourceDoc);
      }

      doTransform(message, putputEncoding, sourceDoc, holder.getResult());

      return holder.getResultObject();
    } catch (Exception e) {
      throw new TransformerException(this, e);
    }
  }
 private static List<MethodsChain> findSimilar(
     final List<MethodsChain> chains, final PsiManager psiManager) {
   final ResultHolder resultHolder = new ResultHolder(psiManager);
   for (final MethodsChain chain : chains) {
     resultHolder.add(chain);
   }
   return resultHolder.getRawResult();
 }
 public void addResultSet(ResultSetHolder rsh) {
   members.add(rsh);
   Enumeration enum_ = rsh.getResultEnumeration();
   while (enum_.hasMoreElements()) {
     ResultHolder rh = (ResultHolder) enum_.nextElement();
     String key = rh.getKey();
     allresultkeys.put(key, key);
   }
 }
 public ResultHolder getResultByKey(String key) {
   ResultHolder best = null;
   double bestscore = 0.0;
   for (int i = 0; i < members.size(); i++) {
     ResultHolder cur = getResultSet(i).getResultByKey(key);
     if (cur != null) {
       double curscore = cur.getScore();
       if (best == null || curscore > bestscore) {
         best = cur;
         bestscore = curscore;
       }
     }
   }
   return best;
 }
  public void onResp(BaseResp resp) {
    SocializeListeners.ShareListener listener = getShareListener();
    if (listener == null) {
      mResultHolder.mResp = resp;
      return;
    }

    parseResult(resp, listener);
  }
 @Override
 public void onActivityCreated(
     Activity activity, Bundle savedInstanceState, SocializeListeners.ShareListener listener) {
   super.onActivityCreated(activity, savedInstanceState, listener);
   if (mResultHolder.mResp != null) {
     parseResult(mResultHolder.mResp, listener);
     mResultHolder.mResp = null;
   }
 }
 public static void readResultSet(BufferedReader in, SingleResultSetHolder srs)
     throws IOException {
   String line;
   while ((line = in.readLine()) != null) {
     line = line.trim();
     if (line.startsWith("<test-desc>")) {
       int index = line.indexOf("<", 11);
       if (index < 0) {
         index = line.length();
       }
       line = line.substring(11, index);
       srs.setDescription(line);
     } else if (line.startsWith("<sys-prop")) {
       String key = getStringAttribute(line, "key");
       String val = getStringAttribute(line, "value");
       if (key != null && val != null) {
         srs.setProperty(key, val);
       }
     } else if (line.startsWith("<test-date")) {
       srs.setStartTime(getLongAttribute(line, "start"));
       srs.setEndTime(getLongAttribute(line, "end"));
     } else if (line.startsWith("<result")) {
       int numreps = getIntAttribute(line, "num-reps");
       int numunits = getIntAttribute(line, "num-units");
       String name = getStringAttribute(line, "name");
       if (numreps > 0 && numunits >= 0 && name != null) {
         ResultHolder rh = new ResultHolder(srs);
         rh.setName(name);
         rh.setReps(numreps);
         rh.setUnits(numunits);
         readResult(in, rh);
         srs.addResult(rh);
       }
     } else if (line.equals("</result-set>")) {
       break;
     } else {
       System.err.println("Unrecognized line in Result-Set: " + line);
     }
   }
 }
 @Override
 public void onActivityResult(
     Activity activity,
     int requestCode,
     int resultCode,
     Intent data,
     SocializeListeners.ShareListener listener) {
   super.onActivityResult(activity, requestCode, resultCode, data, listener);
   if (mResultHolder.mResp != null) {
     parseResult(mResultHolder.mResp, listener);
     mResultHolder.mResp = null;
   }
 }
 public static void readResult(BufferedReader in, ResultHolder rh) throws IOException {
   String line;
   while ((line = in.readLine()) != null) {
     line = line.trim();
     if (line.startsWith("<option")) {
       String key = getStringAttribute(line, "key");
       String val = getStringAttribute(line, "value");
       if (key != null && val != null) {
         rh.addOption(key, val);
       }
     } else if (line.startsWith("<time")) {
       long ms = getLongAttribute(line, "value");
       if (ms >= 0) {
         rh.addTime(ms);
       }
     } else if (line.equals("</result>")) {
       break;
     } else {
       System.err.println("Unrecognized line in Result: " + line);
     }
   }
 }
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    ResultHolder holder = null;
    final LinearLayout container = (LinearLayout) row;

    if (row == null) {
      LayoutInflater inflater = ((Activity) context).getLayoutInflater();
      row = inflater.inflate(layoutResourceId, parent, false);
      holder = new ResultHolder();

      holder.pricePerTest = (TextView) row.findViewById(R.id.pricePerTest);
      holder.infoIcon = (TextView) row.findViewById(R.id.labInfoIcon);
      Typeface font = Typeface.createFromAsset(context.getAssets(), "fontawesome-webfont.ttf");
      holder.infoIcon.setTypeface(font);

      holder.lab_add = (TextView) row.findViewById(R.id.lab_add);
      holder.lab_address = (TextView) row.findViewById(R.id.lab_address);
      holder.tvhcharges = (TextView) row.findViewById(R.id.tvhcharges);
      if (frag.equals("toprated")) {
        holder.lab_add.setVisibility(View.GONE);
        holder.lab_address.setVisibility(View.GONE);
        holder.tvhcharges.setVisibility(View.VISIBLE);
      }
      holder.lab_name = (TextView) row.findViewById(R.id.lab_name);
      holder.mrp = (TextView) row.findViewById(R.id.mrp);
      holder.cost = (TextView) row.findViewById(R.id.cost);
      holder.saving = (TextView) row.findViewById(R.id.saving);
      holder.rating = (TextView) row.findViewById(R.id.rating);
      holder.circle = (LinearLayout) row.findViewById(R.id.rating_circle);
      holder.select = (Button) row.findViewById(R.id.selectlab);
      holder.nabl = (TextView) row.findViewById(R.id.nabl);
      holder.homeCollectionPrice = (TextView) row.findViewById(R.id.homeCollectionPrice);

      // holder.expand=(ImageView)row.findViewById(R.id.expand_newfeatures);
      // holder.num_rating=(TextView)row.findViewById(R.id.number_rating);
      holder.tvhcharges = (TextView) row.findViewById(R.id.tvhcharges);
      holder.ac = (ImageView) row.findViewById(R.id.ac_boolean_icon);
      holder.ambulance = (ImageView) row.findViewById(R.id.ambulance_boolean_icon);
      holder.homecollection = (ImageView) row.findViewById(R.id.homecollection_boolean_icon);
      holder.cc_accept = (ImageView) row.findViewById(R.id.cc_accept_boolean_icon);
      holder.ac_tv = (TextView) row.findViewById(R.id.airconditioning);
      holder.ambulance_tv = (TextView) row.findViewById(R.id.ambulance);
      //    holder.homecollection_tv=(TextView)row.findViewById(R.id.homecollection);
      holder.cc_accept_tv = (TextView) row.findViewById(R.id.creditcardsaccepted);
      //      holder.homecollectionava=(TextView)row.findViewById(R.id.homecollectionava);
      //            holder.direction=(ImageButton)row.findViewById(R.id.direction_list);

      /*
      holder.ambulance.setVisibility(container.GONE);
      holder.ac.setVisibility(container.GONE);
      holder.homecollection.setVisibility(container.GONE);
      holder.cc_accept.setVisibility(container.GONE);

      holder.ambulance_tv.setVisibility(container.GONE);
      holder.ac_tv.setVisibility(container.GONE);
      holder.homecollection_tv.setVisibility(container.GONE);
      holder.cc_accept_tv.setVisibility(container.GONE);
      */
      row.setTag(holder);

    } else {
      holder = (ResultHolder) row.getTag();
    }

    final ResultItem currentResultItem = resultItemArrayList.get(position);
    double a = currentResultItem.getPriceMrp();
    double b = currentResultItem.getPriceUser();
    double disc = (a - b) / a * 100;
    int dis = (int) disc;

    holder.pricePerTest.setText(currentResultItem.getPricePerTest());

    // TestResultItem tmp=data.get(position);
    holder.lab_name.setText(currentResultItem.getLabName());
    holder.lab_address.setText(currentResultItem.getLabAdd());
    holder.tvhcharges.setText(
        "Home Collection Charge:"
            + context.getString(R.string.Rs)
            + currentResultItem.getPriceHome());
    // holder.tvhcharges.setText("Extra home collection charges may apply");

    holder.cost.setText(
        context.getString(R.string.Rs) + String.valueOf(currentResultItem.getPriceUser()));

    holder.saving.setText(dis + "% OFF");

    holder.mrp.setText(
        context.getString(R.string.Rs) + String.valueOf(currentResultItem.getPriceMrp()));
    holder.mrp.setPaintFlags(holder.mrp.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

    if (currentResultItem.isHomeCollectionAvailable()) {
      Log.d("shreyDebug", "home collection price is - " + currentResultItem.getPriceHome());
      if (currentResultItem.getPriceHome() == "0") {
        holder.homeCollectionPrice.setVisibility(View.VISIBLE);
      } else {
        holder.homeCollectionPrice.setVisibility(View.VISIBLE);
        holder.homeCollectionPrice.setText(
            "Home collection price: " + currentResultItem.getPriceHome());
      }
    } else {
      holder.homeCollectionPrice.setVisibility(View.GONE);
    }

    if (currentResultItem.isHomecollection()) {
      AppControllerSearchTests.setHomecollection(true);
      //  holder.homecollectionava.setText("Home collection available");

    } else {
      AppControllerSearchTests.setHomecollection(false);
      // holder.homecollectionava.setText("Home collection not available");
    }
    if (currentResultItem.isNabl()) {
      holder.nabl.setText("NABL Accredited");
    } else {
      holder.nabl.setVisibility(View.GONE);
    }
    final ResultHolder finalHolder = holder;
    if (currentResultItem.getRating() > -1)
      holder.rating.setText(String.valueOf(currentResultItem.getRating()));
    else holder.circle.setVisibility(View.INVISIBLE);
    final String lab_id = currentResultItem.getLabID();
    String phone = currentResultItem.getLabPhone();
    final ResultHolder finalHolder1 = holder;
    final ResultHolder finalHolder2 = holder;
    holder.select.setOnClickListener(
        new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            // Bundle the lab details
            Intent i = new Intent(context, PastPatients.class);
            i.putExtra("goto", "Registration");
            AppControllerSearchTests.setSelectedLab(currentResultItem);
            if (frag.equals("toprated")) {
              AppControllerSearchTests.setHomecollection(true);
              AppControllerSearchTests.setPriceHome(currentResultItem.getPriceHome());
            } else AppControllerSearchTests.setHomecollection(false);
            AppControllerSearchTests.setSearchType(AppControllerSearchTests.TYPELAB);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
          }
        });

    holder.infoIcon.setOnClickListener(
        new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            Log.d("in onItemClick", "yes");

            if (AppControllerSearchTests.imageDBhelper.isOpen())
              AppControllerSearchTests.imageDBhelper.close();

            ResultItem tmp = currentResultItem;
            Intent intent = new Intent(context, Detailed_result.class);
            AppControllerSearchTests.setSearchType(AppControllerSearchTests.TYPELAB);
            AppControllerSearchTests.setHomecollection(tmp.isHomecollection());
            AppControllerSearchTests.setSelectedLab(tmp);
            context.startActivity(intent);
          }
        });
    return row;
  }
  @NotNull
  private static List<MethodsChain> search(
      final MethodsUsageIndexReader indexReader,
      final SearchInitializer initializer,
      final Set<String> toSet,
      final int pathMaximalLength,
      final int maxResultSize,
      final String targetQName,
      final ChainCompletionContext context) {
    final Set<String> allExcludedNames =
        MethodChainsSearchUtil.joinToHashSet(context.getExcludedQNames(), targetQName);
    final SearchInitializer.InitResult initResult =
        initializer.init(Collections.<String>emptySet());

    final Map<MethodIncompleteSignature, MethodsChain> knownDistance = initResult.getChains();

    final List<WeightAware<MethodIncompleteSignature>> allInitialVertexes =
        initResult.getVertexes();

    final LinkedList<WeightAware<Pair<MethodIncompleteSignature, MethodsChain>>> q =
        new LinkedList<>(
            ContainerUtil.map(
                allInitialVertexes,
                methodIncompleteSignatureWeightAware -> {
                  final MethodIncompleteSignature underlying =
                      methodIncompleteSignatureWeightAware.getUnderlying();
                  return new WeightAware<>(
                      Pair.create(
                          underlying,
                          new MethodsChain(
                              context.resolveNotDeprecated(underlying),
                              methodIncompleteSignatureWeightAware.getWeight(),
                              underlying.getOwner())),
                      methodIncompleteSignatureWeightAware.getWeight());
                }));

    int maxWeight = 0;
    for (final MethodsChain methodsChain : knownDistance.values()) {
      if (methodsChain.getChainWeight() > maxWeight) {
        maxWeight = methodsChain.getChainWeight();
      }
    }

    final ResultHolder result = new ResultHolder(context.getPsiManager());
    while (!q.isEmpty()) {
      ProgressManager.checkCanceled();
      final WeightAware<Pair<MethodIncompleteSignature, MethodsChain>> currentVertex = q.poll();
      final int currentVertexDistance = currentVertex.getWeight();
      final Pair<MethodIncompleteSignature, MethodsChain> currentVertexUnderlying =
          currentVertex.getUnderlying();
      final MethodsChain currentVertexMethodsChain =
          knownDistance.get(currentVertexUnderlying.getFirst());
      if (currentVertexDistance != currentVertexMethodsChain.getChainWeight()) {
        continue;
      }
      if (currentVertex.getUnderlying().getFirst().isStatic()
          || toSet.contains(currentVertex.getUnderlying().getFirst().getOwner())) {
        result.add(currentVertex.getUnderlying().getSecond());
        continue;
      }
      final String currentReturnType = currentVertexUnderlying.getFirst().getOwner();
      final SortedSet<UsageIndexValue> nextMethods = indexReader.getMethods(currentReturnType);
      final MaxSizeTreeSet<WeightAware<MethodIncompleteSignature>> currentSignatures =
          new MaxSizeTreeSet<>(maxResultSize);
      for (final UsageIndexValue indexValue : nextMethods) {
        final MethodIncompleteSignature vertex = indexValue.getMethodIncompleteSignature();
        final int occurrences = indexValue.getOccurrences();
        if (vertex.isStatic() || !vertex.getOwner().equals(targetQName)) {
          final int vertexDistance = Math.min(currentVertexDistance, occurrences);
          final MethodsChain knownVertexMethodsChain = knownDistance.get(vertex);
          if ((knownVertexMethodsChain == null
              || knownVertexMethodsChain.getChainWeight() < vertexDistance)) {
            if (currentSignatures.isEmpty()
                || currentSignatures.last().getWeight() < vertexDistance) {
              if (currentVertexMethodsChain.size() < pathMaximalLength - 1) {
                final MethodIncompleteSignature methodInvocation =
                    indexValue.getMethodIncompleteSignature();
                final PsiMethod[] psiMethods = context.resolveNotDeprecated(methodInvocation);
                if (psiMethods.length != 0
                    && MethodChainsSearchUtil.checkParametersForTypesQNames(
                        psiMethods, allExcludedNames)) {
                  final MethodsChain newBestMethodsChain =
                      currentVertexMethodsChain.addEdge(
                          psiMethods,
                          indexValue.getMethodIncompleteSignature().getOwner(),
                          vertexDistance);
                  currentSignatures.add(
                      new WeightAware<>(indexValue.getMethodIncompleteSignature(), vertexDistance));
                  knownDistance.put(vertex, newBestMethodsChain);
                }
              }
            }
          } else {
            break;
          }
        }
      }
      boolean updated = false;
      if (!currentSignatures.isEmpty()) {
        boolean isBreak = false;
        for (final WeightAware<MethodIncompleteSignature> sign : currentSignatures) {
          final PsiMethod[] resolved = context.resolveNotDeprecated(sign.getUnderlying());
          if (!isBreak) {
            if (sign.getWeight() * NEXT_METHOD_IN_CHAIN_RATIO > currentVertex.getWeight()) {
              final boolean stopChain =
                  sign.getUnderlying().isStatic()
                      || toSet.contains(sign.getUnderlying().getOwner());
              if (stopChain) {
                updated = true;
                result.add(
                    currentVertex
                        .getUnderlying()
                        .getSecond()
                        .addEdge(resolved, sign.getUnderlying().getOwner(), sign.getWeight()));
                continue;
              } else {
                updated = true;
                final MethodsChain methodsChain =
                    currentVertexUnderlying.second.addEdge(
                        resolved, sign.getUnderlying().getOwner(), sign.getWeight());
                q.add(
                    new WeightAware<>(
                        Pair.create(sign.getUnderlying(), methodsChain), sign.getWeight()));
                continue;
              }
            }
          }
          final MethodsChain methodsChain =
              currentVertexUnderlying.second.addEdge(
                  resolved, sign.getUnderlying().getOwner(), sign.getWeight());
          final ParametersMatcher.MatchResult parametersMatchResult =
              ParametersMatcher.matchParameters(methodsChain, context);
          if (parametersMatchResult.noUnmatchedAndHasMatched()
              && parametersMatchResult.hasTarget()) {
            updated = true;
            q.addFirst(
                new WeightAware<>(
                    Pair.create(sign.getUnderlying(), methodsChain), sign.getWeight()));
          }
          isBreak = true;
        }
      }
      if (!updated
          && (currentVertex.getUnderlying().getFirst().isStatic()
              || !targetQName.equals(currentVertex.getUnderlying().getFirst().getOwner()))) {
        result.add(currentVertex.getUnderlying().getSecond());
      }
      if (result.size() > maxResultSize) {
        return result.getResult();
      }
    }
    return result.getResult();
  }
 @Override
 public void onBindViewHolder(ResultHolder holder, int position) {
   holder.bind(results.get(position));
 }
  public static void main(String argv[]) {
    boolean gavehelp = false;
    boolean graph = false;
    boolean ignoreuncontested = true;
    if (argv.length > 0 && argv[0].equalsIgnoreCase("-html")) {
      String newargs[] = new String[argv.length - 1];
      System.arraycopy(argv, 1, newargs, 0, newargs.length);
      HTMLSeriesReporter.main(newargs);
      return;
    }
    for (int i = 0; i < argv.length; i++) {
      String arg = argv[i];
      if (arg.regionMatches(true, 0, "-Group:", 0, 7)) {
        groupHolder = new GroupResultSetHolder();
        groupHolder.setTitle(arg.substring(7));
        results.add(groupHolder);
      } else if (arg.equalsIgnoreCase("-NoGroup")) {
        groupHolder = null;
      } else if (arg.equalsIgnoreCase("-ShowUncontested")) {
        ignoreuncontested = false;
      } else if (arg.equalsIgnoreCase("-Graph")) {
        graph = true;
      } else if (arg.equalsIgnoreCase("-Best")) {
        mode = BEST;
      } else if (arg.equalsIgnoreCase("-Worst")) {
        mode = WORST;
      } else if (arg.equalsIgnoreCase("-Average") || arg.equalsIgnoreCase("-Avg")) {
        mode = AVERAGE;
      } else if (arg.equalsIgnoreCase("-MidAverage") || arg.equalsIgnoreCase("-MidAvg")) {
        mode = MIDAVG;
      } else if (arg.equalsIgnoreCase("-Help") || arg.equalsIgnoreCase("-Usage")) {
        usage(System.out);
        gavehelp = true;
      } else {
        readResults(argv[i]);
      }
    }

    if (results.size() == 0) {
      if (!gavehelp) {
        System.err.println("No results loaded");
        usage(System.err);
      }
      return;
    }

    int numsets = results.size();
    double totalscore[] = new double[numsets];
    int numwins[] = new int[numsets];
    int numties[] = new int[numsets];
    int numloss[] = new int[numsets];
    int numtests[] = new int[numsets];
    double bestscore[] = new double[numsets];
    double worstscore[] = new double[numsets];
    double bestspread[] = new double[numsets];
    double worstspread[] = new double[numsets];
    for (int i = 0; i < numsets; i++) {
      bestscore[i] = Double.NEGATIVE_INFINITY;
      worstscore[i] = Double.POSITIVE_INFINITY;
      bestspread[i] = Double.POSITIVE_INFINITY;
      worstspread[i] = Double.NEGATIVE_INFINITY;
    }

    ResultSetHolder base = (ResultSetHolder) results.elementAt(0);
    Enumeration enum_ = base.getKeyEnumeration();
    Vector keyvector = new Vector();
    while (enum_.hasMoreElements()) {
      keyvector.add(enum_.nextElement());
    }
    String keys[] = new String[keyvector.size()];
    keyvector.copyInto(keys);
    sort(keys);
    enum_ = ResultHolder.commonkeys.keys();
    System.out.println("Options common across all tests:");
    if (ResultHolder.commonname != null && ResultHolder.commonname.length() != 0) {
      System.out.println("  testname=" + ResultHolder.commonname);
    }
    while (enum_.hasMoreElements()) {
      Object key = enum_.nextElement();
      System.out.println("  " + key + "=" + ResultHolder.commonkeymap.get(key));
    }
    System.out.println();
    for (int k = 0; k < keys.length; k++) {
      String key = keys[k];
      ResultHolder rh = base.getResultByKey(key);
      double score = rh.getScore();
      double maxscore = score;
      int numcontesting = 0;
      for (int i = 0; i < numsets; i++) {
        ResultSetHolder rsh = (ResultSetHolder) results.elementAt(i);
        ResultHolder rh2 = rsh.getResultByKey(key);
        if (rh2 != null) {
          if (graph) {
            maxscore = Math.max(maxscore, rh2.getBestScore());
          }
          numcontesting++;
        }
      }
      if (ignoreuncontested && numcontesting < 2) {
        continue;
      }
      System.out.println(rh.getShortKey() + ":");
      for (int i = 0; i < numsets; i++) {
        ResultSetHolder rsh = (ResultSetHolder) results.elementAt(i);
        System.out.print(rsh.getTitle() + ": ");
        ResultHolder rh2 = rsh.getResultByKey(key);
        if (rh2 == null) {
          System.out.println("not run");
        } else {
          double score2 = rh2.getScore();
          double percent = calcPercent(score, score2);
          numtests[i]++;
          if (percent < 97.5) {
            numloss[i]++;
          } else if (percent > 102.5) {
            numwins[i]++;
          } else {
            numties[i]++;
          }
          totalscore[i] += score2;
          if (bestscore[i] < percent) {
            bestscore[i] = percent;
          }
          if (worstscore[i] > percent) {
            worstscore[i] = percent;
          }
          double spread = rh2.getSpread();
          if (bestspread[i] > spread) {
            bestspread[i] = spread;
          }
          if (worstspread[i] < spread) {
            worstspread[i] = spread;
          }
          System.out.print(format(score2));
          System.out.print(" (var=" + spread + "%)");
          System.out.print(" (" + percent + "%)");
          System.out.println();
          if (graph) {
            int maxlen = 60;
            int avgpos = (int) Math.round(maxlen * score / maxscore);
            Vector scores = rh2.getAllScores();
            for (int j = 0; j < scores.size(); j++) {
              double s = ((Double) scores.get(j)).doubleValue();
              int len = (int) Math.round(maxlen * s / maxscore);
              int pos = 0;
              while (pos < len) {
                System.out.print(pos == avgpos ? '|' : '*');
                pos++;
              }
              while (pos <= avgpos) {
                System.out.print(pos == avgpos ? '|' : ' ');
                pos++;
              }
              System.out.println();
            }
          }
        }
      }
    }
    System.out.println();
    System.out.println("Summary:");
    for (int i = 0; i < numsets; i++) {
      ResultSetHolder rsh = (ResultSetHolder) results.elementAt(i);
      System.out.println("  " + rsh.getTitle() + ": ");
      if (numtests[i] == 0) {
        System.out.println("    No tests matched reference results");
      } else {
        double overallscore = totalscore[i] / numtests[i];
        System.out.println("    Number of tests:  " + numtests[i]);
        System.out.println("    Overall average:  " + overallscore);
        System.out.println("    Best spread:      " + bestspread[i] + "% variance");
        System.out.println("    Worst spread:     " + worstspread[i] + "% variance");
        if (i == 0) {
          System.out.println("    (Basis for results comparison)");
        } else {
          System.out.println("    Comparison to basis:");
          System.out.println("      Best result:      " + bestscore[i] + "% of basis");
          System.out.println("      Worst result:     " + worstscore[i] + "% of basis");
          System.out.println("      Number of wins:   " + numwins[i]);
          System.out.println("      Number of ties:   " + numties[i]);
          System.out.println("      Number of losses: " + numloss[i]);
        }
      }
      System.out.println();
    }
  }
 public void addResult(ResultHolder rh) {
   results.add(rh);
   resultsbykey.put(rh.getKey(), rh);
 }