#include "fiko/cekirdek/dunya.hpp" #include "fiko_test.hpp" using namespace fiko; // (a) olustur() benzersiz ve artan kimlik uretir; hepsi yasar. FIKO_TEST(dunya_olustur_benzersiz_artan) { Dunya d; const Varlik a = d.olustur(); const Varlik b = d.olustur(); const Varlik c = d.olustur(); FIKO_KONTROL(a != VARLIK_YOK); FIKO_KONTROL(a < b && b < c); // monoton artan FIKO_KONTROL(a != b && b != c && a != c); // benzersiz FIKO_KONTROL(d.yasiyor(a) && d.yasiyor(b) && d.yasiyor(c)); FIKO_KONTROL(d.varlikSayisi() == 3); FIKO_KONTROL(!d.yasiyor(VARLIK_YOK)); } // (b) ekle / bul / var dogru sonuc verir. FIKO_TEST(dunya_ekle_bul_var) { Dunya d; const Varlik v = d.olustur(); FIKO_KONTROL(!d.var(v)); FIKO_KONTROL(d.bul(v) == nullptr); d.ekle(v, {"Kutu"}); d.ekle(v, {false}); FIKO_KONTROL(d.var(v)); AdBilesen* ad = d.bul(v); FIKO_KONTROL(ad != nullptr && ad->ad == "Kutu"); GorunurBilesen* g = d.bul(v); FIKO_KONTROL(g != nullptr && g->gorunur == false); // Tekrar ekle -> uzerine yazar, cift kayit olusturmaz d.ekle(v, {"KutuYeni"}); FIKO_KONTROL(d.bul(v)->ad == "KutuYeni"); FIKO_KONTROL(d.depo().boyut() == 1); } // (c) sil sonrasi bul null; kalanlar bozulmaz (swap-remove dogrulamasi). FIKO_TEST(depo_sil_swap_remove_kalanlar_bozulmaz) { Dunya d; const Varlik v1 = d.olustur(); const Varlik v2 = d.olustur(); const Varlik v3 = d.olustur(); d.ekle(v1, {"bir"}); d.ekle(v2, {"iki"}); d.ekle(v3, {"uc"}); FIKO_KONTROL(d.depo().boyut() == 3); // Ortadaki silinince son eleman (v3) onun yerine tasinir d.depo().sil(v2); FIKO_KONTROL(d.bul(v2) == nullptr); FIKO_KONTROL(d.depo().boyut() == 2); // Kalanlar dogru degerlerini korur FIKO_KONTROL(d.bul(v1) != nullptr && d.bul(v1)->ad == "bir"); FIKO_KONTROL(d.bul(v3) != nullptr && d.bul(v3)->ad == "uc"); // Ilkini de sil, sonuncusu hala erisilebilir olmali d.depo().sil(v1); FIKO_KONTROL(d.bul(v1) == nullptr); FIKO_KONTROL(d.bul(v3)->ad == "uc"); FIKO_KONTROL(d.depo().boyut() == 1); } // (d) yokEt varligin TUM bilesenlerini siler ve varligi oldururur. FIKO_TEST(dunya_yoket_tum_bilesenleri_siler) { Dunya d; const Varlik v = d.olustur(); const Varlik baska = d.olustur(); d.ekle(v, {"parca"}); d.ekle(v, {}); d.ekle(v, {}); d.ekle(baska, {"kalan"}); FIKO_KONTROL(d.var(v) && d.var(v) && d.var(v)); d.yokEt(v); FIKO_KONTROL(!d.yasiyor(v)); FIKO_KONTROL(!d.var(v)); FIKO_KONTROL(!d.var(v)); FIKO_KONTROL(!d.var(v)); FIKO_KONTROL(d.varlikSayisi() == 1); // Baska varlik etkilenmez FIKO_KONTROL(d.yasiyor(baska)); FIKO_KONTROL(d.bul(baska) != nullptr && d.bul(baska)->ad == "kalan"); } // (e) Depo yogun iterasyon tum girdileri (varlik + bilesen) gezer. FIKO_TEST(depo_yogun_iterasyon_tum_girdiler) { Dunya d; const Varlik v1 = d.olustur(); const Varlik v2 = d.olustur(); const Varlik v3 = d.olustur(); d.ekle(v1, {true}); d.ekle(v2, {false}); d.ekle(v3, {true}); int say = 0; int gorunurSay = 0; Varlik toplamKimlik = 0; for (auto [varlik, bilesen] : d.depo()) { ++say; toplamKimlik += varlik; if (bilesen.gorunur) ++gorunurSay; } FIKO_KONTROL(say == 3); FIKO_KONTROL(toplamKimlik == v1 + v2 + v3); // tum kimlikler gezildi FIKO_KONTROL(gorunurSay == 2); // Sabit (const) iterasyon da calisir const Dunya& sabit = d; int sabitSay = 0; for (auto giris : sabit.depo()) { (void)giris; ++sabitSay; } FIKO_KONTROL(sabitSay == 3); }