diff --git a/.eslintrc.json b/.eslintrc.json index 06bf556..e864da5 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -10,6 +10,7 @@ "sourceType": "module" }, "rules": { + "camelcase": "error", "indent": [ "error", 2 diff --git a/LeetcodeProblemsTests/Algorithms/medium/3Sum_Closest_Test.js b/LeetcodeProblemsTests/Algorithms/medium/3SumClosest_Test.js similarity index 100% rename from LeetcodeProblemsTests/Algorithms/medium/3Sum_Closest_Test.js rename to LeetcodeProblemsTests/Algorithms/medium/3SumClosest_Test.js diff --git a/LeetcodeProblemsTests/Algorithms/medium/Maximise_Hour_Glass_Sum.js b/LeetcodeProblemsTests/Algorithms/medium/Maximise_Hour_Glass_Sum_Test.js similarity index 100% rename from LeetcodeProblemsTests/Algorithms/medium/Maximise_Hour_Glass_Sum.js rename to LeetcodeProblemsTests/Algorithms/medium/Maximise_Hour_Glass_Sum_Test.js diff --git a/Test.js b/Test.js index a5f44f6..f1c8c87 100644 --- a/Test.js +++ b/Test.js @@ -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); @@ -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); + } } - \ No newline at end of file + +runScript(); \ No newline at end of file