// Copyright (C) 2017 Josh Wolfe. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: Comparisons of BigInt and BigInt values
esid: sec-abstract-relational-comparison
info: |
  ...
  3. If both px and py are Strings, then
    ...
  4. Else,
    a. Let nx be ? ToNumeric(px). Because px and py are primitive values evaluation order is not important.
    b. Let ny be ? ToNumeric(py).
    c. If Type(nx) is Type(ny), return ? Type(nx)::lessThan(nx, ny).

  sec-numeric-types-bigint-lessThan
  BigInt::lessThan (x, y)

    The abstract operation BigInt::lessThan with two arguments x and y of BigInt type returns true if x is less than y and false otherwise.

features: [BigInt]
---*/
assert.sameValue(0n > 0n, false, 'The result of (0n > 0n) is false');
assert.sameValue(1n > 1n, false, 'The result of (1n > 1n) is false');
assert.sameValue(-1n > -1n, false, 'The result of (-1n > -1n) is false');
assert.sameValue(0n > -0n, false, 'The result of (0n > -0n) is false');
assert.sameValue(-0n > 0n, false, 'The result of (-0n > 0n) is false');
assert.sameValue(0n > 1n, false, 'The result of (0n > 1n) is false');
assert.sameValue(1n > 0n, true, 'The result of (1n > 0n) is true');
assert.sameValue(0n > -1n, true, 'The result of (0n > -1n) is true');
assert.sameValue(-1n > 0n, false, 'The result of (-1n > 0n) is false');
assert.sameValue(1n > -1n, true, 'The result of (1n > -1n) is true');
assert.sameValue(-1n > 1n, false, 'The result of (-1n > 1n) is false');

assert.sameValue(
  0x1fffffffffffff01n > 0x1fffffffffffff02n,
  false,
  'The result of (0x1fffffffffffff01n > 0x1fffffffffffff02n) is false'
);

assert.sameValue(
  0x1fffffffffffff02n > 0x1fffffffffffff01n,
  true,
  'The result of (0x1fffffffffffff02n > 0x1fffffffffffff01n) is true'
);

assert.sameValue(
  -0x1fffffffffffff01n > -0x1fffffffffffff02n,
  true,
  'The result of (-0x1fffffffffffff01n > -0x1fffffffffffff02n) is true'
);

assert.sameValue(
  -0x1fffffffffffff02n > -0x1fffffffffffff01n,
  false,
  'The result of (-0x1fffffffffffff02n > -0x1fffffffffffff01n) is false'
);

assert.sameValue(
  0x10000000000000000n > 0n,
  true,
  'The result of (0x10000000000000000n > 0n) is true'
);

assert.sameValue(
  0n > 0x10000000000000000n,
  false,
  'The result of (0n > 0x10000000000000000n) is false'
);

assert.sameValue(
  0x10000000000000000n > 1n,
  true,
  'The result of (0x10000000000000000n > 1n) is true'
);

assert.sameValue(
  1n > 0x10000000000000000n,
  false,
  'The result of (1n > 0x10000000000000000n) is false'
);

assert.sameValue(
  0x10000000000000000n > -1n,
  true,
  'The result of (0x10000000000000000n > -1n) is true'
);

assert.sameValue(
  -1n > 0x10000000000000000n,
  false,
  'The result of (-1n > 0x10000000000000000n) is false'
);

assert.sameValue(
  0x10000000000000001n > 0n,
  true,
  'The result of (0x10000000000000001n > 0n) is true'
);

assert.sameValue(
  0n > 0x10000000000000001n,
  false,
  'The result of (0n > 0x10000000000000001n) is false'
);

assert.sameValue(
  -0x10000000000000000n > 0n,
  false,
  'The result of (-0x10000000000000000n > 0n) is false'
);

assert.sameValue(
  0n > -0x10000000000000000n,
  true,
  'The result of (0n > -0x10000000000000000n) is true'
);

assert.sameValue(
  -0x10000000000000000n > 1n,
  false,
  'The result of (-0x10000000000000000n > 1n) is false'
);

assert.sameValue(
  1n > -0x10000000000000000n,
  true,
  'The result of (1n > -0x10000000000000000n) is true'
);

assert.sameValue(
  -0x10000000000000000n > -1n,
  false,
  'The result of (-0x10000000000000000n > -1n) is false'
);

assert.sameValue(
  -1n > -0x10000000000000000n,
  true,
  'The result of (-1n > -0x10000000000000000n) is true'
);

assert.sameValue(
  -0x10000000000000001n > 0n,
  false,
  'The result of (-0x10000000000000001n > 0n) is false'
);

assert.sameValue(
  0n > -0x10000000000000001n,
  true,
  'The result of (0n > -0x10000000000000001n) is true'
);

assert.sameValue(
  0x10000000000000000n > 0x100000000n,
  true,
  'The result of (0x10000000000000000n > 0x100000000n) is true'
);

assert.sameValue(
  0x100000000n > 0x10000000000000000n,
  false,
  'The result of (0x100000000n > 0x10000000000000000n) is false'
);