// Copyright 2009 the Sputnik authors.  All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
info: |
    When Date is called as part of a new expression it is
    a constructor: it initializes the newly created object
esid: sec-date-year-month-date-hours-minutes-seconds-ms
es5id: 15.9.3.1_A1_T3
description: 4 arguments, (year, month, date, hours)
---*/

if (typeof new Date(1899, 11, 31, 23) !== "object") {
  $ERROR("#1.1: typeof new Date(1899, 11, 31, 23) should be 'object'");
}

if (new Date(1899, 11, 31, 23) === undefined) {
  $ERROR("#1.2: new Date(1899, 11, 31, 23) should not be undefined");
}

var x13 = new Date(1899, 11, 31, 23);
if (typeof x13 !== "object") {
  $ERROR("#1.3: typeof new Date(1899, 11, 31, 23) should be 'object'");
}

var x14 = new Date(1899, 11, 31, 23);
if (x14 === undefined) {
  $ERROR("#1.4: new Date(1899, 11, 31, 23) should not be undefined");
}

if (typeof new Date(1899, 12, 1, 0) !== "object") {
  $ERROR("#2.1: typeof new Date(1899, 12, 1, 0) should be 'object'");
}

if (new Date(1899, 12, 1, 0) === undefined) {
  $ERROR("#2.2: new Date(1899, 12, 1, 0) should not be undefined");
}

var x23 = new Date(1899, 12, 1, 0);
if (typeof x23 !== "object") {
  $ERROR("#2.3: typeof new Date(1899, 12, 1, 0) should be 'object'");
}

var x24 = new Date(1899, 12, 1, 0);
if (x24 === undefined) {
  $ERROR("#2.4: new Date(1899, 12, 1, 0) should not be undefined");
}

if (typeof new Date(1900, 0, 1, 0) !== "object") {
  $ERROR("#3.1: typeof new Date(1900, 0, 1, 0) should be 'object'");
}

if (new Date(1900, 0, 1, 0) === undefined) {
  $ERROR("#3.2: new Date(1900, 0, 1, 0) should not be undefined");
}

var x33 = new Date(1900, 0, 1, 0);
if (typeof x33 !== "object") {
  $ERROR("#3.3: typeof new Date(1900, 0, 1, 0) should be 'object'");
}

var x34 = new Date(1900, 0, 1, 0);
if (x34 === undefined) {
  $ERROR("#3.4: new Date(1900, 0, 1, 0) should not be undefined");
}

if (typeof new Date(1969, 11, 31, 23) !== "object") {
  $ERROR("#4.1: typeof new Date(1969, 11, 31, 23) should be 'object'");
}

if (new Date(1969, 11, 31, 23) === undefined) {
  $ERROR("#4.2: new Date(1969, 11, 31, 23) should not be undefined");
}

var x43 = new Date(1969, 11, 31, 23);
if (typeof x43 !== "object") {
  $ERROR("#4.3: typeof new Date(1969, 11, 31, 23) should be 'object'");
}

var x44 = new Date(1969, 11, 31, 23);
if (x44 === undefined) {
  $ERROR("#4.4: new Date(1969, 11, 31, 23) should not be undefined");
}

if (typeof new Date(1969, 12, 1, 0) !== "object") {
  $ERROR("#5.1: typeof new Date(1969, 12, 1, 0) should be 'object'");
}

if (new Date(1969, 12, 1, 0) === undefined) {
  $ERROR("#5.2: new Date(1969, 12, 1, 0) should not be undefined");
}

var x53 = new Date(1969, 12, 1, 0);
if (typeof x53 !== "object") {
  $ERROR("#5.3: typeof new Date(1969, 12, 1, 0) should be 'object'");
}

var x54 = new Date(1969, 12, 1, 0);
if (x54 === undefined) {
  $ERROR("#5.4: new Date(1969, 12, 1, 0) should not be undefined");
}

if (typeof new Date(1970, 0, 1, 0) !== "object") {
  $ERROR("#6.1: typeof new Date(1970, 0, 1, 0) should be 'object'");
}

if (new Date(1970, 0, 1, 0) === undefined) {
  $ERROR("#6.2: new Date(1970, 0, 1, 0) should not be undefined");
}

var x63 = new Date(1970, 0, 1, 0);
if (typeof x63 !== "object") {
  $ERROR("#6.3: typeof new Date(1970, 0, 1, 0) should be 'object'");
}

var x64 = new Date(1970, 0, 1, 0);
if (x64 === undefined) {
  $ERROR("#6.4: new Date(1970, 0, 1, 0) should not be undefined");
}

if (typeof new Date(1999, 11, 31, 23) !== "object") {
  $ERROR("#7.1: typeof new Date(1999, 11, 31, 23) should be 'object'");
}

if (new Date(1999, 11, 31, 23) === undefined) {
  $ERROR("#7.2: new Date(1999, 11, 31, 23) should not be undefined");
}

var x73 = new Date(1999, 11, 31, 23);
if (typeof x73 !== "object") {
  $ERROR("#7.3: typeof new Date(1999, 11, 31, 23) should be 'object'");
}

var x74 = new Date(1999, 11, 31, 23);
if (x74 === undefined) {
  $ERROR("#7.4: new Date(1999, 11, 31, 23) should not be undefined");
}

if (typeof new Date(1999, 12, 1, 0) !== "object") {
  $ERROR("#8.1: typeof new Date(1999, 12, 1, 0) should be 'object'");
}

if (new Date(1999, 12, 1, 0) === undefined) {
  $ERROR("#8.2: new Date(1999, 12, 1, 0) should not be undefined");
}

var x83 = new Date(1999, 12, 1, 0);
if (typeof x83 !== "object") {
  $ERROR("#8.3: typeof new Date(1999, 12, 1, 0) should be 'object'");
}

var x84 = new Date(1999, 12, 1, 0);
if (x84 === undefined) {
  $ERROR("#8.4: new Date(1999, 12, 1, 0) should not be undefined");
}

if (typeof new Date(2000, 0, 1, 0) !== "object") {
  $ERROR("#9.1: typeof new Date(2000, 0, 1, 0) should be 'object'");
}

if (new Date(2000, 0, 1, 0) === undefined) {
  $ERROR("#9.2: new Date(2000, 0, 1, 0) should not be undefined");
}

var x93 = new Date(2000, 0, 1, 0);
if (typeof x93 !== "object") {
  $ERROR("#9.3: typeof new Date(2000, 0, 1, 0) should be 'object'");
}

var x94 = new Date(2000, 0, 1, 0);
if (x94 === undefined) {
  $ERROR("#9.4: new Date(2000, 0, 1, 0) should not be undefined");
}

if (typeof new Date(2099, 11, 31, 23) !== "object") {
  $ERROR("#10.1: typeof new Date(2099, 11, 31, 23) should be 'object'");
}

if (new Date(2099, 11, 31, 23) === undefined) {
  $ERROR("#10.2: new Date(2099, 11, 31, 23) should not be undefined");
}

var x103 = new Date(2099, 11, 31, 23);
if (typeof x103 !== "object") {
  $ERROR("#10.3: typeof new Date(2099, 11, 31, 23) should be 'object'");
}

var x104 = new Date(2099, 11, 31, 23);
if (x104 === undefined) {
  $ERROR("#10.4: new Date(2099, 11, 31, 23) should not be undefined");
}

if (typeof new Date(2099, 12, 1, 0) !== "object") {
  $ERROR("#11.1: typeof new Date(2099, 12, 1, 0) should be 'object'");
}

if (new Date(2099, 12, 1, 0) === undefined) {
  $ERROR("#11.2: new Date(2099, 12, 1, 0) should not be undefined");
}

var x113 = new Date(2099, 12, 1, 0);
if (typeof x113 !== "object") {
  $ERROR("#11.3: typeof new Date(2099, 12, 1, 0) should be 'object'");
}

var x114 = new Date(2099, 12, 1, 0);
if (x114 === undefined) {
  $ERROR("#11.4: new Date(2099, 12, 1, 0) should not be undefined");
}

if (typeof new Date(2100, 0, 1, 0) !== "object") {
  $ERROR("#12.1: typeof new Date(2100, 0, 1, 0) should be 'object'");
}

if (new Date(2100, 0, 1, 0) === undefined) {
  $ERROR("#12.2: new Date(2100, 0, 1, 0) should not be undefined");
}

var x123 = new Date(2100, 0, 1, 0);
if (typeof x123 !== "object") {
  $ERROR("#12.3: typeof new Date(2100, 0, 1, 0) should be 'object'");
}

var x124 = new Date(2100, 0, 1, 0);
if (x124 === undefined) {
  $ERROR("#12.4: new Date(2100, 0, 1, 0) should not be undefined");
}
