school/cs142/lab10/main.cpp

206 lines
4.8 KiB
C++

#include <iostream>
#include <cassert>
using namespace std;
#include "Battle.h"
#include "Factory.h"
#include "arena.h"
#include "archer.h"
#include "cleric.h"
#include "robot.h"
void test_fighter() {
archer a = archer("bilbo", 100, 60, 1, 5);
a.takeDamage(90);
a.regenerate();
assert(a.getCurrentHP() == 20);
archer b = archer("frodo", 100, 0, 1, 5);
b.takeDamage(90);
b.regenerate();
}
void test_archer() {
archer a("stephen", 666, 66, 6, 0);
a.takeDamage(100);
assert(a.getCurrentHP() == 567);
assert(a.get_original_speed() == 6);
assert(a.getSpeed() == 6);
}
void test_cleric() {
cleric a("Derek", 666, 66, 6, 20);
assert(a.getDamage() == 20);
assert(a.get_mana() == 100);
a.takeDamage(100);
assert(a.getCurrentHP() == 567);
a.reset();
assert(a.getCurrentHP() == 666);
cleric b("SaintColleen", 100, 90, 4, 60);
b.takeDamage(100);
b.useAbility();
assert(b.getCurrentHP() == 21);
cleric c("Vanessa", 100, 90, 4, 1);
c.takeDamage(100);
c.useAbility();
assert(c.getCurrentHP() == 1);
cleric d("Vanessa", 100, 90, 4, 5);
d.takeDamage(100);
d.useAbility();
assert(d.getCurrentHP() == 2);
}
void test_robot() {
robot a("Derek", 100, 20, 10, 10);
assert(a.getDamage() == 20);
a.useAbility();
assert(a.getDamage() == 40);
assert(a.getDamage() == 20);
a.useAbility();
assert(a.getDamage() == 26);
a.takeDamage(100);
assert(a.getCurrentHP() == 2);
a.reset();
assert(a.getCurrentHP() == 100);
}
void test_input_parser() {
ArenaInterface * A = Factory::createArena();
arena * a = dynamic_cast<arena *>(A);
string input = "Xephos A 200 13 21 10";
assert(a->addFighter(input));
input = "Stephen A 200 13 21 10";
assert(a->addFighter(input));
input = "Billy Bob Thorton A 0 13 21 10";
assert(not a->addFighter(input));
input = "Xephos a 200 13 21 10";
assert(not a->addFighter(input));
input = "Derek A 200 13 21 a10";
assert(not a->addFighter(input));
input = "Derek A 200 13 stupid21 10";
assert(not a->addFighter(input));
delete A;
}
void test_add() {
ArenaInterface * A = Factory::createArena();
arena * a = dynamic_cast<arena *>(A);
string input = "Xephos A 200 13 21 10";
assert(a->addFighter(input));
input = "Stephen A 200 13 21 10";
assert(a->addFighter(input));
// do not allow for duplicate fighers
input = "Xephos A 200 13 21 10";
bool double_add = a->addFighter(input);
assert(not double_add);
input = "Stephen A 0 13 21 10";
assert(not a->addFighter(input));
input = "Derek A 200 13 21 10";
assert(a->addFighter(input));
// another attempt for not allowing duplicate fighters
input = "Stephen A 200 13 21 10";
assert(not a->addFighter(input));
delete A;
}
void test_remove() {
ArenaInterface * A = Factory::createArena();
arena * a = dynamic_cast<arena *>(A);
string input = "Michael A 200 13 21 10";
a->addFighter(input);
input = "Derek A 200 13 21 10";
a->addFighter(input);
input = "Bryan A 200 13 21 10";
a->addFighter(input);
assert(not a->removeFighter("Zaphodbeblebrox"));
bool remove_non_existant = a->removeFighter("Stephen");
assert(not remove_non_existant);
assert(a->getSize() == 3);
bool remove_fighter = a->removeFighter("Michael");
assert(remove_fighter);
assert(a->getSize() == 2);
a->removeFighter("Derek");
a->removeFighter("Bryan");
assert(a->getSize() == 0);
delete a;
}
void test_find() {
ArenaInterface * A = Factory::createArena();
arena * a = dynamic_cast<arena *>(A);
string input = "Michael A 200 13 21 10";
a->addFighter(input);
input = "Derek A 200 13 21 10";
a->addFighter(input);
input = "Bryan A 200 13 21 10";
a->addFighter(input);
fighter * f;
f = dynamic_cast<fighter *>(a->getFighter("Stephen"));
assert(not f);
f = dynamic_cast<fighter *>(a->getFighter("Derek"));
assert(f);
delete a;
}
void test_archer_reset() {
archer a("stephen", 666, 66, 6, 0);
a.takeDamage(100);
assert(a.getCurrentHP() == 567);
a.reset();
assert(a.getCurrentHP() == a.getMaximumHP());
assert(a.getSpeed() == a.get_original_speed());
assert(a.getSpeed() == 6);
assert(a.get_original_speed() == 6);
}
void test_archer_usability() {
archer a("stephen", 666, 66, 6, 0);
assert(a.getSpeed() == 6);
a.useAbility();
assert(a.getSpeed() == 7);
}
void test_battle() {
archer a("stephen", 200, 66, 60, 100);
robot b("derek", 1000, 20, 15, 200);
fight(&a, &b, true);
}
int main() {
test_fighter();
test_archer();
test_cleric();
test_robot();
test_input_parser();
test_add();
test_remove();
test_find();
test_archer_reset();
test_archer_usability();
test_battle();
}