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