-
Notifications
You must be signed in to change notification settings - Fork 0
/
MS2_tester.cpp
193 lines (165 loc) · 5.81 KB
/
MS2_tester.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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
//
// MS2_tester.cpp
//
// ARAIG - As Real As It Gets Augmented reality game suit final project
// For BTP305 C++ course at Seneca
//
// Created by Alex Wang on 2016-11-14.
// Copyright © 2016 Alex Wang. All rights reserved.
//
#include "Stims.h"
#include "Exoskeleton.h"
#include "Task.h"
using namespace ARAIG;
extern const int max_duration, max_intensity;
const void print_dash(int x = 30) {
//Creates underline for titles
std::cout.width(x);
std::cout.fill('-');
std::cout << '-' << '\n';
std::cout.fill (' ');
}
const void new_line(int x = 1) {
//Prints i number of newline characters
for (int i = 0; i < x; i++){
std::cout << '\n';
}
}
void data_parameter_positions(std::string input, int num_pos, std::vector<size_t>& list){
//Takes in number of positions and stores positions for 2nd parameter onwards
for (int i = 1; i < num_pos - 1; i++){
list.push_back(input.find(',', list[i-1] + 1));
}
}
int main(int argc, const char * argv[]) {
//Test: Creating an empty Task
//Expected: Task# should be 1 and name should be should be "Task_1"
Task alpha;
alpha.dump(std::cout);
new_line();
//Test: Instanting a second empty class and attempting to print its data and list of empty stimulations
//Expected: Task# should be 2, Task name should be "Task_2" and no stimulation should show
Task beta;
beta.dump(std::cout);
new_line();
//Test: Giving task a name "Charlie" and an empty list of stimulations and printing task information
//Expected: "Task 3 Task Test"
Task charlie ("Charlie");
charlie.dump(std::cout);
new_line();
//Test: Providing an empty name and an empty list of stimulations and printing task information
//Expected: Task 4 Task_4
Task delta ("");
delta.dump(std::cout);
new_line();
//Test: Creating a stim_list vector that holds a list of stimulations read from a file
//Expected: A vector called stim_list should be created with 32 stimulations inside
std::ifstream file ("StimulationConfig.csv");
try {
if(!file){
throw Exceptions ("Error: Cannot open file");
}
}catch (Exceptions& e){
std::cerr << e.what() <<'\n';
std::cerr.flush();
exit(2);
}
std::list<Stimulation*> stim_list;
std::vector<size_t> comma;
while (!file.fail()){
std::string data, type, name, location;
int intensity, frequency, duration;
getline(file, data);
if (data.find('\r')){
//Detects \n characters and trim it
data = data.substr(0,data.length()-1);
}
comma.push_back (data.find(','));
type = data.substr(0, comma[0]);
if (type == "stim") {
data_parameter_positions(data, 6, comma);
name = data.substr(comma[0]+1, comma[1] - comma[0]-1);
location = data.substr(comma[1]+1, comma[2] - comma[1]-1);
intensity = stoi(data.substr(comma[2]+1, comma[3]-comma[2]-1));
frequency = stoi(data.substr(comma[3]+1, comma[4]-comma[3]-1));
duration = stoi(data.substr(comma[4]+1));
stim_list.push_back(new Stims(name, location, intensity, frequency, duration));
} else if (type == "exoskeleton") {
data_parameter_positions(data, 4, comma);
name = data.substr(comma[0]+1, comma[1] - comma[0]-1);
intensity = stoi(data.substr(comma[1]+1, comma[2]-comma[1]-1));
duration = stoi(data.substr(comma[2]+1));
stim_list.push_back(new Exoskeleton(name, intensity, duration));
}
comma.clear();
}
Task echo;
for_each (stim_list.begin(), stim_list.end(), [&echo](Stimulation* i){
echo += i;
});
std::cout << "Task Echo\n";
print_dash();
echo.dump(std::cout);
echo.execute(std::cout);
new_line();
//TODO: Reference data into Task Echo
//Test: Print the 2nd element from Echo using overloaded [] operator
//Expected: Stims 2 data
std::cout << "Element 2 of Task Echo\n";
print_dash();
echo[1]->display(std::cout);
new_line(2);
//Test: Copy Task 5 using "=" operator
//Expected: Information printed should be the same as Task 5 (see above)
std::cout << "Testing use of copy assignment operator\n";
print_dash(40);
Task foxtrot = echo;
foxtrot.dump(std::cout);
foxtrot.execute(std::cout);
new_line(2);
//Test: Calling Copy constructor directly
//Expected: A copy of Task 5 will be created
Task golf (echo);
std::cout << "Direct copy constructor call\n";
print_dash();
golf.dump(std::cout);
golf.execute(std::cout);
new_line();
//Test: Removing the 3rd Stimulation from Echo (Exoskeleton element)
//Expected: 2 Stims remain when execute() is executed
std::cout << "Deleting Sim1 from Task 5 (echo)\n";
print_dash(33);
echo.removeStim("Sim1");
echo.dump(std::cout);
echo.execute(std::cout);
new_line(2);
//Test: Using move assignment operator to move foxtrot's data over to Task Hotel
//Expecting: hotel to contain foxtrot's information and foxtrot's data should be wiped and not print any data.
Task hotel;
hotel = std::move(foxtrot);
std::cout << "Test move assignment operator to move foxtrot's data into hotel.\nMoving data...\n\n";
std::cout << "Hotel's data\n";
print_dash(12);
hotel.dump(std::cout);
hotel.execute(std::cout);
new_line(2);
std::cout << "Updated Foxtrot's data\n";
print_dash(22);
foxtrot.dump(std::cout);
foxtrot.execute(std::cout);
new_line(2);
//Test: Using move constructor to move golf's data to Task India
//Expected: Task India should have all of golf's contents while golf will print empty data
//Need help here. Not sure how to test move constructor.
std::cout << "Test: Moving tasks in golf data over to india using move constructor. Golf should be empty after.\n";
print_dash();
Task india (std::move(golf));
india.dump(std::cout);
india.execute(std::cout);
new_line(2);
std::cout << "Golf's data\n";
print_dash();
golf.dump(std::cout);
golf.execute(std::cout);
new_line();
}