Untitled

 avatar
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