From 42b25f7b45c162edb80353b62446f93600dfce4e Mon Sep 17 00:00:00 2001 From: Kento Sato Date: Mon, 29 Jan 2024 16:40:04 +0900 Subject: [PATCH 1/2] efactor TurtleGraphics component and solveProblem test --- src/components/organisms/TurtleGraphics.tsx | 15 +-------------- tests/solveProblem.test.ts | 19 ++++++++++++++----- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/src/components/organisms/TurtleGraphics.tsx b/src/components/organisms/TurtleGraphics.tsx index 1cd998e0..305beed6 100644 --- a/src/components/organisms/TurtleGraphics.tsx +++ b/src/components/organisms/TurtleGraphics.tsx @@ -67,6 +67,7 @@ export const TurtleGraphics = forwardRef { - if (!selectedCharacter || !selectedCharacter.penDown) return; - - board.updateGrid(selectedCharacter); - }; - const handleClickCharacterMoveForwardButton = (): void => { if (!selectedCharacter) return; - if (selectedCharacter.canMoveForward()) { - drawCharacterPath(); - } - updateCharacter((character) => { character.moveForward(); }); @@ -166,10 +157,6 @@ export const TurtleGraphics = forwardRef { if (!selectedCharacter) return; - if (selectedCharacter.canMoveBack()) { - drawCharacterPath(); - } - updateCharacter((character) => { character.moveBack(); }); diff --git a/tests/solveProblem.test.ts b/tests/solveProblem.test.ts index 441ebc50..3ccdb805 100644 --- a/tests/solveProblem.test.ts +++ b/tests/solveProblem.test.ts @@ -81,11 +81,20 @@ test('Execute eval (2characters)', () => { test('Solve a problem (1character)', () => { const problemProgram = ` const character1 = new Character(); + character1.moveBack(); character1.moveForward(); character1.moveForward(); character1.moveForward(); character1.moveForward(); character1.moveForward(); + character1.turnLeft(); + character1.moveForward(); + character1.turnRight(); + character1.moveBack(); + character1.upPen(); + character1.moveBack(); + character1.moveBack(); + character1.putPen(); `; const answer = solveProblem(problemProgram); @@ -102,16 +111,16 @@ test('Solve a problem (1character)', () => { expect(answer.board.grid).toEqual([ [{ color: 'red' }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }], [{ color: 'red' }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }], + [{ color: 'red' }, { color: 'red' }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }], [{ color: 'red' }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }], - [{ color: 'red' }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }], - [{ color: 'red' }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }], - [{ color: 'red' }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }], + [{ color: 'red' }, { color: 'red' }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }], + [{ color: 'red' }, { color: "red" }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }], [{ color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }], [{ color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }], ]); expect(answer.histories?.at(-1)?.characters?.length).toEqual(1); - expect(answer.histories?.at(-1)?.characters?.[0]?.x).toEqual(1); - expect(answer.histories?.at(-1)?.characters?.[0]?.y).toEqual(6); + expect(answer.histories?.at(-1)?.characters?.[0]?.x).toEqual(2); + expect(answer.histories?.at(-1)?.characters?.[0]?.y).toEqual(3); }); test('Solve a problem (2characters)', () => { From ce3cf4b13a33fa4fc7d9d74ac70208223b7b3617 Mon Sep 17 00:00:00 2001 From: Kento Sato Date: Mon, 29 Jan 2024 16:32:51 +0900 Subject: [PATCH 2/2] Refactor TurtleGraphics and solveProblem tests --- src/components/organisms/TurtleGraphics.tsx | 3 +-- tests/solveProblem.test.ts | 7 ++++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/organisms/TurtleGraphics.tsx b/src/components/organisms/TurtleGraphics.tsx index 305beed6..e5867d28 100644 --- a/src/components/organisms/TurtleGraphics.tsx +++ b/src/components/organisms/TurtleGraphics.tsx @@ -198,11 +198,10 @@ export const TurtleGraphics = forwardRef { if (!selectedCell) return; - board.setCellColor(selectedCell.x, selectedCell.y, undefined); - const newCharacter = new Character({ x: selectedCell.x + ORIGIN_X, y: selectedCell.y + ORIGIN_Y, + penDown: false, path: [`${selectedCell.x},${selectedCell.y}`], }); diff --git a/tests/solveProblem.test.ts b/tests/solveProblem.test.ts index 3ccdb805..9aff852d 100644 --- a/tests/solveProblem.test.ts +++ b/tests/solveProblem.test.ts @@ -123,7 +123,7 @@ test('Solve a problem (1character)', () => { expect(answer.histories?.at(-1)?.characters?.[0]?.y).toEqual(3); }); -test('Solve a problem (2characters)', () => { +test('Solve a problem (multiple characters)', () => { const problemProgram = ` const character1 = new Character(); const character2 = new Character({color: 'green', x: 2, y: 1}); @@ -131,13 +131,14 @@ test('Solve a problem (2characters)', () => { character1.moveForward(); character2.moveForward(); character2.moveForward(); + const character3 = new Character({color: 'yellow', penDown: false, x: 3, y: 1}); `; const answer = solveProblem(problemProgram); expect(answer).not.toBeFalsy(); expect(answer.characters).not.toBeFalsy(); - expect(answer.characters?.length).toEqual(2); + expect(answer.characters?.length).toEqual(3); expect(answer.board).not.toBeFalsy(); expect(answer.characters?.[0].color).toEqual('red'); expect(answer.characters?.[0].direction).toEqual('down'); @@ -157,7 +158,7 @@ test('Solve a problem (2characters)', () => { [{ color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }], [{ color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }, { color: undefined }], ]); - expect(answer.histories?.at(-1)?.characters?.length).toEqual(2); + expect(answer.histories?.at(-1)?.characters?.length).toEqual(3); expect(answer.histories?.at(-1)?.characters?.[0]?.x).toEqual(1); expect(answer.histories?.at(-1)?.characters?.[0]?.y).toEqual(3); expect(answer.histories?.at(-1)?.characters?.[1]?.x).toEqual(2);