/**
  * Causes all known instances of {@link RandomGenerator}, and future ones, to be started from a
  * fixed seed. This is useful for making tests deterministic.
  */
 public static void useTestSeed() {
   useTestSeed = true;
   synchronized (INSTANCES) {
     for (RandomGenerator random : INSTANCES.keySet()) {
       random.setSeed(TEST_SEED);
     }
     INSTANCES.clear();
   }
 }
  public GaussianDistribution(final int dims, final double[] pos, final double size) {
    final Random random = Util.R.get();
    this.dims = dims;
    final double[] means = new double[dims];
    for (int i = 0; i < means.length; i++) {
      means[i] = 1;
    }
    final double[][] diaganals = new double[dims][];
    for (int i = 0; i < diaganals.length; i++) {
      diaganals[i] = new double[dims];
      diaganals[i][i] = 1;
    }
    final RandomGenerator rng = new JDKRandomGenerator();
    rng.setSeed(random.nextInt());

    this.pos = pos;
    this.size = size;
  }
  /** Test points that are very close together. See issue MATH-546. */
  @Test
  public void testSmallDistances() {
    // Create a bunch of CloseDoublePoints. Most are identical, but one is different by a
    // small distance.
    int[] repeatedArray = {0};
    int[] uniqueArray = {1};
    DoublePoint repeatedPoint = new DoublePoint(repeatedArray);
    DoublePoint uniquePoint = new DoublePoint(uniqueArray);

    Collection<DoublePoint> points = new ArrayList<DoublePoint>();
    final int NUM_REPEATED_POINTS = 10 * 1000;
    for (int i = 0; i < NUM_REPEATED_POINTS; ++i) {
      points.add(repeatedPoint);
    }
    points.add(uniquePoint);

    // Ask a KMeansPlusPlusClusterer to run zero iterations (i.e., to simply choose initial
    // cluster centers).
    final long RANDOM_SEED = 0;
    final int NUM_CLUSTERS = 2;
    final int NUM_ITERATIONS = 0;
    random.setSeed(RANDOM_SEED);

    KMeansPlusPlusClusterer<DoublePoint> clusterer =
        new KMeansPlusPlusClusterer<DoublePoint>(
            NUM_CLUSTERS, NUM_ITERATIONS, new CloseDistance(), random);
    List<CentroidCluster<DoublePoint>> clusters = clusterer.cluster(points);

    // Check that one of the chosen centers is the unique point.
    boolean uniquePointIsCenter = false;
    for (CentroidCluster<DoublePoint> cluster : clusters) {
      if (cluster.getCenter().equals(uniquePoint)) {
        uniquePointIsCenter = true;
      }
    }
    Assert.assertTrue(uniquePointIsCenter);
  }
 @Before
 public void setUp() {
   random = new JDKRandomGenerator();
   random.setSeed(1746432956321l);
 }