From 65c7ac49a6a1eadfb98d7c4aeacd61caa1895407 Mon Sep 17 00:00:00 2001 From: "joseph.lizier" Date: Wed, 5 Sep 2012 06:24:47 +0000 Subject: [PATCH] Adding folder for testing discrete calculators; First version of unit tests for MI discrete --- .../discrete/MutualInformationTester.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100755 java/unittests/infodynamics/measures/discrete/MutualInformationTester.java diff --git a/java/unittests/infodynamics/measures/discrete/MutualInformationTester.java b/java/unittests/infodynamics/measures/discrete/MutualInformationTester.java new file mode 100755 index 0000000..99a589b --- /dev/null +++ b/java/unittests/infodynamics/measures/discrete/MutualInformationTester.java @@ -0,0 +1,55 @@ +package infodynamics.measures.discrete; + +import junit.framework.TestCase; + +public class MutualInformationTester extends TestCase { + + public void testFullyDependent() { + MutualInformationCalculator miCalc = new MutualInformationCalculator(2, 0); + + // X2 is a copy of X1 - MI should be 1 bit + miCalc.initialise(); + miCalc.addObservations(new int[] {0, 0, 1, 1}, new int[] {0, 0, 1, 1}); + double miCopy = miCalc.computeAverageLocalOfObservations(); + assertEquals(1.0, miCopy, 0.000001); + } + + public void testIndependent() { + MutualInformationCalculator miCalc = new MutualInformationCalculator(2, 0); + + // X2 is unrelated to X1 - MI should be 0 bits + miCalc.initialise(); + miCalc.addObservations(new int[] {0, 0, 1, 1}, new int[] {0, 1, 0, 1}); + double miRand = miCalc.computeAverageLocalOfObservations(); + assertEquals(0.0, miRand, 0.000001); + } + + public void testXor() { + MutualInformationCalculator miCalc = new MutualInformationCalculator(2, 0); + + int[] X1 = new int[] {0, 0, 1, 1}; + int[] X2 = new int[] {0, 1, 0, 1}; + int[] Y = new int[] {0, 1, 1, 0}; + + // Y is independent of X1 - MI should be 0 bits + miCalc.initialise(); + miCalc.addObservations(X1, Y); + double miX1Y = miCalc.computeAverageLocalOfObservations(); + assertEquals(0.0, miX1Y, 0.000001); + + // Y is independent of X2 - MI should be 0 bits + miCalc.initialise(); + miCalc.addObservations(X2, Y); + double miX2Y = miCalc.computeAverageLocalOfObservations(); + assertEquals(0.0, miX2Y, 0.000001); + + // Y is fully determined from X1, X2 - MI should be 0 bits + MutualInformationCalculator miCalcBase4 = new MutualInformationCalculator(4, 0); + int[] X12 = new int[] {0, 1, 2, 3}; + miCalcBase4.initialise(); + miCalcBase4.addObservations(X12, Y); + miCalcBase4.setDebug(true); + double miX12Y = miCalcBase4.computeAverageLocalOfObservations(); + assertEquals(1.0, miX12Y, 0.000001); + } +}