// 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.

/// @assertion int compareTo(Duration other)
/// Compares this object to another Comparable
/// Returns a value like a Comparator when comparing this to other.
/// May throw an ArgumentError if other is of a type that is not comparable to 
/// @description Checks that compareTo() method is implemented correctly.
/// @author rodionov

import "../../../Utils/expect.dart";

main() {
  Expect.equals(0, new Duration(days: 1, hours: -4, minutes: 0, seconds: 61,
      milliseconds: 0).compareTo(new Duration(days: 0, hours: 20, minutes: 1,
      seconds: 1, milliseconds: 0)));
  Expect.equals(0, new Duration(hours: 1).compareTo(new Duration(seconds: 3600)));

  Expect.equals(1, new Duration(days: 0, hours: 0, minutes: 0, seconds: 0,
      milliseconds: 1000).compareTo(new Duration(days: 0, hours: 0, minutes: 0,
      seconds: 0, milliseconds: 999)));
  Expect.equals(1, new Duration(days: 0, hours: 0, minutes: 0, seconds: 0,
      milliseconds: 1001).compareTo(new Duration(days: 0, hours: 0, minutes: 0,
      seconds: 1, milliseconds: 0)));
  Expect.equals(1, new Duration(days: 0, hours: 0, minutes: 0, seconds: 0,
      milliseconds: 3600001).compareTo(new Duration(days: 0, hours: 1,
      minutes: 0, seconds: 0, milliseconds: 0)));
  Expect.equals(1, new Duration(days: 0, hours: 0, minutes: 25*60, seconds: 0,
      milliseconds: 0).compareTo(new Duration(days: 1, hours: 0, minutes: 0,
      seconds: 0, milliseconds: 0)));

  Expect.equals(-1, new Duration(days: 0, hours: 0, minutes: 0, seconds: 0,
      milliseconds: 999).compareTo(new Duration(days: 0, hours: 0, minutes: 0,
      seconds: 1, milliseconds: 0)));
  Expect.equals(-1, new Duration(days: 0, hours: 0, minutes: 0, seconds: 1,
      milliseconds: 0).compareTo(new Duration(days: 0, hours: 0, minutes: 0,
      seconds: 0, milliseconds: 1001)));
  Expect.equals(-1, new Duration(days: 0, hours: 1, minutes: 0, seconds: 0,
      milliseconds: 0).compareTo(new Duration(days: 0, hours: 0, minutes: 0,
      seconds: 0, milliseconds: 3600001)));
  Expect.equals(-1, new Duration(days: 1, hours: 0, minutes: 0, seconds: 0,
      milliseconds: 0).compareTo(new Duration(days: 0, hours: 0, minutes: 25*60,
      seconds: 0, milliseconds: 0)));
}
