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))); |
+} |