// Copyright (c) 2017, 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 distribution of hash codes for doubles is reasonable.

// VMOptions=--intrinsify
// VMOptions=--no_intrinsify

import 'package:expect/expect.dart';

main() {
  Expect.isTrue(ratio(0, 1) >= 0.95);
  Expect.isTrue(ratio(0, 100) >= 0.95);
  Expect.isTrue(ratio(0, 0xffffff) >= 0.95);
  Expect.isTrue(ratio(0xffffff) >= 0.95);
  Expect.isTrue(ratio(0xffffffff) >= 0.95);
  Expect.isTrue(ratio(0xffffffffffffff) >= 0.95);

  Expect.isTrue(ratio(0, -1) >= 0.95);
  Expect.isTrue(ratio(0, -100) >= 0.95);
  Expect.isTrue(ratio(0, -0xffffff) >= 0.95);
  Expect.isTrue(ratio(-0xffffff) >= 0.95);
  Expect.isTrue(ratio(-0xffffffff) >= 0.95);
  Expect.isTrue(ratio(-0xffffffffffffff) >= 0.95);
}

double ratio(num start, [num? end]) {
  final n = 1000;
  end ??= (start + 1) * 2;

  // Collect the set of distinct doubles and the
  // set of distinct hash codes.
  final doubles = new Set<double>();
  final codes = new Set<int>();

  final step = (end.toDouble() - start.toDouble()) / n;
  var current = start.toDouble();
  for (int i = 0; i < n; i++) {
    doubles.add(current);
    codes.add(current.hashCode);
    current += step;
  }

  // Return the ratio between distinct doubles and
  // distinct hash codes.
  return codes.length / doubles.length;
}
