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

// Symbol(symbol) throws a TypeError.
var sym = Symbol();
assertThrowsInstanceOf(() => Symbol(sym), TypeError);

// Symbol(undefined) is equivalent to Symbol().
assertEq(Symbol(undefined).toString(), "Symbol()");

// Otherwise, Symbol(v) means Symbol(ToString(v)).
assertEq(Symbol(7).toString(), "Symbol(7)");
assertEq(Symbol(true).toString(), "Symbol(true)");
assertEq(Symbol(null).toString(), "Symbol(null)");
assertEq(Symbol([1, 2]).toString(), "Symbol(1,2)");
var symobj = Object(sym);
assertThrowsInstanceOf(() => Symbol(symobj), TypeError);

var hits = 0;
var obj = {
    toString: function () {
        hits++;
        return "ponies";
    }
};
assertEq(Symbol(obj).toString(), "Symbol(ponies)");
assertEq(hits, 1);

assertEq(Object.getPrototypeOf(Symbol.prototype), Object.prototype);

// Symbol.prototype is not itself a Symbol object.
assertThrowsInstanceOf(() => Symbol.prototype.valueOf(), TypeError);

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