| // Copyright (C) 2016 Rick Waldron. All rights reserved. |
| // This code is governed by the BSD license found in the LICENSE file. |
| |
| /*--- |
| author: Rick Waldron |
| esid: sec-update-expressions |
| description: Exponentiation Operator expression precedence of update operators |
| info: | |
| ExponentiationExpression : |
| ... |
| UpdateExpression `**` ExponentiationExpression |
| |
| UpdateExpression : |
| LeftHandSideExpression `++` |
| LeftHandSideExpression `--` |
| `++` UnaryExpression |
| `--` UnaryExpression |
| ---*/ |
| |
| var base = 4; |
| assert.sameValue(--base ** 2, 9, "(--base ** 2) === 9"); |
| assert.sameValue(++base ** 2, 16, "(++base ** 2) === 16"); |
| assert.sameValue(base++ ** 2, 16, "(base++ ** 2) === 16"); |
| assert.sameValue(base-- ** 2, 25, "(base-- ** 2) === 25"); |
| |
| base = 4; |
| |
| // --base ** --base ** 2 -> 3 ** 2 ** 2 -> 3 ** (2 ** 2) -> 81 |
| assert.sameValue( |
| --base ** --base ** 2, |
| Math.pow(3, Math.pow(2, 2)), |
| "(--base ** --base ** 2) === Math.pow(3, Math.pow(2, 2))" |
| ); |
| |
| // ++base ** ++base ** 2 -> 3 ** 4 ** 2 -> 3 ** (4 ** 2) -> 43046721 |
| assert.sameValue( |
| ++base ** ++base ** 2, |
| Math.pow(3, Math.pow(4, 2)), |
| "(++base ** ++base ** 2) === Math.pow(3, Math.pow(4, 2))" |
| ); |
| |
| base = 4; |
| |
| // base-- ** base-- ** 2 -> 4 ** 3 ** 2 -> 4 ** (3 ** 2) -> 262144 |
| assert.sameValue( |
| base-- ** base-- ** 2, |
| Math.pow(4, Math.pow(3, 2)), |
| "(base-- ** base-- ** 2) === Math.pow(4, Math.pow(3, 2))" |
| ); |
| |
| // base++ ** base++ ** 2 -> 2 ** 3 ** 2 -> 2 ** (3 ** 2) -> 262144 |
| assert.sameValue( |
| base++ ** base++ ** 2, |
| Math.pow(2, Math.pow(3, 2)), |
| "(base++ ** base++ ** 2) === Math.pow(2, Math.pow(3, 2))" |
| ); |
| |