package fr.inria.diversify.testamplification.compare; import fr.inria.diversify.testamplification.compare.diff.MonitoringPointDiff; import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; /** * User: Simon * Date: 06/03/15 * Time: 12:27 */ @Deprecated public class SingleMonitoringPoint extends AbstractMonitoringPoint { public static int executedPoint = 0; String[] methods; Object[] values; protected String className; public SingleMonitoringPoint(int assertId, String className, String[] methods) { this.id = assertId; this.className = className; if(methods == null) { this.methods = new String[0]; } else { this.methods = methods; } } public MonitoringPointDiff compare(AbstractMonitoringPoint other) { MonitoringPointDiff diff = new MonitoringPointDiff(id); if(other instanceof MultiMonitoringPoint) { diff.setIsMulti(true); return diff; } else { SingleMonitoringPoint otherCast = (SingleMonitoringPoint) other; if(otherCast.className != this.className) { diff.setClassDiff(true); return diff; } else { for (int i = 0; i < methods.length; i++) { executedPoint++; String mth = methods[i]; Object oValue = this.getValues()[i]; Object sValue = otherCast.getValues()[otherCast.indexOfMethod(mth)]; addValue(id+mth, oValue); addValue(id+mth, sValue); if (!oValue.equals(sValue)) { diff.addMethodDiff(mth, oValue, sValue); } } } } return diff; } protected int indexOfMethod(String mth) { for (int i = 0; i < methods.length; i++) { if(methods[i].equals(mth)) { return i; } } return -1; } public void setValues(Object[] values) { this.values = values; } public String toString() { String ret = id + ", " + className + ": "; for(int i = 0; i < values.length; i++) { ret += "\n\t" + methods[i] + "(): " + values[i]; } return ret; } public MultiMonitoringPoint toMulti() { MultiMonitoringPoint multi = new MultiMonitoringPoint(id); multi.add(this); return multi; } public Object[] getValues() { return values; } public String[] getMethods() { return methods; } public String getClassName() { return className; } static Map<String, Boolean> pointIsFix; static Map<String, Object> pointValue; public static int nbOfFixPoint() { return pointIsFix.values().stream() .filter(b -> b) .collect(Collectors.toList()) .size(); } public static int nbOfNotFixPoint() { return pointIsFix.values().stream() .filter(b -> !b) .collect(Collectors.toList()) .size(); } public static void initPoint() { pointIsFix = new HashMap<>(); pointValue = new HashMap<>(); } public static void addValue(String id, Object value) { if(!pointValue.containsKey(id)) { pointValue.put(id, value); pointIsFix.put(id, true); } else { if(!pointValue.get(id).equals(value)) { pointIsFix.put(id, false); } } } }