michael@0: /* michael@0: * Test expected state changes during collection. michael@0: */ michael@0: michael@0: if ("gcstate" in this) { michael@0: assertEq(gcstate(), "none"); michael@0: michael@0: /* Non-incremental GC. */ michael@0: gc(); michael@0: assertEq(gcstate(), "none"); michael@0: michael@0: /* Incremental GC in one slice. */ michael@0: gcslice(1000000); michael@0: assertEq(gcstate(), "none"); michael@0: michael@0: /* michael@0: * Incremental GC in multiple slices: if marking takes more than one slice, michael@0: * we yield before we start sweeping. michael@0: */ michael@0: gcslice(1); michael@0: assertEq(gcstate(), "mark"); michael@0: gcslice(1000000); michael@0: assertEq(gcstate(), "mark"); michael@0: gcslice(1000000); michael@0: assertEq(gcstate(), "none"); michael@0: michael@0: /* Zeal mode 8: Incremental GC in two slices: 1) mark roots 2) finish collection. */ michael@0: gczeal(8); michael@0: gcslice(1); michael@0: assertEq(gcstate(), "mark"); michael@0: gcslice(1); michael@0: assertEq(gcstate(), "none"); michael@0: michael@0: /* Zeal mode 9: Incremental GC in two slices: 1) mark all 2) new marking and finish. */ michael@0: gczeal(9); michael@0: gcslice(1); michael@0: assertEq(gcstate(), "mark"); michael@0: gcslice(1); michael@0: assertEq(gcstate(), "none"); michael@0: michael@0: /* Zeal mode 10: Incremental GC in multiple slices (always yeilds before sweeping). */ michael@0: gczeal(10); michael@0: gcslice(1000000); michael@0: assertEq(gcstate(), "sweep"); michael@0: gcslice(1000000); michael@0: assertEq(gcstate(), "none"); michael@0: }