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

/*---
info: |
    White Space and Line Terminator between LeftHandSideExpression and "@="
    or between "@=" and AssignmentExpression are allowed
es5id: 11.13.2_A1_T4
esid: sec-assignment-operators
description: Checking by using eval, check operator is x += y
---*/

var x;

x = -1;
assert.sameValue(x	+=	-1, -2, 'U+0009 (expression)');
assert.sameValue(x, -2, 'U+0009 (side effect)');

x = -1;
assert.sameValue(x+=-1, -2, 'U+000B (expression)');
assert.sameValue(x, -2, 'U+000B (side effect)');

x = -1;
assert.sameValue(x+=-1, -2, 'U+000C (expression)');
assert.sameValue(x, -2, 'U+000C (side effect)');

x = -1;
assert.sameValue(x += -1, -2, 'U+0020 (expression)');
assert.sameValue(x, -2, 'U+0020 (side effect)');

x = -1;
assert.sameValue(x += -1, -2, 'U+00A0 (expression)');
assert.sameValue(x, -2, 'U+00A0 (side effect)');

x = -1;
assert.sameValue(x
+=
-1, -2, 'U+000A (expression)');
assert.sameValue(x, -2, 'U+000A (side effect)');

x = -1;
assert.sameValue(x+=-1, -2, 'U+000D (expression)');
assert.sameValue(x, -2, 'U+000D (side effect)');

x = -1;
assert.sameValue(x += -1, -2, 'U+2028 (expression)');
assert.sameValue(x, -2, 'U+2028 (side effect)');

x = -1;
assert.sameValue(x += -1, -2, 'U+2029 (expression)');
assert.sameValue(x, -2, 'U+2029 (side effect)');

x = -1;
assert.sameValue(x	  
  +=	  
  -1, -2, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (expression)');
assert.sameValue(x, -2, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (side effect)');
