<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
<script src="resources/remote-object-utilities.js"></script>
<script>
function test()
{
    let steps = [
        {expression: `new Map`},
        {expression: `map = new Map; map.set(1, 2); map.set("key", "value"); map`},
        {expression: `map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]); map`},
        {expression: `map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map`},
        {expression: `map = new Map; map.set(map, map); map`},
        {expression: `map = new WeakMap; strongKey = {id:1}; map.set(strongKey, [1,2]); map`},
];

    if (!window.WI) {
        window.steps = steps;
        return;
    }

    runSteps(steps);
}
</script>
</head>
<body onload="runTest(); runInBrowserTest();"></body>
</html>
