All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ecfeed.core.generators.Culprit Maven / Gradle / Ivy

Go to download

An open library used to connect to the ecFeed service. It can be also used as a standalone testing tool. It is integrated with Junit5 and generates a stream of test cases using a selected algorithm (e.g. Cartesian, N-Wise). There are no limitations associated with the off-line version but the user cannot access the on-line computation servers and the model database.

The newest version!
/*******************************************************************************
 *
 * Copyright (c) 2016 ecFeed AS.                                                
 * All rights reserved. This program and the accompanying materials              
 * are made available under the terms of the Eclipse Public License v1.0         
 * which accompanies this distribution, and is available at                      
 * http://www.eclipse.org/legal/epl-v10.html 
 *  
 *******************************************************************************/

package com.ecfeed.core.generators;

import java.util.ArrayList;
import java.util.List;

import com.ecfeed.core.model.MethodNode;

public class Culprit {

	private static class OtherData {
		public int fFailureRate;
		
		public OtherData()
		{
			fFailureRate = 0;
		}
		public OtherData(int failureRate)
		{
			fFailureRate = failureRate;
		}
		
		public OtherData makeClone()
		{
			return new Culprit.OtherData(fFailureRate);
		}
	}

	private List fTestInput;
	private int fOccurenceCount = 0;
	private int fFailureCount = 0;
	private OtherData fOtherData;
	private MethodNode fMethodNode;

	public Culprit() {
		this(new ArrayList(), 0, 0);		
	}

	public Culprit(List testInput) {
		this(testInput, 0, 0);		
	}

	public Culprit(List testInput, int occurenceCount, int failureCount) {
		this(testInput, null, occurenceCount, failureCount);
	}
	
	public Culprit(List testInput, MethodNode methodNode, int occurenceCount, int failureCount) {
		fMethodNode = methodNode;
		fTestInput = testInput;
		fOccurenceCount = occurenceCount;
		fFailureCount = failureCount;
		fOtherData = new OtherData();
	}
	
	public Culprit(DimensionedString[] testInput) {
		this(testInput, 0, 0);		
	}

	
	public Culprit(DimensionedString[] testInput, int occurenceCount, int failureCount) {

		List testInputList = new ArrayList();

		for (DimensionedString DimensionedString : testInput) {
			testInputList.add(DimensionedString);
		}

		fTestInput = testInputList;
		fOccurenceCount = occurenceCount;
		fFailureCount = failureCount;
	}	

	@Override
	public String toString() {

		StringBuilder sb = new StringBuilder();

		sb.append("[occurences:");
		sb.append(fOccurenceCount);
		sb.append(", fails:");
		sb.append(fFailureCount);
		sb.append(", failureIndex:");
		sb.append(fOtherData.fFailureRate);
		sb.append(", items:[");

		boolean firstTime = true;

		for (DimensionedString DimensionedString : fTestInput) {

			if (!firstTime) {
				sb.append(", ");
			}

			sb.append(DimensionedString.toString());
			firstTime = false;
		}

		sb.append("]");
		sb.append("]");

		return sb.toString();
	}
	
	public String toTableString() {
		if (fMethodNode != null) {
			StringBuilder builder = new StringBuilder();
			for (DimensionedString element : fTestInput) {
				builder.append("{");
				builder.append(fMethodNode.getMethodParameter(element.fDimension).getFullName());
				builder.append(", ");
				builder.append(element.getItem());
				builder.append("} ");
			}
			return builder.toString().trim();
		} else {
			return toString();
		}
	}

	public static int compareForSort(Culprit culprit1, Culprit culprit2) {

		if (culprit1.fOtherData.fFailureRate > culprit2.fOtherData.fFailureRate) 
		{
			return -1;
		}

		if (culprit1.fOtherData.fFailureRate < culprit2.fOtherData.fFailureRate) 
		{
			return 1;
		}	
		
		if (culprit1.fOccurenceCount > culprit2.fOccurenceCount)
		{
			return -1;
		}
		
		if (culprit1.fOccurenceCount < culprit2.fOccurenceCount)
		{
			return 1;
		}

		int compareSize = compareByTestInputSize(culprit1, culprit2);
		if (compareSize != 0)
		{
			return compareSize;
		}  
		
		int compareResult = compareResult(culprit1, culprit2);
		if(compareResult != 0)
		{
			return compareResult;
		}
		
		int compOccur = compareByOccurenceCountForSort(culprit1, culprit2);
		if(compOccur>0)
		{
			return compOccur;
		}
		
		return 0;
	}

	public static int compareByFailureCountForSort(Culprit culprit1, Culprit culprit2) {
		
		if (culprit1.fFailureCount > culprit2.fFailureCount)
		{
			return -1;
		}
		
		if (culprit1.fFailureCount < culprit2.fFailureCount)
		{
			return 1;
		}
		if (culprit1.fOccurenceCount > culprit2.fOccurenceCount)
		{
			return -1;
		}
		
		if (culprit1.fOccurenceCount < culprit2.fOccurenceCount)
		{
			return 1;
		}
		
		int compareSize = compareByTestInputSize(culprit1, culprit2);
		if (compareSize != 0)
		{
			return compareSize;
		}
		
		int compareResult = compareResult(culprit1, culprit2);
		if (compareResult != 0)
		{
			return compareResult;
		}
		
		return 0;
	}
	
	public static int compareByOccurenceCountForSort(Culprit culprit1, Culprit culprit2)
	{
		if (culprit1.fOccurenceCount > culprit2.fOccurenceCount)
		{
			return -1;
		}
		
		if (culprit1.fOccurenceCount < culprit2.fOccurenceCount)
		{
			return 1;
		}
		
		if (culprit1.fOtherData.fFailureRate > culprit2.fOtherData.fFailureRate) 
		{
			return -1;
		}

		if (culprit1.fOtherData.fFailureRate < culprit2.fOtherData.fFailureRate) 
		{
			return 1;
		}
		
		int compareSize = compareByTestInputSize(culprit1, culprit2);
		if (compareSize != 0)
		{
			return compareSize;
		}
		
		int compareResult = compareResult(culprit1, culprit2);
		if (compareResult != 0)
		{
			return compareResult;
		}
		
		return 0;
	}

	private static int compareByTestInputSize(Culprit culprit1, Culprit culprit2) {
		
		if (culprit1.fTestInput.size() > culprit2.fTestInput.size())
		{
			return -1;
		}
		
		if (culprit1.fTestInput.size() < culprit2.fTestInput.size())
		{
			return 1;
		}
		
		return 0;
	}

	private static int compareResult(Culprit culprit1, Culprit culprit2) {
		int compareResult;
		int size = culprit1.fTestInput.size();

		for (int index = 0; index < size; index++) {

			DimensionedString DimensionedString1 = culprit1.fTestInput.get(index);
			DimensionedString DimensionedString2 = culprit2.fTestInput.get(index);

			compareResult = DimensionedString.compareForSort(DimensionedString1, DimensionedString2);
			
			if (compareResult != 0) {
				return compareResult;
			}
		}
		return 0;
	}

	public int getOccurenceCount() {
		return fOccurenceCount;
	}

	public int getFailureCount() {
		return fFailureCount;
	}

	public int getFailureIndex() {
		return fOtherData.fFailureRate;
	}

	public void setFailureRate(int rate) {
		fOtherData.fFailureRate = rate;
	}	

	public List getItem() {
		return fTestInput;
	}

	public void incrementFailures(int failureCount) {
		fFailureCount += failureCount;
	}

	public void incrementOccurenceCount(int occurenceCount) {
		fOccurenceCount += occurenceCount;
	}

	public void aggregateOccurencesAndFailures(Culprit culpritToAggregate) {

		incrementOccurenceCount(culpritToAggregate.getOccurenceCount());
		incrementFailures(culpritToAggregate.getFailureCount());
	}

	public boolean isTupleMatch(Culprit other) {

		if(fTestInput.size() != other.fTestInput.size()) {
			return false;
		}

		for(int index = 0; index < fTestInput.size(); index++) {
			if(!fTestInput.get(index).equals(other.fTestInput.get(index))) {
				return false;
			}
		}
		return true;
	}

	public boolean isBasicMatch(Culprit other) {

		if (other.fOccurenceCount != fOccurenceCount) {
			return false;
		}

		if (other.fFailureCount != fFailureCount) {
			return false;
		}

		if (!isTupleMatch(other)) {
			return false;
		}

		return true;
	}

	public Culprit makeClone() {

		Culprit culprit = new Culprit(fTestInput, fOccurenceCount, fFailureCount);
		culprit.fOtherData = fOtherData.makeClone();
		return culprit;
	}

}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy