/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/licenses/publicdomain/ */

// Symbol.for returns the same symbol whenever the same argument is passed.
assertEq(Symbol.for("q") === Symbol.for("q"), true);

// Several distinct Symbol values.
var symbols = [
    Symbol(),
    Symbol("Symbol.iterator"),
    Symbol("Symbol.iterator"),  // distinct new symbol with the same description
    Symbol.for("Symbol.iterator"),
    Symbol.iterator
];

// Distinct symbols are never equal to each other, even if they have the same
// description.
for (var i = 0; i < symbols.length; i++) {
    for (var j = i; j < symbols.length; j++) {
        var expected = (i === j);
        assertEq(symbols[i] == symbols[j], expected);
        assertEq(symbols[i] != symbols[j], !expected);
        assertEq(symbols[i] === symbols[j], expected);
        assertEq(symbols[i] !== symbols[j], !expected);
        assertEq(Object.is(symbols[i], symbols[j]), expected);
    }
}

if (typeof reportCompare === "function")
    reportCompare(0, 0);
