From 90fdc7aa068b10ea15880197b8f0b09ec3945346 Mon Sep 17 00:00:00 2001 From: mpaulson Date: Thu, 23 Jun 2022 10:29:59 -0600 Subject: [PATCH] feat: working through the dynamic testing portion of ligmata --- .gitignore | 1 + .jest.config.json | 2 +- README.md | 20 +++++++++--------- ligma.config.js | 6 ++++++ package.json | 37 +++++++++++++++++---------------- scripts/align-configs.js | 17 ++++++++++++++++ scripts/dsa.js | 44 ++++++++++++++++++++++++++++++++++++++++ scripts/{v1 => generate} | 42 ++++++++++++-------------------------- tsconfig.json | 2 +- 9 files changed, 113 insertions(+), 58 deletions(-) create mode 100644 ligma.config.js create mode 100644 scripts/dsa.js rename scripts/{v1 => generate} (64%) diff --git a/.gitignore b/.gitignore index a56a7ef..5d67c4d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules +src/day* diff --git a/.jest.config.json b/.jest.config.json index bc89bfe..e8cd91a 100644 --- a/.jest.config.json +++ b/.jest.config.json @@ -2,7 +2,7 @@ "clearMocks": true, "moduleNameMapper": { "@code/(.*)": [ - "/src/day2/$1" + "/src/day4/$1" ] }, "preset": "ts-jest" diff --git a/README.md b/README.md index ebea049..e6a28d5 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,16 @@ ## Developed live on twitch [ThePrimeagen](https://twitch.tv/ThePrimeagen) -## Lig-Machine -Lengthy -Instrumentation -Generating -Massive -Anticompetitive -Computational -Help for -Intermediate -Coders +## Naming +### Lig-Machine +Lengthy Instrumentation Generating Massive Anticompetitive Computational Help for Intermediate Coders // n9 + +### Ligmata +Literal Improvement Gaining Master and Tutelage on Algorithms +Let's Intelligently Generate Multiple Algorithm Training Assessments // permdaddy + +### If you have a suggestion +make an issue and we will come up with the potential name. ### WARNING I have just started to add algorithms, so the number of supported algorithms is diff --git a/ligma.config.js b/ligma.config.js new file mode 100644 index 0000000..f9624f0 --- /dev/null +++ b/ligma.config.js @@ -0,0 +1,6 @@ +module.exports = { + dsa: [ + "ArrayList", + ], +} + diff --git a/package.json b/package.json index b56ab8d..55b3307 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,21 @@ { - "name": "kata", - "version": "1.0.0", - "main": "index.js", - "license": "MIT", - "dependencies": { - "@types/jest": "^28.1.3", - "jest": "^28.1.1", - "ts-jest": "^28.0.5", - "ts-node": "^10.8.1", - "tsconfig-paths": "^4.0.0", - "tsconfig-paths-jest": "^0.0.1", - "typescript": "^4.7.4" - }, - "scripts": { - "test": "jest" - } -} + "name": "kata", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "dependencies": { + "@types/jest": "^28.1.3", + "jest": "^28.1.1", + "ts-jest": "^28.0.5", + "ts-node": "^10.8.1", + "tsconfig-paths": "^4.0.0", + "tsconfig-paths-jest": "^0.0.1", + "typescript": "^4.7.4" + }, + "scripts": { + "test": "jest ArrayList" + }, + "kata_stats": { + "ArrayList": 2 + } +} \ No newline at end of file diff --git a/scripts/align-configs.js b/scripts/align-configs.js index ccaf00c..99e30e4 100644 --- a/scripts/align-configs.js +++ b/scripts/align-configs.js @@ -1,6 +1,23 @@ const fs = require("fs"); const path = require("path"); +module.exports.package_json = function(config) { + const package_json = require("../package.json"); + package_json.scripts.test = `jest ${config.dsa.join(" ")}`; + + package_json.kata_stats = config.dsa.reduce((acc, ds) => { + if (!acc[ds]) { + acc[ds] = 0; + } + acc[ds]++; + return acc; + }, package_json.kata_stats || {}); + + fs.writeFileSync( + path.join(__dirname, "..", "package.json"), + JSON.stringify(package_json, null, 4)); +} + module.exports.ts_config = function(set_to) { const ts_config = require("../tsconfig.json"); ts_config.compilerOptions.paths["@code/*"] = [`${set_to}/*`]; diff --git a/scripts/dsa.js b/scripts/dsa.js new file mode 100644 index 0000000..a3090f4 --- /dev/null +++ b/scripts/dsa.js @@ -0,0 +1,44 @@ + +module.exports = { + ArrayList: { + type: "class", + name: "array-list.ts", + className: "ArrayList", + }, + SinglyLinkedList: { + type: "class", + name: "single-linked-list.ts", + className: "LinkedList", + }, + DoublyLinkedList: { + type: "class", + name: "doubly-linked-list.ts", + className: "LinkedList", + }, + Queue: { + type: "class", + name: "queue", + className: "Queue", + }, + + Stack: { + type: "class", + name: "stack", + className: "Stack", + }, + InsertionSort: { + type: "fn", + name: "insertion-sort.ts", + fn: "insertion_sort", + args: "arr: number[]", + "return": "void", + }, + MergeSort: { + type: "fn", + name: "merge-sort.ts", + fn: "merge_sort", + args: "arr: number[]", + "return": "void", + }, +}; + diff --git a/scripts/v1 b/scripts/generate similarity index 64% rename from scripts/v1 rename to scripts/generate index 7eab5ca..69069d5 100755 --- a/scripts/v1 +++ b/scripts/generate @@ -1,6 +1,8 @@ #!/usr/bin/env node const fs = require("fs"); const path = require("path"); +const config = require("../ligma.config"); +const dsa = require("./dsa"); const src_path = path.join(__dirname, "..", "src"); let day = 1; @@ -28,7 +30,7 @@ try { fs.unlinkSync(day_path); } catch (e) { } try { fs.mkdirSync(day_path); } catch (e) { } function create_class(item) { - fs.writeFileSync(path.join(day_path, item.name), `export default class ${item.class} { + fs.writeFileSync(path.join(day_path, item.name), `export default class ${item.className} { constructor() { } @@ -41,35 +43,17 @@ function create_function(item) { }`); } -[{ - name: "single-linked-list.ts", - class: "LinkedList", -}, { - name: "doubly-linked-list.ts", - class: "LinkedList", -}, { - name: "array-list.ts", - class: "ArrayList", -}, { - name: "queue.ts", - class: "Queue", -}, { - name: "stack.ts", - class: "Stack", -}].forEach(c => create_class(c)); - -[{ - name: "insertion-sort.ts", - fn: "insertion_sort", - args: "arr: number[]", - "return": "void", -}, { - name: "merge-sort.ts", - fn: "merge_sort", - args: "arr: number[]", - "return": "void", -}].forEach(f => create_function(f)); +config.dsa.forEach(ds => { + const item = dsa[ds]; + if (item.type === "class") { + create_class(item); + } else { + create_function(item); + } +}); const align = require("./align-configs"); align.jest(day_name); align.ts_config(day_name); +align.package_json(config, day_name); + diff --git a/tsconfig.json b/tsconfig.json index b207103..0791ec0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,7 @@ "baseUrl": "src", "paths": { "@code/*": [ - "day2/*" + "day4/*" ] } },