// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: >
     Only passes when the provided date is exactly the specified number of
     milliseconds from the Unix epoch
includes: [assertRelativeDateMs.js]
---*/

var thrown;

assertRelativeDateMs(new Date(1970, 0), 0);
assertRelativeDateMs(new Date(1970, 0, 1, 0, 0, 0, 0), 0);
assertRelativeDateMs(new Date(1970, 0, 1, 0, 0, 0, 1), 1);
assertRelativeDateMs(new Date(1970, 0, 1, 0, 0, 0, -1), -1);
assertRelativeDateMs(new Date(1970, 0, 1, 0, 0, 1, 0), 1000);
assertRelativeDateMs(new Date(1970, 0, 1, 0, 0, -1, 0), -1000);
assertRelativeDateMs(new Date(1970, 0, 1, 0, 2, 0, 0), 120000);
assertRelativeDateMs(new Date(1970, 0, 1, 0, -2, 0, 0), -120000);
assertRelativeDateMs(new Date(2016, 3, 12, 13, 21, 23, 24), 1460467283024);

thrown = null;
try {
  assertRelativeDateMs(new Date(1), 0);
} catch (err) {
  thrown = err;
}
if (!thrown) {
  $ERROR('Expected error, but no error was thrown.');
} else if (thrown.constructor !== Test262Error) {
  $ERROR('Expected error of type Test262Error.');
}

thrown = null;
try {
  assertRelativeDateMs(new Date(-1), 0);
} catch (err) {
  thrown = err;
}
if (!thrown) {
  $ERROR('Expected error, but no error was thrown.');
} else if (thrown.constructor !== Test262Error) {
  $ERROR('Expected error of type Test262Error.');
}

thrown = null;
try {
  assertRelativeDateMs(new Date(1970, 0), 1);
} catch (err) {
  thrown = err;
}
if (!thrown) {
  $ERROR('Expected error, but no error was thrown.');
} else if (thrown.constructor !== Test262Error) {
  $ERROR('Expected error of type Test262Error.');
}

thrown = null;
try {
  assertRelativeDateMs(new Date(1970, 0), -1);
} catch (err) {
  thrown = err;
}
if (!thrown) {
  $ERROR('Expected error, but no error was thrown.');
} else if (thrown.constructor !== Test262Error) {
  $ERROR('Expected error of type Test262Error.');
}

thrown = null;
try {
  assertRelativeDateMs(new Date('invalid'), NaN);
} catch (err) {
  thrown = err;
}
if (!thrown) {
  $ERROR('Expected error, but no error was thrown.');
} else if (thrown.constructor !== Test262Error) {
  $ERROR('Expected error of type Test262Error.');
}

reportCompare(0, 0);
