// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.9

// Test that the default PRNG does converge towards Pi when doing a Monte Carlo
// simulation.

import "package:expect/expect.dart";
import 'dart:math';

var known_bad_seeds = const [50051, 55597, 59208];

void main([args]) {
  // Select a seed either from the argument passed in or
  // otherwise a random seed.
  var seed = -1;
  if ((args != null) && (args.length > 0)) {
    seed = int.parse(args[0]);
  } else {
    var seed_prng = new Random();
    while (seed == -1) {
      seed = seed_prng.nextInt(1 << 16);
      if (known_bad_seeds.contains(seed)) {
        // Reset seed and try again.
        seed = -1;
      }
    }
  }

  // Setup the PRNG for the Monte Carlo simulation.
  print("pi_test seed: $seed");
  var prng = new Random(seed);

  var outside = 0;
  var inside = 0;
  for (var i = 0; i < 600000; i++) {
    var x = prng.nextDouble();
    var y = prng.nextDouble();
    if ((x * x) + (y * y) < 1.0) {
      inside++;
    } else {
      outside++;
    }
  }
  // Mmmmh, Pie!
  var pie = 4.0 * (inside / (inside + outside));
  print("$pie");
  Expect.isTrue(((pi - 0.009) < pie) && (pie < (pi + 0.009)));
}
