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

com.ecfeed.core.utils.EMathRelation 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.utils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

import static com.ecfeed.core.utils.StatementRelationNames.*;

class StatementRelationNames {
	
	static final String RELATION_EQUAL = "equal"; 
	static final String RELATION_NOT_EQUAL = "notequal";
	static final String RELATION_LESS_THAN = "lessthan";
	static final String RELATION_LESS_THAN_EQUAL = "lessthanequal";
	static final String RELATION_GREATER_THAN = "greaterthan";
	static final String RELATION_GREATER_THAN_EQUAL = "greaterthanequal";
	
	static final String[] SYMBOL_RELATION_EQUAL = { "=" };
	static final String[] SYMBOL_RELATION_NOT_EQUAL = { "\u2260", "?" };
	static final String[] SYMBOL_RELATION_LESS_THAN = { "<", "<" };
	static final String[] SYMBOL_RELATION_LESS_THAN_EQUAL = { "<=", "≤", "<="};
	static final String[] SYMBOL_RELATION_GREATER_THAN = { ">", ">" };
	static final String[] SYMBOL_RELATION_GREATER_THAN_EQUAL = { ">=", "≥", ">=",  };
}

public enum EMathRelation{
	
	EQUAL(RELATION_EQUAL, SYMBOL_RELATION_EQUAL) {
		@Override
		public boolean isMatch(String typeName, String leftString, String rightString) {
			return StringHelper.isEqual(leftString, rightString);
		}
	}, 
	NOT_EQUAL(RELATION_NOT_EQUAL, SYMBOL_RELATION_NOT_EQUAL) {
		@Override
		public boolean isMatch(String typeName, String leftString, String rightString) {
			return RelationMatcher.isRelationMatch(this, typeName, leftString, rightString);
		}
	},
	LESS_THAN(RELATION_LESS_THAN, SYMBOL_RELATION_LESS_THAN) {
		@Override
		public boolean isMatch(String typeName, String leftString, String rightString) {
			return RelationMatcher.isRelationMatch(this, typeName, leftString, rightString);
		}
	}, 
	LESS_EQUAL(RELATION_LESS_THAN_EQUAL, SYMBOL_RELATION_LESS_THAN_EQUAL) {
		@Override
		public boolean isMatch(String typeName, String leftString, String rightString) {
			return RelationMatcher.isRelationMatch(this, typeName, leftString, rightString);
		}
	},
	GREATER_THAN(RELATION_GREATER_THAN, SYMBOL_RELATION_GREATER_THAN) {
		@Override
		public boolean isMatch(String typeName, String leftString, String rightString) {
			return RelationMatcher.isRelationMatch(this, typeName, leftString, rightString);
		}
	},
	GREATER_EQUAL(RELATION_GREATER_THAN_EQUAL, SYMBOL_RELATION_GREATER_THAN_EQUAL) {
		@Override
		public boolean isMatch(String typeName, String leftString, String rightString) {
			return RelationMatcher.isRelationMatch(this, typeName, leftString, rightString);
		}
	};

	public abstract boolean isMatch(String typeName, String leftString, String rightString);

	public EvaluationResult evalAsEvaluationResult(String typeName, String leftString, String rightString) {
		return EvaluationResult.convertFromBoolean(this.isMatch(typeName, leftString, rightString));
	}

	private String fName;
	private String[] fSymbolArray;
	
	private EMathRelation(String name, String[] symbolArray) {
		fName = name;
		fSymbolArray = symbolArray;
	}

	public String[] getSymbolArray() {
		return fSymbolArray;
	}
	
	public String getName() {
		return fName; 
	}
	
	public String getSymbol() {
		return fSymbolArray[0]; 
	}
	
	public String toString() {
		return getSymbol(); 
	}

	public static boolean isRelationEqual(String name) {

		if (name.equals(RELATION_EQUAL)) {
			return true;
		}
		
		return Arrays.stream(SYMBOL_RELATION_EQUAL).anyMatch( name::equals );
	}

	public static boolean isRelationNotEqual(String name) {

		if (name.equals(RELATION_NOT_EQUAL)) {
			return true;
		}

		return Arrays.stream(SYMBOL_RELATION_NOT_EQUAL).anyMatch( name::equals );
	}	

	public static boolean isOrderRelation(EMathRelation relation) {

		if (isEquivalenceRelation(relation)) {
			return false;
		}

		return true;
	}

	public static boolean isEquivalenceRelation(EMathRelation relation) {

		if (relation == EMathRelation.EQUAL) {
			return true;
		}
		if (relation == EMathRelation.NOT_EQUAL) {
			return true;
		}		

		return false;
	}	

	public static EMathRelation getRelation(String name) {

		for (EMathRelation relation : EMathRelation.values()) {
			if (name.equals(relation.getName())) {
				return relation;
			}
		}
		
		return Stream.of(EMathRelation.values())
			.filter( e -> Arrays.stream(e.getSymbolArray()).anyMatch( name::equals ) )
			.findFirst()
			.orElse(null);
	}

	public static EMathRelation[] getAvailableRelations(String parameterType) {

		List relations = new ArrayList();

		for (EMathRelation relation : EMathRelation.values()) {
			if (isRelationForParameterType(relation, parameterType)) {
				relations.add(relation);
			}
		}

		return relations.toArray(new EMathRelation[relations.size()]);
	}

	public static String[] getAvailableRelationNames(String parameterTypeName) {

		return relationCodesToNames(getAvailableRelations(parameterTypeName)); 
	}

	public static String[] relationCodesToNames(EMathRelation[] relationCodes) {

		List relationNames = new ArrayList();

		for (EMathRelation relation : relationCodes) {
			relationNames.add(relation.getName());
		}

		return relationNames.toArray(new String[relationNames.size()]);
	}

	public static boolean isRelationForParameterType(EMathRelation relation, String parameterTypeName) {

		if (JavaTypeHelper.isTypeComparableForLessGreater(parameterTypeName)) {
			return true;
		}
		if (relation == EQUAL || relation == NOT_EQUAL) {
			return true;
		}
		return false;
	}

	public static boolean isMatch(EMathRelation relation, double leftValue, double rightValue) {

		int compareResult = Double.compare(leftValue, rightValue);

		if (isMatch(relation, compareResult)) {
			return true;
		}
		return false;
	}
	
	public static boolean isMatch(EMathRelation relation, long leftValue, long rightValue) {

		int compareResult = Long.compare(leftValue, rightValue);

		if (isMatch(relation, compareResult)) {
			return true;
		}
		return false;
	}

	public static boolean isMatch(EMathRelation relation, String actualValue, String valueToMatch) {

		int compareResult = actualValue.compareTo(valueToMatch);

		if (isMatch(relation, compareResult)) {
			return true;
		}
		return false;
	}

	private static boolean isMatch(EMathRelation relation, int compareResult) {

		switch(relation) {

		case EQUAL:
			return (compareResult == 0);

		case NOT_EQUAL:
			return (compareResult != 0);

		case LESS_THAN:
			return (compareResult < 0);

		case LESS_EQUAL:
			return (compareResult < 0 || compareResult == 0);

		case GREATER_THAN:
			return (compareResult > 0);

		case GREATER_EQUAL:
			return (compareResult > 0 || compareResult == 0);

		default:
			ExceptionHelper.reportRuntimeException("Invalid relation.");
			return false;
		}

	}

	public static boolean isEqualityMatch(EMathRelation relation, String actualValue, String valueToMatch) {

		switch(relation) {

		case EQUAL:
			return StringHelper.isEqual(actualValue, valueToMatch);

		case NOT_EQUAL:
			return !(StringHelper.isEqual(actualValue, valueToMatch));

		default:
			ExceptionHelper.reportRuntimeException("Invalid relation: " + relation.toString() + " in match for equality.");
			return false;
		}
	}	

	public static boolean isEqualityMatchForBooleans(EMathRelation relation, String actualValue, String valueToMatch) {

		if (JavaTypeHelper.parseBooleanValue(actualValue) == null) {
			return false;
		}

		if (JavaTypeHelper.parseBooleanValue(valueToMatch) == null) {
			return false;
		}		

		return isEqualityMatch(relation, actualValue, valueToMatch);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy