// 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_T8
esid: sec-assignment-operators
description: Checking by using eval, check operator is x >>>= y
---*/

var x;

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

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

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

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

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

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

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

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

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

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