// Copyright (c) 2013, 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";

main() {
  var dt = new DateTime.now();
  Expect.isTrue(dt is Comparable);

  var dt2 = new DateTime.fromMillisecondsSinceEpoch(100);
  var dt3 = new DateTime.fromMillisecondsSinceEpoch(200, isUtc: true);
  var dt3b = new DateTime.fromMillisecondsSinceEpoch(200);
  var dt4 = new DateTime.fromMillisecondsSinceEpoch(300);
  var dt5 = new DateTime.fromMillisecondsSinceEpoch(400, isUtc: true);
  var dt5b = new DateTime.fromMillisecondsSinceEpoch(400);

  Expect.isTrue(dt2.compareTo(dt2) == 0);
  Expect.isTrue(dt3.compareTo(dt3) == 0);
  Expect.isTrue(dt3b.compareTo(dt3b) == 0);
  Expect.isTrue(dt4.compareTo(dt4) == 0);
  Expect.isTrue(dt5.compareTo(dt5) == 0);
  Expect.isTrue(dt5b.compareTo(dt5b) == 0);

  // Time zones don't have any effect.
  Expect.isTrue(dt3.compareTo(dt3b) == 0);
  Expect.isTrue(dt5.compareTo(dt5b) == 0);

  Expect.isTrue(dt2.compareTo(dt3) < 0);
  Expect.isTrue(dt3.compareTo(dt4) < 0);
  Expect.isTrue(dt4.compareTo(dt5) < 0);

  Expect.isTrue(dt2.compareTo(dt3b) < 0);
  Expect.isTrue(dt4.compareTo(dt5b) < 0);

  Expect.isTrue(dt3.compareTo(dt2) > 0);
  Expect.isTrue(dt4.compareTo(dt3) > 0);
  Expect.isTrue(dt5.compareTo(dt4) > 0);

  Expect.isTrue(dt3b.compareTo(dt2) > 0);
  Expect.isTrue(dt5b.compareTo(dt4) > 0);
}
