// 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))"
);

