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

/*---
esid: sec-array-exotic-objects-defineownproperty-p-desc
info: If ToUint32(length) !== ToNumber(length), throw RangeError
es5id: 15.4.5.1_A1.1_T1
description: length in [4294967296, -1, 1.5]
---*/

//CHECK#1
try {
  var x = [];
  x.length = 4294967296;
  $ERROR('#1.1: x = []; x.length = 4294967296 throw RangeError. Actual: x.length === ' + (x.length));
} catch (e) {
  if ((e instanceof RangeError) !== true) {
    $ERROR('#1.2: x = []; x.length = 4294967296 throw RangeError. Actual: ' + (e));
  }
}

//CHECK#2
try {
  x = [];
  x.length = -1;
  $ERROR('#2.1: x = []; x.length = -1 throw RangeError. Actual: x.length === ' + (x.length));
} catch (e) {
  if ((e instanceof RangeError) !== true) {
    $ERROR('#2.2: x = []; x.length = -1 throw RangeError. Actual: ' + (e));
  }
}

//CHECK#3
try {
  x = [];
  x.length = 1.5;
  $ERROR('#3.1: x = []; x.length = 1.5 throw RangeError. Actual: x.length === ' + (x.length));
} catch (e) {
  if ((e instanceof RangeError) !== true) {
    $ERROR('#3.2: x = []; x.length = 1.5 throw RangeError. Actual: ' + (e));
  }
}
