Beispiel #1
0
  /** 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);
  }