Skip to content

Commit 4ac3be8

Browse files
committed
Added more copy constructor tests.
1 parent f4776da commit 4ac3be8

File tree

4 files changed

+67
-2
lines changed

4 files changed

+67
-2
lines changed

LABS.md

+37-2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,35 @@
2121
* Стек и очередь не должны ограничивать число сохраняемых значений
2222
* Дополнительные требования указаны в комментариях к заголовкам функций
2323

24+
# Структура файлов CMakeLists.txt
25+
26+
Файлы CMakeLists.txt описывают состав проекта и правила его сборки с помощью утилиты cmake.
27+
В них можно создавать подключаемые библиотеки, исполняемые файлы и тесты.
28+
29+
Основное, что компилируется - это исполняемые файлы. Их сборка описывается с помощью
30+
директивы add_executable.
31+
32+
Библиотеки уже описаны в каталогах Library*:
33+
34+
add_library(LibraryC STATIC array.c list.c queue.c stack.c vector.c)
35+
add_subdirectory(Tests)
36+
37+
Первая строчка обисывает сборку подключаемой библиотеки LibraryC из соответствующих исходных файлов.
38+
Вторая строчка добавляет проекты из подкаталога Tests.
39+
40+
В подкаталоге Tests описаны тесты для базовой проверки работоспособности библиотеки:
41+
42+
add_executable(TestArrayC array.cpp)
43+
target_include_directories(TestArrayC PUBLIC ..)
44+
target_link_libraries(TestArrayC LibraryC)
45+
add_test(TestArrayC TestArrayC)
46+
47+
Директива add_test указывает, какую программу и с какими аргументами запускать
48+
в этом тесте. Большинство тестов закомментированы, и по мере расширения
49+
библиотеки их нужно включать.
50+
51+
Все тесты запустить можно с помощью команды make test.
52+
2453
# Добавление нового решения задачи
2554

2655
Добавить подкаталог и модифицировать основной файл CMakeLists.txt:
@@ -32,11 +61,17 @@
3261
add_executable(Lab1C lab1.c)
3362
target_include_directories(Lab1C PUBLIC ../LibraryC)
3463
target_link_libraries(Lab1C LibraryC)
64+
add_test(NAME TestLab1C COMMAND Lab1C ${CMAKE_CURRENT_SOURCE_DIR}/input.txt)
3565

36-
В последних двух строчках нужно ссылаться на используемый вариант библиотеки.
66+
Во второй и третьей строчках нужно ссылаться на используемый вариант библиотеки.
3767

3868
После этого в нужной библиотеке реализовать требуемый по условию контейнер, чтобы
3969
тесты и программа заработали правильно.
4070

41-
Проверить тесты локально можно с помощью команды ctest, выполненной в подкаталоге build.
71+
Последняя строка добавляет запуск разработанной программы в виде теста.
72+
При этом в качестве аргумента ей передаётся файл input.txt, который находится
73+
в каталоге с исходным кодом.
74+
75+
Проверить тесты локально можно с помощью команды ctest или make test,
76+
выполненной в подкаталоге build.
4277

LibraryCPPTemplate/Tests/queue.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,18 @@ int main()
4949
queue->insert(i);
5050
}
5151

52+
MyQueue copy(*queue);
53+
for (int i = 1 ; i <= 10000000 ; ++i)
54+
{
55+
if (copy.empty())
56+
return 1;
57+
if (copy.get() != i)
58+
{
59+
std::cout << "Get error: " << i << " " << queue->get() << "\n";
60+
return 1;
61+
}
62+
copy.remove();
63+
}
64+
5265
delete queue;
5366
}

LibraryCPPTemplate/Tests/stack.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,17 @@ int main()
4545
return 1;
4646
}
4747

48+
MyStack copy(stack);
49+
4850
while (!stack.empty())
4951
{
52+
if (stack.get() != copy.get())
53+
{
54+
std::cout << "Invalid stack copy\n";
55+
return 1;
56+
}
5057
std::cout << "Get: " << stack.get() << "\n";
58+
copy.pop();
5159
stack.pop();
5260
}
5361
}

LibraryCPPTemplate/Tests/vector.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,15 @@ int main()
6868

6969
MyVector copy = vector;
7070

71+
for (int i = 0 ; i < 10000000 ; ++i)
72+
{
73+
if (vector.get(i) != copy.get(i))
74+
{
75+
std::cout << "Invalid copy element " << i << "\n";
76+
return 1;
77+
}
78+
}
79+
7180
long long sum = 0;
7281
for (int i = 0 ; i < 10000000 ; ++i)
7382
sum += vector.get(i);

0 commit comments

Comments
 (0)