From 6e8c2e324fb0d4b22cec300411b9cdcbe2c81e36 Mon Sep 17 00:00:00 2001 From: Braulio Ruiz Date: Fri, 11 Oct 2024 21:08:29 -0600 Subject: [PATCH 1/2] add function to count and find problems with missing tests --- ...um_Closest_Test.js => 3SumClosest_Test.js} | 0 ...Sum.js => Maximise_Hour_Glass_Sum_Test.js} | 0 Test.js | 67 +++++++++++++++---- 3 files changed, 54 insertions(+), 13 deletions(-) rename LeetcodeProblemsTests/Algorithms/medium/{3Sum_Closest_Test.js => 3SumClosest_Test.js} (100%) rename LeetcodeProblemsTests/Algorithms/medium/{Maximise_Hour_Glass_Sum.js => Maximise_Hour_Glass_Sum_Test.js} (100%) 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..185d2fb 100644 --- a/Test.js +++ b/Test.js @@ -2,34 +2,45 @@ /* 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 get_all_tests = async function (paths) { + let problems = []; + for(const i in paths) { + const folder = paths[i]; + const new_problems = await loadProblemsFiles(folder); // await + problems = problems.concat(new_problems); + } + return problems; +}; + +const test_all = async function () { 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); + const problems = await get_all_tests(TESTS_FOLDERS); + console.log(problems); var solvePromises = problems.map(solve); - await Promise.all(solvePromises) + await Promise.all(solvePromises); } catch (error) { console.log(error); throw new Error(error); } }; -var solve = (problem) => { +const solve = (problem) => { try { console.log("Solving: " + problem); @@ -47,9 +58,9 @@ 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) { @@ -65,10 +76,40 @@ var loadProblemsFiles = (folder) => { }); }; +const get_missing_tests = async function () { + const tests = await get_all_tests(TESTS_FOLDERS); + const problems = await get_all_tests(PROBLEMS_FOLDERS); + + 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); + } +}; + if (process.argv.length > 2) { const path = process.argv.pop(); solve(path); } else { test_all(); + get_missing_tests(); } \ No newline at end of file From a5c4a6bcbe31d9c8e6b8ee4d2b87ed07d16c614b Mon Sep 17 00:00:00 2001 From: Braulio Ruiz Date: Tue, 15 Oct 2024 13:07:41 -0600 Subject: [PATCH 2/2] use cammel case and refactor Tests script --- .eslintrc.json | 1 + Test.js | 45 +++++++++++++++++++++++---------------------- 2 files changed, 24 insertions(+), 22 deletions(-) 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/Test.js b/Test.js index 185d2fb..f1c8c87 100644 --- a/Test.js +++ b/Test.js @@ -16,22 +16,20 @@ const TESTS_FOLDERS = [ const REGEX_PATTERN_HIDDEN_FILES = /(^|\/)\.[^\/\.]/g; -const get_all_tests = async function (paths) { +const getAllTests = async function (paths) { let problems = []; for(const i in paths) { const folder = paths[i]; - const new_problems = await loadProblemsFiles(folder); // await - problems = problems.concat(new_problems); + const newProblems = await loadProblemsFiles(folder); // await + problems = problems.concat(newProblems); } return problems; }; -const test_all = async function () { +const runAllTests = async function (problems) { try { - - const problems = await get_all_tests(TESTS_FOLDERS); console.log(problems); - var solvePromises = problems.map(solve); + var solvePromises = problems.map(solveProblem); await Promise.all(solvePromises); } catch (error) { @@ -40,7 +38,7 @@ const test_all = async function () { } }; -const solve = (problem) => { +const solveProblem = (problem) => { try { console.log("Solving: " + problem); @@ -67,19 +65,16 @@ const loadProblemsFiles = (folder) => { 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); } }); }); }; -const get_missing_tests = async function () { - const tests = await get_all_tests(TESTS_FOLDERS); - const problems = await get_all_tests(PROBLEMS_FOLDERS); - +const getMissingTests = async function (tests, problems) { const hasTestStatus = problems.reduce((status, problemPath) => { const baseIndex = PROBLEMS_FOLDERS.findIndex((basePath) => problemPath.startsWith(basePath) @@ -105,11 +100,17 @@ const get_missing_tests = async function () { } }; -if (process.argv.length > 2) { - const path = process.argv.pop(); - solve(path); -} else { - test_all(); - get_missing_tests(); +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