/**
*
*/
package test.beast.evolution.operator;
import java.util.ArrayList;
import java.util.HashMap;
import beast.core.Operator;
import beast.core.State;
import beast.core.StateNode;
import junit.framework.TestCase;
/**
* @author gereon
*
*/
public abstract class TestOperator extends TestCase {
static public void register(Operator operator, final Object... operands) {
HashMap<String, StateNode> operandsMap;
operandsMap = new HashMap<String, StateNode>();
if (operands.length % 2 == 1) {
throw new RuntimeException("Expected even number of arguments, name-value pairs");
}
for (int i = 0; i < operands.length; i += 2) {
if (operands[i] instanceof String) {
final String name = (String) operands[i];
if (operands[i + 1] instanceof StateNode) {
final StateNode node = (StateNode) operands[i + 1];
operandsMap.put(name, node);
} else {
throw new IllegalArgumentException("Expected a StateNode in " + (i + 1) + "th argument ");
}
} else {
throw new IllegalArgumentException("Expected a String in " + i + "th argument ");
}
}
State state = new State();
state.initByName("stateNode", new ArrayList<StateNode>(operandsMap.values()));
state.initialise();
Object[] operandsAndWeight = new Object[operands.length + 2];
for (int i = 0; i < operands.length; ++i) {
operandsAndWeight[i] = operands[i];
}
operandsAndWeight[operands.length] = "weight";
operandsAndWeight[operands.length + 1] = "1";
operator.initByName(operandsAndWeight);
operator.validateInputs();
}
}