# include "AAnimal.hpp" # include "WrongAnimal.hpp" # include "Dog.hpp" # include "Cat.hpp" # include "WrongCat.hpp" int main() { std::cout << "========== TEST 1: Basic AAnimal ==========" << std::endl; { // decom for testing // std::cout << "\n========== AAnimal ==========" << std::endl; // const AAnimal* meta = new AAnimal(); // std::cout << meta->getType() << " " << std::endl; // meta->makeSound(); // delete meta; std::cout << "\n========== Dog ==========" << std::endl; const AAnimal* j = new Dog(); std::cout << j->getType() << " " << std::endl; j->makeSound(); delete j; std::cout << "\n========== Cat ==========" << std::endl; const AAnimal* i = new Cat(); std::cout << i->getType() << " " << std::endl; i->makeSound(); delete i; } std::cout << "\n========== TEST 1: Array of 10 Animals ==========" << std::endl; { const int size = 10; AAnimal* animals[size]; int i = 0; while (i < size) { if (i % 2 == 0) animals[i] = new Dog(); else animals[i] = new Cat(); i++; } std::cout << "\n--- Making sounds ---" << std::endl; i = 0; while (i < size) { std::cout << "AAnimal " << i << " (" << animals[i]->getType() << "): "; animals[i]->makeSound(); i++; } std::cout << "\n--- Deleting animals ---" << std::endl; i = 0; while (i < size) { delete animals[i]; i++; } } std::cout << "\n========== TEST 2: Get Ideas from Brain ==========" << std::endl; { Dog dog; Cat cat; std::cout << "\n--- Dog ideas ---" << std::endl; std::cout << "Idea 0: " << dog.getIdea(0) << std::endl; std::cout << "Idea 42: " << dog.getIdea(42) << std::endl; std::cout << "Idea 99: " << dog.getIdea(99) << std::endl; std::cout << "\n--- Cat ideas ---" << std::endl; std::cout << "Idea 5: " << cat.getIdea(5) << std::endl; std::cout << "Idea 50: " << cat.getIdea(50) << std::endl; std::cout << "Idea 98: " << cat.getIdea(98) << std::endl; std::cout << "\n========== Index Out of Range ==========\n" << std::endl; std::cout << "Trying to access idea 100: " << dog.getIdea(100) << std::endl; std::cout << "Trying to access idea 150: " << dog.getIdea(150) << std::endl; std::cout << "Trying to access idea -1: " << dog.getIdea(-1) << std::endl; } std::cout << "\n========== TEST 4: Deep Copy Test ==========" << std::endl; { std::cout << "--- Creating original dog ---" << std::endl; Dog* original = new Dog(); original->setIdea(10, "idee test"); std::cout << "\nOriginal dog idea 10: " << original->getIdea(10) << std::endl; std::cout << "\n--- Creating copy ---" << std::endl; Dog* copy = new Dog(*original); std::cout << "\nCopy dog idea 10: " << copy->getIdea(10) << std::endl; std::cout << "\n--- Modifying original's idea ---" << std::endl; original->setIdea(10, "Modified idea in original"); std::cout << "\nOriginal dog idea 10 after modification: " << original->getIdea(10) << std::endl; std::cout << "Copy dog idea 10 (should be unchanged): " << copy->getIdea(10) << std::endl; std::cout << "\n--- Deleting original ---" << std::endl; delete original; std::cout << "\n--- Copy still works after original deleted ---" << std::endl; std::cout << "Copy dog idea 10: " << copy->getIdea(10) << std::endl; copy->makeSound(); std::cout << "\n--- Deleting copy ---" << std::endl; delete copy; } return 0; }