// Copyright (c) 2011, 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.

// @dart = 2.9

import "package:expect/expect.dart";

// Dart test program for testing 'compare' on doubles.

void main() {
  Expect.equals(0, (0.0).compareTo(0.0));
  Expect.equals(0, (1.0).compareTo(1.0));
  Expect.equals(0, (-2.0).compareTo(-2.0));
  Expect.equals(0, (1e-50).compareTo(1e-50));
  Expect.equals(0, (-2e50).compareTo(-2e50));
  Expect.equals(0, double.nan.compareTo(double.nan));
  Expect.equals(0, double.infinity.compareTo(double.infinity));
  Expect.equals(0, double.negativeInfinity.compareTo(double.negativeInfinity));
  Expect.equals(0, (-0.0).compareTo(-0.0));
  Expect.isTrue((0.0).compareTo(1.0) < 0);
  Expect.isTrue((1.0).compareTo(0.0) > 0);
  Expect.isTrue((0.0).compareTo(-1.0) > 0);
  Expect.isTrue((-1.0).compareTo(0.0) < 0);
  Expect.isTrue((0.0).compareTo(1234e11) < 0);
  Expect.isTrue((123e-112).compareTo(0.0) > 0);
  Expect.isTrue((0.0).compareTo(-123.0e12) > 0);
  Expect.isTrue((-1.0e8).compareTo(0.0) < 0);

  double maxDouble = 1.7976931348623157e308;
  Expect.equals(0, maxDouble.compareTo(maxDouble));
  Expect.isTrue(maxDouble.compareTo(double.infinity) < 0);
  Expect.isTrue(double.infinity.compareTo(maxDouble) > 0);

  double negMaxDouble = -maxDouble;
  Expect.equals(0, negMaxDouble.compareTo(negMaxDouble));
  Expect.isTrue(double.negativeInfinity.compareTo(negMaxDouble) < 0);
  Expect.isTrue(negMaxDouble.compareTo(double.negativeInfinity) > 0);

  Expect.isTrue((-0.0).compareTo(0.0) < 0);
  Expect.isTrue((0.0).compareTo(-0.0) > 0);
  Expect.isTrue(double.nan.compareTo(double.infinity) > 0);
  Expect.isTrue(double.nan.compareTo(double.negativeInfinity) > 0);
  Expect.isTrue(double.infinity.compareTo(double.nan) < 0);
  Expect.isTrue(double.negativeInfinity.compareTo(double.nan) < 0);
  Expect.isTrue(maxDouble.compareTo(double.nan) < 0);
  Expect.isTrue(negMaxDouble.compareTo(double.nan) < 0);
  Expect.isTrue(double.nan.compareTo(maxDouble) > 0);
  Expect.isTrue(double.nan.compareTo(negMaxDouble) > 0);
}
