@@ -2482,16 +2482,20 @@ exports[`App can equip single goody: JavaScript traverseInOrder 1`] = `
24822482
24832483function* traverseInOrder(root) {
24842484 const stack = [[root, false]];
2485- while (stack.length > 0) {
2485+
2486+ do {
24862487 const [node, didTraverseLeftChild] = stack.pop();
2487- if (node) {
2488- if (didTraverseLeftChild) {
2489- yield node;
2490- } else {
2491- stack.push([node.right, false], [node, true], [node.left, false]);
2492- }
2488+ if (node == null) {
2489+ continue;
24932490 }
2494- }
2491+
2492+ if (didTraverseLeftChild) {
2493+ yield node;
2494+ continue;
2495+ }
2496+
2497+ stack.push([node.right, false], [node, true], [node.left, false]);
2498+ } while (stack.length > 0);
24952499}
24962500
24972501/////////////////////////// END ADVENTURE PACK CODE ////////////////////////////"
@@ -2507,13 +2511,14 @@ function isNonNullish(value) {
25072511}
25082512
25092513function* traverseLevelOrder(root) {
2510- if (! root) {
2514+ if (root == null ) {
25112515 return;
25122516 }
25132517
25142518 let level = [root];
25152519 do {
25162520 yield level;
2521+
25172522 level = level
25182523 .flatMap((node) => [node.left, node.right])
25192524 .filter(isNonNullish);
@@ -2530,16 +2535,50 @@ exports[`App can equip single goody: JavaScript traversePostOrder 1`] = `
25302535
25312536function* traversePostOrder(root) {
25322537 const stack = [[root, false]];
2533- while (stack.length > 0) {
2538+
2539+ do {
25342540 const [node, didTraverseChildren] = stack.pop();
2535- if (node) {
2536- if (didTraverseChildren) {
2537- yield node;
2538- } else {
2539- stack.push([node, true], [node.right, false], [node.left, false]);
2540- }
2541+ if (node == null) {
2542+ continue;
25412543 }
2542- }
2544+
2545+ if (didTraverseChildren) {
2546+ yield node;
2547+ continue;
2548+ }
2549+
2550+ stack.push([node, true], [node.right, false], [node.left, false]);
2551+ } while (stack.length > 0);
2552+ }
2553+
2554+ /////////////////////////// END ADVENTURE PACK CODE ////////////////////////////"
2555+ `;
2556+
2557+ exports[`App can equip single goody: JavaScript traversePostOrderNAry 1`] = `
2558+ "////////////////////////// BEGIN ADVENTURE PACK CODE ///////////////////////////
2559+ // Adventure Pack commit fake-commit-hash
2560+ // Running at: https://example.com/
2561+
2562+ function* traversePostOrderNAry(root) {
2563+ const stack = [[root, false]];
2564+
2565+ do {
2566+ const [node, didTraverseChildren] = stack.pop();
2567+ if (node == null) {
2568+ continue;
2569+ }
2570+
2571+ if (didTraverseChildren) {
2572+ yield node;
2573+ continue;
2574+ }
2575+
2576+ stack.push([node, true]);
2577+ // TODO: add an Array.prototype.valuesReversed() goody and use it here
2578+ for (let i = node.children.length - 1; i >= 0; --i) {
2579+ stack.push([node.children[i], false]);
2580+ }
2581+ } while (stack.length > 0);
25432582}
25442583
25452584/////////////////////////// END ADVENTURE PACK CODE ////////////////////////////"
@@ -2552,13 +2591,15 @@ exports[`App can equip single goody: JavaScript traversePreOrder 1`] = `
25522591
25532592function* traversePreOrder(root) {
25542593 const stack = [root];
2555- while (stack.length > 0) {
2594+
2595+ do {
25562596 const node = stack.pop();
2557- if (node) {
2597+
2598+ if (node != null) {
25582599 yield node;
25592600 stack.push(node.right, node.left);
25602601 }
2561- }
2602+ } while (stack.length > 0);
25622603}
25632604
25642605/////////////////////////// END ADVENTURE PACK CODE ////////////////////////////"
@@ -4967,16 +5008,20 @@ function* traverseInOrder<
49675008 T extends { left?: T | null | undefined; right?: T | null | undefined },
49685009>(root: T | null | undefined): Generator<T, void, void> {
49695010 const stack: [T | null | undefined, boolean][] = [[root, false]];
4970- while (stack.length > 0) {
5011+
5012+ do {
49715013 const [node, didTraverseLeftChild] = stack.pop()!;
4972- if (node) {
4973- if (didTraverseLeftChild) {
4974- yield node;
4975- } else {
4976- stack.push([node.right, false], [node, true], [node.left, false]);
4977- }
5014+ if (node == null) {
5015+ continue;
49785016 }
4979- }
5017+
5018+ if (didTraverseLeftChild) {
5019+ yield node;
5020+ continue;
5021+ }
5022+
5023+ stack.push([node.right, false], [node, true], [node.left, false]);
5024+ } while (stack.length > 0);
49805025}
49815026
49825027/////////////////////////// END ADVENTURE PACK CODE ////////////////////////////"
@@ -4994,13 +5039,14 @@ function isNonNullish<T>(value: T | null | undefined): value is T {
49945039function* traverseLevelOrder<
49955040 T extends { left?: T | null | undefined; right?: T | null | undefined },
49965041>(root: T | null | undefined): Generator<T[], void, void> {
4997- if (! root) {
5042+ if (root == null ) {
49985043 return;
49995044 }
50005045
50015046 let level = [root];
50025047 do {
50035048 yield level;
5049+
50045050 level = level
50055051 .flatMap((node) => [node.left, node.right])
50065052 .filter(isNonNullish);
@@ -5019,16 +5065,52 @@ function* traversePostOrder<
50195065 T extends { left?: T | null | undefined; right?: T | null | undefined },
50205066>(root: T | null | undefined): Generator<T, void, void> {
50215067 const stack: [T | null | undefined, boolean][] = [[root, false]];
5022- while (stack.length > 0) {
5068+
5069+ do {
50235070 const [node, didTraverseChildren] = stack.pop()!;
5024- if (node) {
5025- if (didTraverseChildren) {
5026- yield node;
5027- } else {
5028- stack.push([node, true], [node.right, false], [node.left, false]);
5029- }
5071+ if (node == null) {
5072+ continue;
50305073 }
5031- }
5074+
5075+ if (didTraverseChildren) {
5076+ yield node;
5077+ continue;
5078+ }
5079+
5080+ stack.push([node, true], [node.right, false], [node.left, false]);
5081+ } while (stack.length > 0);
5082+ }
5083+
5084+ /////////////////////////// END ADVENTURE PACK CODE ////////////////////////////"
5085+ `;
5086+
5087+ exports[`App can equip single goody: TypeScript traversePostOrderNAry 1`] = `
5088+ "////////////////////////// BEGIN ADVENTURE PACK CODE ///////////////////////////
5089+ // Adventure Pack commit fake-commit-hash
5090+ // Running at: https://example.com/
5091+
5092+ function* traversePostOrderNAry<T extends { children: T[] }>(
5093+ root: T | null | undefined,
5094+ ): Generator<T, void, void> {
5095+ const stack: [T | null | undefined, boolean][] = [[root, false]];
5096+
5097+ do {
5098+ const [node, didTraverseChildren] = stack.pop()!;
5099+ if (node == null) {
5100+ continue;
5101+ }
5102+
5103+ if (didTraverseChildren) {
5104+ yield node;
5105+ continue;
5106+ }
5107+
5108+ stack.push([node, true]);
5109+ // TODO: add an Array.prototype.valuesReversed() goody and use it here
5110+ for (let i = node.children.length - 1; i >= 0; --i) {
5111+ stack.push([node.children[i], false]);
5112+ }
5113+ } while (stack.length > 0);
50325114}
50335115
50345116/////////////////////////// END ADVENTURE PACK CODE ////////////////////////////"
@@ -5043,13 +5125,15 @@ function* traversePreOrder<
50435125 T extends { left?: T | null | undefined; right?: T | null | undefined },
50445126>(root: T | null | undefined): Generator<T, void, void> {
50455127 const stack = [root];
5046- while (stack.length > 0) {
5128+
5129+ do {
50475130 const node = stack.pop();
5048- if (node) {
5131+
5132+ if (node != null) {
50495133 yield node;
50505134 stack.push(node.right, node.left);
50515135 }
5052- }
5136+ } while (stack.length > 0);
50535137}
50545138
50555139/////////////////////////// END ADVENTURE PACK CODE ////////////////////////////"
0 commit comments