-
Notifications
You must be signed in to change notification settings - Fork 1
/
vector_reverse_iterator.cpp
97 lines (84 loc) · 2.67 KB
/
vector_reverse_iterator.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include "tests.hpp"
#include <map>
static void testBaseFunction(UnitTest& unit) {
int *p = new int[5];
for (int i = 0; i < 5; i++) { p[i] = i<<1; }
ft::vector<int>::iterator it(p);
ft::vector<int>::reverse_iterator rit(it + 5);
unit.assertTrue(*(it + 4) == *(rit.base() - 1), "Expect: True; *(it + 4) == *(rit.base() - 1)");
delete[] p;
}
static void testOffSetDereferenceOperator(UnitTest& unit) {
int *p = new int[5];
bool equal = true;
ft::vector<int>::iterator it(p);
ft::vector<int>::reverse_iterator rit(it + 5);
for (int i = 0; i < 5; i++) {
p[i] = i<<1;
if (rit[4 - i] != p[i]) {
equal = false;
}
}
unit.assertTrue(equal, "Expect: True; it[i] == p[i]");
delete[] p;
}
static void testIteratorIncrementedDecremented(UnitTest& unit) {
int *p = new int[5];
int *tmp = p;
bool equal = true;
for (int i = 0; i < 5; i++) {
p[i] = i<<1;
}
typedef ft::vector<int>::iterator iter_type;
ft::vector<int> src(p, p + 5);
iter_type it = src.begin();
ft::vector<int>::reverse_iterator rit(it + 5);
it += 4;
for (int i = 0; i < 5; i++, rit++, it--) {
if (*rit != *it) {
equal = false;
}
}
unit.assertTrue(equal, "Expect: True; rit(it + 5), it+=4, *rit++ == *it--)");
for (int i = 0; i < 5; i++, rit--, it++) {
if (*(rit - 1) != *(it + 1)) {
equal = false;
}
}
unit.assertTrue(equal, "Expect: True; *rit-- == *it++)");
for (int i = 0; i < 5; i++) {
if (*it != *rit) {
equal = false;
}
++rit;
--it;
}
unit.assertTrue(equal, "Expect: True; *++it == *rit");
for (int i = 0; i < 5; i++) {
if (*(it + 1) != *(rit - 1)) {
equal = false;
}
--rit;
++it;
}
unit.assertTrue(equal, "Expect: True; *--it == *--rit");
delete[] tmp;
}
static void testCompoundAssignmentOperations(UnitTest& unit) {
string *names = arraySet();
ft::vector<string>src(names, names + 5);
ft::vector<string>::reverse_iterator it(src.end());
it += 3;
unit.assertTrue(!(*it).compare("Caio"), "Expected: True; it += 3, *it == Caio");
unit.assertFalse(!(*it).compare("Rafa"), "Expected: Fase; it += 3, *it == Rafa");
it -= 2;
unit.assertTrue(!(*it).compare("Adrian"), "Expected: True; it -= 2, *it == Adrian");
unit.assertFalse(!(*it).compare("Gustavo"), "Expected: False; it -= 2, *it == Gustavo");
delete[] names;
}
void vector_reverse_iterator(UnitTest& unit) {
unit.runTest(testCompoundAssignmentOperations, "testCompoundAssignmentOperations");
unit.runTest(testIteratorIncrementedDecremented, "testIteratorIncrementedDecremented");
unit.runTest(testOffSetDereferenceOperator, "testOffSetDereferenceOperator");
unit.runTest(testBaseFunction, "testBaseFunction");
}