Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

5731119221 #29

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
124 changes: 124 additions & 0 deletions lab_s2/5731119221.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
#include <iostream>
#include <vector>
#include <queue>
#include <assert.h>

using namespace std;

namespace CP {
template <typename T>
class queue {
protected:
vector<T> 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<int> 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<int> q1;
q1 = q;
assert(q1.size() == 3);
assert(q1.front() == 2);
assert(q1.back() == 27);

}

void test2(){

CP::queue<vector<int>> q;
vector<int> v1;
vector<int> 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<string> 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;

}
99 changes: 99 additions & 0 deletions lab_s2/5731119221_Test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
#include <iostream>
#include <assert.h>
#include <queue>
#include <algorithm>
#include <functional>
#include <iomanip>
#include <string>
#include <utility>
#include <vector>
#include <map>
using namespace std;

bool test1 () {
size_t num = 3;
queue <int> a;
queue <int> b (a);
queue <int> c = b;
assert (a.size() == 0);
assert (a == b && b == c);
return true;
}

bool test2 () {
queue <int> 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 <queue <vector <pair <int, int> > > > a;
pair<int, int> p;
vector <pair<int, int> > v;
p = make_pair(20, 10);
v.push_back(p);

queue <vector <pair <int, int> > > 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 <int, int> 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;
}