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

/*---
info: |
    If x is equal to 0 or greater than 0, or if x is less than -0.5,
    Math.round(x) is equal to Math.floor(x+0.5)
es5id: 15.8.2.15_A6
description: >
    Checking if Math.round(x) is equal to Math.floor(x+0.5), where x
    equals to 0, greater than 0, or is less than -0.5; this check is
    performed on 2000 argument x values
---*/

// CHECK#1
for (var i = 0; i <= 1000; i++)
{
  var x = i / 10.0;
  if (Math.round(x) !== Math.floor(x + 0.5))
  {
    $ERROR("#1: 'x = " + x + "; Math.round(x) !== Math.floor(x + 0.5)'")
  }
}

for (i = -5; i >= -1000; i--)
{
  if (i === -5)
  {
    x = -0.500000000000001;
  } else
  {
    x = i / 10.0;
  }

  if (Math.round(x) !== Math.floor(x + 0.5))
  {
    $ERROR("#2: 'x = " + x + "; Math.round(x) !== Math.floor(x + 0.5)'")
  }
}
