/*
 * Copyright (c) 2016, 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 microsecondsSinceEpoch
 * The number of microseconds since the "Unix epoch" 1970-01-01T00:00:00Z (UTC).
 *
 * This value is independent of the time zone.
 *
 * This value is at most 8,640,000,000,000,000,000us (100,000,000 days) from
 * the Unix epoch. In other words:
 * microsecondsSinceEpoch.abs() <= 8640000000000000000.
 *
 * Note that this value does not fit into 53 bits (the size of a IEEE double).
 * A JavaScript number is not able to hold this value.
 * @description Checks that microsecondsSinceEpoch are microsecondsSinceEpoch *
 * 1000
 * @author sgrekhov@unipro.ru
 */
import "../../../Utils/expect.dart";

check(mills) {
  DateTime dateUTC = new DateTime.fromMillisecondsSinceEpoch(mills, isUtc: true);
  Expect.equals(mills * 1000, dateUTC.microsecondsSinceEpoch);

  DateTime date = new DateTime.fromMillisecondsSinceEpoch(mills, isUtc: false);
  Expect.equals(mills * 1000, dateUTC.microsecondsSinceEpoch);
}

main() {
  check(5);
  check(0);
  check(1);
  check(-1);
  check(-100);
  check(6031769);
  check(60317690009);
  check(8640000000000000);
  check(-8640000000000000);
}
