mirror of
https://github.com/krahets/hello-algo.git
synced 2026-08-25 09:37:14 +00:00
Bug fixes and improvements (#1318)
* Sync zh and zh-hant versions * Update en/README.md * Add a Q&A for chapter of introduction * Update the callout headers * Sync zh ang zh-hant versions * Bug fixes
This commit is contained in:
@@ -12,7 +12,7 @@ const { Vertex } = require('../modules/Vertex');
|
||||
function graphBFS(graph, startVet) {
|
||||
// 頂點走訪序列
|
||||
const res = [];
|
||||
// 雜湊表,用於記錄已被訪問過的頂點
|
||||
// 雜湊集合,用於記錄已被訪問過的頂點
|
||||
const visited = new Set();
|
||||
visited.add(startVet);
|
||||
// 佇列用於實現 BFS
|
||||
|
||||
@@ -27,7 +27,7 @@ function dfs(graph, visited, res, vet) {
|
||||
function graphDFS(graph, startVet) {
|
||||
// 頂點走訪序列
|
||||
const res = [];
|
||||
// 雜湊表,用於記錄已被訪問過的頂點
|
||||
// 雜湊集合,用於記錄已被訪問過的頂點
|
||||
const visited = new Set();
|
||||
dfs(graph, visited, res, startVet);
|
||||
return res;
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
import { bold, brightRed } from 'jsr:@std/fmt/colors';
|
||||
import { expandGlob } from 'jsr:@std/fs';
|
||||
import { relative, resolve } from 'jsr:@std/path';
|
||||
|
||||
/**
|
||||
* @typedef {import('jsr:@std/fs').WalkEntry} WalkEntry
|
||||
* @type {WalkEntry[]}
|
||||
*/
|
||||
const entries = [];
|
||||
|
||||
for await (const entry of expandGlob(
|
||||
resolve(import.meta.dirname, './chapter_*/*.js')
|
||||
)) {
|
||||
entries.push(entry);
|
||||
}
|
||||
|
||||
/** @type {{ status: Promise<Deno.CommandStatus>; stderr: ReadableStream<Uint8Array>; }[]} */
|
||||
const processes = [];
|
||||
|
||||
for (const file of entries) {
|
||||
const execute = new Deno.Command('node', {
|
||||
args: [relative(import.meta.dirname, file.path)],
|
||||
cwd: import.meta.dirname,
|
||||
stdin: 'piped',
|
||||
stdout: 'piped',
|
||||
stderr: 'piped',
|
||||
});
|
||||
|
||||
const process = execute.spawn();
|
||||
processes.push({ status: process.status, stderr: process.stderr });
|
||||
}
|
||||
|
||||
const results = await Promise.all(
|
||||
processes.map(async (item) => {
|
||||
const status = await item.status;
|
||||
return { status, stderr: item.stderr };
|
||||
})
|
||||
);
|
||||
|
||||
/** @type {ReadableStream<Uint8Array>[]} */
|
||||
const errors = [];
|
||||
|
||||
for (const result of results) {
|
||||
if (!result.status.success) {
|
||||
errors.push(result.stderr);
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`Tested ${entries.length} files`);
|
||||
console.log(`Found exception in ${errors.length} files`);
|
||||
|
||||
if (errors.length) {
|
||||
console.log();
|
||||
|
||||
for (const error of errors) {
|
||||
const reader = error.getReader();
|
||||
const { value } = await reader.read();
|
||||
const decoder = new TextDecoder();
|
||||
console.log(`${bold(brightRed('error'))}: ${decoder.decode(value)}`);
|
||||
}
|
||||
|
||||
throw new Error('Test failed');
|
||||
}
|
||||
Reference in New Issue
Block a user