// Copyright (C) 2017 Robin Templeton. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
description: ToString is applied BigInt values in an additive expression with another string
esid: prod-AdditiveExpression
info: |
  AdditiveExpression: AdditiveExpression + MultiplicativeExpression

  ...
  7. If Type(lprim) is String or Type(rprim) is String, then
    a. Let lstr be ? ToString(lprim).
    b. Let rstr be ? ToString(rprim).
    c. Return the String that is the result of concatenating lstr and rstr.
  ...

  ToString Applied to the BigInt Type

  1. If i is less than zero, return the String concatenation of the String "-" and ToString(-i).
  2. Return the String consisting of the code units of the digits of the decimal representation of i.
features: [BigInt]
---*/

function ToString(x) { return x + ""; }

assert.sameValue(-1n + "", "-1");
assert.sameValue("" + -1n, "-1");
assert.sameValue(0n + "", "0");
assert.sameValue("" + 0n, "0");
assert.sameValue(1n + "", "1");
assert.sameValue("" + 1n, "1");
assert.sameValue(123456789000000000000000n + "", "123456789000000000000000");
assert.sameValue("" + 123456789000000000000000n, "123456789000000000000000");
assert.sameValue(-123456789000000000000000n + "", "-123456789000000000000000");
assert.sameValue("" + -123456789000000000000000n, "-123456789000000000000000");
