| // 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 a coin toss with Random.nextBool() is fair. |
| |
| import "package:expect/expect.dart"; |
| import 'dart:math'; |
| |
| main() { |
| var seed = new Random().nextInt(1 << 16); |
| print("coin_test seed: $seed"); |
| var rnd = new Random(seed); |
| var heads = 0; |
| var tails = 0; |
| for (var i = 0; i < 10000; i++) { |
| if (rnd.nextBool()) { |
| heads++; |
| } else { |
| tails++; |
| } |
| } |
| print("Heads: $heads\n" |
| "Tails: $tails\n" |
| "Ratio: ${heads / tails}\n"); |
| Expect.approxEquals(1.0, heads / tails, 0.1); |
| |
| heads = 0; |
| tails = 0; |
| for (var i = 0; i < 10000; i++) { |
| rnd = new Random(i); |
| if (rnd.nextBool()) { |
| heads++; |
| } else { |
| tails++; |
| } |
| } |
| print("Heads: $heads\n" |
| "Tails: $tails\n" |
| "Ratio: ${heads / tails}\n"); |
| Expect.approxEquals(1.0, heads / tails, 0.1); |
| |
| // A sequence of newly allocated Random number generators should have fair |
| // initial tosses. |
| heads = 0; |
| tails = 0; |
| for (var i = 0; i < 10000; i++) { |
| rnd = new Random(); |
| if (rnd.nextBool()) { |
| heads++; |
| } else { |
| tails++; |
| } |
| } |
| print("Heads: $heads\n" |
| "Tails: $tails\n" |
| "Ratio: ${heads / tails}\n"); |
| Expect.approxEquals(1.0, heads / tails, 0.1); |
| } |