package hex.singlenoderf; import org.junit.Test; import org.junit.Assert; public class TwoingStatisticTest { @Test public void twoingTest() { // basic test cases to check twoing computation int[] dd_l = {4,0,0,1}; int[] dd_r = {0,3,2,0}; double result = twoing(dd_l, 5, dd_r, 5); Assert.assertTrue(Math.abs(result - 4.0) < 1e-10); dd_l[0] = 4; dd_l[1] = 3; dd_l[2] = 2; dd_l[3] = 0; dd_r[0] = 0; dd_r[1] = 0; dd_r[2] = 0; dd_r[3] = 1; result = twoing(dd_l, 9, dd_r, 1); Assert.assertTrue(Math.abs(result - 4.0) < 1e-10); dd_l[0] = 4; dd_l[1] = 3; dd_l[2] = 1; dd_l[3] = 0; dd_r[0] = 0; dd_r[1] = 0; dd_r[2] = 1; dd_r[3] = 1; result = twoing(dd_l, 8, dd_r, 2); Assert.assertTrue(Math.abs(result - 3.0625) < 1e-10); dd_l[0] = 999; dd_l[1] = 1000005; dd_l[2] = 3009; dd_l[3] = 1; dd_r[0] = 999; dd_r[1] = 1000005; dd_r[2] = 3009; dd_r[3] = 1; result = twoing(dd_l, 999+1000005+3009+1, dd_r, 999+1000005+3009+1); Assert.assertTrue(Math.abs(result - 0.0) < 1e-10); } private double twoing(int[] dd_l, int sum_l, int[] dd_r, int sum_r ) { double result = 0.0; double sd_l = (double)sum_l; double sd_r = (double)sum_r; for (int i = 0; i < dd_l.length; i++) { double tmp = Math.abs(((double)dd_l[i])/sd_l - ((double)dd_r[i])/sd_r); result = result + tmp; } result = result * result; return result; } }