class C {
    [Math.sqrt(16)];
    [Math.sqrt(8)] = 5 + 2;
    "hi";
    "bye" = {};
    2 = 2;
    0x101 = 2;
    0o101 = 2;
    0b101 = 2;
    NaN = 0; // actually the field called "NaN", not the number
    Infinity = 50; // actually the field called "Infinity", not the number
    // all the keywords below are proper fields (?!?)
    with = 0;
    //static = 0; // doesn't work yet
    async = 0;
    get = 0;
    set = 0;
    export = 0;
    function = 0;
}

let obj = new C();
assertEq(Math.sqrt(16) in obj, true);
assertEq(obj[Math.sqrt(16)], undefined);
assertEq(obj[Math.sqrt(8)], 7);
assertEq("hi" in obj, true);
assertEq(obj["hi"], undefined);
assertEq(typeof obj["bye"], "object");
assertEq(obj[2], 2);
assertEq(obj[0x101], 2);
assertEq(obj[0o101], 2);
assertEq(obj[0b101], 2);
assertEq(obj.NaN, 0);
assertEq(obj.Infinity, 50);
assertEq(obj.with, 0);
assertEq(obj.async, 0);
assertEq(obj.get, 0);
assertEq(obj.set, 0);
assertEq(obj.export, 0);
assertEq(obj.function, 0);

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