diff --git a/WarmUp/MovingOn/HuntingBugs/CMakeLists.txt b/WarmUp/MovingOn/HuntingBugs/CMakeLists.txt index 73b289d..3ad06ad 100644 --- a/WarmUp/MovingOn/HuntingBugs/CMakeLists.txt +++ b/WarmUp/MovingOn/HuntingBugs/CMakeLists.txt @@ -3,16 +3,21 @@ cmake_minimum_required(VERSION 3.22) project(WarmUp-MovingOn-HuntingBugs) set(TASK - src/approaching.cpp) + src/collision.cpp src/approaching.cpp) set(SRC ${TASK} src/main.cpp - src/move.cpp src/point.cpp src/direction.cpp src/borders.cpp src/collision.cpp src/generate.cpp src/loop.cpp) + src/move.cpp src/point.cpp src/direction.cpp src/borders.cpp src/generate.cpp src/loop.cpp) + +set(TEST + test/test.cpp) add_executable(${PROJECT_NAME}-run ${SRC}) +configure_test_target(${PROJECT_NAME}-test "${TASK}" ${TEST}) + prepare_sfml_framework_lesson_task( "${CMAKE_CURRENT_SOURCE_DIR}/.." ${PROJECT_NAME}-run - "" + ${PROJECT_NAME}-test ) \ No newline at end of file diff --git a/WarmUp/MovingOn/HuntingBugs/src/approaching.cpp b/WarmUp/MovingOn/HuntingBugs/src/approaching.cpp index 228c24e..ba0307c 100644 --- a/WarmUp/MovingOn/HuntingBugs/src/approaching.cpp +++ b/WarmUp/MovingOn/HuntingBugs/src/approaching.cpp @@ -1,11 +1,9 @@ #include "scene.hpp" void approachingLoop(Circle player, Circle consumable[], bool concerned[], int size) { - for (int i = 0; i <= size; ++i) { + for (int i = 0; i < size; ++i) { float dist = distance(player.center, consumable[i].center); float warnDist = 3 * player.radius + consumable[i].radius; - if (concerned[i] = false) { - concerned[i] = dist < warnDist; - } + concerned[i] = (dist < warnDist); } } diff --git a/WarmUp/MovingOn/HuntingBugs/task-info.yaml b/WarmUp/MovingOn/HuntingBugs/task-info.yaml index 1f74e14..96d1bfe 100644 --- a/WarmUp/MovingOn/HuntingBugs/task-info.yaml +++ b/WarmUp/MovingOn/HuntingBugs/task-info.yaml @@ -1,6 +1,19 @@ -type: ide +type: edu custom_name: Hunting Bugs files: +- name: src/approaching.cpp + visible: true + placeholders: + - offset: 113 + length: 215 + placeholder_text: |- + for (int i = 0; i <= size; ++i) { + float dist = distance(player.center, consumable[i].center); + float warnDist = 3 * player.radius + consumable[i].radius; + if (concerned[i] = false) { + concerned[i] = dist < warnDist; + } + } - name: src/loop.cpp visible: true placeholders: @@ -136,7 +149,6 @@ files: visible: false - name: src/main.cpp visible: true - editable: true -- name: src/approaching.cpp - visible: true +- name: test/test.cpp + visible: false feedback_link: https://docs.google.com/forms/d/e/1FAIpQLScfBp0gzdxWOmXvQVdyNmeO1od7CG7zxLgNUP4LzKxLBCzkhQ/viewform?usp=pp_url&entry.2103429047=Warm+Up/Moving+On/Hunting+Bugs diff --git a/WarmUp/MovingOn/HuntingBugs/test/test.cpp b/WarmUp/MovingOn/HuntingBugs/test/test.cpp new file mode 100644 index 0000000..479a2bf --- /dev/null +++ b/WarmUp/MovingOn/HuntingBugs/test/test.cpp @@ -0,0 +1,55 @@ +#include + +#include + +#include "scene.hpp" +#include "operators.hpp" +#include "testing.hpp" + +testing::Environment* const env = + testing::AddGlobalTestEnvironment(new TestEnvironment); + +std::string error_msg(Circle player, Circle consumable, bool concerned, bool expected, bool actual) { + std::ostringstream stream; + stream << "Testing statement:\n" + << " approachingLoop(player, consumable, concerned, N)" << "\n"; + stream << "Test data:" << "\n" + << " player = " << player << "\n" + << " consumable[i] = " << consumable << "\n" + << " concerned[i] = " << concerned << "\n"; + stream << "Expected result:\n" + << " concerned[i] = " << expected << "\n"; + stream << "Actual result:\n" + << " concerned[i] = " << actual << "\n"; + return stream.str(); +} + +TEST(collisionLoopTest, collisionLoopTest) { + Circle player = { {0.0f, 0.0f}, RADIUS }; + + const int N_CIRCLES = 4; + + Circle circle1 = { { 3 * RADIUS, 3 * RADIUS }, 2 * RADIUS }; + Circle circle2 = { { 2 * RADIUS, -2 * RADIUS }, RADIUS / 2 }; + Circle circle3 = { { EAST_BORDER, SOUTH_BORDER }, RADIUS }; + Circle circle4 = { { 10 * RADIUS, 6 * RADIUS }, RADIUS / 4 }; + Circle circle5 = player; + + Circle consumable[N_CIRCLES + 1] = { circle1, circle2, circle3, circle4, circle5 }; + bool concerned[N_CIRCLES + 1] = { false, true, false, true, false }; + bool expected[N_CIRCLES + 1] = { true, true, false, false, false }; + + bool actual[N_CIRCLES + 1]; + for (int i = 0; i < N_CIRCLES + 1; ++i) { + actual[i] = concerned[i]; + } + approachingLoop(player, consumable, actual, N_CIRCLES); + + for (int i = 0; i < N_CIRCLES; ++i) { + ASSERT_EQ(expected[i], actual[i]) << error_msg(player, consumable[i], concerned[i], expected[i], actual[i]); + } + ASSERT_EQ(expected[N_CIRCLES], actual[N_CIRCLES]) + << "Testing statement:\n" + << " approachingLoop(player, consumable, concerned, N)" << "\n" + << "Function attempted to modify elements of the array outside of its bounds."; +} \ No newline at end of file diff --git a/WarmUp/MovingOn/PlayAround/src/approaching.cpp b/WarmUp/MovingOn/PlayAround/src/approaching.cpp index de9627a..ba0307c 100644 --- a/WarmUp/MovingOn/PlayAround/src/approaching.cpp +++ b/WarmUp/MovingOn/PlayAround/src/approaching.cpp @@ -4,6 +4,6 @@ void approachingLoop(Circle player, Circle consumable[], bool concerned[], int s for (int i = 0; i < size; ++i) { float dist = distance(player.center, consumable[i].center); float warnDist = 3 * player.radius + consumable[i].radius; - concerned[i] = dist < warnDist; + concerned[i] = (dist < warnDist); } } diff --git a/WarmUp/MovingOn/PlayAround/task-info.yaml b/WarmUp/MovingOn/PlayAround/task-info.yaml index 1345fac..1dea63f 100644 --- a/WarmUp/MovingOn/PlayAround/task-info.yaml +++ b/WarmUp/MovingOn/PlayAround/task-info.yaml @@ -3,6 +3,24 @@ custom_name: Play Around files: - name: src/approaching.cpp visible: true + placeholders: + - offset: 113 + length: 215 + placeholder_text: |- + for (int i = 0; i <= size; ++i) { + float dist = distance(player.center, consumable[i].center); + float warnDist = 3 * player.radius + consumable[i].radius; + if (concerned[i] = false) { + concerned[i] = dist < warnDist; + } + } + dependency: + section: WarmUp + lesson: MovingOn + task: HuntingBugs + file: src/approaching.cpp + placeholder: 1 + is_visible: false - name: src/loop.cpp visible: true placeholders: