#include "fiko_test.hpp" #include "makro_oneri.hpp" using namespace fiko; namespace { // Kolaylık: motora komut dizisi besle. void besle(MakroOneriMotoru& m, std::initializer_list adlar) { for (const char* a : adlar) m.komutIsle("Grup", a); } } // namespace FIKO_TEST(makro_tek_gecis_oneri_yok) { MakroOneriMotoru m; besle(m, {"A", "B", "C"}); FIKO_KONTROL(!m.oneriVar()); // hiç tekrar yok } FIKO_TEST(makro_iki_tekrar_periyot2_yakalar) { MakroOneriMotoru m; besle(m, {"A", "B", "A", "B"}); // [A B] × 2 FIKO_KONTROL(m.oneriVar()); FIKO_KONTROL(m.oneriTekrar() == 2); FIKO_KONTROL(m.oneriDizi().size() == 2); FIKO_KONTROL(m.oneriDizi()[0].second == "A" && m.oneriDizi()[1].second == "B"); } FIKO_TEST(makro_tek_tekrar_yetmez) { MakroOneriMotoru m; besle(m, {"A", "B", "C", "A", "B"}); // [A B] sadece 1 tam tekrar sonda değil FIKO_KONTROL(!m.oneriVar()); } FIKO_TEST(makro_uc_tekrar_sayar) { MakroOneriMotoru m; besle(m, {"X", "Y", "X", "Y", "X", "Y"}); // [X Y] × 3 FIKO_KONTROL(m.oneriVar()); FIKO_KONTROL(m.oneriTekrar() == 3); } FIKO_TEST(makro_periyot3_yakalar) { MakroOneriMotoru m; besle(m, {"A", "B", "C", "A", "B", "C"}); // [A B C] × 2 FIKO_KONTROL(m.oneriVar()); FIKO_KONTROL(m.oneriDizi().size() == 3); FIKO_KONTROL(m.oneriTekrar() == 2); } FIKO_TEST(makro_tek_komut_periyot1_yoksayilir) { MakroOneriMotoru m; besle(m, {"A", "A", "A", "A"}); // periyot 1 = "tekrarla" ile örtüşür → öneri değil FIKO_KONTROL(!m.oneriVar()); } FIKO_TEST(makro_kabul_gecmisi_temizler) { MakroOneriMotoru m; besle(m, {"A", "B", "A", "B"}); FIKO_KONTROL(m.oneriVar()); const auto dizi = m.kabulEt(); FIKO_KONTROL(dizi.size() == 2); FIKO_KONTROL(!m.oneriVar()); // tüketildi // Kabul sonrası aynı diziyi tekrar kurmak yeni öneri verir (geçmiş sıfırlandı). besle(m, {"A", "B", "A", "B"}); FIKO_KONTROL(m.oneriVar()); } FIKO_TEST(makro_ret_ayni_diziyi_susturur) { MakroOneriMotoru m; besle(m, {"A", "B", "A", "B"}); FIKO_KONTROL(m.oneriVar()); m.reddet(); FIKO_KONTROL(!m.oneriVar()); besle(m, {"A", "B", "A", "B"}); // AYNI dizi → susturulmuş FIKO_KONTROL(!m.oneriVar()); // BAŞKA dizi yine önerilir. besle(m, {"C", "D", "C", "D"}); FIKO_KONTROL(m.oneriVar()); } FIKO_TEST(makro_en_kisa_periyot_kazanir) { MakroOneriMotoru m; // [A A A A]: periyot 2 [A A]×2 de eşleşir ama periyot 1 yoksayılır; periyot 2 skor 4. // [A B A B A B]: periyot 2 skor 6 vs periyot… yok. Test: periyot 2 tercih. besle(m, {"A", "B", "A", "B", "A", "B"}); FIKO_KONTROL(m.oneriVar()); FIKO_KONTROL(m.oneriDizi().size() == 2); // [A B], periyot 4 [A B A B] değil } FIKO_TEST(makro_lua_uretim) { std::vector dizi = {{"İşlem", "Kenar Yuvarlat (3B)"}, {"Ölçüm", "Ölçüm Penceresi (M)"}}; const std::string lua = makroLuaUret(dizi, "Test Makro"); FIKO_KONTROL(lua.find("fiko.komut.calistir(\"İşlem\", \"Kenar Yuvarlat (3B)\")") != std::string::npos); FIKO_KONTROL(lua.find("fiko.komut.calistir(\"Ölçüm\", \"Ölçüm Penceresi (M)\")") != std::string::npos); FIKO_KONTROL(lua.find("Test Makro") != std::string::npos); } FIKO_TEST(makro_lua_kacis) { std::vector dizi = {{"G", "tırnak\"var"}}; const std::string lua = makroLuaUret(dizi, "x"); FIKO_KONTROL(lua.find("tırnak\\\"var") != std::string::npos); // " → \" }