// |reftest| skip-if(!xulRuntime.shell)
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/licenses/publicdomain/
 */

function garbage() {
  var x;
  for (var i = 0; i < 100000; i++)
    x = { 'i': i };
}

setGCCallback({
  action: "majorGC",
  depth: 1,
  phases: "both"
});

gc();
garbage();

setGCCallback({
  action: "majorGC",
  depth: 2,
  phases: "both"
});

gc();
garbage();

setGCCallback({
  action: "majorGC",
  depth: 10,
  phases: "begin"
});

gc();
garbage();

setGCCallback({
  action: "minorGC",
  phases: "both"
});

gc();
garbage();

var caught = false;
try {
  setGCCallback({
    action: "majorGC",
    depth: 10000,
    phases: "begin"
  });
} catch (e) {
  caught = ((""+e).indexOf("Nesting depth too large") >= 0);
}

reportCompare(caught, true);