Files
cinema-ticket-management-sy…/tests_class/day_manager_test.cpp
T

176 lines
5.0 KiB
C++
Raw Normal View History

2026-07-12 14:34:52 +04:00
#include "day_manager.h"
#include <QtTest>
class DayManagerTest : public QObject {
Q_OBJECT
private slots:
void testAddAvailableSlot();
void testDuration();
void testReserveFailure();
void testReserveImplMaximal();
void testReserveImplMinimal();
void testReserveImplQuick();
void testReserveImplRandom();
void testReserveSuccess();
};
void DayManagerTest::testAddAvailableSlot() {
DayManager manager(QTime(9, 0), QTime(12, 0));
QCOMPARE(manager.minDurationMs_, 0);
QVERIFY(!manager.availableSlots_.isEmpty());
QCOMPARE(manager.availableSlots_.size(), 1);
QCOMPARE(manager.availableSlots_.value(QTime(9, 0)), QTime(12, 0));
}
void DayManagerTest::testDuration() {
DayManager manager(QTime(9, 0), QTime(12, 0));
QCOMPARE(manager.duration(QTime(10, 0)), {}); // Print warning
QCOMPARE(manager.duration(QTime(9, 0)), QTime(3, 0));
manager.addAvailableSlot(QTime(12, 0), QTime(13, 0));
QCOMPARE(manager.duration(QTime(12, 0)), QTime(1, 0));
QCOMPARE(manager.duration(), QTime(4, 0));
}
void DayManagerTest::testReserveImplQuick() {
DayManager manager(QTime(9, 0), QTime(12, 0));
for (int i = 0; i < 3; ++i) {
QCOMPARE(manager.slotCount(), 1);
QTime availableHourCount = manager.duration(QTime(9 + i, 0));
QCOMPARE(manager.duration(QTime(9 + i, 0)), QTime(3 - i, 0));
auto [begin, end] =
manager.reserveImplQuick(QTime(1, 0).msecsSinceStartOfDay());
QVERIFY(begin.isValid());
QVERIFY(end.isValid());
}
QCOMPARE(manager.slotCount(), 0);
}
void DayManagerTest::testReserveImplMaximal() {
DayManager manager;
manager.addAvailableSlot(QTime(9, 0), QTime(12, 0)); // 3 hour; first, second
manager.addAvailableSlot(QTime(8, 0), QTime(9, 0)); // 1 hour
manager.addAvailableSlot(QTime(12, 0), QTime(14, 0)); // 2 hour; third
auto [begin1, end1] =
manager.reserveImplMaximal(QTime(1, 0).msecsSinceStartOfDay());
QVERIFY(begin1.isValid());
QVERIFY(end1.isValid());
QCOMPARE(begin1, QTime(9, 0));
auto [begin2, end2] =
manager.reserveImplMaximal(QTime(1, 0).msecsSinceStartOfDay());
QVERIFY(begin2.isValid());
QVERIFY(end2.isValid());
QCOMPARE(begin2, QTime(10, 0));
auto [begin3, end3] =
manager.reserveImplMaximal(QTime(1, 0).msecsSinceStartOfDay());
QVERIFY(begin3.isValid());
QVERIFY(end3.isValid());
QCOMPARE(begin3, QTime(12, 0));
QCOMPARE(manager.slotCount(), 3);
}
void DayManagerTest::testReserveImplMinimal() {
DayManager manager;
manager.addAvailableSlot(QTime(9, 0), QTime(12, 0)); // 3 hour
manager.addAvailableSlot(QTime(8, 0), QTime(9, 0)); // 1 hour; first
manager.addAvailableSlot(QTime(12, 0), QTime(14, 0)); // 2 hour; second, third
auto [begin1, end1] =
manager.reserveImplMinimal(QTime(1, 0).msecsSinceStartOfDay());
QVERIFY(begin1.isValid());
QVERIFY(end1.isValid());
QCOMPARE(begin1, QTime(8, 0));
auto [begin2, end2] =
manager.reserveImplMinimal(QTime(1, 0).msecsSinceStartOfDay());
QVERIFY(begin2.isValid());
QVERIFY(end2.isValid());
QCOMPARE(begin2, QTime(12, 0));
auto [begin3, end3] =
manager.reserveImplMinimal(QTime(1, 0).msecsSinceStartOfDay());
QVERIFY(begin3.isValid());
QVERIFY(end3.isValid());
QCOMPARE(begin3, QTime(13, 0));
QCOMPARE(manager.slotCount(), 1);
}
void DayManagerTest::testReserveImplRandom() {
DayManager manager(QTime(9, 0), QTime(12, 0));
for (int i = 0; i < 3; ++i) {
QCOMPARE(manager.slotCount(), 1);
auto [begin, end] =
manager.reserveImplRandom(QTime(1, 0).msecsSinceStartOfDay());
QVERIFY(begin.isValid());
QVERIFY(end.isValid());
}
QCOMPARE(manager.slotCount(), 0);
}
void DayManagerTest::testReserveSuccess() {
DayManager manager(QTime(9, 0), QTime(12, 0));
manager.setMinDuration(QTime(0, 30));
auto [begin, end] = manager.reserve(QTime(1, 0));
QVERIFY(begin.isValid());
QVERIFY(end.isValid());
QCOMPARE(begin.hour(), 9);
QCOMPARE(end.hour(), 10);
QCOMPARE(end.minute(), 0);
std::tie(begin, end) = manager.reserve(QTime(1, 30));
QVERIFY(begin.isValid());
QVERIFY(end.isValid());
QCOMPARE(begin.hour(), 10);
QCOMPARE(end.hour(), 11);
QCOMPARE(end.minute(), 30);
}
void DayManagerTest::testReserveFailure() {
DayManager manager(QTime(9, 0), QTime(12, 0));
manager.setMinDuration(QTime(0, 30));
QCOMPARE(manager.duration(QTime(9, 0)), QTime(3, 0));
QTime begin, end;
std::tie(begin, end) = manager.reserve(QTime(4, 0));
QVERIFY(!begin.isValid());
QVERIFY(!end.isValid());
std::tie(begin, end) = manager.reserve(QTime(3, 0, 1));
QVERIFY(!begin.isValid());
QVERIFY(!end.isValid());
std::tie(begin, end) = manager.reserve(QTime(2, 30));
QVERIFY(begin.isValid());
QVERIFY(end.isValid());
QVERIFY(!manager.availableSlots_.isEmpty());
QCOMPARE(manager.duration(end), QTime(0, 30));
std::tie(begin, end) = manager.reserve(QTime(0, 0, 1));
QVERIFY(begin.isValid());
QVERIFY(end.isValid());
QCOMPARE(begin.msecsTo(end), QTime(0, 0, 1).msecsSinceStartOfDay());
QVERIFY(manager.availableSlots_.isEmpty());
}
QTEST_MAIN(DayManagerTest)
#include "day_manager_test.moc"