| Index: test/codegen/lib/math/pi_test.dart
|
| diff --git a/test/codegen/lib/math/pi_test.dart b/test/codegen/lib/math/pi_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9e3565a4a004a7f2a9cdfc41d6244729439b57ef
|
| --- /dev/null
|
| +++ b/test/codegen/lib/math/pi_test.dart
|
| @@ -0,0 +1,56 @@
|
| +// 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.
|
| +
|
| +// Test that the default PRNG does converge towards Pi when doing a Monte Carlo
|
| +// simulation.
|
| +
|
| +// Library tag to allow Dartium to run the test.
|
| +library pi_test;
|
| +
|
| +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)));
|
| +}
|
|
|