/** Test a column matrix. */ @Test public void testBeatsOrEqualsBabai() { System.out.println("testBeatsOrEqualsBabai"); // run nearest point test by making small deviations (del) to lattice points. int iters = 100; Random r = new Random(); double del = 1000.0; for (int t = 0; t < iters; t++) { int n = r.nextInt(100) + 5; Lattice lattice = new GeneralLattice(Matrix.random(n, n)); Matrix G = lattice.getGeneratorMatrix(); Mbest instance = new Mbest(lattice, n); Babai babai = new Babai(lattice); // System.out.println("G is " + G.getRowDimension() + " by " + G.getColumnDimension()); double[] x = new double[G.getRowDimension()]; double[] xdel = new double[G.getRowDimension()]; double[] u = new double[n]; for (int i = 0; i < n; i++) { u[i] = r.nextDouble(); } VectorFunctions.matrixMultVector(G, u, xdel); instance.nearestPoint(xdel); babai.nearestPoint(xdel); double instdist = VectorFunctions.distance_between2(instance.getLatticePoint(), xdel); double babaidist = VectorFunctions.distance_between2(babai.getLatticePoint(), xdel); System.out.println(babaidist + ", " + instdist); // System.out.println(VectorFunctions.print(babai.getIndex())); assertTrue(instdist <= babaidist); } }
@Test public void testDisambiguate() { System.out.println("testDisambiguate"); double[] p1 = {1.3, -2.1}; int m = p1.length - 1; AmbiguityRemover instance = new AmbiguityRemover(m); p1 = instance.disambiguate(p1); double[] y1 = {0.3, -0.1}; assertTrue(VectorFunctions.distance_between2(p1, y1) < 0.000001); double[] p2 = {1.3, -2.1, 2.6}; m = p2.length - 1; instance = new AmbiguityRemover(m); p2 = instance.disambiguate(p2); double[] y2 = {0.3, 0.4, 0.1}; assertTrue(VectorFunctions.distance_between2(p2, y2) < 0.000001); }
/** Test of setSize method, of class AmbiguityRemover. */ @Test public void testNextColumn() { System.out.println("testNextColumn"); double[] c = VectorFunctions.eVector(0, 1); // System.out.println("c = " + VectorFunctions.print(c)); c = AmbiguityRemover.getNextColumn(c); // System.out.println("c = " + VectorFunctions.print(c)); double[] y1 = {0, 1}; assertTrue(VectorFunctions.distance_between2(c, y1) < 0.000001); c = AmbiguityRemover.getNextColumn(c); // System.out.println("c = " + VectorFunctions.print(c)); double[] y2 = {0, 1.0 / 2.0, 1.0 / 2.0}; assertTrue(VectorFunctions.distance_between2(c, y2) < 0.000001); c = AmbiguityRemover.getNextColumn(c); // System.out.println("c = " + VectorFunctions.print(c)); double[] y3 = {0, 1.0 / 3.0, 1.0 / 2.0, 1.0 / 6}; assertTrue(VectorFunctions.distance_between2(c, y3) < 0.000001); }