Ejemplo n.º 1
0
 /**
  * Get the {@code grid} as sample indices.
  *
  * @param s Sampling that this {@code grid} subsamples.
  * @param grid the subsample locations defined in terms of Sampling {@code s}.
  * @return the {@code grid} as sample indices.
  * @throws IllegalArgumentException if any of the grid locations are not valid with the given
  *     Sampling {@code s}.
  */
 public static int[] gridCoordsToSamples(Sampling s, float[] grid) {
   Almost a = new Almost();
   float f = (float) s.getFirst();
   float l = (float) s.getLast();
   int ng = grid.length;
   int[] t = new int[ng]; // temp sample indices
   int count = 0;
   int is = -1; // save last index
   for (int ig = 0; ig < ng; ig++) {
     float v = grid[ig];
     if (a.ge(v, f) && a.le(v, l)) {
       int i = s.indexOfNearest(v);
       if (i != is) { // no duplicate entries
         t[count] = i;
         count++;
       }
       is = i;
     } else {
       print("Error: value " + v + " is out of bounds! First=" + f + ", Last=" + l);
     }
   }
   if (count != ng) {
     print("Grid values:");
     dump(grid);
     throw new IllegalArgumentException(
         "Error: Only "
             + count
             + " of "
             + ng
             + " input grid coordinates are valid "
             + "with the specified sampling "
             + s.toString());
   }
   return copy(count, t);
 }
Ejemplo n.º 2
0
  /** test the hash code algorithm */
  public void testHashCode() {
    Almost a = new Almost(0.001, 0.000001);
    assert (a.hashCodeOf(0.00000001, 100) == 0);
    assert (a.hashCodeOf(0.99999999, 100) == 1);
    assert (a.hashCodeOf(1.00000001, 100) == 1);
    assert (a.hashCodeOf(123456789L, 100) == 123456789L);
    assert (a.hashCodeOf(3.1415, 4) == a.hashCodeOf(3.1415926, 4));
    assert (a.hashCodeOf(3.1415, 5) != a.hashCodeOf(3.1415926, 5));
    assert (a.hashCodeOf(-3.1415, 4) == a.hashCodeOf(-3.1415926, 4));
    assert (a.hashCodeOf(-3.1415, 5) != a.hashCodeOf(-3.1415926, 5));
    assert (a.hashCodeOf(314.15, 4) == a.hashCodeOf(314.15926, 4));
    assert (a.hashCodeOf(314.15, 5) != a.hashCodeOf(314.15926, 5));
    assert (a.hashCodeOf(-314.15, 4) == a.hashCodeOf(-314.15926, 4));
    assert (a.hashCodeOf(-314.15, 5) != a.hashCodeOf(-314.15926, 5));
    assert (a.hashCodeOf(0.0031415, 4) == a.hashCodeOf(0.0031415926, 4));
    assert (a.hashCodeOf(0.0031415, 5) != a.hashCodeOf(0.0031415926, 5));

    // specify precision differently
    a = new Almost(0.0001);
    assert (a.equal(0.0031415, 0.0031415926));
    assert (a.hashCodeOf(0.0031415) == a.hashCodeOf(0.0031415926));

    a = new Almost(0.00001);
    assert (!a.equal(0.0031415, 0.0031415926));
    assert (a.hashCodeOf(0.0031415) != a.hashCodeOf(0.0031415926));

    a = new Almost(4);
    assert (a.equal(0.0031415, 0.0031415926));
    assert (a.hashCodeOf(0.0031415) == a.hashCodeOf(0.0031415926));

    a = new Almost(5);
    assert (!a.equal(0.0031415, 0.0031415926));
    assert (a.hashCodeOf(0.0031415) != a.hashCodeOf(0.0031415926));
  }
Ejemplo n.º 3
0
  /** Run some test code. Any "public void test*()" method starting with "test" will be used */
  public void testEverything() {
    Almost a = new Almost();

    // should obviously succeed.  No precision involved
    assert (a.between(1., 0., 2.));
    assert (a.between(-1., 0., -2.));
    assert (a.between(-1., -0.5, -2.));
    assert (a.outside(1., 0., 2.) == 0);
    assert (a.outside(1., 0.5, 2.) == 0);
    assert (a.outside(-1., 0., -2.) == 0);
    assert (a.outside(-1., -0.5, -2.) == 0);
    assert (a.cmp(1., 0.) > 0);
    assert (a.cmp(0., 1.) < 0);
    assert (a.cmp(1., 1.) == 0);
    assert (a.cmp(0., 0.) == 0);
    assert (a.equal(3., 3.));
    assert (a.equal(0., 0.));
    assert (a.zero(0.));

    // Succeed if precision handled correctly
    assert (a.zero(a.getMinValue() / 2.));
    assert (!a.zero(a.getMinValue() * 2.));
    assert (1. != 1. + a.getEpsilon());
    assert (1. != 1. - a.getEpsilon());
    assert (0. != a.getMinValue());
    assert (a.equal(1., 1. + a.getEpsilon() / 2.));
    assert (!a.equal(1., 1. + a.getEpsilon() * 2.1));
    assert (a.equal(1., 1.000000000001));
    assert (a.getMinValue() / 2. > 0.);
    assert (a.equal(0., a.getMinValue() / 2.));
    assert (a.between(1., 1.000000000001, 2.));
    assert (a.between(-1., -1.000000000001, -2.));
    assert (a.outside(1., 1.000000000001, 2.) == 0);
    assert (a.cmp(1., 1.000000000001) == 0);
  }
Ejemplo n.º 4
0
 /** test Object methods */
 public void testAlmostObjectMethod() {
   Almost af1 = new Almost(10 * MathPlus.FLT_EPSILON, 100 * Float.MIN_VALUE);
   Almost af2 = new Almost(10 * MathPlus.FLT_EPSILON);
   Almost af3 = new Almost();
   Almost ad = new Almost(10 * MathPlus.DBL_EPSILON, 100 * Double.MIN_VALUE);
   assert af1.equals(af2) : af1 + " " + af2;
   assert af1.equals(af3) : af1 + " " + af3;
   assert af2.equals(af3) : af2 + " " + af3;
   assert af1.hashCode() == af2.hashCode() : af1 + " " + af2;
   assert af1.hashCode() == af3.hashCode() : af1 + " " + af3;
   assert af2.hashCode() == af3.hashCode() : af2 + " " + af3;
   assert af1.toString().equals(af2.toString()) : af1.toString() + " " + af2.toString();
   assert af1.toString().equals(af3.toString()) : af1.toString() + " " + af3.toString();
   assert af2.toString().equals(af3.toString()) : af2.toString() + " " + af3.toString();
   for (Almost af : new Almost[] {af1, af2, af3}) {
     assert !af.equals(ad);
     assert af.hashCode() != ad.hashCode();
     assert !af.toString().equals(ad.toString());
   }
 }