-
Notifications
You must be signed in to change notification settings - Fork 0
/
Test.cpp
151 lines (140 loc) · 5.45 KB
/
Test.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
/**
* An example of how to write expected tests.
* Use this as a basis to build a more complete Test.cpp file.
*
* IMPORTANT: Please write more tests - the tests here are only for example and are not complete.
*
* AUTHORS: <Oriya Alperin>
*
* Date: 2021-05
*/
#include "doctest.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include <stdexcept>
#include "Board.hpp"
#include "City.hpp"
#include "Color.hpp"
#include "Player.hpp"
#include "Researcher.hpp"
#include "Scientist.hpp"
#include "FieldDoctor.hpp"
#include "GeneSplicer.hpp"
#include "OperationsExpert.hpp"
#include "Dispatcher.hpp"
#include "Medic.hpp"
#include "Virologist.hpp"
using namespace pandemic;
#include <string>
#include <algorithm>
using namespace std;
TEST_CASE("game1") {
Board board;
OperationsExpert oe{board,City::Atlanta};
Dispatcher d{board,City::Baghdad};
Researcher r{board,City::HongKong};
Virologist v{board,City::London};
Medic m{board,City::Madrid};
Scientist s{board,City::Sydney,2};
GeneSplicer gs{board,City::Tehran};
FieldDoctor fd{board,City::Washington};
CHECK(board.is_clean()==true);
board[City::Tehran]=3;
CHECK(board[City::Tehran]==3);
CHECK(board.is_clean()==false);
board[City::Sydney]=4;
CHECK(board[City::Washington]==0);
board[City::Baghdad]=4;
board[City::London]=5;
board[City::Atlanta]=7;
board[City::Madrid]=3;
board[City::HongKong]=5;
board[City::MexicoCity]=4;
board[City::Miami]=4;
board[City::SanFrancisco]=5;
board[City::Chicago]=6;
board[City::Montreal]=3;
board[City::NewYork]=2;
board[City::Johannesburg]=1;
oe.take_card(City::Chicago).
take_card(City::MexicoCity).
take_card(City::SanFrancisco).
take_card(City::Montreal).
take_card(City::NewYork).
take_card(City::Miami);//4 blue, 2 yellow
oe.drive(City::Miami); //curr_city= miami
oe.build(); //miami - V
CHECK_THROWS(oe.discover_cure(Color::Yellow));
fd.treat(City::Miami); // miami=3
CHECK_THROWS(gs.build()); //doesnt have curr_city=Tehran card
gs.take_card(City::Tehran);//in order to build a research station
gs.build(); //Tehran - V
gs.take_card(City::Milan).
take_card(City::Osaka).
take_card(City::Riyadh).
take_card(City::Jakarta); //1 black, 2 red, 1 blue
CHECK_THROWS(gs.discover_cure(Color::Yellow));
gs.take_card(City::Algiers); //2 black, 2 red, 1 blue
gs.discover_cure(Color::Yellow); // Yellow - V , gs - 0 cards
oe.discover_cure(Color::Yellow); //nothing happen
oe.treat(City::Miami); //miami = 0
CHECK(board[City::Miami]==0);
CHECK_THROWS(v.treat(City::SanFrancisco));
v.take_card(City::SanFrancisco); // 1 blue
CHECK_THROWS(v.treat(City::Montreal)); //have just SanFransisco card, but no Montreal
v.treat(City::SanFrancisco); //SanFransisco =4
CHECK(board[City::SanFrancisco]==4);
r.take_card(City::StPetersburg).
take_card(City::Paris).
take_card(City::Essen).
take_card(City::Madrid).
take_card(City::Atlanta); // 5 blue cards
r.discover_cure(Color::Blue); // Blue - V
m.treat(City::Madrid); // Madrid = 0
m.drive(City::NewYork); // the medic reset cubes automatically
CHECK(board[City::NewYork]==0);
d.drive(City::Tehran);
d.fly_direct(City::Sydney); //can fly to any city if he is at rsrch st
d.take_card(City::Sydney);
d.build(); //Sydney - V
CHECK_THROWS(s.discover_cure(Color::Red)); //have no cards
s.take_card(City::Osaka).take_card(City::Chennai);
CHECK_THROWS(s.discover_cure(Color::Red)); //need one more red card(2 red cards to dicover)
s.take_card(City::HoChiMinhCity);
s.discover_cure(Color::Red); //Red - V
d.treat(City::Sydney); //Sysney = 0
CHECK(board[City::Sydney]==0);
m.drive(City::Montreal); //curr_city= Montreal Montreal = 0
CHECK(board[City::Montreal]==0);
r.take_card(City::Delhi).
take_card(City::Mumbai).
take_card(City::Kolkata).
take_card(City::Cairo).
take_card(City::Mumbai); // 4 black
CHECK_THROWS(r.discover_cure(Color::Black)); // 2 duplicate cards of mumbai
r.take_card(City::Istanbul);// 5 Black
r.discover_cure(Color::Black); //Black - V
oe.fly_shuttle(City::Tehran).treat(City::Tehran);//treat tehran. Tehran = 0
oe.drive(City::Baghdad).treat(City::Baghdad); //Baghdad = 0
CHECK_THROWS(fd.treat(City::Washington));//Washington is free
fd.treat(City::Atlanta); //Atlanta = 0
fd.take_card(City::Washington);
fd.fly_charter(City::London).treat(City::London); //London = 0
CHECK_THROWS(fd.treat(City::SanFrancisco));//inaccessible
CHECK(board[City::SanFrancisco]>0);
CHECK_THROWS(fd.fly_direct(City::SanFrancisco));//no card of SanFrancisco
fd.take_card(City::SanFrancisco);
fd.fly_direct(City::SanFrancisco).treat(City::SanFrancisco); //SanFrancisco=0
CHECK(board[City::SanFrancisco]==0);
r.treat(City::HongKong); //HongKong=0
oe.drive(City::Tehran).
fly_direct(City::Miami).
drive(City::MexicoCity).treat(City::MexicoCity); //Mexico = 0
v.take_card(City::Khartoum);
CHECK_THROWS(v.treat(City::Johannesburg));//need Johannesburg card
v.take_card(City::Johannesburg).treat(City::Johannesburg); // Johannesburg = 0
m.drive(City::Chicago); //Chicago = 0
CHECK(board[City::Chicago]==0);
CHECK(board.is_clean()==true);
}