feat: ring buffer

This commit is contained in:
mpaulson 2022-06-30 20:15:18 -06:00
parent 3be55dc53e
commit 7101b99c35
3 changed files with 58 additions and 3 deletions

View file

@ -1,11 +1,41 @@
module.exports = { module.exports = {
RingBuffer: {
generic: "<T>",
type: "class",
methods: [{
name: "push",
args: "item: T",
return: "void",
}, {
name: "get",
args: "idx: number",
return: "T | undefined",
}, {
name: "pop",
return: "T | undefined",
}],
getters: [{
name: "length",
return: "number",
prop_name: "_length",
}],
properties: [{
name: "_length",
type: "number",
scope: "private",
}]
},
ArrayList: { ArrayList: {
type: "class", type: "class",
generic: "<T>",
methods: [{ methods: [{
name: "add", name: "add",
args: "item: T", args: "item: T",
return: "void", return: "void",
}, {
name: "peek",
return: "T | undefined",
}, { }, {
name: "remove", name: "remove",
args: "item: T", args: "item: T",
@ -27,15 +57,19 @@ module.exports = {
}] }]
}, },
SinglyLinkedList: { SinglyLinkedList: {
generic: "<T>",
type: "class", type: "class",
}, },
DoublyLinkedList: { DoublyLinkedList: {
generic: "<T>",
type: "class", type: "class",
}, },
Queue: { Queue: {
generic: "<T>",
type: "class", type: "class",
}, },
Stack: { Stack: {
generic: "<T>",
type: "class", type: "class",
}, },

View file

@ -30,7 +30,7 @@ try { fs.unlinkSync(day_path); } catch (e) { }
try { fs.mkdirSync(day_path); } catch (e) { } try { fs.mkdirSync(day_path); } catch (e) { }
function generate_method(method) { function generate_method(method) {
return `${method.name}(${method.args}): ${method.return || "void"} { return `${method.name}(${method.args || ""}): ${method.return || "void"} {
}`; }`;
} }
@ -46,7 +46,7 @@ function generate_getter(getter) {
} }
function create_class(name, item) { function create_class(name, item) {
fs.writeFileSync(path.join(day_path, `${name}.ts`), `export default class ${name}<T> { fs.writeFileSync(path.join(day_path, `${name}.ts`), `export default class ${name}${item.generic || ""} {
${(item.properties || []).map(generate_property).join("\n ")} ${(item.properties || []).map(generate_property).join("\n ")}
${(item.getters || []).map(generate_getter).join("\n ")} ${(item.getters || []).map(generate_getter).join("\n ")}

View file

@ -1,3 +1,24 @@
import RingBuffer from "@code/RingBuffer";
test("RingBuffer", function() {
const buffer = new RingBuffer<number>();
buffer.push(5);
expect(buffer.pop()).toEqual(5);
expect(buffer.pop()).toEqual(undefined);
buffer.push(42);
buffer.push(9);
expect(buffer.pop()).toEqual(42);
expect(buffer.pop()).toEqual(9);
expect(buffer.pop()).toEqual(undefined);
buffer.push(42);
buffer.push(9);
buffer.push(12);
expect(buffer.get(2)).toEqual(12);
expect(buffer.get(1)).toEqual(9);
expect(buffer.get(0)).toEqual(42);
});