#include "fiko/cekirdek/fiko_datum.hpp" #include "fiko/cekirdek/fiko_nesne.hpp" #include "fiko/cekirdek/yetenek.hpp" #include "fiko_test.hpp" #include using namespace fiko; FIKO_TEST(datum_nokta_temel) { FikoDatumNokta n(7, Vec3d{1, 2, 3}); FIKO_KONTROL(n.varlik() == 7); FIKO_YAKIN(n.konum().x, 1.0, 1e-12); FIKO_YAKIN(n.konum().z, 3.0, 1e-12); FIKO_KONTROL(std::string(n.turAdi()) == "FikoDatumNokta"); } FIKO_TEST(datum_nokta_yetenekler) { FikoDatumNokta n(1, Vec3d{0, 0, 0}); FikoNesne* base = &n; // Seçilebilir auto* sec = dynamic_cast(base); FIKO_KONTROL(sec && !sec->seciliMi()); sec->secildi(true); FIKO_KONTROL(sec->seciliMi()); // Tıklanabilir dynamic_cast(base)->tiklandi(); FIKO_KONTROL(n.tikSayisi() == 1); // Sürüklenebilir → konum değişir dynamic_cast(base)->surukle(Vec3d{5, 0, -2}); FIKO_YAKIN(n.konum().x, 5.0, 1e-12); FIKO_YAKIN(n.konum().z, -2.0, 1e-12); } FIKO_TEST(datum_surukleme_sistemi_tip_bagimsiz) { // Sürükleme sistemi: Suruklenebilir olan HER nesneyi tip bilmeden taşır. FikoDatumNokta a(1, Vec3d{0, 0, 0}), b(2, Vec3d{10, 0, 0}); std::vector secili = {&a, &b}; const Vec3d delta{0, 3, 0}; for (FikoNesne* n : secili) if (auto* s = dynamic_cast(n)) s->surukle(delta); FIKO_YAKIN(a.konum().y, 3.0, 1e-12); FIKO_YAKIN(b.konum().y, 3.0, 1e-12); FIKO_YAKIN(b.konum().x, 10.0, 1e-12); // x korunur } FIKO_TEST(datum_eksen_duzlem) { FikoDatumEksen eksen(1, Vec3d{0, 0, 0}, Vec3d{1, 0, 0}); FikoDatumDuzlem duzlem(2, Vec3d{0, 0, 0}, Vec3d{0, 0, 1}); FIKO_KONTROL(std::string(eksen.turAdi()) == "FikoDatumEksen"); FIKO_KONTROL(std::string(duzlem.turAdi()) == "FikoDatumDuzlem"); FIKO_YAKIN(eksen.yon().x, 1.0, 1e-12); FIKO_YAKIN(duzlem.normal().z, 1.0, 1e-12); // İkisi de seçilebilir yeteneğine sahip (datum ailesi ortak yetenek). std::vector datumlar = {&eksen, &duzlem}; int sec = 0; for (FikoNesne* n : datumlar) if (auto* s = dynamic_cast(n)) { s->secildi(true); ++sec; } FIKO_KONTROL(sec == 2); }