Тестирование производительности
есть Задача:
#ifndef TASK_H
#define TASK_H
#include <string>
// Перечисление для статуса задачи
enum class TaskStatus {
Pending, // Ожидающая
InProgress, // В процессе
Completed // Завершенная
};
// Класс, представляющий задачу
class Task {
private:
int id; // Уникальный идентификатор задачи
std::string description; // Описание задачи
TaskStatus status; // Статус задачи
public:
// Конструкторы
Task() : id(0), description(""), status(TaskStatus::Pending) {} // Конструктор по умолчанию
Task(int id, const std::string& description) : id(id), description(description), status(TaskStatus::Pending) {} // Конструктор с параметрами
// Методы доступа к атрибутам задачи
int getId() const { return id; } // Получить идентификатор задачи
std::string getDescription() const { return description; } // Получить описание задачи
TaskStatus getStatus() const { return status; } // Получить статус задачи
// Методы изменения статуса задачи
void markAsInProgress() { status = TaskStatus::InProgress; } // Установить статус "В процессе"
void markAsCompleted() { status = TaskStatus::Completed; } // Установить статус "Завершено"
};
#endif // TASK_H
Тесты на производительность
#include <gtest/gtest.h>
#include <chrono>
#include "task.h"
// Тест производительности для создания задачи
TEST(TaskPerformanceTest, TaskCreationPerformance) {
constexpr int numTasks = 1000000;
// Засекаем время начала операции создания задачи
auto start = std::chrono::high_resolution_clock::now();
// Цикл для создания numTasks задач
for (int i = 0; i < numTasks; ++i) {
Task task(i, "Task description");
}
// Засекаем время завершения операции создания задачи
auto end = std::chrono::high_resolution_clock::now();
// Вычисляем продолжительность операции создания задачи
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
// Выводим результат измерения времени в стандартный вывод
std::cout << "Time taken for creating " << numTasks << " tasks: " << duration << " milliseconds" << std::endl;
}
// Тест производительности для изменения статуса задачи
TEST(TaskPerformanceTest, MarkTaskAsInProgressPerformance) {
constexpr int numTasks = 1000000;
Task task(0, "Task description");
auto start = std::chrono::high_resolution_clock::now();
for (int i = 0; i < numTasks; ++i) {
task.markAsInProgress();
}
auto end = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
std::cout << "Time taken for marking " << numTasks << " tasks as 'In Progress': " << duration << " milliseconds" << std::endl;
}
// Тест производительности для доступа к атрибутам задачи
TEST(TaskPerformanceTest, AccessTaskAttributesPerformance) {
constexpr int numTasks = 1000000;
Task task(0, "Task description");
auto start = std::chrono::high_resolution_clock::now();
for (int i = 0; i < numTasks; ++i) {
int id = task.getId();
std::string description = task.getDescription();
TaskStatus status = task.getStatus();
}
auto end = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
std::cout << "Time taken for accessing attributes of " << numTasks << " tasks: " << duration << " milliseconds" << std::endl;
}
в
Last updated