// 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");
}
