package test.beast.math.distributions;
import org.junit.Test;
import beast.core.BEASTInterface;
import beast.math.distributions.Exponential;
import beast.math.distributions.Gamma;
import beast.math.distributions.LogNormalDistributionModel;
import beast.math.distributions.Normal;
import beast.math.distributions.Uniform;
import beast.util.XMLParser;
import junit.framework.TestCase;
public class MeanOfParametricDistributionTest extends TestCase {
@Test
public void testMeanOfNormal() throws Exception {
Normal normal = new Normal();
normal.initByName("mean","123.0","sigma","3.0");
double mean = normal.getMean();
assertEquals(mean, 123, 1e-10);
normal = new Normal();
normal.initByName("mean","123.0","sigma","30.0");
mean = normal.getMean();
assertEquals(mean, 123, 1e-10);
normal = new Normal();
normal.initByName("mean","123.0","sigma","3.0","offset","3.0");
mean = normal.getMean();
assertEquals(mean, 126, 1e-10);
}
@Test
public void testMeanOfGamma() throws Exception {
Gamma gamma = new Gamma();
gamma.initByName("alpha", "100", "beta", "10");
double mean = gamma.getMean();
assertEquals(mean, 1000, 1e-10);
gamma = new Gamma();
gamma.initByName("alpha", "100", "beta", "100");
mean = gamma.getMean();
assertEquals(mean, 10000, 1e-10);
gamma = new Gamma();
gamma.initByName("alpha", "100", "beta", "10", "offset", "3");
mean = gamma.getMean();
assertEquals(mean, 1003, 1e-10);
}
@Test
public void testMeanOfExponential() throws Exception {
Exponential exp = new Exponential();
exp.initByName("mean", "10");
double mean = exp.getMean();
assertEquals(mean, 10, 1e-10);
exp = new Exponential();
exp.initByName("mean", "1");
mean = exp.getMean();
assertEquals(mean, 1, 1e-10);
exp = new Exponential();
exp.initByName("mean", "1", "offset", "3");
mean = exp.getMean();
assertEquals(mean, 4, 1e-10);
}
@Test
public void testMeanOfLogNormal() throws Exception {
LogNormalDistributionModel exp = new LogNormalDistributionModel();
exp.initByName("M", "10" , "S", "1", "meanInRealSpace", true);
double mean = exp.getMean();
assertEquals(mean, 10, 1e-10);
exp = new LogNormalDistributionModel();
exp.initByName("M", "1", "S", "1", "meanInRealSpace", true);
mean = exp.getMean();
assertEquals(mean, 1, 1e-10);
exp = new LogNormalDistributionModel();
exp.initByName("M", "1", "S", "1", "meanInRealSpace", true, "offset", "3");
mean = exp.getMean();
assertEquals(mean, 4, 1e-10);
try {
exp = new LogNormalDistributionModel();
exp.initByName("M", "1", "S", "1", "meanInRealSpace", false, "offset", "3");
mean = exp.getMean();
assertEquals(mean, 4.4816890703380645, 1e-10);
} catch (RuntimeException e) {
// we are fine here
}
}
@Test
public void testMeanOfUniform() throws Exception {
Uniform dist = (Uniform) fromXML("<input spec='beast.math.distributions.Uniform' lower='0' upper='1.0' offset='0'/>");
assertEquals(0.5, dist.getMean(), 1e-10);
dist = (Uniform) fromXML("<input spec='beast.math.distributions.Uniform'/>");
assertEquals(0.5, dist.getMean(), 1e-10);
dist = (Uniform) fromXML("<input spec='beast.math.distributions.Uniform' lower='0' upper='1.0' offset='10'/>");
assertEquals(10.5, dist.getMean(), 1e-10);
dist = (Uniform) fromXML("<input spec='beast.math.distributions.Uniform' upper='Infinity'/>");
assertEquals(Double.NaN, dist.getMean(), 1e-10);
dist = (Uniform) fromXML("<input spec='beast.math.distributions.Uniform' lower='-Infinity' offset='10'/>");
assertEquals(Double.NaN, dist.getMean(), 1e-10);
dist = (Uniform) fromXML("<input spec='beast.math.distributions.Uniform' lower='-10' upper='10.0' offset='10'/>");
assertEquals(10, dist.getMean(), 1e-10);
dist = new Uniform();
dist.initByName("lower", "-1.0", "upper", "0.0");
assertEquals(-0.5, dist.getMean(), 1e-10);
}
BEASTInterface fromXML(String xml) throws Exception {
return (new XMLParser()).parseBareFragment(xml, true);
}
}