diff --git a/lab_s2/5731119221.cpp b/lab_s2/5731119221.cpp new file mode 100644 index 0000000..a68d999 --- /dev/null +++ b/lab_s2/5731119221.cpp @@ -0,0 +1,124 @@ +#include +#include +#include +#include + +using namespace std; + +namespace CP { +template +class queue { +protected: + vector mVect; + +public: + /*------constructor------*/ + //copy + queue (const queue &a) { + mVect = a.mVect; + } + + //default + queue () { + } + + //operator = + queue& operator= (queue other) { + mVect = other.mVect; + } + + /*------size function------*/ + size_t size() const { + return mVect.size(); + } + bool empty() const { + return mVect.size() == 0; + } + + /*------access------*/ + T& front () { + return mVect[0]; + } + T& back () { + return mVect[size()-1]; + } + + /*------modifier------*/ + void push (const T& element) { + mVect.push_back(element); + } + void pop () { + for (int i = 0 ; i < mVect.size()-1 ; i++) { + mVect[i] = mVect[i+1]; + } + mVect.pop_back(); + } +}; +} + +void test1(){ + CP::queue q; + assert(q.empty() == true); + q.push(1); + q.push(2); + q.push(3); + assert(q.size() == 3); + assert(q.size() != 4); + assert(q.front() == 1); + assert(q.back() == 3); + q.pop(); + assert(q.front() == 2); + assert(q.size() == 2); + assert(q.back() == 3); + q.push(27); + assert(q.back() == 27); + assert(q.size() == 3); + + CP::queue q1; + q1 = q; + assert(q1.size() == 3); + assert(q1.front() == 2); + assert(q1.back() == 27); + +} + +void test2(){ + + CP::queue> q; + vector v1; + vector v2; + for(int i = 1 ; i <= 10 ; i++){ + v1.push_back(i*10); + } + q.push(v1); + q.push(v2); + assert(q.size() == 2); + assert(q.front()[0] == 10); + assert(q.back().empty() == true); +} + +void test3(){ + CP::queue q; + size_t n = 1e6; + for(size_t i = 0 ; i < n ; i++){ + string a = "a"; + q.push(a); + } + + assert(q.size() == n); + assert(q.front() == "a"); + assert(q.back() == "a"); + + for (size_t i = q.size(); i > 1 ; i --){ + q.pop(); + } + assert(q.size() == 1); + assert(q.front() == "a"); +} + +int main() { + test1(); cout << "test1 OK " << endl; + test2(); cout << "test2 OK " << endl; + test3(); cout << "test3 OK " << endl; + +} diff --git a/lab_s2/5731119221_Test.cpp b/lab_s2/5731119221_Test.cpp new file mode 100644 index 0000000..9ec76a3 --- /dev/null +++ b/lab_s2/5731119221_Test.cpp @@ -0,0 +1,99 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; + +bool test1 () { + size_t num = 3; + queue a; + queue b (a); + queue c = b; + assert (a.size() == 0); + assert (a == b && b == c); + return true; +} + +bool test2 () { + queue a; + assert (a.size() == 0); + assert (a.empty()); + a.push(1); + a.push(2); + a.push(3); + + assert (a.front() == 1); + assert (a.back() == 3); + assert (a.size() == 3); + assert (a.size() == 3); //check const + + for (int i = 0 ; i < 100000 ; i++) + a.push(i+4); + + assert(a.size() == 100003); + assert (a.front() == 1); + assert (a.back() == 100003); + + a.pop(); + assert (a.front() == 2); + + for (int i = 0 ; i < 50000 ; i++) + a.pop(); + + assert (a.size() == 50002); + assert (a.front() == 50002); + assert (a.back() == 100003); + + return true; +} + +bool test3 () { + queue > > > a; + pair p; + vector > v; + p = make_pair(20, 10); + v.push_back(p); + + queue > > q; + q.push(v); + a.push(q); + + assert (a.front() == q); + assert (((a.front()).front())[0].first == 20); + + v.pop_back(); + a.pop(); + q.pop(); + + map m; + for (int i = 0 ; i < 50 ; i++) { + m[i%5]++; + } + for (auto &x : m) { + v.push_back(x); + } + + q.push(v); + a.push(q); + + assert (a.front() == q); + assert (((a.front()).front()).size() == 5); + + return true; +} + + + +int main() { + if (test1()) std::cout << "Test1 (Constructor) OK!" << std::endl; + if (test2()) std::cout << "Test2 (Function) OK!" << std::endl; + if (test3()) std::cout << "Test3 (Compound) OK!" << std::endl; + + return 0; +}