Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"sourceType": "module"
},
"rules": {
"camelcase": "error",
"indent": [
"error",
2
Expand Down
88 changes: 65 additions & 23 deletions Test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,43 @@
/* eslint-disable no-undef */
const fs = require("fs");

const PROBLEMS_FOLDERS = [
"./LeetcodeProblems/Algorithms/easy/",
"./LeetcodeProblems/Algorithms/medium/",
"./LeetcodeProblems/Algorithms/hard/"
];

const TESTS_FOLDERS = [
"./LeetcodeProblemsTests/Algorithms/easy/",
"./LeetcodeProblemsTests/Algorithms/medium/",
"./LeetcodeProblemsTests/Algorithms/hard/"
]
];

const REGEX_PATTERN_HIDDEN_FILES = /(^|\/)\.[^\/\.]/g;

var test_all = async function () {
const getAllTests = async function (paths) {
let problems = [];
for(const i in paths) {
const folder = paths[i];
const newProblems = await loadProblemsFiles(folder); // await
problems = problems.concat(newProblems);
}
return problems;
};

const runAllTests = async function (problems) {
try {
var problems = [];
for(const i in TESTS_FOLDERS) {
var folder = TESTS_FOLDERS[i];
var new_problems = await loadProblemsFiles(folder); // await
problems = problems.concat(new_problems);
};
console.log(problems);

var solvePromises = problems.map(solve);
var solvePromises = problems.map(solveProblem);

await Promise.all(solvePromises)
await Promise.all(solvePromises);
} catch (error) {
console.log(error);
throw new Error(error);
}
};

var solve = (problem) => {
const solveProblem = (problem) => {
try {
console.log("Solving: " + problem);

Expand All @@ -47,28 +56,61 @@ var solve = (problem) => {
console.log(error);
throw new Error(error);
}
}
};

var loadProblemsFiles = (folder) => {
const loadProblemsFiles = (folder) => {
return new Promise(function (resolve, reject) {
fs.readdir(folder, (error, files) => {
if (error) {
reject(error);
} else {
console.log(folder);
new_problems = files.filter((item) => !REGEX_PATTERN_HIDDEN_FILES.test(item));
new_problems = new_problems.map((item) => folder + item);
newProblems = files.filter((item) => !REGEX_PATTERN_HIDDEN_FILES.test(item));
newProblems = newProblems.map((item) => folder + item);

resolve(new_problems);
resolve(newProblems);
}
});
});
};

if (process.argv.length > 2) {
const path = process.argv.pop();
solve(path);
} else {
test_all();
const getMissingTests = async function (tests, problems) {
const hasTestStatus = problems.reduce((status, problemPath) => {
const baseIndex = PROBLEMS_FOLDERS.findIndex((basePath) =>
problemPath.startsWith(basePath)
);

let testPath = problemPath
.replace(PROBLEMS_FOLDERS[baseIndex], TESTS_FOLDERS[baseIndex])
.replace(/\.js$/, "_Test.js");

status.push({
problem: problemPath,
hasTest: tests.includes(testPath)
});

return status;
}, []);
const missingTests = hasTestStatus.filter((stat) => !stat.hasTest);
console.log("Total Problems:", problems.length);
console.log("Missing Tests:", missingTests.length);

if(missingTests.length) {
console.table(missingTests);
}
};

async function runScript() {
if (process.argv.length > 2) {
const path = process.argv.pop();
solveProblem(path);
} else {
const problems = await getAllTests(PROBLEMS_FOLDERS);
const tests = await getAllTests(TESTS_FOLDERS);

await runAllTests(tests);
await getMissingTests(tests, problems);
}
}


runScript();
Loading