Initial commit
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
include(paths/PathsAndIncludes)
|
||||
|
||||
# Specify paths to test sources
|
||||
set(TEST_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/day_manager_test.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/reservation_manager_test.cpp
|
||||
)
|
||||
|
||||
# DayManagerTest
|
||||
add_executable(day_manager_test
|
||||
day_manager_test.cpp
|
||||
${UTILS_SOURCES}
|
||||
)
|
||||
target_link_libraries(day_manager_test PRIVATE Qt6::Test)
|
||||
add_test(NAME DayManagerTest COMMAND day_manager_test)
|
||||
|
||||
# ReservationManagerTest
|
||||
add_executable(reservation_manager_test
|
||||
reservation_manager_test.cpp
|
||||
${UTILS_SOURCES}
|
||||
)
|
||||
target_link_libraries(reservation_manager_test PRIVATE Qt6::Test)
|
||||
add_test(NAME ReservationManagerTest COMMAND reservation_manager_test)
|
||||
|
||||
# Include directories for headers
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
@@ -0,0 +1,175 @@
|
||||
#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"
|
||||
@@ -0,0 +1,68 @@
|
||||
#include "reservation_manager.h"
|
||||
#include <QtTest>
|
||||
|
||||
class ReservationManagerTest : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
private slots:
|
||||
void testReserveFailure();
|
||||
void testReserveSuccess();
|
||||
void testReserveBound();
|
||||
};
|
||||
|
||||
void ReservationManagerTest::testReserveFailure() {
|
||||
DayManager dayManager(QTime(8, 0), QTime(9, 0));
|
||||
ReservationManager manager(3, 3, dayManager);
|
||||
|
||||
QDateTime begin;
|
||||
QTime end;
|
||||
|
||||
std::tie(begin, end) = manager.reserve(QTime(2, 0));
|
||||
QVERIFY(!begin.isValid());
|
||||
QVERIFY(!end.isValid());
|
||||
}
|
||||
|
||||
void ReservationManagerTest::testReserveSuccess() {
|
||||
DayManager dayManager(QTime(8, 0), QTime(9, 0));
|
||||
ReservationManager manager(3, 4, dayManager);
|
||||
|
||||
QDateTime begin;
|
||||
QTime end;
|
||||
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
std::tie(begin, end) = manager.reserve(QTime(1, 0));
|
||||
QVERIFY(begin.isValid());
|
||||
QVERIFY(end.isValid());
|
||||
}
|
||||
QCOMPARE(manager.days_.size(), 1);
|
||||
|
||||
const auto &keys = manager.days_.keys();
|
||||
auto it = std::find_if(keys.cbegin(), keys.cend(), [](const auto &key) {
|
||||
for (auto expected : {1, 2, 3, 4}) {
|
||||
if (key == expected) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
QVERIFY(it != keys.cend());
|
||||
}
|
||||
|
||||
void ReservationManagerTest::testReserveBound() {
|
||||
DayManager dayManager(QTime(8, 0), QTime(9, 0));
|
||||
ReservationManager manager(3, 4, dayManager);
|
||||
|
||||
QDateTime begin;
|
||||
QTime end;
|
||||
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
std::tie(begin, end) = manager.reserve(QTime(1, 0));
|
||||
QVERIFY(begin.isValid());
|
||||
QVERIFY(end.isValid());
|
||||
}
|
||||
QVERIFY(manager.days_.isEmpty());
|
||||
}
|
||||
|
||||
QTEST_MAIN(ReservationManagerTest)
|
||||
#include "reservation_manager_test.moc"
|
||||
Reference in New Issue
Block a user