// 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_T2
description: 3 arguments, (year, month, date)
---*/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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