From 507b1b1dabb3b0a0501aa6fb04b56bb4e4db5833 Mon Sep 17 00:00:00 2001 From: mpaulson Date: Wed, 22 Jun 2022 22:34:21 -0600 Subject: [PATCH] feat: ligma sugma --- .jest.config.json | 9 ++ README.md | 52 ++++++++- jest.config.ts | 201 +-------------------------------- scripts/align-configs.js | 21 ++++ scripts/v1 | 7 +- src/day1/array-list.ts | 5 + src/day1/doubly-linked-list.ts | 5 + src/day1/insertion-sort.ts | 3 + src/day1/merge-sort.ts | 3 + src/day1/queue.ts | 5 + src/day1/single-linked-list.ts | 5 + src/day1/stack.ts | 5 + src/day2/array-list.ts | 5 + src/day2/doubly-linked-list.ts | 5 + src/day2/insertion-sort.ts | 3 + src/day2/merge-sort.ts | 3 + src/day2/queue.ts | 5 + src/day2/single-linked-list.ts | 5 + src/day2/stack.ts | 5 + tsconfig.json | 9 +- 20 files changed, 156 insertions(+), 205 deletions(-) create mode 100644 .jest.config.json create mode 100644 scripts/align-configs.js create mode 100644 src/day1/array-list.ts create mode 100644 src/day1/doubly-linked-list.ts create mode 100644 src/day1/insertion-sort.ts create mode 100644 src/day1/merge-sort.ts create mode 100644 src/day1/queue.ts create mode 100644 src/day1/single-linked-list.ts create mode 100644 src/day1/stack.ts create mode 100644 src/day2/array-list.ts create mode 100644 src/day2/doubly-linked-list.ts create mode 100644 src/day2/insertion-sort.ts create mode 100644 src/day2/merge-sort.ts create mode 100644 src/day2/queue.ts create mode 100644 src/day2/single-linked-list.ts create mode 100644 src/day2/stack.ts diff --git a/.jest.config.json b/.jest.config.json new file mode 100644 index 0000000..bc89bfe --- /dev/null +++ b/.jest.config.json @@ -0,0 +1,9 @@ +{ + "clearMocks": true, + "moduleNameMapper": { + "@code/(.*)": [ + "/src/day2/$1" + ] + }, + "preset": "ts-jest" +} \ No newline at end of file diff --git a/README.md b/README.md index 3e81487..d78f9c3 100644 --- a/README.md +++ b/README.md @@ -1 +1,51 @@ -# Lig-Machine +## Lig-Machine +The kata machine makes it easy to run katas on specific algorithms. + +### WARNING +I have just started to add algorithms, so the number of supported algorithms is +limited at the moment, but will grow fairly quick. + +### Supported Algorithm +* Insertion sort +* Merge sort + +### Supported Data Structures +* Singly linked list +* Doubly linked list +* Queue +* Stack + +### How It Works + +install the dependencies + +```bash +yarn install +``` + +create day 1 +```bash +./scripts/v1 +``` + +this will progressively create folders named + +``` +src/day1 +src/day2 +... +``` + +`scripts/v1` will also update the `tsconfig.json` and `jest.config` to point +the latest `day` folder via tspaths. This allows us to avoid updating anything +for testing each day. + +#### Testing +``` +yarn test +``` + +I have yet to create a testing strategy for next sets of algorithms, but we +will get there when i cross that bridge. + +>>>>>>> feat: ligma sugma diff --git a/jest.config.ts b/jest.config.ts index 16a9423..12b9ab9 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -1,199 +1,4 @@ -/* - * For a detailed explanation regarding each configuration property and type check, visit: - * https://jestjs.io/docs/configuration - */ +// @ts-ignore +import jest_config from "./.jest.config.json"; -export default { - // All imported modules in your tests should be mocked automatically - // automock: false, - - // Stop running tests after `n` failures - // bail: 0, - - // The directory where Jest should store its cached dependency information - // cacheDirectory: "/tmp/jest_rt", - - // Automatically clear mock calls, instances, contexts and results before every test - clearMocks: true, - - // Indicates whether the coverage information should be collected while executing the test - // collectCoverage: false, - - // An array of glob patterns indicating a set of files for which coverage information should be collected - // collectCoverageFrom: undefined, - - // The directory where Jest should output its coverage files - // coverageDirectory: undefined, - - // An array of regexp pattern strings used to skip coverage collection - // coveragePathIgnorePatterns: [ - // "/node_modules/" - // ], - - // Indicates which provider should be used to instrument code for coverage - // coverageProvider: "babel", - - // A list of reporter names that Jest uses when writing coverage reports - // coverageReporters: [ - // "json", - // "text", - // "lcov", - // "clover" - // ], - - // An object that configures minimum threshold enforcement for coverage results - // coverageThreshold: undefined, - - // A path to a custom dependency extractor - // dependencyExtractor: undefined, - - // Make calling deprecated APIs throw helpful error messages - // errorOnDeprecated: false, - - // The default configuration for fake timers - // fakeTimers: { - // "enableGlobally": false - // }, - - // Force coverage collection from ignored files using an array of glob patterns - // forceCoverageMatch: [], - - // A path to a module which exports an async function that is triggered once before all test suites - // globalSetup: undefined, - - // A path to a module which exports an async function that is triggered once after all test suites - // globalTeardown: undefined, - - // A set of global variables that need to be available in all test environments - // globals: {}, - - // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. - // maxWorkers: "50%", - - // An array of directory names to be searched recursively up from the requiring module's location - // moduleDirectories: [ - // "node_modules" - // ], - - // An array of file extensions your modules use - // moduleFileExtensions: [ - // "js", - // "mjs", - // "cjs", - // "jsx", - // "ts", - // "tsx", - // "json", - // "node" - // ], - - // Testing hack - moduleNameMapper: { - "@code/(.*)": "/src/day1/$1", - }, - - - - // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader - // modulePathIgnorePatterns: [], - - // Activates notifications for test results - // notify: false, - - // An enum that specifies notification mode. Requires { notify: true } - // notifyMode: "failure-change", - - // A preset that is used as a base for Jest's configuration - preset: "ts-jest", - - // Run tests from one or more projects - // projects: undefined, - - // Use this configuration option to add custom reporters to Jest - // reporters: undefined, - - // Automatically reset mock state before every test - // resetMocks: false, - - // Reset the module registry before running each individual test - // resetModules: false, - - // A path to a custom resolver - // resolver: undefined, - - // Automatically restore mock state and implementation before every test - // restoreMocks: false, - - // The root directory that Jest should scan for tests and modules within - // rootDir: undefined, - - // A list of paths to directories that Jest should use to search for files in - // roots: [ - // "" - // ], - - // Allows you to use a custom runner instead of Jest's default test runner - // runner: "jest-runner", - - // The paths to modules that run some code to configure or set up the testing environment before each test - // setupFiles: [], - - // A list of paths to modules that run some code to configure or set up the testing framework before each test - // setupFilesAfterEnv: [], - - // The number of seconds after which a test is considered as slow and reported as such in the results. - // slowTestThreshold: 5, - - // A list of paths to snapshot serializer modules Jest should use for snapshot testing - // snapshotSerializers: [], - - // The test environment that will be used for testing - // testEnvironment: "jest-environment-node", - - // Options that will be passed to the testEnvironment - // testEnvironmentOptions: {}, - - // Adds a location field to test results - // testLocationInResults: false, - - // The glob patterns Jest uses to detect test files - // testMatch: [ - // "**/__tests__/**/*.[jt]s?(x)", - // "**/?(*.)+(spec|test).[tj]s?(x)" - // ], - - // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - // testPathIgnorePatterns: [ - // "/node_modules/" - // ], - - // The regexp pattern or array of patterns that Jest uses to detect test files - // testRegex: [], - - // This option allows the use of a custom results processor - // testResultsProcessor: undefined, - - // This option allows use of a custom test runner - // testRunner: "jest-circus/runner", - - // A map from regular expressions to paths to transformers - // transform: undefined, - - // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - // transformIgnorePatterns: [ - // "/node_modules/", - // "\\.pnp\\.[^\\/]+$" - // ], - - // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them - // unmockedModulePathPatterns: undefined, - - // Indicates whether each individual test should be reported during the run - // verbose: undefined, - - // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode - // watchPathIgnorePatterns: [], - - // Whether to use watchman for file crawling - // watchman: true, -}; +export default jest_config; diff --git a/scripts/align-configs.js b/scripts/align-configs.js new file mode 100644 index 0000000..ccaf00c --- /dev/null +++ b/scripts/align-configs.js @@ -0,0 +1,21 @@ +const fs = require("fs"); +const path = require("path"); + +module.exports.ts_config = function(set_to) { + const ts_config = require("../tsconfig.json"); + ts_config.compilerOptions.paths["@code/*"] = [`${set_to}/*`]; + + fs.writeFileSync( + path.join(__dirname, "..", "tsconfig.json"), + JSON.stringify(ts_config, null, 4)); +} + +module.exports.jest = function(set_to) { + const jest = require("../.jest.config.json"); + jest.moduleNameMapper["@code/(.*)"] = [`/src/${set_to}/$1`]; + + fs.writeFileSync( + path.join(__dirname, "..", ".jest.config.json"), + JSON.stringify(jest, null, 4)); +} + diff --git a/scripts/v1 b/scripts/v1 index 1881496..7eab5ca 100755 --- a/scripts/v1 +++ b/scripts/v1 @@ -22,7 +22,8 @@ try { day = 1; } -const day_path = path.join(src_path, `day${day}`); +const day_name = `day${day}`; +const day_path = path.join(src_path, day_name); try { fs.unlinkSync(day_path); } catch (e) { } try { fs.mkdirSync(day_path); } catch (e) { } @@ -68,3 +69,7 @@ function create_function(item) { args: "arr: number[]", "return": "void", }].forEach(f => create_function(f)); + +const align = require("./align-configs"); +align.jest(day_name); +align.ts_config(day_name); diff --git a/src/day1/array-list.ts b/src/day1/array-list.ts new file mode 100644 index 0000000..f5eded1 --- /dev/null +++ b/src/day1/array-list.ts @@ -0,0 +1,5 @@ +export default class ArrayList { + constructor() { + + } +} \ No newline at end of file diff --git a/src/day1/doubly-linked-list.ts b/src/day1/doubly-linked-list.ts new file mode 100644 index 0000000..871d415 --- /dev/null +++ b/src/day1/doubly-linked-list.ts @@ -0,0 +1,5 @@ +export default class LinkedList { + constructor() { + + } +} \ No newline at end of file diff --git a/src/day1/insertion-sort.ts b/src/day1/insertion-sort.ts new file mode 100644 index 0000000..c46c2f9 --- /dev/null +++ b/src/day1/insertion-sort.ts @@ -0,0 +1,3 @@ +export default function insertion_sort(arr: number[]): void { + +} \ No newline at end of file diff --git a/src/day1/merge-sort.ts b/src/day1/merge-sort.ts new file mode 100644 index 0000000..acc611e --- /dev/null +++ b/src/day1/merge-sort.ts @@ -0,0 +1,3 @@ +export default function merge_sort(arr: number[]): void { + +} \ No newline at end of file diff --git a/src/day1/queue.ts b/src/day1/queue.ts new file mode 100644 index 0000000..b7f1b60 --- /dev/null +++ b/src/day1/queue.ts @@ -0,0 +1,5 @@ +export default class Queue { + constructor() { + + } +} \ No newline at end of file diff --git a/src/day1/single-linked-list.ts b/src/day1/single-linked-list.ts new file mode 100644 index 0000000..871d415 --- /dev/null +++ b/src/day1/single-linked-list.ts @@ -0,0 +1,5 @@ +export default class LinkedList { + constructor() { + + } +} \ No newline at end of file diff --git a/src/day1/stack.ts b/src/day1/stack.ts new file mode 100644 index 0000000..75a9e6e --- /dev/null +++ b/src/day1/stack.ts @@ -0,0 +1,5 @@ +export default class Stack { + constructor() { + + } +} \ No newline at end of file diff --git a/src/day2/array-list.ts b/src/day2/array-list.ts new file mode 100644 index 0000000..f5eded1 --- /dev/null +++ b/src/day2/array-list.ts @@ -0,0 +1,5 @@ +export default class ArrayList { + constructor() { + + } +} \ No newline at end of file diff --git a/src/day2/doubly-linked-list.ts b/src/day2/doubly-linked-list.ts new file mode 100644 index 0000000..871d415 --- /dev/null +++ b/src/day2/doubly-linked-list.ts @@ -0,0 +1,5 @@ +export default class LinkedList { + constructor() { + + } +} \ No newline at end of file diff --git a/src/day2/insertion-sort.ts b/src/day2/insertion-sort.ts new file mode 100644 index 0000000..c46c2f9 --- /dev/null +++ b/src/day2/insertion-sort.ts @@ -0,0 +1,3 @@ +export default function insertion_sort(arr: number[]): void { + +} \ No newline at end of file diff --git a/src/day2/merge-sort.ts b/src/day2/merge-sort.ts new file mode 100644 index 0000000..acc611e --- /dev/null +++ b/src/day2/merge-sort.ts @@ -0,0 +1,3 @@ +export default function merge_sort(arr: number[]): void { + +} \ No newline at end of file diff --git a/src/day2/queue.ts b/src/day2/queue.ts new file mode 100644 index 0000000..b7f1b60 --- /dev/null +++ b/src/day2/queue.ts @@ -0,0 +1,5 @@ +export default class Queue { + constructor() { + + } +} \ No newline at end of file diff --git a/src/day2/single-linked-list.ts b/src/day2/single-linked-list.ts new file mode 100644 index 0000000..871d415 --- /dev/null +++ b/src/day2/single-linked-list.ts @@ -0,0 +1,5 @@ +export default class LinkedList { + constructor() { + + } +} \ No newline at end of file diff --git a/src/day2/stack.ts b/src/day2/stack.ts new file mode 100644 index 0000000..75a9e6e --- /dev/null +++ b/src/day2/stack.ts @@ -0,0 +1,5 @@ +export default class Stack { + constructor() { + + } +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index c401a9b..b207103 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,7 +14,9 @@ ], "baseUrl": "src", "paths": { - "@code/*": ["day1/*"] + "@code/*": [ + "day2/*" + ] } }, "include": [ @@ -23,7 +25,4 @@ "exclude": [ "node_modules" ] -} - - - +} \ No newline at end of file