main.cpp
1 /* ************************************************************************** */ 2 /* */ 3 /* ::: :::::::: */ 4 /* main.cpp :+: :+: :+: */ 5 /* +:+ +:+ +:+ */ 6 /* By: gychoi <gychoi@student.42seoul.kr> +#+ +:+ +#+ */ 7 /* +#+#+#+#+#+ +#+ */ 8 /* Created: 2023/08/17 22:10:48 by gychoi #+# #+# */ 9 /* Updated: 2023/08/18 18:45:41 by gychoi ### ########.fr */ 10 /* */ 11 /* ************************************************************************** */ 12 13 #include "Character.hpp" 14 #include "Cure.hpp" 15 #include "Ice.hpp" 16 #include "MateriaSource.hpp" 17 #include <iostream> 18 19 #ifdef LEAKS_CHECK 20 # include <cstdlib> 21 void check_leaks(void) 22 { 23 system("leaks --list -- a.out"); 24 } 25 # define ATEXIT_CHECK() atexit(check_leaks) 26 #else 27 # define ATEXIT_CHECK() 28 #endif 29 30 void makeTestName(std::string const& str) 31 { 32 std::cout << "\n--------------------" << std::endl; 33 std::cout << str << std::endl; 34 std::cout << "--------------------\n" << std::endl; 35 } 36 37 void testSubject(void) 38 { 39 IMateriaSource* src = new MateriaSource(); 40 src->learnMateria(new Ice()); 41 src->learnMateria(new Cure()); 42 43 ICharacter* me = new Character("me"); 44 45 AMateria* tmp; 46 tmp = src->createMateria("ice"); 47 me->equip(tmp); 48 tmp = src->createMateria("cure"); 49 me->equip(tmp); 50 51 ICharacter* bob = new Character("bob"); 52 53 me->use(0, *bob); 54 me->use(1, *bob); 55 56 delete bob; 57 delete me; 58 delete src; 59 } 60 61 void testOne(void) 62 { 63 IMateriaSource* src = new MateriaSource(); 64 src->learnMateria(new Ice()); 65 src->learnMateria(new Ice()); 66 src->learnMateria(new Ice()); 67 src->learnMateria(new Ice()); 68 src->learnMateria(new Ice()); 69 70 static_cast<MateriaSource*>(src)->showMateria(); 71 72 ICharacter* me = new Character("me"); 73 74 AMateria* tmp; 75 tmp = src->createMateria("ice"); 76 me->equip(tmp); 77 tmp = src->createMateria("cure"); 78 me->equip(tmp); 79 tmp = src->createMateria("ice"); 80 me->equip(tmp); 81 tmp = src->createMateria("ice"); 82 me->equip(tmp); 83 tmp = src->createMateria("ice"); 84 me->equip(tmp); 85 tmp = src->createMateria("ice"); 86 // 릭이 발생하는 상황이지만, 서브젝트 지에 따라 아무것도 하지 말까...? 87 // floor를 만들기...? 88 me->equip(tmp); 89 delete tmp; 90 91 static_cast<Character*>(me)->showInventory(); 92 93 ICharacter* bob = new Character("bob"); 94 95 IMateriaSource* newSrc = new MateriaSource(); 96 newSrc->learnMateria(new Cure()); 97 98 AMateria* foo; 99 foo = newSrc->createMateria("cure"); 100 bob->equip(foo); 101 102 static_cast<Character*>(bob)->showInventory(); 103 104 bob->use(0, *me); 105 bob->use(1, *me); 106 bob->use(2, *me); 107 bob->use(3, *me); 108 bob->use(4, *me); 109 me->use(0, *bob); 110 me->use(1, *bob); 111 me->use(2, *bob); 112 me->use(3, *bob); 113 me->use(4, *bob); 114 115 delete bob; 116 delete me; 117 delete src; 118 delete newSrc; 119 } 120 121 void testTwo(void) 122 { 123 IMateriaSource* src = new MateriaSource(); 124 src->learnMateria(new Ice()); 125 src->learnMateria(new Cure()); 126 127 AMateria* foo = src->createMateria("ice"); 128 AMateria* bar = src->createMateria("cure"); 129 std::cout << foo->getType() << std::endl; 130 std::cout << bar->getType() << std::endl; 131 *foo = *bar; 132 std::cout << foo->getType() << std::endl; 133 std::cout << bar->getType() << std::endl; 134 AMateria* baz = src->createMateria("ice"); 135 AMateria* qux = src->createMateria("AK-47"); 136 137 Character* me = new Character("me"); 138 Character* bob = new Character("bob"); 139 me->equip(foo); 140 me->equip(qux); 141 bob->equip(bar); 142 bob->equip(baz); 143 me->showInventory(); 144 bob->showInventory(); 145 *me = *bob; 146 me->showInventory(); 147 bob->showInventory(); 148 149 Character* amy = new Character(*bob); 150 amy->showInventory(); 151 152 Character* mike = new Character("mike"); 153 *bob = *mike; 154 mike->showInventory(); 155 bob->showInventory(); 156 157 delete src; 158 delete me; 159 delete bob; 160 delete amy; 161 delete mike; 162 } 163 164 void testThree(void) 165 { 166 IMateriaSource* src = new MateriaSource(); 167 src->learnMateria(new Ice()); 168 src->learnMateria(new Cure()); 169 170 ICharacter* me = new Character("me"); 171 172 AMateria* tmp; 173 tmp = src->createMateria("ice"); 174 me->equip(tmp); 175 tmp = src->createMateria("cure"); 176 me->equip(tmp); 177 178 ICharacter* bob = new Character("bob"); 179 180 AMateria const* trash = static_cast<Character*>(me)->getItem(1); 181 me->unequip(1); 182 delete trash; 183 184 me->use(0, *bob); 185 me->use(1, *bob); 186 187 delete bob; 188 delete me; 189 delete src; 190 } 191 192 int main(void) 193 { 194 ATEXIT_CHECK(); 195 makeTestName("Test : Subject Test"); 196 testSubject(); 197 makeTestName("Test 1 : Check Simple Cases"); 198 testOne(); 199 makeTestName("Test 2 : Copy Test"); 200 testTwo(); 201 makeTestName("Test 3 : unequip Test"); 202 testThree(); 203 return 0; 204 }