package test.beast.core.parameter;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.ByteArrayInputStream;
import javax.xml.parsers.DocumentBuilderFactory;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import beast.core.Operator;
import beast.core.State;
import beast.core.parameter.IntegerParameter;
import beast.core.parameter.IntegerParameterList;
import beast.core.parameter.Parameter;
/**
* Unit tests for ParameterList class.
*
* @author Tim Vaughan <tgvaughan@gmail.com>
*/
public class IntegerParameterListTest extends Operator {
public IntegerParameterListTest() { }
@Test
public void test1() throws Exception {
IntegerParameterList parameterList = new IntegerParameterList();
// Parameters with which to initialise list
IntegerParameter param1 = new IntegerParameter();
param1.initByName("value", "2");
IntegerParameter param2 = new IntegerParameter();
param2.initByName("value", "3");
// Initialise parameter list
parameterList.initByName(
"initialParam", param1,
"initialParam", param2);
// Create dummy state to allow statenode editing
State state = new State();
state.initByName("stateNode", parameterList);
state.initialise();
// Test parameter value modification
parameterList.get(0).setValue(20);
// Test parameter creation and modification
Parameter<Integer> newParam = parameterList.addNewParam();
newParam.setValue(53);
assertTrue(parameterList.get(0).getValue()==20);
assertTrue(parameterList.get(0).getKey()==0);
assertTrue(parameterList.get(1).getValue()==3);
assertTrue(parameterList.get(1).getKey()==1);
assertTrue(parameterList.get(2).getValue()==53);
assertTrue(parameterList.get(2).getKey()==2);
assertTrue(parameterList.size()==3);
parameterList.remove(1);
newParam = parameterList.addNewParam();
newParam.setValue(42);
assertTrue(parameterList.get(0).getValue()==20);
assertTrue(parameterList.get(0).getKey()==0);
assertTrue(parameterList.get(1).getValue()==53);
assertTrue(parameterList.get(1).getKey()==2);
assertTrue(parameterList.get(2).getValue()==42);
assertTrue(parameterList.get(2).getKey()==1);
assertTrue(parameterList.size()==3);
// Test state restore
parameterList.restore();
assertTrue(parameterList.get(0).getValue()==2);
assertTrue(parameterList.get(0).getKey()==0);
assertTrue(parameterList.get(1).getValue()==3);
assertTrue(parameterList.get(1).getKey()==1);
assertTrue(parameterList.size()==2);
// Test serialization
String xmlStr = parameterList.toXML();
assertEquals(xmlStr,"<statenode id='null'>"
+ "Dimension: [1, 1], "
+ "Bounds: [-2147483647,2147483646], "
+ "AvailableKeys: [], "
+ "NextKey: 2, "
+ "Parameters: [[2],[3]], "
+ "ParameterKeys: [0,1]"
+ "</statenode>\n");
// Test deserialization
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document doc = factory.newDocumentBuilder().parse(new ByteArrayInputStream(xmlStr.getBytes()));
doc.normalize();
NodeList nodes = doc.getElementsByTagName("*");
org.w3c.dom.Node docNode = nodes.item(0);
IntegerParameterList newParameterList = new IntegerParameterList();
newParameterList.initAndValidate();
newParameterList.fromXML(docNode);
assertTrue(newParameterList.get(0).getValue()==2);
assertTrue(newParameterList.get(0).getKey()==0);
assertTrue(newParameterList.get(1).getValue()==3);
assertTrue(newParameterList.get(1).getKey()==1);
assertTrue(newParameterList.size()==2);
}
@Override
public double proposal() {
return 0.0;
}
@Override
public void initAndValidate() {
// TODO Auto-generated method stub
}
}