Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
c15c5e3
added definition of class Queue
mrskristinaa Oct 15, 2025
1b3f941
added definition of class Queue
mrskristinaa Oct 21, 2025
826ce3f
added definition of class Queue
mrskristinaa Oct 21, 2025
4f132da
added definition of class Stack
mrskristinaa Oct 22, 2025
b610809
added definition of class Algorithms
mrskristinaa Oct 22, 2025
d046f13
added realization of class List with tests
mrskristinaa Oct 29, 2025
fed05ae
added realization of class List with class Iterator
mrskristinaa Oct 29, 2025
545ebd3
the test in the Iterator class has been corrected
mrskristinaa Oct 29, 2025
812805f
tests have been corrected
mrskristinaa Nov 4, 2025
5208f6a
added realization of optimization DSU
mrskristinaa Nov 5, 2025
3c7ad65
Merge branch 'main' into dsu_implementation
mrskristinaa Nov 5, 2025
02b4ea9
Merge pull request #1 from mrskristinaa/dsu_implementation
mrskristinaa Nov 5, 2025
470b424
Merge branch 'main' into stack_implementation
mrskristinaa Nov 12, 2025
3e41caa
Merge pull request #2 from mrskristinaa/stack_implementation
mrskristinaa Nov 12, 2025
62abff0
added stack on list
mrskristinaa Nov 12, 2025
99d5094
Merge branch 'main' into list_implementation
mrskristinaa Nov 19, 2025
5b955b1
Merge pull request #3 from mrskristinaa/list_implementation
mrskristinaa Nov 19, 2025
4543839
tests added to Queue
mrskristinaa Dec 2, 2025
2f99160
Merge branch 'main' into queue_implementation
mrskristinaa Dec 2, 2025
6b1cc30
Merge pull request #4 from mrskristinaa/queue_implementation
mrskristinaa Dec 2, 2025
65a9932
Fix Stack implementation and add tests
mrskristinaa Dec 2, 2025
4e759c3
Fix List implementation and tests
mrskristinaa Dec 2, 2025
081d932
Fix DSU and update tests
mrskristinaa Dec 2, 2025
1a298ba
fix test list
mrskristinaa Dec 2, 2025
b9e779a
Doubly linked list with iterator
mrskristinaa Dec 2, 2025
d0061b0
Merge pull request #5 from mrskristinaa/doubly-linked-list
mrskristinaa Dec 2, 2025
abdc286
corrected tests at DSU
mrskristinaa Dec 7, 2025
96eeb07
Merge branch 'main' into dsu_implementation
mrskristinaa Dec 7, 2025
4eab9fa
Delete lib_stack directory
mrskristinaa Dec 8, 2025
2510323
Delete lib_queue directory
mrskristinaa Dec 8, 2025
30aa2aa
Delete lib_doubly_linked_list directory
mrskristinaa Dec 8, 2025
4222e5a
Delete lib_list directory
mrskristinaa Dec 8, 2025
bed8b20
Delete lib_algorithms directory
mrskristinaa Dec 8, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,14 @@ include(cmake/function.cmake) # подхватываем функции,
# для простоты мы объединили наборы команд для создания статической библиотеки
# и для создания исполняемого проекта в отдельные функции

add_subdirectory(lib_easy_example) # подключаем дополнительный CMakeLists.txt из подкаталога с именем lib_easy_example

add_subdirectory(lib_easy_example) # подключаем дополнительный CMakeLists.txt из подкаталога с именем lib_easy_example
add_subdirectory(lib_queue)
add_subdirectory(lib_list)
add_subdirectory(lib_doubly_linked_list) # подключаем дополнительный CMakeLists.txt из подкаталога с именем lib_easy_example
add_subdirectory(lib_stack) # подключаем дополнительный CMakeLists.txt из подкаталога с именем lib_easy_example
add_subdirectory(lib_dsu) # подключаем дополнительный CMakeLists.txt из подкаталога с именем lib_easy_example
add_subdirectory(lib_algorithms)
add_subdirectory(main) # подключаем дополнительный CMakeLists.txt из подкаталога с именем main

option(BTEST "build test?" ON) # указываем подключаем ли google-тесты (ON или YES) или нет (OFF или NO)
Expand Down
1 change: 1 addition & 0 deletions lib_dsu/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
create_project_lib(DSU)
Empty file added lib_dsu/dsu.cpp
Empty file.
44 changes: 44 additions & 0 deletions lib_dsu/dsu.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#pragma once
class DSU {
int* _parent;
int* _rank;
int _size;
public:
DSU(int size);
void unite(int, int);
int find(int);
~DSU();
};
DSU::DSU(int size) : _size(size) {
_parent = new int[_size];
_rank = new int[_size];
for (int i = 0; i < _size; i++) {
_parent[i] = i;
_rank[i] = 0;
}
}
DSU::~DSU() {
delete[] _parent;
delete[] _rank;
}
int DSU::find(int x) {
if (_parent[x] != x) {
_parent[x] = find(_parent[x]);
}
return _parent[x];
}
void DSU::unite(int x, int y) {
int rootX = find(x);
int rootY = find(y);
if (rootX == rootY) return;
if (_rank[rootX] < _rank[rootY]) {
_parent[rootX] = rootY;
}
else if (_rank[rootX] > _rank[rootY]) {
_parent[rootY] = rootX;
}
else {
_parent[rootY] = rootX;
_rank[rootX]++;
}
}
35 changes: 35 additions & 0 deletions tests/test_algorithms.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#include <gtest/gtest.h>
#include "algorithms.h"
#include "stack.h"
TEST(AlgorithmsTest, 1) {
EXPECT_TRUE(check_algorithms("()"));
EXPECT_TRUE(check_algorithms("{}"));
EXPECT_TRUE(check_algorithms("[]"));
}

TEST(AlgorithmsTest, 2) {
EXPECT_TRUE(check_algorithms("({[]})"));
EXPECT_TRUE(check_algorithms("{[()]}"));
EXPECT_TRUE(check_algorithms("({})[]"));
}

TEST(AlgorithmsTest, 3) {
EXPECT_FALSE(check_algorithms("("));
EXPECT_FALSE(check_algorithms(")"));
EXPECT_FALSE(check_algorithms("{[}"));
EXPECT_FALSE(check_algorithms("({[}])"));
}
TEST(AlgorithmsTest, 4) {
EXPECT_FALSE(check_algorithms("([)]"));
EXPECT_FALSE(check_algorithms("{(})"));
}
TEST(AlgorithmsTest, 5) {
EXPECT_TRUE(check_algorithms("()[]{}"));
EXPECT_TRUE(check_algorithms("({[]})[]{}"));
}

TEST(AlgorithmsTest, 6) {
EXPECT_FALSE(check_algorithms("())"));
EXPECT_FALSE(check_algorithms("{[}]"));
EXPECT_FALSE(check_algorithms("((("));
}
61 changes: 61 additions & 0 deletions tests/test_doubly_linked_list.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#include <gtest/gtest.h>
#include "doubly_linked_list.h"
TEST(DoublyLinkedListTest, IteratorEmpty) {
DoublyLinkedList<int> list;
EXPECT_TRUE(list.begin() == list.end());
EXPECT_EQ(list.size(), 0);
int count = 0;
for (auto it = list.begin(); it != list.end(); ++it) {
count++;
}
EXPECT_EQ(count, 0);
count = 0;
for (auto it = list.end(); it != list.begin(); --it) {
count++;
}
EXPECT_EQ(count, 0);
}
TEST(DoublyLinkedListTest, IteratorWrite) {
DoublyLinkedList<int> list;
list.push_back(1);
list.push_back(2);
list.push_back(3);
int value = 10;
for (auto it = list.begin(); it != list.end(); ++it) {
*it = value;
value += 10;
}
value = 10;
for (auto it = list.begin(); it != list.end(); ++it) {
EXPECT_EQ(*it, value);
value += 10;
}
}
TEST(DoublyLinkedListTest, IteratorReadAndBidirectional) {
DoublyLinkedList<int> list;

list.push_back(10);
list.push_back(20);
list.push_back(30);

// ������ �������� ����������
auto it = list.begin();
EXPECT_EQ(*it, 10);
++it;
EXPECT_EQ(*it, 20);
++it;
EXPECT_EQ(*it, 30);

// �������� ���������� (�� �� �� end()!)
auto it2 = list.begin();
++it2; // �� 20
--it2; // ������� �� 10
EXPECT_EQ(*it2, 10);

// ������� ����� ������
int sum = 0;
for (auto it = list.begin(); it != list.end(); ++it) {
sum += *it;
}
EXPECT_EQ(sum, 60);
}
47 changes: 47 additions & 0 deletions tests/test_dsu.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#include <gtest/gtest.h>
#include "dsu.h"
TEST(DSUTest, InitialState) {
DSU dsu(5);
for (int i = 0; i < 5; i++) {
EXPECT_EQ(dsu.find(i), i);
}
}
TEST(DSUTest, SimpleUnion) {
DSU dsu(3);
dsu.unite(0, 1);
EXPECT_EQ(dsu.find(0), dsu.find(1));
EXPECT_NE(dsu.find(0), dsu.find(2));
}
TEST(DSUTest, TransitiveUnion) {
DSU dsu(4);
dsu.unite(0, 1);
dsu.unite(1, 2);
EXPECT_EQ(dsu.find(0), dsu.find(2));
EXPECT_NE(dsu.find(0), dsu.find(3));
}
TEST(DSUTest, MultipleUnions) {
DSU dsu(6);
dsu.unite(0, 1);
dsu.unite(2, 3);
dsu.unite(4, 5);
EXPECT_EQ(dsu.find(0), dsu.find(1));
EXPECT_EQ(dsu.find(2), dsu.find(3));
EXPECT_EQ(dsu.find(4), dsu.find(5));
EXPECT_NE(dsu.find(0), dsu.find(2));
EXPECT_NE(dsu.find(0), dsu.find(4));
EXPECT_NE(dsu.find(2), dsu.find(4));
}
TEST(DSUTest, UnionAllElements) {
DSU dsu(5);
for (int i = 0; i < 4; i++) {
dsu.unite(i, i + 1);
}
for (int i = 1; i < 5; i++) {
EXPECT_EQ(dsu.find(0), dsu.find(i));
}
}
TEST(DSUTest, SelfUnion) {
DSU dsu(3);
dsu.unite(0, 0);
EXPECT_EQ(dsu.find(0), 0);
}
176 changes: 176 additions & 0 deletions tests/test_list.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
#include <gtest/gtest.h>
#include "../lib_list/list.h"
TEST(ListTest, CreateEmpty) {
List<int> list;
EXPECT_TRUE(list.is_empty());
EXPECT_EQ(list.size(), 0);
}
TEST(ListTest, CopyConstructor) {
List<int> list1;
list1.push_back(1);
list1.push_back(2);

List<int> list2(list1);
EXPECT_EQ(list2.size(), 2);
}
TEST(ListTest, Assignment) {
List<int> list1;
list1.push_back(10);
list1.push_back(20);

List<int> list2;
list2 = list1;
EXPECT_EQ(list2.size(), 2);
}

TEST(ListTest, DestructorWorks) {
List<int> list;
list.push_back(1);
list.push_back(2);
}
TEST(ListTest, PushElements) {
List<int> list;
list.push_front(2);
list.push_back(3);
list.push_front(1);
EXPECT_EQ(list.size(), 3);
}
TEST(ListTest, PopElements) {
List<int> list;
list.push_back(1);
list.push_back(2);
list.push_back(3);
list.pop_front();
list.pop_back();
EXPECT_EQ(list.size(), 1);
}
TEST(ListTest, InsertErase) {
List<int> list;
list.push_back(1);
list.push_back(3);
list.insert(1, 2);
list.erase(0);
EXPECT_EQ(list.size(), 2);
}
TEST(ListTest, Clear) {
List<int> list;
list.push_back(1);
list.push_back(2);
list.clear();
EXPECT_TRUE(list.is_empty());
}
TEST(ListTest, Find) {
List<int> list;
list.push_back(10);
list.push_back(20);
Node<int>* found = list.find(20);
EXPECT_NE(found, nullptr);
}
TEST(ListTest, Exceptions) {
List<int> list;
EXPECT_THROW(list.pop_front(), std::logic_error);
list.push_back(1);
EXPECT_THROW(list.erase(5), std::logic_error);
}
TEST(ListTest, Iterators) {
List<int> list;
list.push_back(1);
list.push_back(2);
list.push_back(3);
int sum = 0;
for (List<int>::Iterator it = list.begin(); it != list.end(); ++it) {
sum += *it;
}
EXPECT_EQ(sum, 6);
}
TEST(ListTest, DifferentTypes) {
List<std::string> list;
list.push_back("hello");
list.push_back("world");
EXPECT_EQ(list.size(), 2);
}
TEST(ListTest, IteratorRead) {
List<int> list;
for (int i = 0; i < 5; i++) {
list.push_back(i * 2);
}
std::vector<int> result;
for (List<int>::Iterator it = list.begin(); it != list.end(); it++) {
result.push_back(*it);
}
EXPECT_EQ(result.size(), 5u);
EXPECT_EQ(result[0], 0);
EXPECT_EQ(result[1], 2);
EXPECT_EQ(result[2], 4);
EXPECT_EQ(result[3], 6);
EXPECT_EQ(result[4], 8);
}

TEST(ListTest, IteratorWrite) {
List<int> list;
for (int i = 0; i < 5; i++) {
list.push_back(0);
}
int value = 1;
for (List<int>::Iterator it = list.begin(); it != list.end(); ++it) {
*it = value * 10;
value++;
}
value = 1;
for (List<int>::Iterator it = list.begin(); it != list.end(); ++it) {
EXPECT_EQ(*it, value * 10);
value++;
}
}

TEST(ListTest, IteratorEmptyList) {
List<int> list;
List<int>::Iterator it1 = list.begin();
EXPECT_EQ(it1, list.end());
EXPECT_TRUE(list.begin() == list.end());
int count = 0;
for (List<int>::Iterator it = list.begin(); it != list.end(); it++) {
count++;
}
EXPECT_EQ(count, 0);
count = 0;
for (List<int>::Iterator it = list.begin(); it != list.end(); ++it) {
count++;
}
EXPECT_EQ(count, 0);
}
//TEST(ListTest, can_read) {
// List<int>list;
// for (int i = 0; i < 10; i++) {
// list.push_back(i + 1);
// }
// int expected_val = 1;
// for (List<int>::Iterator it = list.begin(); it != list.end(); it++) {
// *it = expected_val;
// expected_val++;
// }
// expected_val = 1;
// for (List<int>::Iterator it = list.begin(); it != list.end(); it++) {
// EXPECT_EQ(*it, expected_val);
// expected_val++;
// }
//}
//TEST(ListTest, can_write) {
// List<int>list;
// int expected_val = 1;
// for (List<int>::Iterator it = list.begin(); it != list.end(); it++) {
// EXPECT_EQ(*it, expected_val);
// expected_val++;
// }
//}
//TEST(ListTest, is_empty) {
// List<int>list;
// for (List<int>::Iterator it = list.begin(); it != list.end(); it++) {
// *it = 0;
// }
//}





Loading