#include "fiko/pafta/pafta.hpp" #include #include "fiko_test.hpp" using namespace fiko; using namespace fiko::pafta; // FIKO_KONTROL makro argümanı: {1, 2} içindeki virgül argümanı böler → yardımcı. static bool olcekEsit(const Olcek& o, i32 pay, i32 payda) { return o.pay == pay && o.payda == payda; } FIKO_TEST(pafta_sayfa_olculeri) { FIKO_KONTROL(sayfaOlcusu(SayfaBoyu::A4Dikey).en == 210); FIKO_KONTROL(sayfaOlcusu(SayfaBoyu::A4Dikey).boy == 297); FIKO_KONTROL(sayfaOlcusu(SayfaBoyu::A3Yatay).en == 420); Pafta p; p.sayfa = SayfaBoyu::Ozel; p.ozelOlcu = {500, 400}; FIKO_KONTROL(p.olcu().en == 500 && p.olcu().boy == 400); } FIKO_TEST(pafta_standart_olcek_kademeleri) { FIKO_KONTROL(olcekEsit(standartOlcek(1.0), 1, 1)); FIKO_KONTROL(olcekEsit(standartOlcek(0.5), 1, 2)); FIKO_KONTROL(olcekEsit(standartOlcek(0.48), 1, 2)); // en yakın kademeye yuvarlar FIKO_KONTROL(olcekEsit(standartOlcek(2.0), 2, 1)); FIKO_KONTROL(olcekEsit(standartOlcek(0.009), 1, 100)); FIKO_KONTROL(olcekEsit(standartOlcek(-3), 1, 1)); // geçersiz → 1:1 FIKO_KONTROL((Olcek{1, 2}).metin() == "1:2"); FIKO_KONTROL(std::abs((Olcek{1, 4}).oran() - 0.25) < 1e-12); } FIKO_TEST(pafta_gorunum_ekle_sil) { Pafta p; Gorunum g; g.ad = "Ön"; const u32 a = p.gorunumEkle(g); g.ad = "Üst"; g.ust = a; g.hiza = Gorunum::Hiza::Dikey; const u32 b = p.gorunumEkle(g); FIKO_KONTROL(a != 0 && b != 0 && a != b); FIKO_KONTROL(p.sayi() == 2); FIKO_KONTROL(p.gorunumBul(b)->ust == a); // Ebeveyn silinince çocuk YAŞAR, yalnız bağımsızlaşır. FIKO_KONTROL(p.gorunumSil(a)); FIKO_KONTROL(p.sayi() == 1); FIKO_KONTROL(p.gorunumBul(b)->ust == 0); FIKO_KONTROL(p.gorunumBul(b)->hiza == Gorunum::Hiza::Bagimsiz); FIKO_KONTROL(!p.gorunumSil(999)); } FIKO_TEST(pafta_hizali_tasima_kilidi) { Pafta p; Gorunum on; on.konum = {100, 150}; const u32 onId = p.gorunumEkle(on); Gorunum ust; ust.konum = {100, 60}; ust.ust = onId; ust.hiza = Gorunum::Hiza::Dikey; // x kilitli const u32 ustId = p.gorunumEkle(ust); Gorunum sol; sol.konum = {200, 150}; sol.ust = onId; sol.hiza = Gorunum::Hiza::Yatay; // y kilitli const u32 solId = p.gorunumEkle(sol); // Çocuk kendi ekseninde kayar, kilitli eksende ebeveyne yapışır. p.gorunumTasi(ustId, {160, 40}); FIKO_KONTROL(p.gorunumBul(ustId)->konum.x == 100); // x kilidi FIKO_KONTROL(p.gorunumBul(ustId)->konum.y == 40); p.gorunumTasi(solId, {260, 20}); FIKO_KONTROL(p.gorunumBul(solId)->konum.y == 150); // y kilidi FIKO_KONTROL(p.gorunumBul(solId)->konum.x == 260); // Ebeveyn taşınınca hizalı çocuklar aynı deltayla gider. p.gorunumTasi(onId, {110, 170}); FIKO_KONTROL(p.gorunumBul(ustId)->konum.x == 110); FIKO_KONTROL(p.gorunumBul(ustId)->konum.y == 60); // 40 + 20 FIKO_KONTROL(p.gorunumBul(solId)->konum.y == 170); } FIKO_TEST(pafta_sigdiran_olcek_tasmaz) { Pafta p; // A3 yatay 420x297, antet 40mm const Olcek o = p.sigdiranOlcek(2000, 1000); FIKO_KONTROL(o.oran() * 2000 <= 420 - 20); FIKO_KONTROL(o.oran() * 1000 <= 297 - 20 - 40); FIKO_KONTROL(o.oran() < 1.0); // büyük parça → küçültme // Minik parça büyütülür ama sayfayı aşmaz. const Olcek k = p.sigdiranOlcek(5, 4); FIKO_KONTROL(k.oran() >= 1.0); FIKO_KONTROL(k.oran() * 5 <= 400); } FIKO_TEST(pafta_uc_gorunum_iso_yerlesim) { Pafta p; p.ucGorunumKur(/*kaynak=*/42, /*en=*/100, /*boy=*/60, /*yuk=*/40); FIKO_KONTROL(p.sayi() == 3); const Gorunum& on = p.gorunumler()[0]; const Gorunum& ust = p.gorunumler()[1]; const Gorunum& sol = p.gorunumler()[2]; FIKO_KONTROL(on.yon == geometri::Gorunum::On); FIKO_KONTROL(ust.yon == geometri::Gorunum::Ust); FIKO_KONTROL(sol.yon == geometri::Gorunum::Sol); FIKO_KONTROL(on.kaynak == 42 && ust.kaynak == 42); // ISO birinci açı: ÜST görünüm önün ALTINDA ve aynı x'te; SOL görünüm SAĞINDA, aynı y'de. FIKO_KONTROL(std::abs(ust.konum.x - on.konum.x) < 1e-9); FIKO_KONTROL(ust.konum.y < on.konum.y); FIKO_KONTROL(std::abs(sol.konum.y - on.konum.y) < 1e-9); FIKO_KONTROL(sol.konum.x > on.konum.x); // Üçü de sayfada, antetin üstünde. for (const Gorunum& g : p.gorunumler()) FIKO_KONTROL(p.sayfayaSigar(g)); FIKO_KONTROL(ust.konum.y - ust.boyut.y * 0.5 >= p.antet.boy); } FIKO_TEST(pafta_etkin_olcek_miras) { Pafta p; p.olcek = {1, 5}; Gorunum g; const u32 id = p.gorunumEkle(g); FIKO_KONTROL(olcekEsit(p.etkinOlcek(*p.gorunumBul(id)), 1, 5)); p.gorunumBul(id)->olcekMiras = false; p.gorunumBul(id)->olcek = Olcek{2, 1}; // detay görünümü kendi ölçeğini tutar FIKO_KONTROL(olcekEsit(p.etkinOlcek(*p.gorunumBul(id)), 2, 1)); }