From eee753bc0b8bf0f5a47f022e84611dfe8490461c Mon Sep 17 00:00:00 2001 From: "joseph.lizier" Date: Wed, 1 Aug 2012 12:14:24 +0000 Subject: [PATCH] Adding unit tests for Chi Square distribution in MathsUtils and for Entropy Calculator Gaussian --- .../EntropyCalculatorLinearGaussianTest.java | 36 +++++ .../infodynamics/utils/MathsUtilsTest.java | 136 ++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100755 java/unittests/infodynamics/measures/continuous/gaussian/EntropyCalculatorLinearGaussianTest.java create mode 100755 java/unittests/infodynamics/utils/MathsUtilsTest.java diff --git a/java/unittests/infodynamics/measures/continuous/gaussian/EntropyCalculatorLinearGaussianTest.java b/java/unittests/infodynamics/measures/continuous/gaussian/EntropyCalculatorLinearGaussianTest.java new file mode 100755 index 0000000..576cbaf --- /dev/null +++ b/java/unittests/infodynamics/measures/continuous/gaussian/EntropyCalculatorLinearGaussianTest.java @@ -0,0 +1,36 @@ +package infodynamics.measures.continuous.gaussian; + +import infodynamics.utils.MatrixUtils; +import infodynamics.utils.RandomGenerator; +import junit.framework.TestCase; + +public class EntropyCalculatorLinearGaussianTest extends TestCase { + + public void testVarianceSetting() { + EntropyCalculatorGaussian entcalc = new EntropyCalculatorGaussian(); + entcalc.initialise(); + double variance = 3.45567; + entcalc.setVariance(variance); + assertEquals(variance, entcalc.variance); + } + + public void testVarianceCalculation() { + EntropyCalculatorGaussian entcalc = new EntropyCalculatorGaussian(); + entcalc.initialise(); + RandomGenerator randomGenerator = new RandomGenerator(); + double[] gaussianObservations = randomGenerator.generateNormalData(100, 5, 3); + double variance = MatrixUtils.stdDev(gaussianObservations); + variance *= variance; + entcalc.setObservations(gaussianObservations); + assertEquals(variance, entcalc.variance); + } + + public void testEntropyCalculation() { + EntropyCalculatorGaussian entcalc = new EntropyCalculatorGaussian(); + entcalc.initialise(); + double variance = 3.45567; + entcalc.setVariance(variance); + double expectedEntropy = 0.5 * Math.log(2.0*Math.PI*Math.E*variance); + assertEquals(expectedEntropy, entcalc.computeAverageLocalOfObservations()); + } +} diff --git a/java/unittests/infodynamics/utils/MathsUtilsTest.java b/java/unittests/infodynamics/utils/MathsUtilsTest.java new file mode 100755 index 0000000..e486bdb --- /dev/null +++ b/java/unittests/infodynamics/utils/MathsUtilsTest.java @@ -0,0 +1,136 @@ +package infodynamics.utils; + +import infodynamics.utils.MathsUtils; + +import junit.framework.TestCase; + +/** + * Test functionality of the utility functions in MathsUtils + * + * @author Joseph Lizier. + * + */ +public class MathsUtilsTest extends TestCase { + + /** + * Confirm that our erf() function is correct to 6 dp + */ + public void testErf() { + // Compare against the results supplied by octave + double[] octaveResults = {0.000000, 0.112463, 0.222703, 0.328627, + 0.428392, 0.520500, 0.603856, 0.677801, 0.742101, 0.796908, + 0.842701, 0.880205, 0.910314, 0.934008, 0.952285, 0.966105, + 0.976348, 0.983790, 0.989091, 0.992790, 0.995322, 0.997021, + 0.998137, 0.998857, 0.999311, 0.999593, 0.999764, 0.999866, + 0.999925, 0.999959, 0.999978, 0.999988, 0.999994, 0.999997, + 0.999998, 0.999999, 1.000000}; + + for (int n=0; n 1) + double[] octaveResults3degFree = {0.000000, 0.008163, 0.022411, 0.039972, + 0.059758, 0.081109, 0.103568, 0.126796, 0.150533, 0.174572, + 0.198748, 0.222926, 0.246996, 0.270867, 0.294465, 0.317730, + 0.340610, 0.363066, 0.385065, 0.406581, 0.427593, 0.448087, + 0.468052, 0.487479, 0.506365, 0.524709, 0.542510, 0.559773, + 0.576500, 0.592698, 0.608375, 0.623537, 0.638195, 0.652357, + 0.666035, 0.679238, 0.691978, 0.704266, 0.716114, 0.727533, + 0.738536, 0.749134, 0.759338, 0.769161, 0.778615, 0.787710, + 0.796458, 0.804870, 0.812958, 0.820732, 0.828203, 0.835381, + 0.842276, 0.848898, 0.855256, 0.861361, 0.867222, 0.872846, + 0.878243, 0.883422, 0.888390, 0.893155, 0.897725, 0.902107, + 0.906309, 0.910337, 0.914199, 0.917900, 0.921447, 0.924846, + 0.928102, 0.931222, 0.934211, 0.937074, 0.939816, 0.942442, + 0.944956, 0.947364, 0.949669, 0.951876, 0.953988, 0.956010, + 0.957946, 0.959798, 0.961571, 0.963267, 0.964890, 0.966443, + 0.967928, 0.969350, 0.970709, 0.972010, 0.973253, 0.974443, + 0.975581, 0.976669, 0.977709, 0.978704, 0.979655, 0.980564, + 0.981434}; + for (int n=0; n 2) + double[] octaveResults10degFree = {0.000000, 0.000000, 0.000000, + 0.000001, 0.000002, 0.000007, 0.000016, 0.000033, 0.000061, + 0.000106, 0.000172, 0.000266, 0.000394, 0.000565, 0.000786, + 0.001065, 0.001411, 0.001835, 0.002344, 0.002949, 0.003660, + 0.004485, 0.005435, 0.006519, 0.007746, 0.009124, 0.010663, + 0.012370, 0.014253, 0.016320, 0.018576, 0.021028, 0.023682, + 0.026543, 0.029615, 0.032902, 0.036407, 0.040133, 0.044081, + 0.048255, 0.052653, 0.057277, 0.062126, 0.067200, 0.072496, + 0.078014, 0.083751, 0.089703, 0.095869, 0.102243, 0.108822, + 0.115601, 0.122577, 0.129742, 0.137092, 0.144621, 0.152324, + 0.160193, 0.168223, 0.176406, 0.184737, 0.193207, 0.201811, + 0.210540, 0.219387, 0.228347, 0.237410, 0.246569, 0.255818, + 0.265149, 0.274555, 0.284028, 0.293562, 0.303148, 0.312781, + 0.322452, 0.332156, 0.341886, 0.351635, 0.361396, 0.371163, + 0.380930, 0.390692, 0.400441, 0.410173, 0.419882, 0.429562, + 0.439208, 0.448816, 0.458380, 0.467896, 0.477360, 0.486766, + 0.496111, 0.505391, 0.514602, 0.523741, 0.532804, 0.541788, + 0.550690, 0.559507}; + for (int n=0; n