package test.beast.beast2vs1; import java.io.File; import java.util.List; import beagle.BeagleFlag; import beast.core.Logger; import beast.util.Randomizer; import beast.util.XMLParser; import junit.framework.Assert; import junit.framework.TestCase; import test.beast.beast2vs1.trace.Expectation; import test.beast.beast2vs1.trace.LogAnalyser; public abstract class TestFramework extends TestCase { protected static long SEED = 128; private String[] xmls; protected abstract List<Expectation> giveExpectations(int index_XML) throws Exception; public String dirName; public String logDir; public String testFile = "/test."; public boolean useSeed = true; public boolean checkESS = true; public TestFramework() { dirName = System.getProperty("user.dir") + "/examples/beast2vs1/"; logDir = System.getProperty("user.dir"); } protected void setUp(String[] xmls) { // throws Exception { this.xmls = new String[xmls.length]; for (int i = 0; i < xmls.length; i++) { this.xmls[i] = xmls[i]; } } // protected abstract void analyse() throws Exception; public void analyse(int index_XML) throws Exception { // for (int i = 0; i < xmls.length; i++) { // if (giveExpectations(i).size() > 0) { Randomizer.setSeed(SEED); Logger.FILE_MODE = Logger.LogFileMode.overwrite; long beagleFlags = BeagleFlag.PROCESSOR_CPU.getMask() | BeagleFlag.VECTOR_SSE.getMask(); System.setProperty("beagle.preferred.flags", Long.toString(beagleFlags)); String fileName = dirName + xmls[index_XML]; System.out.println("Processing " + fileName); XMLParser parser = new XMLParser(); beast.core.Runnable runable = parser.parseFile(new File(fileName)); runable.setStateFile("tmp.state", false); // runable.setInputValue("preBurnin", 0); // runable.setInputValue("chainLength", 1000); runable.run(); String logFile = logDir + testFile + (useSeed ? SEED : "") + ".log"; System.out.println("\nAnalysing log " + logFile); LogAnalyser logAnalyser = new LogAnalyser(logFile, giveExpectations(index_XML)); // burnIn = 0.1 * maxState for (Expectation expectation : logAnalyser.m_pExpectations.get()) { Assert.assertTrue(xmls[index_XML] + ": Expected " + expectation.traceName.get() + " delta mean: " + expectation.expValue.get() + " - " + expectation.getTraceStatistics().getMean() + " <= delta stdErr: 2*(" + expectation.getStdError() + " + " + expectation.getTraceStatistics().getStdErrorOfMean() + ")", expectation.isPassed()); if (checkESS) Assert.assertTrue(xmls[index_XML] + ": has very low effective sample sizes (ESS) " + expectation.getTraceStatistics().getESS(), expectation.isValid()); } System.out.println("\nSucceed " + fileName); System.out.println("\n***************************************\n"); // } // } } protected void addExpIntoList(List<Expectation> expList, String traceName, Double expValue, Double stdError) throws Exception { Expectation exp = new Expectation(traceName, expValue, stdError); expList.add(exp); } }