Untitled
unknown
plain_text
a year ago
4.2 kB
6
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