let assert = {
    sameValue(a, e) {
        if (a !== e)
            throw new Error("Expected: " + e + " but got: " + a);
    },
    sameArray(a, e) {
        if (a.length != e.length)
            throw new Error("Got array: " + a + " but expected: " + e);

        for (let i = 0; i < a.length; i++) {
            if (a[i] !== e[i])
                throw new Error("Got array: " + a + " but expected: " + e);
        }
    }
};

// Object Literal

let o = {
    30n: "30",
    0o1n: "1",
    0b10n: "2",
    0xan: "10",
    1_2_3n: "1_2_3"
};
assert.sameValue(o["1"], "1");
assert.sameValue(o["2"], "2");
assert.sameValue(o["10"], "10");
assert.sameValue(o["123"], "1_2_3");

// MethodDeclaration

o = {
  0b1n() {},
  *0o2n() {},
  async 0x3n() {},
  async* 4n() {},
  get 5n() {},
  set 6n(x) {},
  7n: function () {}
};

assert.sameArray(Object.getOwnPropertyNames(o), ["1", "2", "3", "4", "5", "6", "7"]);

assert.sameValue(o[1].name, "1");
assert.sameValue(o[2].name, "2");
assert.sameValue(o[3].name, "3");
assert.sameValue(o[4].name, "4");
assert.sameValue(Object.getOwnPropertyDescriptor(o, 5).get.name, "get 5");
assert.sameValue(Object.getOwnPropertyDescriptor(o, 6).set.name, "set 6");
assert.sameValue(o[7].name, "7");

{
    class C {
        0b1n() {};
        *0o2n() {};
        async 0x3n() {};
        async* 4n() {};
        get 5n() {};
        set 6n(x) {};
    }

    let c = C.prototype;
    assert.sameArray(Object.getOwnPropertyNames(c), ["1", "2", "3", "4", "5", "6", "constructor"]);
    assert.sameValue(c[1].name, "1");
    assert.sameValue(c[2].name, "2");
    assert.sameValue(c[3].name, "3");
    assert.sameValue(c[4].name, "4");
    assert.sameValue(Object.getOwnPropertyDescriptor(c, 5).get.name, "get 5");
    assert.sameValue(Object.getOwnPropertyDescriptor(c, 6).set.name, "set 6");
}

// Field declaration
{
    class C {
        0o1n = "baz";
        0b10n = function () {};
    }

    let c = new C();
    assert.sameValue(c[1n], "baz");
    assert.sameValue(c[1], "baz");
    assert.sameValue(c["1"], "baz");

    assert.sameValue(c[2].name, "2");
}

// Destructuring

let {1n: a} = {1n: "foo"};
assert.sameValue(a, "foo");

