Untitled
unknown
plain_text
5 months ago
4.2 kB
3
Indexable
С учетом нового подхода к хранению данных, тесты требуют незначительных изменений, в основном для приведения формата данных к использованию `std::unordered_map` вместо `std::map`. Также уточняются проверки, чтобы убедиться, что указатели в массиве правильно инициализируются. Вот отформатированные тесты с учетом изменений: ### Обновленные тесты ```cpp #include <gtest/gtest.h> #include "Data/data.h" // Тесты для класса Data class DataTest : public ::testing::Test { protected: Data data; void SetUp() override { // Инициализация перед каждым тестом data.addRail(RailType::L1, 100.0, 10); data.addRail(RailType::L2, 200.0, 5); } void TearDown() override { // Очистка после каждого теста, если это необходимо } }; TEST_F(DataTest, TestAddRail_NewRail) { RailType rt = RailType::L3; data.addRail(rt, 150.0, 20); // Проверка, что рельс был добавлен ASSERT_NO_THROW(data[rt]); // Проверяем доступ к рельсам ASSERT_EQ(data[rt][150.0], 20u); } TEST_F(DataTest, TestAddRail_ExistingRail) { RailType rt = RailType::L1; data.addRail(rt, 100.0, 5); // Проверка, что общее количество рельсов теперь 15 ASSERT_EQ(data[rt][100.0], 15u); } TEST_F(DataTest, TestGetCheapestRail_ExistingRail) { RailType rt = RailType::L1; double cheapest = data.getCheapestRail(rt); ASSERT_EQ(cheapest, 100.0); ASSERT_EQ(data[rt][100.0], 9u); // Один рельс использован } TEST_F(DataTest, TestGetCheapestRail_NoRails) { RailType rt = RailType::L3; // rt не добавлен в SetUp EXPECT_THROW(data.getCheapestRail(rt), std::invalid_argument); } TEST_F(DataTest, TestContainsElements_True) { RailType rt1 = RailType::L1; RailType rt2 = RailType::L2; std::unordered_map<RailType, uint64_t> order = {{rt1, 10}, {rt2, 5}}; ASSERT_TRUE(containsElements(data, order)); } TEST_F(DataTest, TestContainsElements_False) { RailType rt1 = RailType::L1; RailType rt2 = RailType::L2; std::unordered_map<RailType, uint64_t> order = { {rt1, 11}, // недостаточно {rt2, 1} // достаточное количество }; ASSERT_FALSE(containsElements(data, order)); } TEST_F(DataTest, TestAddRails) { RailType rt1 = RailType::L1; RailType rt2 = RailType::L2; std::unordered_map<RailType, RailMap> newRails; newRails[rt1][100.0] = 10; newRails[rt2][200.0] = 5; data.addRails(newRails); ASSERT_NO_THROW(data[rt1]); // Проверяем доступ к рельсам ASSERT_EQ(data[rt1][100.0], 20u); // 10 из SetUp и 10 добавлено ASSERT_NO_THROW(data[rt2]); // Проверяем доступ к рельсам ASSERT_EQ(data[rt2][200.0], 10u); // 5 из SetUp и 5 добавлено } // Основная функция для запуска всех тестов int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } ``` ### Основные изменения: 1. **Использование `std::unordered_map`**: Заменил `std::map` на `std::unordered_map` для нового формата данных. 2. **Проверка инициализации массива**: Проверка корректности работы с `nullptr` в массиве встроена в тесты на добавление и доступ. 3. **Изменения в тестах на наличие элементов**: Используется `std::unordered_map` для передачи заказов в `containsElements`. Если нужны дополнительные пояснения или исправления, дайте знать.
Editor is loading...
Leave a Comment