Skip to content

Commit a07cc4d

Browse files
committed
Added C++ template-less library with classes
1 parent f214786 commit a07cc4d

22 files changed

+686
-8
lines changed

Diff for: CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ endif()
1212

1313
add_subdirectory(LibraryC)
1414
add_subdirectory(LibraryCPP)
15+
add_subdirectory(LibraryCPPClass)
1516
add_subdirectory(LibraryCPPTemplate)
1617

1718
add_subdirectory(Lab1C)

Diff for: LibraryCPPClass/CMakeLists.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
add_library(LibraryCPPClass STATIC array.cpp list.cpp queue.cpp stack.cpp vector.cpp)
2+
3+
add_subdirectory(Tests)

Diff for: LibraryCPPClass/Tests/CMakeLists.txt

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
add_executable(TestArrayCPPClass array.cpp)
2+
target_include_directories(TestArrayCPPClass PUBLIC ..)
3+
target_link_libraries(TestArrayCPPClass LibraryCPPClass)
4+
add_test(TestArrayCPPClass TestArrayCPPClass)
5+
6+
add_executable(TestListCPPClass list.cpp)
7+
target_include_directories(TestListCPPClass PUBLIC ..)
8+
target_link_libraries(TestListCPPClass LibraryCPPClass)
9+
add_test(TestListCPPClass TestListCPPClass)
10+
11+
add_executable(TestQueueCPPClass queue.cpp)
12+
target_include_directories(TestQueueCPPClass PUBLIC ..)
13+
target_link_libraries(TestQueueCPPClass LibraryCPPClass)
14+
add_test(TestQueueCPPClass TestQueueCPPClass)
15+
16+
add_executable(TestStackCPPClass stack.cpp)
17+
target_include_directories(TestStackCPPClass PUBLIC ..)
18+
target_link_libraries(TestStackCPPClass LibraryCPPClass)
19+
add_test(TestStackCPPClass TestStackCPPClass)
20+
21+
add_executable(TestVectorCPPClass vector.cpp)
22+
target_include_directories(TestVectorCPPClass PUBLIC ..)
23+
target_link_libraries(TestVectorCPPClass LibraryCPPClass)
24+
add_test(TestVectorCPPClass TestVectorCPPClass)
25+
set_tests_properties(TestVectorCPPClass PROPERTIES TIMEOUT 10)

Diff for: LibraryCPPClass/Tests/array.cpp

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#include <iostream>
2+
#include "array.h"
3+
4+
int main()
5+
{
6+
Array *arr = new Array(10);
7+
8+
if (arr->size() != 10)
9+
{
10+
std::cout << "Invalid array size\n";
11+
return 1;
12+
}
13+
14+
for (int i = 0 ; i < 10 ; ++i)
15+
arr->set(i, i * 2);
16+
17+
for (int i = 0 ; i < 10 ; ++i)
18+
{
19+
if (arr->get(i) != i * 2)
20+
{
21+
std::cout << "Invalid array element " << i << "\n";
22+
return 1;
23+
}
24+
}
25+
26+
delete arr;
27+
}

Diff for: LibraryCPPClass/Tests/list.cpp

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#include <iostream>
2+
#include "list.h"
3+
4+
int main()
5+
{
6+
List *list = new List;
7+
8+
if (!list)
9+
{
10+
std::cout << "List creation error\n";
11+
return 1;
12+
}
13+
14+
list->insert(1);
15+
list->insert(2);
16+
list->insert(3);
17+
18+
if (list->first()->data() != 3)
19+
{
20+
std::cout << "list_insert error\n";
21+
return 1;
22+
}
23+
24+
list->insert_after(list->first(), 4);
25+
26+
if (list->first()->next()->data() != 4)
27+
{
28+
std::cout << "list_insert_after error\n";
29+
return 1;
30+
}
31+
32+
list->erase_first();
33+
34+
if (list->first()->data() != 4)
35+
{
36+
std::cout << "list_erase error\n";
37+
return 1;
38+
}
39+
40+
std::cout << "List: ";
41+
for (auto item = list->first() ; item ; item = item->next())
42+
{
43+
std::cout << item->data() << " ";
44+
}
45+
std::cout << "\n";
46+
47+
delete list;
48+
}

Diff for: LibraryCPPClass/Tests/queue.cpp

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#include <iostream>
2+
#include "queue.h"
3+
4+
int main()
5+
{
6+
Queue *queue = new Queue();
7+
8+
queue->insert(1);
9+
queue->insert(2);
10+
queue->insert(3);
11+
12+
if (queue->get() != 1)
13+
{
14+
std::cout << "Invalid first element of the queue\n";
15+
return 1;
16+
}
17+
18+
std::cout << "Get: " << queue->get() << "\n";
19+
queue->remove();
20+
21+
if (queue->get() != 2)
22+
{
23+
std::cout << "Invalid second element of the queue\n";
24+
return 1;
25+
}
26+
27+
std::cout << "Get: " << queue->get() << "\n";
28+
queue->remove();
29+
30+
if (queue->get() != 3)
31+
{
32+
std::cout << "Invalid third element of the queue\n";
33+
return 1;
34+
}
35+
36+
std::cout << "Get: " << queue->get() << "\n";
37+
queue->insert(4);
38+
while (!queue->empty())
39+
{
40+
std::cout << "Get: " << queue->get() << "\n";
41+
queue->remove();
42+
}
43+
44+
delete queue;
45+
}

Diff for: LibraryCPPClass/Tests/stack.cpp

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#include <iostream>
2+
#include "stack.h"
3+
4+
int main()
5+
{
6+
Stack stack;
7+
8+
stack.push(1);
9+
stack.push(2);
10+
stack.push(3);
11+
12+
if (stack.get() != 3)
13+
{
14+
std::cout << "Invalid stack top after push\n";
15+
return 1;
16+
}
17+
18+
std::cout << "Get: " << stack.get() << "\n";
19+
stack.pop();
20+
21+
if (stack.get() != 2)
22+
{
23+
std::cout << "Invalid stack top after pop\n";
24+
return 1;
25+
}
26+
27+
std::cout << "Get: " << stack.get() << "\n";
28+
stack.pop();
29+
30+
if (stack.get() != 1)
31+
{
32+
std::cout << "Invalid stack top after pop\n";
33+
return 1;
34+
}
35+
36+
std::cout << "Get: " << stack.get() << "\n";
37+
stack.push(4);
38+
stack.push(5);
39+
40+
if (stack.get() != 5)
41+
{
42+
std::cout << "Invalid stack top after push\n";
43+
return 1;
44+
}
45+
46+
while (!stack.empty())
47+
{
48+
std::cout << "Get: " << stack.get() << "\n";
49+
stack.pop();
50+
}
51+
}

Diff for: LibraryCPPClass/Tests/vector.cpp

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#include <iostream>
2+
#include "vector.h"
3+
4+
int main()
5+
{
6+
Vector vector;
7+
8+
vector.resize(5);
9+
if (vector.size() != 5)
10+
{
11+
std::cout << "Invalid resize\n";
12+
return 1;
13+
}
14+
15+
for (size_t i = 0 ; i < vector.size() ; ++i)
16+
vector.set(i, i);
17+
18+
for (size_t i = 0 ; i < vector.size() ; ++i)
19+
{
20+
if (vector.get(i) != (int)i)
21+
{
22+
std::cout << "Invalid vector element " << i << "\n";
23+
return 1;
24+
}
25+
}
26+
27+
vector.resize(10);
28+
if (vector.size() != 10)
29+
{
30+
std::cout << "Invalid resize\n";
31+
return 1;
32+
}
33+
34+
std::cout << "Vector: ";
35+
for (size_t i = 0 ; i < vector.size() ; ++i)
36+
std::cout << vector.get(i) << " ";
37+
std::cout << "\n";
38+
39+
vector.resize(3);
40+
if (vector.size() != 3)
41+
{
42+
std::cout << "Invalid resize\n";
43+
return 1;
44+
}
45+
46+
for (size_t i = 0 ; i < vector.size() ; ++i)
47+
{
48+
if (vector.get(i) != (int)i)
49+
{
50+
std::cout << "Invalid vector element " << i << "\n";
51+
return 1;
52+
}
53+
}
54+
55+
std::cout << "Vector: ";
56+
for (size_t i = 0 ; i < vector.size() ; ++i)
57+
std::cout << vector.get(i) << " ";
58+
std::cout << "\n";
59+
60+
// Performance test
61+
for (int i = 1 ; i <= 10000000 ; ++i)
62+
{
63+
vector.resize(i);
64+
vector.set(i - 1, i);
65+
}
66+
67+
long long sum = 0;
68+
for (int i = 0 ; i < 10000000 ; ++i)
69+
sum += vector.get(i);
70+
71+
std::cout << sum << "\n";
72+
}

Diff for: LibraryCPPClass/array.cpp

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include "array.h"
2+
3+
Array::Array(size_t size)
4+
{
5+
}
6+
7+
Array::Array(const Array &a)
8+
{
9+
// implement or disable this function
10+
}
11+
12+
Array &Array::operator=(const Array &a)
13+
{
14+
// implement or disable this function
15+
return *this;
16+
}
17+
18+
Array::~Array()
19+
{
20+
}
21+
22+
Data Array::get(size_t index) const
23+
{
24+
return Data(0);
25+
}
26+
27+
void Array::set(size_t index, Data value)
28+
{
29+
}
30+
31+
size_t Array::size() const
32+
{
33+
return 0;
34+
}

Diff for: LibraryCPPClass/array.h

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#ifndef ARRAY_H
2+
#define ARRAY_H
3+
4+
#include <cstddef>
5+
6+
typedef int Data;
7+
8+
class Array
9+
{
10+
public:
11+
// create array
12+
explicit Array(size_t size);
13+
14+
// copy constructor
15+
Array(const Array &a);
16+
17+
// assignment operator
18+
Array &operator=(const Array &a);
19+
20+
// delete array, free memory
21+
~Array();
22+
23+
// returns specified array element
24+
Data get(size_t index) const;
25+
26+
// sets the specified array element to the value
27+
void set(size_t index, Data value);
28+
29+
// returns array size
30+
size_t size() const;
31+
32+
private:
33+
// private data should be here
34+
};
35+
36+
#endif

0 commit comments

Comments
 (0)