// 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 Duration difference(DateTime other) 
/// Returns a [Duration] with the difference of [:this:] and [other]
/// @description Checks that the method returns correct value
/// @author hlodvig

import "../../../Utils/expect.dart";
void check(val1, val2, expected){
  DateTime dt1 = new DateTime.fromMillisecondsSinceEpoch(val1);
  DateTime dt2 = new DateTime.fromMillisecondsSinceEpoch(val2);
  Expect.equals(new Duration(milliseconds: expected), dt1.difference(dt2));
  Expect.equals(new Duration(milliseconds: -expected), dt2.difference(dt1));

  dt1 = new DateTime.fromMillisecondsSinceEpoch(val1);
  dt2 = new DateTime.fromMillisecondsSinceEpoch(val2);
  Expect.equals(new Duration(milliseconds: expected), dt1.difference(dt2));
  Expect.equals(new Duration(milliseconds: -expected), dt2.difference(dt1));
}

main() {
  check(0, 0, 0);
  check(0, 1000, -1000);
  check(0, -1000, 1000);
  check(1000, 0, 1000);
  check(-1000, 0, -1000);
  check(1000, 1000, 0);
}
