// CAEK (yapısal analiz kurulumu) chunk round-trip testleri — v1.19. // Kurulum .fikocad'e YAZILMAZSA kullanıcı her açılışta E/ν/kısıt/yükü yeniden girer. // SONUÇ bilerek yazılmaz (büyük + çözücü sürümüne bağlı; her açılışta yeniden çözülür). #include #include "fiko/io/fiko_format.hpp" #include "fiko_test.hpp" using namespace fiko; using namespace fiko::io; namespace { FikoBelge ornekBelge() { FikoBelge b; FikoCaeKurulum c; c.dugum = 77; c.cozunurluk = 32; c.elastisite = 68000.0; // alüminyum c.poisson = 0.33; c.sabitYuz = 2; // -Y c.yukYuz = 5; // +Z c.simetriKisit = 1; // simetri kısıtı c.konservatif = 0; // merkez sınıflaması c.kuvvet[0] = 100.0; c.kuvvet[1] = -250.5; c.kuvvet[2] = 0.25; FikoCaeKurulum c2; c2.dugum = 78; // ikinci gövde: varsayılanlarla b.caeKurulumlar = {c, c2}; return b; } } // namespace FIKO_TEST(io_caek_gidis_donus) { const FikoBelge ilk = ornekBelge(); std::string veri, hata; FIKO_KONTROL(fikoYaz(ilk, veri, hata)); FIKO_KONTROL(hata.empty()); FikoBelge geri; FIKO_KONTROL(fikoOku(veri, geri, hata)); FIKO_KONTROL(hata.empty()); FIKO_KONTROL(geri.caeKurulumlar.size() == 2); if (geri.caeKurulumlar.size() != 2) return; const FikoCaeKurulum& a = geri.caeKurulumlar[0]; FIKO_KONTROL(a.dugum == 77u); FIKO_KONTROL(a.cozunurluk == 32u); FIKO_YAKIN(a.elastisite, 68000.0, 1e-9); FIKO_YAKIN(a.poisson, 0.33, 1e-12); FIKO_KONTROL(a.sabitYuz == 2); FIKO_KONTROL(a.yukYuz == 5); FIKO_KONTROL(a.simetriKisit == 1); FIKO_KONTROL(a.konservatif == 0); FIKO_YAKIN(a.kuvvet[0], 100.0, 1e-12); FIKO_YAKIN(a.kuvvet[1], -250.5, 1e-12); FIKO_YAKIN(a.kuvvet[2], 0.25, 1e-12); const FikoCaeKurulum& b2 = geri.caeKurulumlar[1]; FIKO_KONTROL(b2.dugum == 78u); FIKO_KONTROL(b2.cozunurluk == 24u); // varsayılan korunuyor FIKO_YAKIN(b2.elastisite, 210000.0, 1e-9); // çelik varsayılanı FIKO_KONTROL(b2.konservatif == 1); } // Kurulum YOKSA chunk hiç yazılmamalı (eski sürüm okuyucular bozulmasın). FIKO_TEST(io_caek_bos_belge_chunk_yazmaz) { FikoBelge bos; std::string veri, hata; FIKO_KONTROL(fikoYaz(bos, veri, hata)); FIKO_KONTROL(veri.find("CAEK") == std::string::npos); FikoBelge geri; FIKO_KONTROL(fikoOku(veri, geri, hata)); FIKO_KONTROL(geri.caeKurulumlar.empty()); } // CAEK + KNMT birlikte: iki chunk birbirini bozmamalı (aynı belgede yaşarlar). FIKO_TEST(io_caek_knmt_birlikte) { FikoBelge b = ornekBelge(); b.uzuvlar = {FikoUzuv{.ad = "Gövde"}, FikoUzuv{.ad = "Kol", .sahne = 42}}; FikoMafsal m{.ad = "Döner", .tip = 1, .ana = 0, .cocuk = 1}; b.mafsallar = {m}; std::string veri, hata; FIKO_KONTROL(fikoYaz(b, veri, hata)); FikoBelge geri; FIKO_KONTROL(fikoOku(veri, geri, hata)); FIKO_KONTROL(geri.caeKurulumlar.size() == 2); FIKO_KONTROL(geri.uzuvlar.size() == 2); FIKO_KONTROL(geri.mafsallar.size() == 1); FIKO_KONTROL(geri.uzuvlar[1].sahne == 42u); }